Name: series-workflowflrq8 Phase: Succeeded StartedAt: 2026-07-15 00:19:11 +0000 UTC FinishedAt: 2026-07-15 05:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[0] Phase: Succeeded StartedAt: 2026-07-15 00:19:11 +0000 UTC FinishedAt: 2026-07-15 00:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 00:19:11 +0000 UTC FinishedAt: 2026-07-15 00:53:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e26c48cf23a4940208c5d82fcb37d20df234092b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_RDMA", "RDMA_RXE", "INFINIBAND_USER_ACCESS", "SMC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e26c48cf23a4940208c5d82fcb37d20df234092b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_RDMA", "RDMA_RXE", "INFINIBAND_USER_ACCESS", "SMC" ], "series_id": "79a36670-9eb2-4d83-91db-cafcd06760c3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ib_device_set_netns_put", "rdma_dev_change_netns", "rdma_dev_pick_netns_name", "nldev_set_doit", "rdmacg_resource_set_max", "rdmacg_get_device_locked", "alloc_name_id", "__alloc_name_id", "rxe_mmap", "smc_pnet_find_ib" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9SRE1BJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfVVNFUl9BQ0NFU1MmIzM0OywKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfcmVzb3VyY2Vfc2V0X21heCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7YWxsb2NfbmFtZV9pZCYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cnhlX21tYXAmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMsIG1vZGlmeWluZyB0aGUgY29yZSBSRE1BIGRldmljZSBuYW1pbmcsIG5ldG5zIGNoYW5nZSBsb2dpYywgYW5kIGNncm91cCByZXNvdXJjZSB0cmFja2luZy4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IHRhYmxlIGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1vdmluZyBSRE1BIGRldmljZXMgYmV0d2VlbiBuYW1lc3BhY2VzLCB0aGUgUkRNQSBjZ3JvdXAgaW50ZXJmYWNlLCBhbmQgdGhlIFJYRSBtbWFwIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YjIyMzE3NTYxYmI0MzY3ZGM1ZTZlYWQwZjI5NmUyZDA3MzYxYzM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDA6NTI6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXG5pbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbVxuQEAgLTEyLDYgJiM0MzsxMiwxMCBAQCBEZXNjcmlwdGlvbjogXHRJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG9cbiBcdFx0Zm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOlxuIFx0XHRta2RpciAtcCAvY29uZmlnL3JkbWFfY20vXHUwMDNjaGNhXHUwMDNlXG4gXG4mIzQzO1x0XHROb3RlOiBjb25maWdmcyBoYXMgbm8gbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCwgc28gdGhpc1xuJiM0MztcdFx0aW50ZXJmYWNlIGNhbm5vdCByZXByZXNlbnQgdHdvIGRldmljZXMgdGhhdCBzaGFyZSBhIG5hbWUgaW5cbiYjNDM7XHRcdGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS5cbiYjNDM7XG4gXG4gV2hhdDogXHRcdC9jb25maWcvcmRtYV9jbS9cdTAwM2NoY2FcdTAwM2UvcG9ydHMvXHUwMDNjcG9ydC1udW1cdTAwM2UvZGVmYXVsdF9yb2NlX21vZGVcbiBEYXRlOiBcdFx0Tm92ZW1iZXIgMjksIDIwMTVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9yZG1hLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0XG5pbmRleCBlNjkzNjliNzI1MmVhMy4uOGQwYzNhNzk2ZWUzZDYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9yZG1hLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvcmRtYS5yc3RcbkBAIC05MCw2ICYjNDM7OTAsMTMgQEAgRm9sbG93aW5nIHJlc291cmNlcyBjYW4gYmUgYWNjb3VudGVkIGJ5IHJkbWEgY29udHJvbGxlci5cbiAgIGhjYV9vYmplY3QgXHRNYXhpbXVtIG51bWJlciBvZiBIQ0EgT2JqZWN0c1xuICAgPT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuJiM0MztSRE1BIGRldmljZXMgZnJvbSBhbGwgbmV0d29yayBuYW1lc3BhY2VzIGFyZSBsaXN0ZWQuIEVhY2ggbGluZSBzdGFydHMgd2l0aFxuJiM0Mzt0aGUgZGV2aWNlIG5hbWUuIElmIG1vcmUgdGhhbiBvbmUgZGV2aWNlIGhhcyB0aGUgc2FtZSBuYW1lLCBgYGluZGV4PU5gYFxuJiM0Mztmb2xsb3dzIHRoZSBuYW1lLCB3aGVyZSBgYE5gYCBpcyB0aGUgc3lzdGVtLXdpZGUgUkRNQSBkZXZpY2UgaW5kZXgsIHVuaXF1ZVxuJiM0MzthbW9uZyByZWdpc3RlcmVkIGRldmljZXMuIFdoZW4gY29uZmlndXJpbmcgYSBsaW1pdCwgdGhlIGluZGV4IGlzIG9wdGlvbmFsXG4mIzQzO2ZvciBhIGdsb2JhbGx5IHVuaXF1ZSBuYW1lIGFuZCByZXF1aXJlZCBmb3IgYSBkdXBsaWNhdGUgbmFtZS4gQSB3cml0ZSB3aXRob3V0XG4mIzQzO3RoZSByZXF1aXJlZCBpbmRleCBmYWlscyB3aXRoIGBgLUVOT1RVTklRYGAuXG4mIzQzO1xuIDIuIFVzYWdlIEV4YW1wbGVzXG4gPT09PT09PT09PT09PT09PT1cbiBcbkBAIC05Nyw2ICYjNDM7MTA0LDcgQEAgRm9sbG93aW5nIHJlc291cmNlcyBjYW4gYmUgYWNjb3VudGVkIGJ5IHJkbWEgY29udHJvbGxlci5cbiBcbiBcdGVjaG8gbWx4NF8wIGhjYV9oYW5kbGU9MiBoY2Ffb2JqZWN0PTIwMDAgXHUwMDNlIC9zeXMvZnMvY2dyb3VwL3JkbWEvMS9yZG1hLm1heFxuIFx0ZWNobyBvY3JkbWExIGhjYV9oYW5kbGU9MyBcdTAwM2UgL3N5cy9mcy9jZ3JvdXAvcmRtYS8yL3JkbWEubWF4XG4mIzQzO1x0ZWNobyBcJiMzNDtyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yXCYjMzQ7IFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9yZG1hLzMvcmRtYS5tYXhcbiBcbiAoYikgUXVlcnkgcmVzb3VyY2UgbGltaXQ6OlxuIFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuaW5kZXggOTkzNDQ2YWI2NmQwZmIuLmRmNzRkNTU0ZDJjZGZmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbkBAIC0yNzUyLDYgJiM0MzsyNzUyLDExIEBAIFJETUFcbiBUaGUgXCYjMzQ7cmRtYVwmIzM0OyBjb250cm9sbGVyIHJlZ3VsYXRlcyB0aGUgZGlzdHJpYnV0aW9uIGFuZCBhY2NvdW50aW5nIG9mXG4gUkRNQSByZXNvdXJjZXMuXG4gXG4mIzQzO1JETUEgZGV2aWNlcyBmcm9tIGFsbCBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlIGxpc3RlZC4gRWFjaCBsaW5lIHN0YXJ0cyB3aXRoXG4mIzQzO3RoZSBkZXZpY2UgbmFtZS4gSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaGFzIHRoZSBzYW1lIG5hbWUsIGBgaW5kZXg9TmBgXG4mIzQzO2ZvbGxvd3MgdGhlIG5hbWUsIHdoZXJlIGBgTmBgIGlzIHRoZSBzeXN0ZW0td2lkZSBSRE1BIGRldmljZSBpbmRleCwgdW5pcXVlXG4mIzQzO2Ftb25nIHJlZ2lzdGVyZWQgZGV2aWNlcy5cbiYjNDM7XG4gUkRNQSBJbnRlcmZhY2UgRmlsZXNcbiB+fn5+fn5+fn5+fn5+fn5+fn5+flxuIFxuQEAgLTI3NjAsNyAmIzQzOzI3NjUsMTEgQEAgUkRNQSBJbnRlcmZhY2UgRmlsZXNcbiBcdGV4Y2VwdCByb290IHRoYXQgZGVzY3JpYmVzIGN1cnJlbnQgY29uZmlndXJlZCByZXNvdXJjZSBsaW1pdFxuIFx0Zm9yIGEgUkRNQS9JQiBkZXZpY2UuXG4gXG4tXHRMaW5lcyBhcmUga2V5ZWQgYnkgZGV2aWNlIG5hbWUgYW5kIGFyZSBub3Qgb3JkZXJlZC5cbiYjNDM7XHRMaW5lcyBhcmUga2V5ZWQgYnkgZGV2aWNlIG5hbWUgYW5kIGFyZSBub3Qgb3JkZXJlZC4gQSB3cml0ZSBtYXlcbiYjNDM7XHRpbmNsdWRlIGBgaW5kZXg9TmBgIGFmdGVyIHRoZSBkZXZpY2UgbmFtZS4gVGhlIGluZGV4IGlzIG9wdGlvbmFsXG4mIzQzO1x0d2hlbiB0aGUgbmFtZSBpcyBnbG9iYWxseSB1bmlxdWUuIElmIG11bHRpcGxlIGRldmljZXMgaGF2ZSB0aGF0XG4mIzQzO1x0bmFtZSwgdGhlIGluZGV4IGlzIHJlcXVpcmVkIGFuZCBhIHdyaXRlIHdpdGhvdXQgaXQgZmFpbHMgd2l0aFxuJiM0MztcdGBgLUVOT1RVTklRYGAuXG4gXHRFYWNoIGxpbmUgY29udGFpbnMgc3BhY2Ugc2VwYXJhdGVkIHJlc291cmNlIG5hbWUgYW5kIGl0cyBjb25maWd1cmVkXG4gXHRsaW1pdCB0aGF0IGNhbiBiZSBkaXN0cmlidXRlZC5cbiBcbkBAIC0yNzc2LDYgJiM0MzsyNzg1LDEwIEBAIFJETUEgSW50ZXJmYWNlIEZpbGVzXG4gXHQgIG1seDRfMCBoY2FfaGFuZGxlPTIgaGNhX29iamVjdD0yMDAwXG4gXHQgIG9jcmRtYTEgaGNhX2hhbmRsZT0zIGhjYV9vYmplY3Q9bWF4XG4gXG4mIzQzO1x0Rm9yIGRldmljZXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMsIHNlbGVjdCB0aGUgZGV2aWNlIGJ5IGluZGV4OjpcbiYjNDM7XG4mIzQzO1x0ICBlY2hvIFwmIzM0O3J4ZTAgaW5kZXg9NSBoY2FfaGFuZGxlPTJcJiMzNDsgXHUwMDNlIHJkbWEubWF4XG4mIzQzO1xuICAgcmRtYS5jdXJyZW50XG4gXHRBIHJlYWQtb25seSBmaWxlIHRoYXQgZGVzY3JpYmVzIGN1cnJlbnQgcmVzb3VyY2UgdXNhZ2UuXG4gXHRJdCBleGlzdHMgZm9yIGFsbCB0aGUgY2dyb3VwIGV4Y2VwdCByb290LlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcbmluZGV4IDFmMDM3ZmUwMTQ1MGVmLi44NjExYjRlMzJjZmI2MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuY1xuQEAgLTE3LDYgJiM0MzsxNyw3IEBAXG4gdm9pZCBpYl9kZXZpY2VfcmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiB7XG4gXHRkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLm5hbWUgPSBkZXZpY2UtXHUwMDNlbmFtZTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLmluZGV4ID0gZGV2aWNlLVx1MDAzZWluZGV4O1xuIFx0cmRtYWNnX3JlZ2lzdGVyX2RldmljZShcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuY1xuaW5kZXggODkxZTUyYWZiOGY0YmEuLmMzODlkNGUzN2I2YmNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXG5AQCAtNjUsNiAmIzQzOzY1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwICp0b19kZXZfcG9ydF9ncm91cChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGdyb3VwLCBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwLCBncm91cCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBjb25maWdmcyBpcyBub3QgbmV0IG5hbWVzcGFjZSBhd2FyZSwgc28gYSBuYW1lIHNoYXJlZCBieSBkZXZpY2VzIGluXG4mIzQzOyAqIGRpZmZlcmVudCBuYW1lc3BhY2VzIHJlc29sdmVzIHRvIHRoZSBmaXJzdCBtYXRjaCBoZXJlLlxuJiM0MzsgKi9cbiBzdGF0aWMgYm9vbCBmaWx0ZXJfYnlfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYsIHZvaWQgKmNvb2tpZSlcbiB7XG4gXHRyZXR1cm4gIXN0cmNtcChkZXZfbmFtZShcdTAwMjZpYl9kZXYtXHUwMDNlZGV2KSwgY29va2llKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXG5pbmRleCAxOTEwNGM1NDJiMjcwZC4uYWFmMzMwYjBkMzMzYWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmhcbkBAIC0zNTYsNyAmIzQzOzM1Niw4IEBAIHZvaWQgaWJfcG9ydF91bnJlZ2lzdGVyX2NsaWVudF9ncm91cHMoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0X251bSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcyk7XG4gXG4gaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKTtcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcbiBpbnQgcmRtYV9ubF9uZXRfaW5pdChzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0KTtcbiB2b2lkIHJkbWFfbmxfbmV0X2V4aXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xuaW5kZXggYjgxOTNlMDc3YTc0NmYuLjRjNzUwNzg0NDhhMzI1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jXG5AQCAtMTI5LDcgJiM0MzsxMjksNyBAQCBzdGF0aWMgREVDTEFSRV9SV1NFTShyZG1hX25ldHNfcndzZW0pO1xuIGJvb2wgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMgPSB0cnVlO1xuIG1vZHVsZV9wYXJhbV9uYW1lZChuZXRuc19tb2RlLCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucywgYm9vbCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhuZXRuc19tb2RlLFxuLVx0XHQgXCYjMzQ7U2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZClcJiMzNDspO1xuJiM0MztcdFx0IFwmIzM0O1NoYXJlIGRldmljZSBhbW9uZyBuZXQgbmFtZXNwYWNlczsgZGVmYXVsdD0xIChzaGFyZWQpLiBJbiBleGNsdXNpdmUgbW9kZSBkZXZpY2UgbmFtZXMgYXJlIHVuaXF1ZSBwZXIgbmV0IG5hbWVzcGFjZVwmIzM0Oyk7XG4gLyoqXG4gICogcmRtYV9kZXZfYWNjZXNzX25ldG5zKCkgLSBSZXR1cm4gd2hldGhlciBhbiByZG1hIGRldmljZSBjYW4gYmUgYWNjZXNzZWRcbiAgKlx0XHRcdCAgICAgZnJvbSBhIHNwZWNpZmllZCBuZXQgbmFtZXNwYWNlIG9yIG5vdC5cbkBAIC0yNjgsNyAmIzQzOzI2OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWJkZXZfbHNtX25iID0ge1xuIH07XG4gXG4gc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuLVx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCk7XG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4pO1xuIFxuIC8qIFBvaW50ZXIgdG8gdGhlIFJDVSBoZWFkIGF0IHRoZSBzdGFydCBvZiB0aGUgaWJfcG9ydF9kYXRhIGFycmF5ICovXG4gc3RydWN0IGliX3BvcnRfZGF0YV9yY3Uge1xuQEAgLTM1MSwxMyAmIzQzOzM1MiwxNSBAQCB2b2lkIGliX2RldmljZV9wdXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIH1cbiBFWFBPUlRfU1lNQk9MKGliX2RldmljZV9wdXQpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKVxuJiM0MztzdGF0aWMgc3RydWN0IGliX2RldmljZSAqX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSxcbiYjNDM7XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XG4gXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuIFxuIFx0eGFfZm9yX2VhY2ggKFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXG4tXHRcdGlmICghc3RyY21wKG5hbWUsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSlcbiYjNDM7XHRcdGlmIChyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFzdHJjbXAobmFtZSwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKVxuIFx0XHRcdHJldHVybiBkZXZpY2U7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0zOTUsNyAmIzQzOzM5OCw3IEBAIGludCBpYl9kZXZpY2VfcmVuYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShuYW1lKSkge1xuJiM0MztcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShuYW1lLCByZG1hX2Rldl9uZXQoaWJkZXYpKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHR9XG5AQCAtNDM1LDcgJiM0Mzs0MzgsMTMgQEAgaW50IGliX2RldmljZV9zZXRfZGltKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCB1c2VfZGltKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7LypcbiYjNDM7ICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAmIzM5OyVkJiMzOTsgc3R5bGUgQG5hbWUgcGF0dGVybiB3aXRoaW4gbmV0IG5hbWVzcGFjZVxuJiM0MzsgKiBAbmV0LiBSZXR1cm5zIHRoZSBpbmRleCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8uIFRoZSBjYWxsZXIgYnVpbGRzXG4mIzQzOyAqIHRoZSBmaW5hbCB1bmlxdWUgZGV2aWNlIG5hbWUgZnJvbSB0aGUgcmV0dXJuZWQgaW5kZXguXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IF9fYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2UgKnNraXApXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2aWNlO1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbkBAIC00NDgsNiAmIzQzOzQ1Nyw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiBcdHhhX2Zvcl9lYWNoIChcdTAwMjZkZXZpY2VzLCBpbmRleCwgZGV2aWNlKSB7XG4gXHRcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XG4gXG4mIzQzO1x0XHRpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoc3NjYW5mKGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpLCBuYW1lLCBcdTAwMjZpKSAhPSAxKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoaSBcdTAwM2MgMCB8fCBpIFx1MDAzZT0gSU5UX01BWClcbkBAIC00NjIsMTUgJiM0Mzs0NzMsMjcgQEAgc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuIFx0fVxuIFxuIFx0cmMgPSBpZGFfYWxsb2MoXHUwMDI2aW51c2UsIEdGUF9LRVJORUwpO1xuLVx0aWYgKHJjIFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdHJjID0gZGV2X3NldF9uYW1lKFx1MDAyNmliZGV2LVx1MDAzZWRldiwgbmFtZSwgcmMpO1xuIG91dDpcbiBcdGlkYV9kZXN0cm95KFx1MDAyNmludXNlKTtcbiBcdHJldHVybiByYztcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19hbGxvY19uYW1lX2lkKG5ldCwgbmFtZSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGludCBpZDtcbiYjNDM7XG4mIzQzO1x0aWQgPSBhbGxvY19uYW1lX2lkKHJkbWFfZGV2X25ldChpYmRldiksIG5hbWUpO1xuJiM0MztcdGlmIChpZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBpZDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldl9zZXRfbmFtZShcdTAwMjZpYmRldi1cdTAwM2VkZXYsIG5hbWUsIGlkKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBpYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTtcbkBAIC0xMTUxLDggJiM0MzsxMTc0LDE3IEBAIHN0YXRpYyB2b2lkIHJkbWFfZGV2X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdFx0LypcbiBcdFx0ICogSWYgdGhlIHJlYWwgZGV2aWNlIGlzIGluIHRoZSBOUyB0aGVuIG1vdmUgaXQgYmFjayB0byBpbml0LlxuJiM0MztcdFx0ICogUHJvdmlkZSBhIGZhbGxiYWNrIHBhdHRlcm4gc28gYSBuYW1lIGNvbmZsaWN0IGluIGluaXRfbmV0XG4mIzQzO1x0XHQgKiBjYW5ub3QgbWFrZSB0aGUgdGVhcmRvd24gbW92ZSBmYWlsLlxuIFx0XHQgKi9cbi1cdFx0cmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCBcdTAwMjZpbml0X25ldCk7XG4mIzQzO1x0XHRpZiAobmV0X2VxKG5ldCwgcmVhZF9wbmV0KFx1MDAyNmRldi1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0KSkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCBcdTAwMjZpbml0X25ldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIE5VTEwsIFwmIzM0O2liZGV2JWRcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbiYjNDM7XHRcdFx0XHRXQVJOKDEsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gbW92ZSBSRE1BIGRldmljZSAlcyB0byBpbml0X25ldCBvbiBuZXRucyBleGl0OiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIGRldl9uYW1lKFx1MDAyNmRldi1cdTAwM2VkZXYpLCByZXQpO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRwdXRfZGV2aWNlKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuIFx0XHRkb3duX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG5AQCAtMTIwNiw3ICYjNDM7MTIzOCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByZG1hX2Rldl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gfVxuIFxuIC8qXG4tICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhpcyBpc1xuJiM0MzsgKiBBc3NpZ24gdGhlIHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUgYW5kIHRoZSB1bmlxdWUgZGV2aWNlIGluZGV4LiBUaGUgZGV2aWNlXG4mIzQzOyAqIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgbmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGlzIGFzc2lnbmVkIHRvLiBUaGlzIGlzXG4gICogdW5kb25lIGJ5IGliX2RlYWxsb2NfZGV2aWNlLlxuICAqL1xuIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKVxuQEAgLTEyMjMsNyAmIzQzOzEyNTYsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSkge1xuJiM0MztcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgcmRtYV9kZXZfbmV0KGRldmljZSkpKSB7XG4gXHRcdHJldCA9IC1FTkZJTEU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTEzODgsOCAmIzQzOzE0MjIsOSBAQCBzdGF0aWMgdm9pZCBpYl9kZXZpY2Vfbm90aWZ5X3JlZ2lzdGVyKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiAvKipcbiAgKiBpYl9yZWdpc3Rlcl9kZXZpY2UgLSBSZWdpc3RlciBhbiBJQiBkZXZpY2Ugd2l0aCBJQiBjb3JlXG4gICogQGRldmljZTogRGV2aWNlIHRvIHJlZ2lzdGVyXG4tICogQG5hbWU6IHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUuIFRoaXMgbWF5IGluY2x1ZGUgYSAmIzM5OyUmIzM5OyB3aGljaCB3aWxsXG4tICogXHQgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuXG4mIzQzOyAqIEBuYW1lOiBkZXZpY2UgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgZGV2aWNlJiMzOTtzIG5ldCBuYW1lc3BhY2UuIFRoaXMgbWF5XG4mIzQzOyAqXHQgIGluY2x1ZGUgYSAmIzM5OyUmIzM5OyB3aGljaCB3aWxsIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZVxuJiM0MzsgKlx0ICBwYXNzZWQgZGV2aWNlIG5hbWUuXG4gICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQlxuICAqXHQgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuIEluIHRoaXMgY2FzZSB0aGUgY2FsbGVyIHNob3VsZCBmdWxseVxuICAqXHRcdHNldHVwIHRoZSBpYmRldiBmb3IgRE1BLiBUaGlzIHVzdWFsbHkgbWVhbnMgdXNpbmcgZG1hX3ZpcnRfb3BzLlxuQEAgLTE2NzAsMTQgJiM0MzsxNzA1LDgzIEBAIHZvaWQgaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKHN0cnVjdCBpYl9kZXZpY2UgKmliX2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTChpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCByZG1hX2Rldl9uYW1lX2luX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKnNraXAsIHN0cnVjdCBuZXQgKm5ldCxcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGliX2RldmljZSAqZGV2aWNlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4mIzQzO1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXG4mIzQzO1x0XHRpZiAoZGV2aWNlICE9IHNraXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhc3RyY21wKG5hbWUsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2hvb3NlIHRoZSBuYW1lIEBkZXZpY2Ugc2hvdWxkIHVzZSBpbiBuZXQgbmFtZXNwYWNlIEBuZXQuIEByZXF1ZXN0ZWRfbmFtZVxuJiM0MzsgKiBpcyB1c2VkIGFzIGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSB3aGVuIHNldC4gT3RoZXJ3aXNlIGtlZXAgdGhlIGN1cnJlbnQgbmFtZVxuJiM0MzsgKiB3aGVuIGl0IGlzIGZyZWUsIG9yIHVzZSBhIHRydXN0ZWQgJiMzOTslZCYjMzk7IEBmYWxsYmFja19wYXR0ZXJuIGZvciB0ZWFyZG93bi4gVGhlXG4mIzQzOyAqIGNhbGxlciBtdXN0IGhvbGQgdGhlIHdyaXRlIHNpZGUgb2YgZGV2aWNlc19yd3NlbS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybixcbiYjNDM7XHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlkO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuJiM0MztcbiYjNDM7XHRpZiAocmVxdWVzdGVkX25hbWUpIHtcbiYjNDM7XHRcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7XG4mIzQzO1x0XHRcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKSB7XG4mIzQzO1x0XHQqbmV3X25hbWUgPSBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFmYWxsYmFja19wYXR0ZXJuKVxuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgXCYjMzQ7aWJkZXYldVwmIzM0OywgZGV2aWNlLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAoIXJkbWFfZGV2X25hbWVfaW5fbmV0bnMoZGV2aWNlLCBuZXQsIGJ1ZikpIHtcbiYjNDM7XHRcdCpuZXdfbmFtZSA9IGJ1ZjtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWQgPSBfX2FsbG9jX25hbWVfaWQobmV0LCBmYWxsYmFja19wYXR0ZXJuLCBkZXZpY2UpO1xuJiM0MztcdGlmIChpZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBpZDtcbiYjNDM7XHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIGZhbGxiYWNrX3BhdHRlcm4sIGlkKTtcbiYjNDM7XHQqbmV3X25hbWUgPSBidWY7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUaGUgY2FsbGVyIG11c3QgcGFzcyBpbiBhIGRldmljZSB0aGF0IGhhcyB0aGUga3JlZiBoZWxkIGFuZCB0aGUgcmVmY291bnRcbiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWRcbiAgKiBpbnRvIG5ldC5cbiYjNDM7ICpcbiYjNDM7ICogTmFtaW5nIHJ1bGVzIGFyZSBoYW5kbGVkIGJ5IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSgpLlxuICAqL1xuIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcbi1cdFx0XHRcdCBzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4pXG4ge1xuJiM0MztcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XG4mIzQzO1x0Y29uc3QgY2hhciAqbmV3X25hbWU7XG4gXHRpbnQgcmV0MiA9IC1FSU5WQUw7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE2OTQsMzAgJiM0MzsxNzk4LDY1IEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFmYWxsYmFja19wYXR0ZXJuKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmVqZWN0IGEgcHJlZGljdGFibGUgbmFtZSBjb25mbGljdCBiZWZvcmUgdGVhcmluZyBhbnl0aGluZ1xuJiM0MztcdFx0ICogZG93biwgc28gYSBkb29tZWQgdXNlciBtb3ZlIGRvZXMgbm90IGRpc2FibGUgYSBsaXZlIGRldmljZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZG93bl93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHRcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgZmFsbGJhY2tfcGF0dGVybiwgYnVmLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHNpemVvZihidWYpLCBcdTAwMjZuZXdfbmFtZSk7XG4mIzQzO1x0XHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LmtvYmosIEtPQkpfUkVNT1ZFKTtcbiBcdGRpc2FibGVfZGV2aWNlKGRldmljZSk7XG4gXG4gXHQvKlxuLVx0ICogQXQgdGhpcyBwb2ludCBubyBvbmUgY2FuIGJlIHVzaW5nIHRoZSBkZXZpY2UsIHNvIGl0IGlzIHNhZmUgdG9cbi1cdCAqIGNoYW5nZSB0aGUgbmFtZXNwYWNlLlxuJiM0MztcdCAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtXG4mIzQzO1x0ICogbm93IHRoYXQgdGhlIGRldmljZSBpcyBkaXNhYmxlZCwgY2xvc2luZyByYWNlcyB3aXRoIGEgY29uY3VycmVudFxuJiM0MztcdCAqIHJlZ2lzdHJhdGlvbiBvciByZW5hbWUsIHRoZW4gcHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZSBhdCB0aGUgc3lzZnNcbiYjNDM7XHQgKiBsZXZlbC5cbiBcdCAqL1xuLVx0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuJiM0MztcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNm5ld19uYW1lKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xuJiM0MztcdFx0XHRXQVJOKDEsXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7JXM6IGZhaWxlZCB0byBwaWNrIGRldmljZSBuYW1lIGR1cmluZyBuYW1lc3BhY2UgdGVhcmRvd246ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgIF9fZnVuY19fLCByZXQpO1xuJiM0MztcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuJiM0MztcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Z290byByZW5hbWVfZG9uZTtcbiYjNDM7XHR9XG4gXG4tXHRkb3duX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4tXHQvKlxuLVx0ICogQ3VycmVudGx5IHJkbWEgZGV2aWNlcyBhcmUgc3lzdGVtIHdpZGUgdW5pcXVlLiBTbyB0aGUgZGV2aWNlIG5hbWVcbi1cdCAqIGlzIGd1YXJhbnRlZWQgZnJlZSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4gUHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZVxuLVx0ICogYXQgdGhlIHN5c2ZzIGxldmVsLlxuLVx0ICovXG4tXHRyZXQgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKTtcbi1cdHVwX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4mIzQzO1x0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcbiYjNDM7XHRyZXQgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsIG5ld19uYW1lKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X3dhcm4oXHUwMDI2ZGV2aWNlLVx1MDAzZWRldixcbi1cdFx0XHQgXCYjMzQ7JXM6IENvdWxkbiYjMzk7dCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXG5cJiMzNDssXG4tXHRcdFx0IF9fZnVuY19fKTtcbi1cdFx0LyogVHJ5IGFuZCBwdXQgdGhpbmdzIGJhY2sgYW5kIHJlLWVuYWJsZSB0aGUgZGV2aWNlICovXG4tXHRcdHdyaXRlX3BuZXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIGN1cl9uZXQpO1xuJiM0MztcdFx0aWYgKGZhbGxiYWNrX3BhdHRlcm4pIHtcbiYjNDM7XHRcdFx0V0FSTigxLFxuJiM0MztcdFx0XHQgICAgIFwmIzM0OyVzOiBmYWlsZWQgdG8gcmVuYW1lIGRldmljZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0OyVzOiBDb3VsZG4mIzM5O3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRcdC8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqL1xuJiM0MztcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3Ryc2NweShkZXZpY2UtXHUwMDNlbmFtZSwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksXG4mIzQzO1x0XHRcdElCX0RFVklDRV9OQU1FX01BWCk7XG4gXHR9XG4mIzQzO3JlbmFtZV9kb25lOlxuJiM0MztcdHVwX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuIFxuIFx0cmV0MiA9IGVuYWJsZV9kZXZpY2VfYW5kX2dldChkZXZpY2UpO1xuIFx0aWYgKHJldDIpIHtcbkBAIC0xNzQwLDM2ICYjNDM7MTg3OSw3MiBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsXG4gfVxuIFxuIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZClcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdGludCByZXQ7XG4gXG4gXHRuZXQgPSBnZXRfbmV0X25zX2J5X2ZkKG5zX2ZkKTtcbiBcdGlmIChJU19FUlIobmV0KSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHRhcmdldCBuZXQgbmFtZXNwYWNlIGZkXCYjMzQ7KTtcbiBcdFx0cmV0ID0gUFRSX0VSUihuZXQpO1xuIFx0XHRnb3RvIG5ldF9lcnI7XG4gXHR9XG4gXG4gXHRpZiAoIW5ldGxpbmtfbnNfY2FwYWJsZShza2IsIG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7TWlzc2luZyBDQVBfTkVUX0FETUlOIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FUEVSTTtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNb3ZpbmcgYSBkZXZpY2UgdG8gdGhlIG5hbWVzcGFjZSBpdCBhbHJlYWR5IGxpdmVzIGluIGlzIGEgbm8tb3A7IGFcbiYjNDM7XHQgKiBzdXBwbGllZCBuYW1lIHN0aWxsIHJlbmFtZXMgaXQgaW4gcGxhY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG5ldF9lcShuZXQsIHJlYWRfcG5ldChcdTAwMjZkZXYtXHUwMDNlY29yZWRldi5yZG1hX25ldCkpKSB7XG4mIzQzO1x0XHRyZXQgPSBuYW1lID8gaWJfZGV2aWNlX3JlbmFtZShkZXYsIG5hbWUpIDogMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0ID09IC1FRVhJU1QpXG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7RGV2aWNlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O1VuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGRldmljZSBuYW1lIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG5zX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIEFsbCB0aGUgaWJfY2xpZW50cywgaW5jbHVkaW5nIHV2ZXJicywgYXJlIHJlc2V0IHdoZW4gdGhlIG5hbWVzcGFjZSBpc1xuIFx0ICogY2hhbmdlZCBhbmQgdGhpcyBjYW5ub3QgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciB1c2Vyc3BhY2UgdG8gZG9cbiBcdCAqIHNvbWV0aGluZywgc28gZGlzYXNzb2NpYXRpb24gaXMgbWFuZGF0b3J5LlxuIFx0ICovXG4tXHRpZiAoIWRldi1cdTAwM2VvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0IHx8IGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XG4mIzQzO1x0aWYgKGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtDYW5ub3QgY2hhbmdlIG5ldCBuYW1lc3BhY2Ugb2YgUkRNQSBkZXZpY2UgaW4gc2hhcmVkIG5ldG5zIG1vZGVcJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRnb3RvIG5zX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW9wcy5kaXNhc3NvY2lhdGVfdWNvbnRleHQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0RldmljZSBkb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZSBjaGFuZ2VzIChubyBkaXNhc3NvY2lhdGUgc3VwcG9ydClcJiMzNDspO1xuIFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4gXHRnZXRfZGV2aWNlKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuIFx0aWJfZGV2aWNlX3B1dChkZXYpO1xuLVx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucywgbmV0KTtcbiYjNDM7XHRyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zLCBuZXQsIG5hbWUsXG4mIzQzO1x0XHRcdFx0ICAgIE5VTEwpO1xuIFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAocmV0ID09IC1FRVhJU1QpXG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcJiMzNDspO1xuJiM0MztcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7VW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiBcbiBcdHB1dF9uZXQobmV0KTtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbmluZGV4IGFhZTRmM2Y2YmNiYTE0Li40ZWZhMzg3ZWMxYmUxNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbkBAIC0xMTc4LDYgJiM0MzsxMTc4LDI0IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRpZiAoIWRldmljZSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0aWYgKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSkge1xuJiM0MztcdFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcbiYjNDM7XHRcdHUzMiBuc19mZDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkge1xuJiM0MztcdFx0XHRubGFfc3Ryc2NweShuYW1lLCB0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdLFxuJiM0MztcdFx0XHRcdCAgICBJQl9ERVZJQ0VfTkFNRV9NQVgpO1xuJiM0MztcdFx0XHRpZiAoc3RybGVuKG5hbWUpID09IDApIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xuJiM0MztcdFx0ZXJyID0gaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc2tiLCBkZXZpY2UsIG5zX2ZkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgbmFtZVswXSA/IG5hbWUgOiBOVUxMLCBleHRhY2spO1xuJiM0MztcdFx0Z290byBwdXRfZG9uZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0pIHtcbiBcdFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcbiBcbkBAIC0xMTkxLDE0ICYjNDM7MTIwOSw2IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmICh0YltSRE1BX05MREVWX05FVF9OU19GRF0pIHtcbi1cdFx0dTMyIG5zX2ZkO1xuLVxuLVx0XHRuc19mZCA9IG5sYV9nZXRfdTMyKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSk7XG4tXHRcdGVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCk7XG4tXHRcdGdvdG8gcHV0X2RvbmU7XG4tXHR9XG4tXG4gXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9ESU1dKSB7XG4gXHRcdHU4IHVzZV9kaW07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbmluZGV4IDlhZjMxZDFkOWQ3MGM3Li5hODJjNDY5NjU0MTZhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbkBAIC03MDAsNiAmIzQzOzcwMCwxMiBAQCBpbnQgaWJfbWFkX2FnZW50X3NlY3VyaXR5X3NldHVwKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LFxuIFx0aWYgKHFwX3R5cGUgIT0gSUJfUVBUX1NNSSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTRUxpbnV4IGxhYmVscyBhbiBlbmRwb3J0IGJ5IChkZXZpY2UgbmFtZSwgcG9ydCkgZnJvbSBhIGdsb2JhbFxuJiM0MztcdCAqIHBvbGljeS4gSWYgZGV2aWNlcyBpbiBkaWZmZXJlbnQgbmV0IG5hbWVzcGFjZXMgc2hhcmUgYSBuYW1lLCB0aGV5IGdldFxuJiM0MztcdCAqIHRoZSBzYW1lIGxhYmVsOyBkaXN0aW5ndWlzaGluZyB0aGVtIHdvdWxkIG5lZWQgbmV0IG5hbWVzcGFjZSBzdXBwb3J0XG4mIzQzO1x0ICogaW4gdGhlIHBvbGljeSBsYW5ndWFnZSBhbmQgdG9vbGluZy5cbiYjNDM7XHQgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZtYWRfYWdlbnRfbGlzdF9sb2NrKTtcbiBcdHJldCA9IHNlY3VyaXR5X2liX2VuZHBvcnRfbWFuYWdlX3N1Ym5ldChhZ2VudC1cdTAwM2VzZWN1cml0eSxcbiBcdFx0XHRcdFx0XHRkZXZfbmFtZShcdTAwMjZhZ2VudC1cdTAwM2VkZXZpY2UtXHUwMDNlZGV2KSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmNcbmluZGV4IDdmNzIzYTJmMzcwMDU5Li5hNGVhZDg5Y2NiZDM0MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jXG5AQCAtMTEsNyAmIzQzOzExLDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtyeGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3J4ZV9sb2MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O3J4ZV9xdWV1ZS5oXCYjMzQ7XG4gXG4gdm9pZCByeGVfbW1hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4ge1xuQEAgLTMwLDI5ICYjNDM7MjksNiBAQCB2b2lkIHJ4ZV9tbWFwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbiBcdGtmcmVlKGlwKTtcbiB9XG4gXG4tLypcbi0gKiBvcGVuIGFuZCBjbG9zZSBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IHRpbWVzIHRoZSBtZW1vcnkgcmVnaW9uIGlzIG1hcHBlZCxcbi0gKiB0byBhdm9pZCByZWxlYXNpbmcgaXQuXG4tICovXG4tc3RhdGljIHZvaWQgcnhlX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXG4tXHRrcmVmX2dldChcdTAwMjZpcC1cdTAwM2VyZWYpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByeGVfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXG4tXHRrcmVmX3B1dChcdTAwMjZpcC1cdTAwM2VyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHJ4ZV92bV9vcHMgPSB7XG4tXHQub3BlbiA9IHJ4ZV92bWFfb3Blbixcbi1cdC5jbG9zZSA9IHJ4ZV92bWFfY2xvc2UsXG4tfTtcbi1cbiAvKipcbiAgKiByeGVfbW1hcCAtIGNyZWF0ZSBhIG5ldyBtbWFwIHJlZ2lvblxuICAqIEBjb250ZXh0OiB0aGUgSUIgdXNlciBjb250ZXh0IG9mIHRoZSBwcm9jZXNzIG1ha2luZyB0aGUgbW1hcCgpIGNhbGxcbkBAIC0xMDYsMTcgJiM0Mzs4MiwxMCBAQCBpbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2aXAtXHUwMDNlcGVuZGluZ19tbWFwcyk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZyeGUtXHUwMDNlcGVuZGluZ19sb2NrKTtcbiBcbi1cdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZyeGVfdm1fb3BzO1xuLVx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGlwO1xuLVxuIFx0cmV0ID0gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGlwLVx1MDAzZW9iaiwgMCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBOVUxMO1xuLVx0XHR2bWEtXHUwMDNldm1fb3BzID0gTlVMTDtcbi1cdFx0a3JlZl9wdXQoXHUwMDI2aXAtXHUwMDNlcmVmLCByeGVfbW1hcF9yZWxlYXNlKTtcbiYjNDM7XHRrcmVmX3B1dChcdTAwMjZpcC1cdTAwM2VyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpO1xuJiM0MztcdGlmIChyZXQpXG4gXHRcdHJ4ZV9kYmdfZGV2KHJ4ZSwgXCYjMzQ7ZXJyICVkIGZyb20gcmVtYXBfdm1hbGxvY19yYW5nZVxcblwmIzM0OywgcmV0KTtcbi1cdFx0Z290byBkb25lO1xuLVx0fVxuIFxuIGRvbmU6XG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXG5pbmRleCAxZWMxMzBmZWU4ZWE3YS4uNmViMTBkMmYwNjUzYmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXG5AQCAtMjQwLDYgJiM0MzsyNDAsMTAgQEAgc3RhdGljIHZvaWQgcnhlX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKVxuIFx0XHRyeGVfZXJyX3VjKHVjLCBcJiMzNDtjbGVhbnVwIGZhaWxlZCwgZXJyID0gJWRcXG5cJiMzNDssIGVycik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1YylcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHBkICovXG4gc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuIHtcbkBAIC0xNDc4LDYgJiM0MzsxNDgyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2Vfb3BzIHJ4ZV9kZXZfb3BzID0ge1xuIFx0LmRlc3Ryb3lfc3JxID0gcnhlX2Rlc3Ryb3lfc3JxLFxuIFx0LmRldGFjaF9tY2FzdCA9IHJ4ZV9kZXRhY2hfbWNhc3QsXG4gXHQuZGV2aWNlX2dyb3VwID0gXHUwMDI2cnhlX2F0dHJfZ3JvdXAsXG4mIzQzO1x0LmRpc2Fzc29jaWF0ZV91Y29udGV4dCA9IHJ4ZV9kaXNhc3NvY2lhdGVfdWNvbnRleHQsXG4gXHQuZW5hYmxlX2RyaXZlciA9IHJ4ZV9lbmFibGVfZHJpdmVyLFxuIFx0LmdldF9kbWFfbXIgPSByeGVfZ2V0X2RtYV9tcixcbiBcdC5nZXRfaHdfc3RhdHMgPSByeGVfaWJfZ2V0X2h3X3N0YXRzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcbmluZGV4IDBjYWViYmMyODEwZmYzLi4yZmM4ZTEzM2M3MGZjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY1xuQEAgLTMxODksMTAgJiM0MzszMTg5LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzcnBfY2xhc3NfYXR0cnNbXTtcbiBcbiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFNSUCBob3N0cyBhcmUgbmFtZWQgYWZ0ZXIgdGhlaXIgaWIgZGV2aWNlLCBzbyB0YWcgdGhlIGNsYXNzIGJ5IHRoZSBpYlxuJiM0MzsgKiBkZXZpY2UmIzM5O3MgbmV0IG5hbWVzcGFjZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGRldik7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gcmRtYV9kZXZfbmV0KGhvc3QtXHUwMDNlc3JwX2Rldi1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmV0ID8gdG9fbnNfY29tbW9uKG5ldCkgOiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgc3JwX2NsYXNzID0ge1xuIFx0Lm5hbWUgICAgPSBcJiMzNDtpbmZpbmliYW5kX3NycFwmIzM0OyxcbiBcdC5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3Vwcyxcbi1cdC5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldlxuJiM0MztcdC5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldixcbiYjNDM7XHQubnNfdHlwZSA9IFx1MDAyNm5ldF9uc190eXBlX29wZXJhdGlvbnMsXG4mIzQzO1x0Lm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLFxuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oXG5pbmRleCA0MDRlNzQ2NTUyY2E4Zi4uOWE1YzllZTcyOGU3ZGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxuQEAgLTM0LDYgJiM0MzszNCw3IEBAIHN0cnVjdCByZG1hY2dfZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl9ub2RlO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0cnBvb2xzO1xuIFx0Y2hhclx0XHRcdCpuYW1lO1xuJiM0MztcdHUzMlx0XHRcdGluZGV4O1xuIH07XG4gXG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXG5pbmRleCAzYWY5NDZlY2JhYzNlZC4uZWUxMWMzYmJiYWUyMmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcbkBAIC01MTYsNyAmIzQzOzUxNiwxMCBAQCBlbnVtIHJkbWFfbmxkZXZfYXR0ciB7XG4gXHRSRE1BX05MREVWX0FUVFJfREVWX1BST1RPQ09MLFx0XHQvKiBzdHJpbmcgKi9cbiBcbiBcdC8qXG4tXHQgKiBGaWxlIGRlc2NyaXB0b3IgaGFuZGxlIG9mIHRoZSBuZXQgbmFtZXNwYWNlIG9iamVjdFxuJiM0MztcdCAqIEZpbGUgZGVzY3JpcHRvciBoYW5kbGUgb2YgdGhlIG5ldCBuYW1lc3BhY2Ugb2JqZWN0LiBNYXkgYmUgY29tYmluZWRcbiYjNDM7XHQgKiB3aXRoIFJETUFfTkxERVZfQVRUUl9ERVZfTkFNRSAoYSBsaXRlcmFsIGRldmljZSBuYW1lKSB0byBhbHNvIHJlbmFtZVxuJiM0MztcdCAqIHRoZSBkZXZpY2UgaW4gdGhlIGRlc3RpbmF0aW9uIG5hbWVzcGFjZTsgdGhlIG1vdmUgZmFpbHMgd2l0aCAtRUVYSVNUXG4mIzQzO1x0ICogaWYgdGhhdCBuYW1lIGlzIGFscmVhZHkgdGFrZW4gdGhlcmUuXG4gXHQgKi9cbiBcdFJETUFfTkxERVZfTkVUX05TX0ZELFx0XHRcdC8qIHUzMiAqL1xuIFx0LypcbmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL3JkbWEuYyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jXG5pbmRleCA1ZTgyYTAzYjMyNzBhZC4uOTQ4OWYzZGYwYmYzZmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2dyb3VwL3JkbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Nncm91cC9yZG1hLmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNkZWZpbmUgUkRNQUNHX01BWF9TVFIgXCYjMzQ7bWF4XCYjMzQ7XG4gXG4gZW51bSByZG1hY2dfbGltaXRfdG9rZW5zIHtcbiYjNDM7XHRSRE1BQ0dfREVWSUNFX0lOREVYLFxuIFx0UkRNQUNHX0hDQV9IQU5ETEVfVkFMLFxuIFx0UkRNQUNHX0hDQV9IQU5ETEVfTUFYLFxuIFx0UkRNQUNHX0hDQV9PQkpFQ1RfVkFMLFxuQEAgLTI3LDYgJiM0MzsyOCw3IEBAIGVudW0gcmRtYWNnX2xpbWl0X3Rva2VucyB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCByZG1hY2dfbGltaXRfdG9rZW5zID0ge1xuJiM0MztcdHsgUkRNQUNHX0RFVklDRV9JTkRFWCxcdFx0XCYjMzQ7aW5kZXg9JXVcJiMzNDtcdH0sXG4gXHR7IFJETUFDR19IQ0FfSEFORExFX1ZBTCxcdFwmIzM0O2hjYV9oYW5kbGU9JWRcJiMzNDtcdH0sXG4gXHR7IFJETUFDR19IQ0FfSEFORExFX01BWCxcdFwmIzM0O2hjYV9oYW5kbGU9bWF4XCYjMzQ7XHR9LFxuIFx0eyBSRE1BQ0dfSENBX09CSkVDVF9WQUwsXHRcJiMzNDtoY2Ffb2JqZWN0PSVkXCYjMzQ7XHR9LFxuQEAgLTQ2NCwxNyAmIzQzOzQ2Niw1MyBAQCB2b2lkIHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7XG4gXG4tc3RhdGljIHN0cnVjdCByZG1hY2dfZGV2aWNlICpyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7c3RhdGljIHN0cnVjdCByZG1hY2dfZGV2aWNlICpcbiYjNDM7cmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaGFzX2luZGV4LCB1MzIgaW5kZXgpXG4ge1xuJiM0MztcdHN0cnVjdCByZG1hY2dfZGV2aWNlICptYXRjaCA9IE5VTEw7XG4gXHRzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSlcbi1cdFx0aWYgKCFzdHJjbXAobmFtZSwgZGV2aWNlLVx1MDAzZW5hbWUpKVxuLVx0XHRcdHJldHVybiBkZXZpY2U7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xuJiM0MztcdFx0aWYgKHN0cmNtcChuYW1lLCBkZXZpY2UtXHUwMDNlbmFtZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFxuLVx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRpZiAoaGFzX2luZGV4KSB7XG4mIzQzO1x0XHRcdGlmIChkZXZpY2UtXHUwMDNlaW5kZXggPT0gaW5kZXgpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGRldmljZTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hdGNoKVxuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PVFVOSVEpO1xuJiM0MztcdFx0bWF0Y2ggPSBkZXZpY2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWF0Y2ggPzogRVJSX1BUUigtRU5PREVWKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2xcbiYjNDM7cmRtYWNnX2RldmljZV9uYW1lX3VuaXF1ZV9sb2NrZWQoY29uc3Qgc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZG1hY2dfZGV2aWNlICpvdGhlcjtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG90aGVyLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpXG4mIzQzO1x0XHRpZiAob3RoZXIgIT0gZGV2aWNlIFx1MDAyNlx1MDAyNiAhc3RyY21wKG90aGVyLVx1MDAzZW5hbWUsIGRldmljZS1cdTAwM2VuYW1lKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmRtYWNnX3ByaW50X2RldmljZV9rZXkoc3RydWN0IHNlcV9maWxlICpzZixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHNlcV9wdXRzKHNmLCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4mIzQzO1x0aWYgKCFyZG1hY2dfZGV2aWNlX25hbWVfdW5pcXVlX2xvY2tlZChkZXZpY2UpKVxuJiM0MztcdFx0c2VxX3ByaW50ZihzZiwgXCYjMzQ7IGluZGV4PSV1XCYjMzQ7LCBkZXZpY2UtXHUwMDNlaW5kZXgpO1xuJiM0MztcdHNlcV9wdXRjKHNmLCAmIzM5OyAmIzM5Oyk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbkBAIC00ODgsNiAmIzQzOzUyNiw4IEBAIHN0YXRpYyBzc2l6ZV90IHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdGNoYXIgKnA7XG4gXHRpbnQgKm5ld19saW1pdHM7XG4gXHR1bnNpZ25lZCBsb25nIGVuYWJsZXMgPSAwO1xuJiM0MztcdHUzMiBkZXZfaW5kZXggPSAwO1xuJiM0MztcdGJvb2wgaGFzX2luZGV4ID0gZmFsc2U7XG4gXHRpbnQgaSA9IDAsIHJldCA9IDA7XG4gXG4gXHQvKiBleHRyYWN0IHRoZSBkZXZpY2UgbmFtZSBmaXJzdCAqL1xuQEAgLTUwMyw3ICYjNDM7NTQzLDcgQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuIFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbi1cdC8qIHBhcnNlIHJlc291cmNlIGxpbWl0IHRva2VucyAqL1xuJiM0MztcdC8qIHBhcnNlIHRoZSBvcHRpb25hbCBkZXZpY2UgaW5kZXggYW5kIHJlc291cmNlIGxpbWl0IHRva2VucyAqL1xuIFx0d2hpbGUgKChwID0gc3Ryc2VwKFx1MDAyNm9wdGlvbnMsIFwmIzM0OyBcXHRcXG5cJiMzNDspKSkge1xuIFx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG4gXHRcdGludCB0b2ssIGludHZhbDtcbkBAIC01MTMsNiAmIzQzOzU1MywxMyBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4gXG4gXHRcdHRvayA9IG1hdGNoX3Rva2VuKHAsIHJkbWFjZ19saW1pdF90b2tlbnMsIGFyZ3MpO1xuIFx0XHRzd2l0Y2ggKHRvaykge1xuJiM0MztcdFx0Y2FzZSBSRE1BQ0dfREVWSUNFX0lOREVYOlxuJiM0MztcdFx0XHRpZiAoaGFzX2luZGV4IHx8IG1hdGNoX3VpbnQoXHUwMDI2YXJnc1swXSwgXHUwMDI2ZGV2X2luZGV4KSkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBwYXJzZV9lcnI7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aGFzX2luZGV4ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgUkRNQUNHX0hDQV9IQU5ETEVfVkFMOlxuIFx0XHRcdGlmIChtYXRjaF9pbnQoXHUwMDI2YXJnc1swXSwgXHUwMDI2aW50dmFsKSB8fCBpbnR2YWwgXHUwMDNjIDApIHtcbiBcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG5AQCAtNTQ2LDkgJiM0Mzs1OTMsOSBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4gXHQvKiBhY3F1aXJlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBob3QgcGx1ZyBkZXZpY2VzICovXG4gXHRtdXRleF9sb2NrKFx1MDAyNnJkbWFjZ19tdXRleCk7XG4gXG4tXHRkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUpO1xuLVx0aWYgKCFkZXZpY2UpIHtcbi1cdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUsIGhhc19pbmRleCwgZGV2X2luZGV4KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGRldmljZSkpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoZGV2aWNlKTtcbiBcdFx0Z290byBkZXZfZXJyO1xuIFx0fVxuIFxuQEAgLTYyNiw3ICYjNDM7NjczLDcgQEAgc3RhdGljIGludCByZG1hY2dfcmVzb3VyY2VfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xuLVx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDslcyBcJiMzNDssIGRldmljZS1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdHJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpO1xuIFxuIFx0XHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xuIFx0XHRwcmludF9ycG9vbF92YWx1ZXMoc2YsIHJwb29sKTtcbkBAIC02NTAsNyAmIzQzOzY5Nyw3IEBAIHN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XG4gXHRcdHJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7XG4gXG4tXHRcdHNlcV9wcmludGYoc2YsIFwmIzM0OyVzIFwmIzM0OywgZGV2aWNlLVx1MDAzZW5hbWUpO1xuJiM0MztcdFx0cmRtYWNnX3ByaW50X2RldmljZV9rZXkoc2YsIGRldmljZSk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJETUFDR19SRVNPVVJDRV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0c2VxX3ByaW50ZihzZiwgXCYjMzQ7JXMubWF4PSVsbHUgJXMuYWxsb2NfZmFpbD0lbGx1XCYjMzQ7LFxuIFx0XHRcdFx0ICAgcmRtYWNnX3Jlc291cmNlX25hbWVzW2ldLFxuQEAgLTY3OSw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbiBcdFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcbiBcbi1cdFx0c2VxX3ByaW50ZihzZiwgXCYjMzQ7JXMgXCYjMzQ7LCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4mIzQzO1x0XHRyZG1hY2dfcHJpbnRfZGV2aWNlX2tleShzZiwgZGV2aWNlKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDslcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHVcJiMzNDssXG4gXHRcdFx0XHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfcG5ldC5jIGIvbmV0L3NtYy9zbWNfcG5ldC5jXG5pbmRleCA2M2UyODZlMmRmYWE4ZC4uZmY5YzljMzVjYzJmNWIgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19wbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3BuZXQuY1xuQEAgLTMwNCwxMyAmIzQzOzMwNCwxOCBAQCBzdGF0aWMgYm9vbCBzbWNfcG5ldGlkX3ZhbGlkKGNvbnN0IGNoYXIgKnBuZXRfbmFtZSwgY2hhciAqcG5ldGlkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLS8qIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC4gKi9cbi1zdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoY2hhciAqaWJfbmFtZSlcbiYjNDM7LypcbiYjNDM7ICogRmluZCBhbiBpbmZpbmliYW5kIGRldmljZSBieSBhIGdpdmVuIG5hbWUsIHJlc3RyaWN0ZWQgdG8gdGhlIGRldmljZXNcbiYjNDM7ICogYWNjZXNzaWJsZSBmcm9tIEBuZXQuIFRoZSBkZXZpY2UgbWlnaHQgbm90IGV4aXN0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWJfbmFtZSlcbiB7XG4gXHRzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXY7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnNtY19pYl9kZXZpY2VzLm11dGV4KTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaWJkZXYsIFx1MDAyNnNtY19pYl9kZXZpY2VzLmxpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGlmICghcmRtYV9kZXZfYWNjZXNzX25ldG5zKGliZGV2LVx1MDAzZWliZGV2LCBuZXQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFzdHJuY21wKGliZGV2LVx1MDAzZWliZGV2LVx1MDAzZW5hbWUsIGliX25hbWUsXG4gXHRcdFx0ICAgICBzaXplb2YoaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlbmFtZSkpIHx8XG4gXHRcdCAgICAoaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlZGV2LnBhcmVudCBcdTAwMjZcdTAwMjZcbkBAIC00MDgsOCAmIzQzOzQxMyw4IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2V0aChzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2liKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIGNoYXIgKmliX25hbWUsXG4tXHRcdFx0ICAgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKVxuJiM0MztzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXG4mIzQzO1x0XHRcdCAgIGNoYXIgKmliX25hbWUsIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSlcbiB7XG4gXHRzdHJ1Y3Qgc21jX3BuZXRlbnRyeSAqdG1wX3BlLCAqbmV3X3BlO1xuIFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmliX2RldjtcbkBAIC00MTksNyAmIzQzOzQyNCw3IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2liKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIGNoYXIgKmliX25hbWUsXG4gXHRib29sIG5ld19pYmRldjtcbiBcbiBcdC8qIHRyeSB0byBhcHBseSB0aGUgcG5ldGlkIHRvIGFjdGl2ZSBkZXZpY2VzICovXG4tXHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKGliX25hbWUpO1xuJiM0MztcdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIobmV0LCBpYl9uYW1lKTtcbiBcdGlmIChpYl9kZXYpIHtcbiBcdFx0aWJkZXZfYXBwbGllZCA9IHNtY19wbmV0X2FwcGx5X2liKGliX2RldiwgaWJfcG9ydCwgcG5ldF9uYW1lKTtcbiBcdFx0aWYgKGliZGV2X2FwcGxpZWQpXG5AQCAtNTE4LDcgJiM0Mzs1MjMsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2VudGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSlcbiBcdFx0XHRpZiAoaWJwb3J0IFx1MDAzYyAxIHx8IGlicG9ydCBcdTAwM2UgU01DX01BWF9QT1JUUylcbiBcdFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbi1cdFx0cmMgPSBzbWNfcG5ldF9hZGRfaWIocG5ldHRhYmxlLCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTtcbiYjNDM7XHRcdHJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgbmV0LCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTtcbiBcdFx0aWYgKCFyYylcbiBcdFx0XHRuZXdfaWJkZXYgPSB0cnVlO1xuIFx0XHRlbHNlIGlmIChyYyAhPSAtRUVYSVNUKVxuQEAgLTExNzAsNiAmIzQzOzExNzUsOSBAQCBpbnQgc21jX3BuZXRpZF9ieV90YWJsZV9pYihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGliX3BvcnQpXG4gXHRzdHJ1Y3Qgc21jX25ldCAqc247XG4gXHRpbnQgcmMgPSAtRU5PRU5UO1xuIFxuJiM0MztcdGlmICghcmRtYV9kZXZfYWNjZXNzX25ldG5zKHNtY2liZGV2LVx1MDAzZWliZGV2LCBcdTAwMjZpbml0X25ldCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4gXHQvKiBnZXQgcG5ldHRhYmxlIGZvciBpbml0IG5hbWVzcGFjZSAqL1xuIFx0c24gPSBuZXRfZ2VuZXJpYyhcdTAwMjZpbml0X25ldCwgc21jX25ldF9pZCk7XG4gXHRwbmV0dGFibGUgPSBcdTAwMjZzbi1cdTAwM2VwbmV0dGFibGU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbmluZGV4IDA3YWY3ZjE1YzFiZjc0Li5hOTFjMTRjNDUwMDZlMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbkBAIC0zLDYgJiM0MzszLDcgQEAgVEVTVF9QUk9HUyA6PSByeGVfcnBpbmdfYmV0d2Vlbl9uZXRucy5zaCBcXFxuIFx0XHRyeGVfaXB2Ni5zaCBcXFxuIFx0XHRyeGVfc29ja2V0X3dpdGhfbmV0bnMuc2ggXFxcbiBcdFx0cnhlX3Rlc3RfTkVUREVWX1VOUkVHSVNURVIuc2ggXFxcbi1cdFx0cnhlX3NlbnRfcmN2ZF9ieXRlcy5zaFxuJiM0MztcdFx0cnhlX3NlbnRfcmN2ZF9ieXRlcy5zaCBcXFxuJiM0MztcdFx0cnhlX25ldG5zX25hbWVzLnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXG5pbmRleCA0ZmZiODE0ZTI1M2JiZC4uZTFmZjU0ZWMwZjU3OTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcbkBAIC0xLDMgJiM0MzsxLDUgQEBcbiBDT05GSUdfVFVOXG4gQ09ORklHX1ZFVEhcbiYjNDM7Q09ORklHX0RVTU1ZXG4mIzQzO0NPTkZJR19ORVRfTlNcbiBDT05GSUdfUkRNQV9SWEVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0ZmFiZjg2YmRmNzllXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaFxuQEAgLTAsMCAmIzQzOzEsMjgyIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIEV4ZXJjaXNlIFJETUEgZGV2aWNlIG5hbWUgaGFuZGxpbmcgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcy5cbiYjNDM7XG4mIzQzO3NvdXJjZSBcJiMzNDskKGRpcm5hbWUgXCYjMzQ7JDBcJiMzNDspLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcJiMzNDtcbiYjNDM7XG4mIzQzO05BTUVfUFJFRklYPVwmIzM0O3J4ZV9uZXRuc19uYW1lc18kJFwmIzM0O1xuJiM0MztORVRERVZfUFJFRklYPVwmIzM0O3J4biQkXCYjMzQ7XG4mIzQzO05TMT1cJiMzNDske05BTUVfUFJFRklYfW5zMVwmIzM0O1xuJiM0MztOUzI9XCYjMzQ7JHtOQU1FX1BSRUZJWH1uczJcJiMzNDtcbiYjNDM7UlhFX0E9XCYjMzQ7JHtOQU1FX1BSRUZJWH1yeGVfYVwmIzM0O1xuJiM0MztSWEVfQj1cJiMzNDske05BTUVfUFJFRklYfXJ4ZV9iXCYjMzQ7XG4mIzQzO1JYRV9TQU1FPVwmIzM0OyR7TkFNRV9QUkVGSVh9cnhlX3NhbWVcJiMzNDtcbiYjNDM7UlhFX05FVz1cJiMzNDske05BTUVfUFJFRklYfXJ4ZV9uZXdcJiMzNDtcbiYjNDM7RFVNTVlfQT1cJiMzNDske05FVERFVl9QUkVGSVh9YVwmIzM0O1xuJiM0MztEVU1NWV9CPVwmIzM0OyR7TkVUREVWX1BSRUZJWH1iXCYjMzQ7XG4mIzQzO09MRF9NT0RFPVwmIzM0O1wmIzM0O1xuJiM0MztNT0RFX0NIQU5HRUQ9MFxuJiM0MztNT0RTPShcJiMzNDtkdW1teVwmIzM0OyBcJiMzNDtyZG1hX3J4ZVwmIzM0OylcbiYjNDM7VEVTVF9TQU1FX05BTUVTPVwmIzM0O3NhbWUgUkRNQSBkZXZpY2UgbmFtZSBjYW4gZXhpc3QgaW4gdHdvIG5ldCBuYW1lc3BhY2VzXCYjMzQ7XG4mIzQzO1RFU1RfTU9WRV9DT05GTElDVD1cJiMzNDttb3ZlIHdpdGhvdXQgcmVuYW1lIGZhaWxzIG9uIGRlc3RpbmF0aW9uIG5hbWUgY29uZmxpY3RcJiMzNDtcbiYjNDM7VEVTVF9NT1ZFX1JFTkFNRT1cJiMzNDttb3ZlIHRoZW4gcmVuYW1lIHN1Y2NlZWRzXCYjMzQ7XG4mIzQzO1RFU1RfQ09NQklORURfTU9WRV9SRU5BTUU9XCYjMzQ7bW92ZSB3aXRoIHJlcXVlc3RlZCBkZXN0aW5hdGlvbiBuYW1lIHN1Y2NlZWRzXCYjMzQ7XG4mIzQzO1RFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FPVwmIzM0O3NhbWUtbmV0bnMgcmVuYW1lIHJlamVjdHMgZHVwbGljYXRlIG5hbWVcJiMzNDtcbiYjNDM7VEVTVF9URUFSRE9XTl9SRVRVUk49XCYjMzQ7bmV0bnMgZGVsZXRlIHJldHVybnMgZGV2aWNlIHRvIGluaXRfbmV0IGFuZCByZW5hbWVzIG9uIGNvbmZsaWN0XCYjMzQ7XG4mIzQzO1xuJiM0Mztrc2Z0X3NraXAoKVxuJiM0Mzt7XG4mIzQzO1x0a3RhcF9za2lwX2FsbCBcJiMzNDskKlwmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztmYWlsKClcbiYjNDM7e1xuJiM0MztcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDskKlwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztuZWVkX2NtZCgpXG4mIzQzO3tcbiYjNDM7XHRjb21tYW5kIC12IFwmIzM0OyQxXCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fCBrc2Z0X3NraXAgXCYjMzQ7bWlzc2luZyBjb21tYW5kOiAkMVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztyZG1hX25zKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPSQxXG4mIzQzO1xuJiM0MztcdHNoaWZ0XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNcJiMzNDsgcmRtYSBcJiMzNDskQFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztyZG1hX2Rldl9leGlzdHMoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9JDFcbiYjNDM7XHRsb2NhbCBkZXY9JDJcbiYjNDM7XG4mIzQzO1x0aWYgWyAtbiBcJiMzNDskbnNcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cmRtYV9ucyBcJiMzNDskbnNcJiMzNDsgZGV2IHNob3cgXCYjMzQ7JGRldlwmIzM0OyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZG1hIGRldiBzaG93IFwmIzM0OyRkZXZcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7YWRkX2R1bW15KClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5ldGRldj0kMVxuJiM0MztcbiYjNDM7XHRpcCBsaW5rIGFkZCBcJiMzNDskbmV0ZGV2XCYjMzQ7IHR5cGUgZHVtbXkgfHwgcmV0dXJuIDFcbiYjNDM7XHRpcCBsaW5rIHNldCBcJiMzNDskbmV0ZGV2XCYjMzQ7IHVwIHx8IHJldHVybiAxXG4mIzQzO31cbiYjNDM7XG4mIzQzO2FkZF9yeGUoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgZGV2PSQxXG4mIzQzO1x0bG9jYWwgbmV0ZGV2PSQyXG4mIzQzO1xuJiM0MztcdHJkbWEgbGluayBhZGQgXCYjMzQ7JGRldlwmIzM0OyB0eXBlIHJ4ZSBuZXRkZXYgXCYjMzQ7JG5ldGRldlwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztyZG1hX2Rldl9vbl9uZXRkZXYoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmV0ZGV2PSQxXG4mIzQzO1xuJiM0MztcdHJkbWEgbGluayBzaG93IDJcdTAwM2UvZGV2L251bGwgfCBhd2sgLXYgd2FudD1cJiMzNDskbmV0ZGV2XCYjMzQ7ICYjMzk7XG4mIzQzO1x0XHR7XG4mIzQzO1x0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIE5GOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0XHRpZiAoJGkgPT0gXCYjMzQ7bmV0ZGV2XCYjMzQ7IFx1MDAyNlx1MDAyNiAkKGkgJiM0MzsgMSkgPT0gd2FudCkge1xuJiM0MztcdFx0XHRcdFx0ZGV2ID0gJDJcbiYjNDM7XHRcdFx0XHRcdHN1YigvXFwvLiovLCBcJiMzNDtcJiMzNDssIGRldilcbiYjNDM7XHRcdFx0XHRcdHByaW50IGRldlxuJiM0MztcdFx0XHRcdFx0ZXhpdFxuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdH0mIzM5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt3YWl0X3JkbWFfZGV2X29uX25ldGRldigpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBuZXRkZXY9JDFcbiYjNDM7XHRsb2NhbCBkZXZcbiYjNDM7XHRsb2NhbCBpXG4mIzQzO1xuJiM0MztcdGZvciBpIGluICQoc2VxIDEgNTApOyBkb1xuJiM0MztcdFx0ZGV2PSQocmRtYV9kZXZfb25fbmV0ZGV2IFwmIzM0OyRuZXRkZXZcJiMzNDspXG4mIzQzO1x0XHRpZiBbIC1uIFwmIzM0OyRkZXZcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0XHRlY2hvIFwmIzM0OyRkZXZcJiMzNDtcbiYjNDM7XHRcdFx0cmV0dXJuIDBcbiYjNDM7XHRcdGZpXG4mIzQzO1x0XHRzbGVlcCAwLjFcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdHJldHVybiAxXG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwX2RldnMoKVxuJiM0Mzt7XG4mIzQzO1x0Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztcdGFkZF9kdW1teSBcJiMzNDskRFVNTVlfQVwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcdGFkZF9kdW1teSBcJiMzNDskRFVNTVlfQlwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRhZGRfcnhlIFwmIzM0OyRSWEVfQVwmIzM0OyBcJiMzNDskRFVNTVlfQVwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcdGFkZF9yeGUgXCYjMzQ7JFJYRV9CXCYjMzQ7IFwmIzM0OyREVU1NWV9CXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO31cbiYjNDM7XG4mIzQzO2NsZWFudXBfZGV2cygpXG4mIzQzO3tcbiYjNDM7XHRpcCBsaW5rIGRlbCBcJiMzNDskRFVNTVlfQVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0aXAgbGluayBkZWwgXCYjMzQ7JERVTU1ZX0JcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cCgpXG4mIzQzO3tcbiYjNDM7XHRPTERfTU9ERT0kKHJkbWEgc3lzdGVtIHNob3cgMlx1MDAzZS9kZXYvbnVsbCB8XG4mIzQzO1x0XHQgICBzZWQgLW4gJiMzOTtzLy4qbmV0bnMgXFwoW14gXSpcXCkuKi9cXDEvcCYjMzk7KVxuJiM0MztcdFsgLW4gXCYjMzQ7JE9MRF9NT0RFXCYjMzQ7IF0gfHwga3NmdF9za2lwIFwmIzM0O2ZhaWxlZCB0byByZWFkIFJETUEgbmV0bnMgbW9kZVwmIzM0O1xuJiM0MztcbiYjNDM7XHRyZG1hIHN5c3RlbSBzZXQgbmV0bnMgZXhjbHVzaXZlIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fFxuJiM0MztcdFx0a3NmdF9za2lwIFwmIzM0O3JkbWEgbmV0bnMgZXhjbHVzaXZlIG1vZGUgaXMgbm90IHN1cHBvcnRlZFwmIzM0O1xuJiM0MztcdE1PREVfQ0hBTkdFRD0xXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGFkZCBcJiMzNDskTlMxXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0aXAgbmV0bnMgYWRkIFwmIzM0OyROUzJcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2xlYW51cCgpXG4mIzQzO3tcbiYjNDM7XHRjbGVhbnVwX2RldnNcbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZGVsIFwmIzM0OyROUzFcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlwIG5ldG5zIGRlbCBcJiMzNDskTlMyXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XG4mIzQzO1x0aWYgWyBcJiMzNDskTU9ERV9DSEFOR0VEXCYjMzQ7IC1lcSAxIF07IHRoZW5cbiYjNDM7XHRcdHJkbWEgc3lzdGVtIHNldCBuZXRucyBcJiMzNDskT0xEX01PREVcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGZvciBtIGluIFwmIzM0OyR7TU9EU1tAXX1cJiMzNDs7IGRvXG4mIzQzO1x0XHRtb2Rwcm9iZSAtciBcJiMzNDskbVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZG9uZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztyZG1hX3N1cHBvcnRzX2NvbWJpbmVkX21vdmVfcmVuYW1lKClcbiYjNDM7e1xuJiM0MztcdHJkbWEgZGV2IGhlbHAgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1FcSAmIzM5O25ldG5zIC4qbmFtZXxuYW1lIC4qbmV0bnMmIzM5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztbIFwmIzM0OyQoaWQgLXUpXCYjMzQ7IC1lcSAwIF0gfHwga3NmdF9za2lwIFwmIzM0O211c3QgYmUgcnVuIGFzIHJvb3RcJiMzNDtcbiYjNDM7bmVlZF9jbWQgaXBcbiYjNDM7bmVlZF9jbWQgcmRtYVxuJiM0MztuZWVkX2NtZCBtb2Rwcm9iZVxuJiM0MztcbiYjNDM7dHJhcCBjbGVhbnVwIEVYSVRcbiYjNDM7XG4mIzQzO2ZvciBtIGluIFwmIzM0OyR7TU9EU1tAXX1cJiMzNDs7IGRvXG4mIzQzO1x0bW9kaW5mbyBcJiMzNDskbVwmIzM0OyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHwga3NmdF9za2lwIFwmIzM0O21vZHVsZSAkbSBub3QgZm91bmRcJiMzNDtcbiYjNDM7XHRtb2Rwcm9iZSBcJiMzNDskbVwmIzM0OyB8fCBmYWlsIFwmIzM0O2ZhaWxlZCB0byBsb2FkICRtXCYjMzQ7XG4mIzQzO2RvbmVcbiYjNDM7XG4mIzQzO3NldHVwIHx8IGZhaWwgXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBuZXQgbmFtZXNwYWNlc1wmIzM0O1xuJiM0MztcbiYjNDM7a3RhcF9wcmludF9oZWFkZXJcbiYjNDM7a3RhcF9zZXRfcGxhbiA2XG4mIzQzO1xuJiM0MztpZiBzZXR1cF9kZXZzIFx1MDAyNlx1MDAyNlxuJiM0MzsgICByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9BXCYjMzQ7IG5ldG5zIFwmIzM0OyROUzFcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgIHJkbWFfbnMgXCYjMzQ7JE5TMVwmIzM0OyBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQlwmIzM0OyBuZXRucyBcJiMzNDskTlMyXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MzsgICByZG1hX25zIFwmIzM0OyROUzJcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMxXCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgcmRtYV9kZXZfZXhpc3RzIFwmIzM0OyROUzJcJiMzNDsgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7OyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7JFRFU1RfU0FNRV9OQU1FU1wmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfU0FNRV9OQU1FU1wmIzM0O1xuJiM0MztmaVxuJiM0MztjbGVhbnVwX2RldnNcbiYjNDM7XG4mIzQzO2lmICEgc2V0dXBfZGV2cyB8fFxuJiM0MzsgICAhIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMVwmIzM0OyB8fFxuJiM0MzsgICAhIHJkbWFfbnMgXCYjMzQ7JE5TMVwmIzM0OyBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfU0FNRVwmIzM0OyB8fFxuJiM0MzsgICAhIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyB8fFxuJiM0MzsgICAhIHJkbWFfbnMgXCYjMzQ7JE5TMlwmIzM0OyBkZXYgc2V0IFwmIzM0OyRSWEVfQlwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfU0FNRVwmIzM0OzsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX01PVkVfQ09ORkxJQ1RcJiMzNDtcbiYjNDM7ZWxpZiByZG1hX25zIFwmIzM0OyROUzFcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX1NBTUVcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUXCYjMzQ7XG4mIzQzO2VsaWYgcmRtYV9kZXZfZXhpc3RzIFwmIzM0OyROUzFcJiMzNDsgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MzsgICAgIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMyXCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OzsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRURVNUX01PVkVfQ09ORkxJQ1RcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX01PVkVfQ09ORkxJQ1RcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztpZiAhIHNldHVwX2RldnM7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztlbGlmIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgICByZG1hX25zIFwmIzM0OyROUzJcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmFtZSBcJiMzNDskUlhFX05FV1wmIzM0OzsgdGhlblxuJiM0MztcdGlmIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMyXCYjMzQ7IFwmIzM0OyRSWEVfTkVXXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICEgcmRtYV9kZXZfZXhpc3RzIFwmIzM0O1wmIzM0OyBcJiMzNDskUlhFX0FcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRURVNUX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfTU9WRV9SRU5BTUVcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfTU9WRV9SRU5BTUVcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztpZiAhIHJkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWU7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3Rfc2tpcCBcJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztlbGlmICEgc2V0dXBfZGV2czsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO2VsaWYgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuZXRucyBcJiMzNDskTlMyXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9ORVdcJiMzNDs7IHRoZW5cbiYjNDM7XHRpZiByZG1hX2Rldl9leGlzdHMgXCYjMzQ7JE5TMlwmIzM0OyBcJiMzNDskUlhFX05FV1wmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAhIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDtcJiMzNDsgXCYjMzQ7JFJYRV9BXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO2NsZWFudXBfZGV2c1xuJiM0MztcbiYjNDM7aWYgISBzZXR1cF9kZXZzOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCYjMzQ7XG4mIzQzO2VsaWYgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgICByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9CXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9ORVdcJiMzNDs7IHRoZW5cbiYjNDM7XHRpZiByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9ORVdcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcJiMzNDtcbiYjNDM7XHRlbGlmIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDtcJiMzNDsgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgcmRtYV9kZXZfZXhpc3RzIFwmIzM0O1wmIzM0OyBcJiMzNDskUlhFX05FV1wmIzM0OzsgdGhlblxuJiM0MztcdFx0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwmIzM0O1xuJiM0MztmaVxuJiM0MztjbGVhbnVwX2RldnNcbiYjNDM7XG4mIzQzO2lmICEgc2V0dXBfZGV2czsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTlwmIzM0O1xuJiM0MztlbGlmICEgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfU0FNRVwmIzM0OyB8fFxuJiM0MzsgICAgICEgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQlwmIzM0OyBuZXRucyBcJiMzNDskTlMyXCYjMzQ7IHx8XG4mIzQzOyAgICAgISByZG1hX25zIFwmIzM0OyROUzJcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgfHxcbiYjNDM7ICAgICAhIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMyXCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OzsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTlwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0aXAgbmV0bnMgZGVsIFwmIzM0OyROUzJcJiMzNDtcbiYjNDM7XHRyZXR1cm5lZD0kKHdhaXRfcmRtYV9kZXZfb25fbmV0ZGV2IFwmIzM0OyREVU1NWV9CXCYjMzQ7KVxuJiM0MztcdGt0YXBfcHJpbnRfbXNnIFwmIzM0O2RldmljZSByZXR1cm5lZCB0byBpbml0X25ldCBhcyAmIzM5OyR7cmV0dXJuZWQ6LVx1MDAzY21pc3NpbmdcdTAwM2V9JiMzOTtcJiMzNDtcbiYjNDM7XHRpZiByZG1hX2Rldl9leGlzdHMgXCYjMzQ7XCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICBbIC1uIFwmIzM0OyRyZXR1cm5lZFwmIzM0OyBdIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgIFsgXCYjMzQ7JHJldHVybmVkXCYjMzQ7ICE9IFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBdIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgIFsgXCYjMzQ7JHtyZXR1cm5lZCNpYmRldn1cJiMzNDsgIT0gXCYjMzQ7JHJldHVybmVkXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTlwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTlwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO2ZpXG4mIzQzO2NsZWFudXBfZGV2c1xuJiM0MztcbiYjNDM7a3RhcF9maW5pc2hlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9SRE1BJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfVVNFUl9BQ0NFU1MmIzM0OywKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfcmVzb3VyY2Vfc2V0X21heCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7YWxsb2NfbmFtZV9pZCYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cnhlX21tYXAmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMsIG1vZGlmeWluZyB0aGUgY29yZSBSRE1BIGRldmljZSBuYW1pbmcsIG5ldG5zIGNoYW5nZSBsb2dpYywgYW5kIGNncm91cCByZXNvdXJjZSB0cmFja2luZy4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IHRhYmxlIGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1vdmluZyBSRE1BIGRldmljZXMgYmV0d2VlbiBuYW1lc3BhY2VzLCB0aGUgUkRNQSBjZ3JvdXAgaW50ZXJmYWNlLCBhbmQgdGhlIFJYRSBtbWFwIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRiMjIzMTc1NjFiYjQzNjdkYzVlNmVhZDBmMjk2ZTJkMDczNjFjMzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxNSAwMDo1MjoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbQppbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbQomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20KQEAgLTEyLDYgJiM0MzsxMiwxMCBAQCBEZXNjcmlwdGlvbjogCUludGVyZmFjZSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBSRE1BLWNhYmxlIEhDQXMgaW4gcmVzcGVjdCB0bwogCQlmb3IgdGhpcyBIQ0EgaGFzIHRvIGJlIGNyZWF0ZWQ6CiAJCW1rZGlyIC1wIC9jb25maWcvcmRtYV9jbS8mbHQ7aGNhJmd0OwogCiYjNDM7CQlOb3RlOiBjb25maWdmcyBoYXMgbm8gbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCwgc28gdGhpcwomIzQzOwkJaW50ZXJmYWNlIGNhbm5vdCByZXByZXNlbnQgdHdvIGRldmljZXMgdGhhdCBzaGFyZSBhIG5hbWUgaW4KJiM0MzsJCWRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS4KJiM0MzsKIAogV2hhdDogCQkvY29uZmlnL3JkbWFfY20vJmx0O2hjYSZndDsvcG9ydHMvJmx0O3BvcnQtbnVtJmd0Oy9kZWZhdWx0X3JvY2VfbW9kZQogRGF0ZTogCQlOb3ZlbWJlciAyOSwgMjAxNQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvcmRtYS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9yZG1hLnJzdAppbmRleCBlNjkzNjliNzI1MmVhMy4uOGQwYzNhNzk2ZWUzZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0CkBAIC05MCw2ICYjNDM7OTAsMTMgQEAgRm9sbG93aW5nIHJlc291cmNlcyBjYW4gYmUgYWNjb3VudGVkIGJ5IHJkbWEgY29udHJvbGxlci4KICAgaGNhX29iamVjdCAJTWF4aW11bSBudW1iZXIgb2YgSENBIE9iamVjdHMKICAgPT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiYjNDM7UkRNQSBkZXZpY2VzIGZyb20gYWxsIG5ldHdvcmsgbmFtZXNwYWNlcyBhcmUgbGlzdGVkLiBFYWNoIGxpbmUgc3RhcnRzIHdpdGgKJiM0Mzt0aGUgZGV2aWNlIG5hbWUuIElmIG1vcmUgdGhhbiBvbmUgZGV2aWNlIGhhcyB0aGUgc2FtZSBuYW1lLCBgYGluZGV4PU5gYAomIzQzO2ZvbGxvd3MgdGhlIG5hbWUsIHdoZXJlIGBgTmBgIGlzIHRoZSBzeXN0ZW0td2lkZSBSRE1BIGRldmljZSBpbmRleCwgdW5pcXVlCiYjNDM7YW1vbmcgcmVnaXN0ZXJlZCBkZXZpY2VzLiBXaGVuIGNvbmZpZ3VyaW5nIGEgbGltaXQsIHRoZSBpbmRleCBpcyBvcHRpb25hbAomIzQzO2ZvciBhIGdsb2JhbGx5IHVuaXF1ZSBuYW1lIGFuZCByZXF1aXJlZCBmb3IgYSBkdXBsaWNhdGUgbmFtZS4gQSB3cml0ZSB3aXRob3V0CiYjNDM7dGhlIHJlcXVpcmVkIGluZGV4IGZhaWxzIHdpdGggYGAtRU5PVFVOSVFgYC4KJiM0MzsKIDIuIFVzYWdlIEV4YW1wbGVzCiA9PT09PT09PT09PT09PT09PQogCkBAIC05Nyw2ICYjNDM7MTA0LDcgQEAgRm9sbG93aW5nIHJlc291cmNlcyBjYW4gYmUgYWNjb3VudGVkIGJ5IHJkbWEgY29udHJvbGxlci4KIAogCWVjaG8gbWx4NF8wIGhjYV9oYW5kbGU9MiBoY2Ffb2JqZWN0PTIwMDAgJmd0OyAvc3lzL2ZzL2Nncm91cC9yZG1hLzEvcmRtYS5tYXgKIAllY2hvIG9jcmRtYTEgaGNhX2hhbmRsZT0zICZndDsgL3N5cy9mcy9jZ3JvdXAvcmRtYS8yL3JkbWEubWF4CiYjNDM7CWVjaG8gJiMzNDtyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yJiMzNDsgJmd0OyAvc3lzL2ZzL2Nncm91cC9yZG1hLzMvcmRtYS5tYXgKIAogKGIpIFF1ZXJ5IHJlc291cmNlIGxpbWl0OjoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CmluZGV4IDk5MzQ0NmFiNjZkMGZiLi5kZjc0ZDU1NGQyY2RmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdApAQCAtMjc1Miw2ICYjNDM7Mjc1MiwxMSBAQCBSRE1BCiBUaGUgJiMzNDtyZG1hJiMzNDsgY29udHJvbGxlciByZWd1bGF0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYWNjb3VudGluZyBvZgogUkRNQSByZXNvdXJjZXMuCiAKJiM0MztSRE1BIGRldmljZXMgZnJvbSBhbGwgbmV0d29yayBuYW1lc3BhY2VzIGFyZSBsaXN0ZWQuIEVhY2ggbGluZSBzdGFydHMgd2l0aAomIzQzO3RoZSBkZXZpY2UgbmFtZS4gSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaGFzIHRoZSBzYW1lIG5hbWUsIGBgaW5kZXg9TmBgCiYjNDM7Zm9sbG93cyB0aGUgbmFtZSwgd2hlcmUgYGBOYGAgaXMgdGhlIHN5c3RlbS13aWRlIFJETUEgZGV2aWNlIGluZGV4LCB1bmlxdWUKJiM0MzthbW9uZyByZWdpc3RlcmVkIGRldmljZXMuCiYjNDM7CiBSRE1BIEludGVyZmFjZSBGaWxlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn4KIApAQCAtMjc2MCw3ICYjNDM7Mjc2NSwxMSBAQCBSRE1BIEludGVyZmFjZSBGaWxlcwogCWV4Y2VwdCByb290IHRoYXQgZGVzY3JpYmVzIGN1cnJlbnQgY29uZmlndXJlZCByZXNvdXJjZSBsaW1pdAogCWZvciBhIFJETUEvSUIgZGV2aWNlLgogCi0JTGluZXMgYXJlIGtleWVkIGJ5IGRldmljZSBuYW1lIGFuZCBhcmUgbm90IG9yZGVyZWQuCiYjNDM7CUxpbmVzIGFyZSBrZXllZCBieSBkZXZpY2UgbmFtZSBhbmQgYXJlIG5vdCBvcmRlcmVkLiBBIHdyaXRlIG1heQomIzQzOwlpbmNsdWRlIGBgaW5kZXg9TmBgIGFmdGVyIHRoZSBkZXZpY2UgbmFtZS4gVGhlIGluZGV4IGlzIG9wdGlvbmFsCiYjNDM7CXdoZW4gdGhlIG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVlLiBJZiBtdWx0aXBsZSBkZXZpY2VzIGhhdmUgdGhhdAomIzQzOwluYW1lLCB0aGUgaW5kZXggaXMgcmVxdWlyZWQgYW5kIGEgd3JpdGUgd2l0aG91dCBpdCBmYWlscyB3aXRoCiYjNDM7CWBgLUVOT1RVTklRYGAuCiAJRWFjaCBsaW5lIGNvbnRhaW5zIHNwYWNlIHNlcGFyYXRlZCByZXNvdXJjZSBuYW1lIGFuZCBpdHMgY29uZmlndXJlZAogCWxpbWl0IHRoYXQgY2FuIGJlIGRpc3RyaWJ1dGVkLgogCkBAIC0yNzc2LDYgJiM0MzsyNzg1LDEwIEBAIFJETUEgSW50ZXJmYWNlIEZpbGVzCiAJICBtbHg0XzAgaGNhX2hhbmRsZT0yIGhjYV9vYmplY3Q9MjAwMAogCSAgb2NyZG1hMSBoY2FfaGFuZGxlPTMgaGNhX29iamVjdD1tYXgKIAomIzQzOwlGb3IgZGV2aWNlcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcywgc2VsZWN0IHRoZSBkZXZpY2UgYnkgaW5kZXg6OgomIzQzOwomIzQzOwkgIGVjaG8gJiMzNDtyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yJiMzNDsgJmd0OyByZG1hLm1heAomIzQzOwogICByZG1hLmN1cnJlbnQKIAlBIHJlYWQtb25seSBmaWxlIHRoYXQgZGVzY3JpYmVzIGN1cnJlbnQgcmVzb3VyY2UgdXNhZ2UuCiAJSXQgZXhpc3RzIGZvciBhbGwgdGhlIGNncm91cCBleGNlcHQgcm9vdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmMKaW5kZXggMWYwMzdmZTAxNDUwZWYuLjg2MTFiNGUzMmNmYjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuYwpAQCAtMTcsNiAmIzQzOzE3LDcgQEAKIHZvaWQgaWJfZGV2aWNlX3JlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCiB7CiAJZGV2aWNlLSZndDtjZ19kZXZpY2UubmFtZSA9IGRldmljZS0mZ3Q7bmFtZTsKJiM0MzsJZGV2aWNlLSZndDtjZ19kZXZpY2UuaW5kZXggPSBkZXZpY2UtJmd0O2luZGV4OwogCXJkbWFjZ19yZWdpc3Rlcl9kZXZpY2UoJmFtcDtkZXZpY2UtJmd0O2NnX2RldmljZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmMKaW5kZXggODkxZTUyYWZiOGY0YmEuLmMzODlkNGUzN2I2YmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuYwpAQCAtNjUsNiAmIzQzOzY1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwICp0b19kZXZfcG9ydF9ncm91cChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihncm91cCwgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCwgZ3JvdXApOwogfQogCiYjNDM7LyoKJiM0MzsgKiBjb25maWdmcyBpcyBub3QgbmV0IG5hbWVzcGFjZSBhd2FyZSwgc28gYSBuYW1lIHNoYXJlZCBieSBkZXZpY2VzIGluCiYjNDM7ICogZGlmZmVyZW50IG5hbWVzcGFjZXMgcmVzb2x2ZXMgdG8gdGhlIGZpcnN0IG1hdGNoIGhlcmUuCiYjNDM7ICovCiBzdGF0aWMgYm9vbCBmaWx0ZXJfYnlfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYsIHZvaWQgKmNvb2tpZSkKIHsKIAlyZXR1cm4gIXN0cmNtcChkZXZfbmFtZSgmYW1wO2liX2Rldi0mZ3Q7ZGV2KSwgY29va2llKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmgKaW5kZXggMTkxMDRjNTQyYjI3MGQuLmFhZjMzMGIwZDMzM2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaApAQCAtMzU2LDcgJiM0MzszNTYsOCBAQCB2b2lkIGliX3BvcnRfdW5yZWdpc3Rlcl9jbGllbnRfZ3JvdXBzKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydF9udW0sCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTsKIAogaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQpOwomIzQzOwkJCSAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAogaW50IHJkbWFfbmxfbmV0X2luaXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7CiB2b2lkIHJkbWFfbmxfbmV0X2V4aXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCmluZGV4IGI4MTkzZTA3N2E3NDZmLi40Yzc1MDc4NDQ4YTMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKQEAgLTEyOSw3ICYjNDM7MTI5LDcgQEAgc3RhdGljIERFQ0xBUkVfUldTRU0ocmRtYV9uZXRzX3J3c2VtKTsKIGJvb2wgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMgPSB0cnVlOwogbW9kdWxlX3BhcmFtX25hbWVkKG5ldG5zX21vZGUsIGliX2RldmljZXNfc2hhcmVkX25ldG5zLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobmV0bnNfbW9kZSwKLQkJICYjMzQ7U2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkmIzM0Oyk7CiYjNDM7CQkgJiMzNDtTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKS4gSW4gZXhjbHVzaXZlIG1vZGUgZGV2aWNlIG5hbWVzIGFyZSB1bmlxdWUgcGVyIG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiAvKioKICAqIHJkbWFfZGV2X2FjY2Vzc19uZXRucygpIC0gUmV0dXJuIHdoZXRoZXIgYW4gcmRtYSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkCiAgKgkJCSAgICAgZnJvbSBhIHNwZWNpZmllZCBuZXQgbmFtZXNwYWNlIG9yIG5vdC4KQEAgLTI2OCw3ICYjNDM7MjY4LDggQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpYmRldl9sc21fbmIgPSB7CiB9OwogCiBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCi0JCQkJIHN0cnVjdCBuZXQgKm5ldCk7CiYjNDM7CQkJCSBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lLAomIzQzOwkJCQkgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybik7CiAKIC8qIFBvaW50ZXIgdG8gdGhlIFJDVSBoZWFkIGF0IHRoZSBzdGFydCBvZiB0aGUgaWJfcG9ydF9kYXRhIGFycmF5ICovCiBzdHJ1Y3QgaWJfcG9ydF9kYXRhX3JjdSB7CkBAIC0zNTEsMTMgJiM0MzszNTIsMTUgQEAgdm9pZCBpYl9kZXZpY2VfcHV0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIH0KIEVYUE9SVF9TWU1CT0woaWJfZGV2aWNlX3B1dCk7CiAKLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQomIzQzO3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLAomIzQzOwkJCQkJCSBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGliX2RldmljZSAqZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAKIAl4YV9mb3JfZWFjaCAoJmFtcDtkZXZpY2VzLCBpbmRleCwgZGV2aWNlKQotCQlpZiAoIXN0cmNtcChuYW1lLCBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSkpCiYjNDM7CQlpZiAocmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSkpCiAJCQlyZXR1cm4gZGV2aWNlOwogCiAJcmV0dXJuIE5VTEw7CkBAIC0zOTUsNyAmIzQzOzM5OCw3IEBAIGludCBpYl9kZXZpY2VfcmVuYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKQogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSkpIHsKJiM0MzsJaWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKG5hbWUsIHJkbWFfZGV2X25ldChpYmRldikpKSB7CiAJCXVwX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiAJCXJldHVybiAtRUVYSVNUOwogCX0KQEAgLTQzNSw3ICYjNDM7NDM4LDEzIEBAIGludCBpYl9kZXZpY2Vfc2V0X2RpbShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggdXNlX2RpbSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKQomIzQzOy8qCiYjNDM7ICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAmIzM5OyVkJiMzOTsgc3R5bGUgQG5hbWUgcGF0dGVybiB3aXRoaW4gbmV0IG5hbWVzcGFjZQomIzQzOyAqIEBuZXQuIFJldHVybnMgdGhlIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJuby4gVGhlIGNhbGxlciBidWlsZHMKJiM0MzsgKiB0aGUgZmluYWwgdW5pcXVlIGRldmljZSBuYW1lIGZyb20gdGhlIHJldHVybmVkIGluZGV4LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX19hbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlICpza2lwKQogewogCXN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTsKIAl1bnNpZ25lZCBsb25nIGluZGV4OwpAQCAtNDQ4LDYgJiM0Mzs0NTcsOCBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiAJeGFfZm9yX2VhY2ggKCZhbXA7ZGV2aWNlcywgaW5kZXgsIGRldmljZSkgewogCQljaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdOwogCiYjNDM7CQlpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpCiYjNDM7CQkJY29udGludWU7CiAJCWlmIChzc2NhbmYoZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldiksIG5hbWUsICZhbXA7aSkgIT0gMSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaSAmbHQ7IDAgfHwgaSAmZ3Q7PSBJTlRfTUFYKQpAQCAtNDYyLDE1ICYjNDM7NDczLDI3IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSkKIAl9CiAKIAlyYyA9IGlkYV9hbGxvYygmYW1wO2ludXNlLCBHRlBfS0VSTkVMKTsKLQlpZiAocmMgJmx0OyAwKQotCQlnb3RvIG91dDsKLQotCXJjID0gZGV2X3NldF9uYW1lKCZhbXA7aWJkZXYtJmd0O2RldiwgbmFtZSwgcmMpOwogb3V0OgogCWlkYV9kZXN0cm95KCZhbXA7aW51c2UpOwogCXJldHVybiByYzsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19hbGxvY19uYW1lX2lkKG5ldCwgbmFtZSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWludCBpZDsKJiM0MzsKJiM0MzsJaWQgPSBhbGxvY19uYW1lX2lkKHJkbWFfZGV2X25ldChpYmRldiksIG5hbWUpOwomIzQzOwlpZiAoaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGlkOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2X3NldF9uYW1lKCZhbXA7aWJkZXYtJmd0O2RldiwgbmFtZSwgaWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGliX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpOwpAQCAtMTE1MSw4ICYjNDM7MTE3NCwxNyBAQCBzdGF0aWMgdm9pZCByZG1hX2Rldl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAKIAkJLyoKIAkJICogSWYgdGhlIHJlYWwgZGV2aWNlIGlzIGluIHRoZSBOUyB0aGVuIG1vdmUgaXQgYmFjayB0byBpbml0LgomIzQzOwkJICogUHJvdmlkZSBhIGZhbGxiYWNrIHBhdHRlcm4gc28gYSBuYW1lIGNvbmZsaWN0IGluIGluaXRfbmV0CiYjNDM7CQkgKiBjYW5ub3QgbWFrZSB0aGUgdGVhcmRvd24gbW92ZSBmYWlsLgogCQkgKi8KLQkJcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCAmYW1wO2luaXRfbmV0KTsKJiM0MzsJCWlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoJmFtcDtkZXYtJmd0O2NvcmVkZXYucmRtYV9uZXQpKSkgewomIzQzOwkJCXJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIG5ldCwgJmFtcDtpbml0X25ldCwKJiM0MzsJCQkJCQkgICAgTlVMTCwgJiMzNDtpYmRldiVkJiMzNDspOwomIzQzOwkJCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVOT0RFVikKJiM0MzsJCQkJV0FSTigxLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIG1vdmUgUkRNQSBkZXZpY2UgJXMgdG8gaW5pdF9uZXQgb24gbmV0bnMgZXhpdDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICAgIGRldl9uYW1lKCZhbXA7ZGV2LSZndDtkZXYpLCByZXQpOwomIzQzOwkJfQogCiAJCXB1dF9kZXZpY2UoJmFtcDtkZXYtJmd0O2Rldik7CiAJCWRvd25fcmVhZCgmYW1wO2RldmljZXNfcndzZW0pOwpAQCAtMTIwNiw3ICYjNDM7MTIzOCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByZG1hX2Rldl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB9CiAKIC8qCi0gKiBBc3NpZ24gdGhlIHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUgYW5kIHRoZSB1bmlxdWUgZGV2aWNlIGluZGV4LiBUaGlzIGlzCiYjNDM7ICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhlIGRldmljZQomIzQzOyAqIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgbmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGlzIGFzc2lnbmVkIHRvLiBUaGlzIGlzCiAgKiB1bmRvbmUgYnkgaWJfZGVhbGxvY19kZXZpY2UuCiAgKi8KIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKQpAQCAtMTIyMyw3ICYjNDM7MTI1Niw4IEBAIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKQogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpKSkgewomIzQzOwlpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldiksCiYjNDM7CQkJCSAgICByZG1hX2Rldl9uZXQoZGV2aWNlKSkpIHsKIAkJcmV0ID0gLUVORklMRTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTM4OCw4ICYjNDM7MTQyMiw5IEBAIHN0YXRpYyB2b2lkIGliX2RldmljZV9ub3RpZnlfcmVnaXN0ZXIoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQogLyoqCiAgKiBpYl9yZWdpc3Rlcl9kZXZpY2UgLSBSZWdpc3RlciBhbiBJQiBkZXZpY2Ugd2l0aCBJQiBjb3JlCiAgKiBAZGV2aWNlOiBEZXZpY2UgdG8gcmVnaXN0ZXIKLSAqIEBuYW1lOiB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lLiBUaGlzIG1heSBpbmNsdWRlIGEgJiMzOTslJiMzOTsgd2hpY2ggd2lsbAotICogCSAgY2F1c2UgYSB1bmlxdWUgaW5kZXggdG8gYmUgYWRkZWQgdG8gdGhlIHBhc3NlZCBkZXZpY2UgbmFtZS4KJiM0MzsgKiBAbmFtZTogZGV2aWNlIG5hbWUsIHVuaXF1ZSB3aXRoaW4gdGhlIGRldmljZSYjMzk7cyBuZXQgbmFtZXNwYWNlLiBUaGlzIG1heQomIzQzOyAqCSAgaW5jbHVkZSBhICYjMzk7JSYjMzk7IHdoaWNoIHdpbGwgY2F1c2UgYSB1bmlxdWUgaW5kZXggdG8gYmUgYWRkZWQgdG8gdGhlCiYjNDM7ICoJICBwYXNzZWQgZGV2aWNlIG5hbWUuCiAgKiBAZG1hX2RldmljZTogcG9pbnRlciB0byBhIERNQS1jYXBhYmxlIGRldmljZS4gSWYgJU5VTEwsIHRoZW4gdGhlIElCCiAgKgkgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuIEluIHRoaXMgY2FzZSB0aGUgY2FsbGVyIHNob3VsZCBmdWxseQogICoJCXNldHVwIHRoZSBpYmRldiBmb3IgRE1BLiBUaGlzIHVzdWFsbHkgbWVhbnMgdXNpbmcgZG1hX3ZpcnRfb3BzLgpAQCAtMTY3MCwxNCAmIzQzOzE3MDUsODMgQEAgdm9pZCBpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2KQogfQogRVhQT1JUX1NZTUJPTChpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQpOwogCiYjNDM7c3RhdGljIGJvb2wgcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpza2lwLCBzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaW5kZXg7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtkZXZpY2VzX3J3c2VtKTsKJiM0MzsKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDtkZXZpY2VzLCBpbmRleCwgZGV2aWNlKQomIzQzOwkJaWYgKGRldmljZSAhPSBza2lwICZhbXA7JmFtcDsKJiM0MzsJCSAgICByZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhc3RyY21wKG5hbWUsIGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENob29zZSB0aGUgbmFtZSBAZGV2aWNlIHNob3VsZCB1c2UgaW4gbmV0IG5hbWVzcGFjZSBAbmV0LiBAcmVxdWVzdGVkX25hbWUKJiM0MzsgKiBpcyB1c2VkIGFzIGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSB3aGVuIHNldC4gT3RoZXJ3aXNlIGtlZXAgdGhlIGN1cnJlbnQgbmFtZQomIzQzOyAqIHdoZW4gaXQgaXMgZnJlZSwgb3IgdXNlIGEgdHJ1c3RlZCAmIzM5OyVkJiMzOTsgQGZhbGxiYWNrX3BhdHRlcm4gZm9yIHRlYXJkb3duLiBUaGUKJiM0MzsgKiBjYWxsZXIgbXVzdCBob2xkIHRoZSB3cml0ZSBzaWRlIG9mIGRldmljZXNfcndzZW0uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCSAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSwKJiM0MzsJCQkJICAgIGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4sCiYjNDM7CQkJCSAgICBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAomIzQzOwkJCQkgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKQomIzQzO3sKJiM0MzsJaW50IGlkOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CiYjNDM7CWlmIChyZXF1ZXN0ZWRfbmFtZSkgewomIzQzOwkJaWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSkpIHsKJiM0MzsJCQkqbmV3X25hbWUgPSByZXF1ZXN0ZWRfbmFtZTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldikpKSB7CiYjNDM7CQkqbmV3X25hbWUgPSBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZmFsbGJhY2tfcGF0dGVybikKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwomIzQzOwlzbnByaW50ZihidWYsIGJ1Zl9sZW4sICYjMzQ7aWJkZXYldSYjMzQ7LCBkZXZpY2UtJmd0O2luZGV4KTsKJiM0MzsJaWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCBidWYpKSB7CiYjNDM7CQkqbmV3X25hbWUgPSBidWY7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZCA9IF9fYWxsb2NfbmFtZV9pZChuZXQsIGZhbGxiYWNrX3BhdHRlcm4sIGRldmljZSk7CiYjNDM7CWlmIChpZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gaWQ7CiYjNDM7CXNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgZmFsbGJhY2tfcGF0dGVybiwgaWQpOwomIzQzOwkqbmV3X25hbWUgPSBidWY7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qCiAgKiBUaGUgY2FsbGVyIG11c3QgcGFzcyBpbiBhIGRldmljZSB0aGF0IGhhcyB0aGUga3JlZiBoZWxkIGFuZCB0aGUgcmVmY291bnQKICAqIHJlbGVhc2VkLiBJZiB0aGUgZGV2aWNlIGlzIGluIGN1cl9uZXQgYW5kIHN0aWxsIHJlZ2lzdGVyZWQgdGhlbiBpdCBpcyBtb3ZlZAogICogaW50byBuZXQuCiYjNDM7ICoKJiM0MzsgKiBOYW1pbmcgcnVsZXMgYXJlIGhhbmRsZWQgYnkgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKCkuCiAgKi8KIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCwKLQkJCQkgc3RydWN0IG5ldCAqbmV0KQomIzQzOwkJCQkgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSwKJiM0MzsJCQkJIGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4pCiB7CiYjNDM7CWNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07CiYjNDM7CWNvbnN0IGNoYXIgKm5ld19uYW1lOwogCWludCByZXQyID0gLUVJTlZBTDsKIAlpbnQgcmV0OwogCkBAIC0xNjk0LDMwICYjNDM7MTc5OCw2NSBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwlpZiAoIWZhbGxiYWNrX3BhdHRlcm4pIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZWplY3QgYSBwcmVkaWN0YWJsZSBuYW1lIGNvbmZsaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nCiYjNDM7CQkgKiBkb3duLCBzbyBhIGRvb21lZCB1c2VyIG1vdmUgZG9lcyBub3QgZGlzYWJsZSBhIGxpdmUgZGV2aWNlLgomIzQzOwkJICovCiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CQlyZXQgPSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoZGV2aWNlLCBuZXQsIHJlcXVlc3RlZF9uYW1lLAomIzQzOwkJCQkJICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1ZiwKJiM0MzsJCQkJCSAgICAgICBzaXplb2YoYnVmKSwgJmFtcDtuZXdfbmFtZSk7CiYjNDM7CQl1cF93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCWtvYmplY3RfdWV2ZW50KCZhbXA7ZGV2aWNlLSZndDtkZXYua29iaiwgS09CSl9SRU1PVkUpOwogCWRpc2FibGVfZGV2aWNlKGRldmljZSk7CiAKIAkvKgotCSAqIEF0IHRoaXMgcG9pbnQgbm8gb25lIGNhbiBiZSB1c2luZyB0aGUgZGV2aWNlLCBzbyBpdCBpcyBzYWZlIHRvCi0JICogY2hhbmdlIHRoZSBuYW1lc3BhY2UuCiYjNDM7CSAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtCiYjNDM7CSAqIG5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQsIGNsb3NpbmcgcmFjZXMgd2l0aCBhIGNvbmN1cnJlbnQKJiM0MzsJICogcmVnaXN0cmF0aW9uIG9yIHJlbmFtZSwgdGhlbiBwdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlIGF0IHRoZSBzeXNmcwomIzQzOwkgKiBsZXZlbC4KIAkgKi8KLQl3cml0ZV9wbmV0KCZhbXA7ZGV2aWNlLSZndDtjb3JlZGV2LnJkbWFfbmV0LCBuZXQpOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CXJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsCiYjNDM7CQkJCSAgICAgICBmYWxsYmFja19wYXR0ZXJuLCBidWYsIHNpemVvZihidWYpLAomIzQzOwkJCQkgICAgICAgJmFtcDtuZXdfbmFtZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWlmIChmYWxsYmFja19wYXR0ZXJuKSB7CiYjNDM7CQkJV0FSTigxLAomIzQzOwkJCSAgICAgJiMzNDslczogZmFpbGVkIHRvIHBpY2sgZGV2aWNlIG5hbWUgZHVyaW5nIG5hbWVzcGFjZSB0ZWFyZG93bjogJWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgX19mdW5jX18sIHJldCk7CiYjNDM7CQkJd3JpdGVfcG5ldCgmYW1wO2RldmljZS0mZ3Q7Y29yZWRldi5yZG1hX25ldCwgbmV0KTsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJfQomIzQzOwkJZ290byByZW5hbWVfZG9uZTsKJiM0MzsJfQogCi0JZG93bl9yZWFkKCZhbXA7ZGV2aWNlc19yd3NlbSk7Ci0JLyoKLQkgKiBDdXJyZW50bHkgcmRtYSBkZXZpY2VzIGFyZSBzeXN0ZW0gd2lkZSB1bmlxdWUuIFNvIHRoZSBkZXZpY2UgbmFtZQotCSAqIGlzIGd1YXJhbnRlZWQgZnJlZSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4gUHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZQotCSAqIGF0IHRoZSBzeXNmcyBsZXZlbC4KLQkgKi8KLQlyZXQgPSBkZXZpY2VfcmVuYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYsIGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpKTsKLQl1cF9yZWFkKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CXdyaXRlX3BuZXQoJmFtcDtkZXZpY2UtJmd0O2NvcmVkZXYucmRtYV9uZXQsIG5ldCk7CiYjNDM7CXJldCA9IGRldmljZV9yZW5hbWUoJmFtcDtkZXZpY2UtJmd0O2RldiwgbmV3X25hbWUpOwogCWlmIChyZXQpIHsKLQkJZGV2X3dhcm4oJmFtcDtkZXZpY2UtJmd0O2RldiwKLQkJCSAmIzM0OyVzOiBDb3VsZG4mIzM5O3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXG4mIzM0OywKLQkJCSBfX2Z1bmNfXyk7Ci0JCS8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqLwotCQl3cml0ZV9wbmV0KCZhbXA7ZGV2aWNlLSZndDtjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTsKJiM0MzsJCWlmIChmYWxsYmFja19wYXR0ZXJuKSB7CiYjNDM7CQkJV0FSTigxLAomIzQzOwkJCSAgICAgJiMzNDslczogZmFpbGVkIHRvIHJlbmFtZSBkZXZpY2UgZHVyaW5nIG5hbWVzcGFjZSB0ZWFyZG93bjogJWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgX19mdW5jX18sIHJldCk7CiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZGV2X3dhcm4oJmFtcDtkZXZpY2UtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7JXM6IENvdWxkbiYjMzk7dCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcbiYjMzQ7LAomIzQzOwkJCQkgX19mdW5jX18pOwomIzQzOwkJCS8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqLwomIzQzOwkJCXdyaXRlX3BuZXQoJmFtcDtkZXZpY2UtJmd0O2NvcmVkZXYucmRtYV9uZXQsIGN1cl9uZXQpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJc3Ryc2NweShkZXZpY2UtJmd0O25hbWUsIGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpLAomIzQzOwkJCUlCX0RFVklDRV9OQU1FX01BWCk7CiAJfQomIzQzO3JlbmFtZV9kb25lOgomIzQzOwl1cF93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwogCiAJcmV0MiA9IGVuYWJsZV9kZXZpY2VfYW5kX2dldChkZXZpY2UpOwogCWlmIChyZXQyKSB7CkBAIC0xNzQwLDM2ICYjNDM7MTg3OSw3MiBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCiB9CiAKIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKQomIzQzOwkJCSAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgcmV0OwogCiAJbmV0ID0gZ2V0X25ldF9uc19ieV9mZChuc19mZCk7CiAJaWYgKElTX0VSUihuZXQpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0IG5hbWVzcGFjZSBmZCYjMzQ7KTsKIAkJcmV0ID0gUFRSX0VSUihuZXQpOwogCQlnb3RvIG5ldF9lcnI7CiAJfQogCiAJaWYgKCFuZXRsaW5rX25zX2NhcGFibGUoc2tiLCBuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7TWlzc2luZyBDQVBfTkVUX0FETUlOIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZSYjMzQ7KTsKIAkJcmV0ID0gLUVQRVJNOwogCQlnb3RvIG5zX2VycjsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogTW92aW5nIGEgZGV2aWNlIHRvIHRoZSBuYW1lc3BhY2UgaXQgYWxyZWFkeSBsaXZlcyBpbiBpcyBhIG5vLW9wOyBhCiYjNDM7CSAqIHN1cHBsaWVkIG5hbWUgc3RpbGwgcmVuYW1lcyBpdCBpbiBwbGFjZS4KJiM0MzsJICovCiYjNDM7CWlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoJmFtcDtkZXYtJmd0O2NvcmVkZXYucmRtYV9uZXQpKSkgewomIzQzOwkJcmV0ID0gbmFtZSA/IGliX2RldmljZV9yZW5hbWUoZGV2LCBuYW1lKSA6IDA7CiYjNDM7CiYjNDM7CQlpZiAocmV0ID09IC1FRVhJU1QpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiYjNDM7CQllbHNlIGlmIChyZXQgPT0gLUVJTlZBTCAmYW1wOyZhbXA7IG5hbWUpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtVbmFibGUgdG8gdXNlIHJlcXVlc3RlZCBkZXZpY2UgbmFtZSBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiYjNDM7CQlnb3RvIG5zX2VycjsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogQWxsIHRoZSBpYl9jbGllbnRzLCBpbmNsdWRpbmcgdXZlcmJzLCBhcmUgcmVzZXQgd2hlbiB0aGUgbmFtZXNwYWNlIGlzCiAJICogY2hhbmdlZCBhbmQgdGhpcyBjYW5ub3QgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciB1c2Vyc3BhY2UgdG8gZG8KIAkgKiBzb21ldGhpbmcsIHNvIGRpc2Fzc29jaWF0aW9uIGlzIG1hbmRhdG9yeS4KIAkgKi8KLQlpZiAoIWRldi0mZ3Q7b3BzLmRpc2Fzc29jaWF0ZV91Y29udGV4dCB8fCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykgewomIzQzOwlpZiAoaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtDYW5ub3QgY2hhbmdlIG5ldCBuYW1lc3BhY2Ugb2YgUkRNQSBkZXZpY2UgaW4gc2hhcmVkIG5ldG5zIG1vZGUmIzM0Oyk7CiYjNDM7CQlyZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWdvdG8gbnNfZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7RGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlIGNoYW5nZXMgKG5vIGRpc2Fzc29jaWF0ZSBzdXBwb3J0KSYjMzQ7KTsKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gbnNfZXJyOwogCX0KIAogCWdldF9kZXZpY2UoJmFtcDtkZXYtJmd0O2Rldik7CiAJaWJfZGV2aWNlX3B1dChkZXYpOwotCXJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIGN1cnJlbnQtJmd0O25zcHJveHktJmd0O25ldF9ucywgbmV0KTsKJiM0MzsJcmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC0mZ3Q7bnNwcm94eS0mZ3Q7bmV0X25zLCBuZXQsIG5hbWUsCiYjNDM7CQkJCSAgICBOVUxMKTsKIAlwdXRfZGV2aWNlKCZhbXA7ZGV2LSZndDtkZXYpOwomIzQzOwlpZiAocmV0ID09IC1FRVhJU1QpCiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7RGV2aWNlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlJiMzNDspOwomIzQzOwllbHNlIGlmIChyZXQgPT0gLUVJTlZBTCAmYW1wOyZhbXA7IG5hbWUpCiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7VW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlJiMzNDspOwogCiAJcHV0X25ldChuZXQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYwppbmRleCBhYWU0ZjNmNmJjYmExNC4uNGVmYTM4N2VjMWJlMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYwpAQCAtMTE3OCw2ICYjNDM7MTE3OCwyNCBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7CiYjNDM7CQljaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9OwomIzQzOwkJdTMyIG5zX2ZkOwomIzQzOwomIzQzOwkJaWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0pIHsKJiM0MzsJCQlubGFfc3Ryc2NweShuYW1lLCB0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdLAomIzQzOwkJCQkgICAgSUJfREVWSUNFX05BTUVfTUFYKTsKJiM0MzsJCQlpZiAoc3RybGVuKG5hbWUpID09IDApIHsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBkb25lOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCW5zX2ZkID0gbmxhX2dldF91MzIodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKTsKJiM0MzsJCWVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCwKJiM0MzsJCQkJCSAgICAgIG5hbWVbMF0gPyBuYW1lIDogTlVMTCwgZXh0YWNrKTsKJiM0MzsJCWdvdG8gcHV0X2RvbmU7CiYjNDM7CX0KJiM0MzsKIAlpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkgewogCQljaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9OwogCkBAIC0xMTkxLDE0ICYjNDM7MTIwOSw2IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7Ci0JCXUzMiBuc19mZDsKLQotCQluc19mZCA9IG5sYV9nZXRfdTMyKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSk7Ci0JCWVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCk7Ci0JCWdvdG8gcHV0X2RvbmU7Ci0JfQotCiAJaWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfRElNXSkgewogCQl1OCB1c2VfZGltOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYwppbmRleCA5YWYzMWQxZDlkNzBjNy4uYTgyYzQ2OTY1NDE2YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYwpAQCAtNzAwLDYgJiM0Mzs3MDAsMTIgQEAgaW50IGliX21hZF9hZ2VudF9zZWN1cml0eV9zZXR1cChzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudCwKIAlpZiAocXBfdHlwZSAhPSBJQl9RUFRfU01JKQogCQlyZXR1cm4gMDsKIAomIzQzOwkvKgomIzQzOwkgKiBTRUxpbnV4IGxhYmVscyBhbiBlbmRwb3J0IGJ5IChkZXZpY2UgbmFtZSwgcG9ydCkgZnJvbSBhIGdsb2JhbAomIzQzOwkgKiBwb2xpY3kuIElmIGRldmljZXMgaW4gZGlmZmVyZW50IG5ldCBuYW1lc3BhY2VzIHNoYXJlIGEgbmFtZSwgdGhleSBnZXQKJiM0MzsJICogdGhlIHNhbWUgbGFiZWw7IGRpc3Rpbmd1aXNoaW5nIHRoZW0gd291bGQgbmVlZCBuZXQgbmFtZXNwYWNlIHN1cHBvcnQKJiM0MzsJICogaW4gdGhlIHBvbGljeSBsYW5ndWFnZSBhbmQgdG9vbGluZy4KJiM0MzsJICovCiAJc3Bpbl9sb2NrKCZhbXA7bWFkX2FnZW50X2xpc3RfbG9jayk7CiAJcmV0ID0gc2VjdXJpdHlfaWJfZW5kcG9ydF9tYW5hZ2Vfc3VibmV0KGFnZW50LSZndDtzZWN1cml0eSwKIAkJCQkJCWRldl9uYW1lKCZhbXA7YWdlbnQtJmd0O2RldmljZS0mZ3Q7ZGV2KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYwppbmRleCA3ZjcyM2EyZjM3MDA1OS4uYTRlYWQ4OWNjYmQzNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMKQEAgLTExLDcgJiM0MzsxMSw2IEBACiAKICNpbmNsdWRlICYjMzQ7cnhlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtyeGVfbG9jLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtyeGVfcXVldWUuaCYjMzQ7CiAKIHZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQogewpAQCAtMzAsMjkgJiM0MzsyOSw2IEBAIHZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQogCWtmcmVlKGlwKTsKIH0KIAotLyoKLSAqIG9wZW4gYW5kIGNsb3NlIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgdGltZXMgdGhlIG1lbW9yeSByZWdpb24gaXMgbWFwcGVkLAotICogdG8gYXZvaWQgcmVsZWFzaW5nIGl0LgotICovCi1zdGF0aWMgdm9pZCByeGVfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwID0gdm1hLSZndDt2bV9wcml2YXRlX2RhdGE7Ci0KLQlrcmVmX2dldCgmYW1wO2lwLSZndDtyZWYpOwotfQotCi1zdGF0aWMgdm9pZCByeGVfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhOwotCi0Ja3JlZl9wdXQoJmFtcDtpcC0mZ3Q7cmVmLCByeGVfbW1hcF9yZWxlYXNlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCByeGVfdm1fb3BzID0gewotCS5vcGVuID0gcnhlX3ZtYV9vcGVuLAotCS5jbG9zZSA9IHJ4ZV92bWFfY2xvc2UsCi19OwotCiAvKioKICAqIHJ4ZV9tbWFwIC0gY3JlYXRlIGEgbmV3IG1tYXAgcmVnaW9uCiAgKiBAY29udGV4dDogdGhlIElCIHVzZXIgY29udGV4dCBvZiB0aGUgcHJvY2VzcyBtYWtpbmcgdGhlIG1tYXAoKSBjYWxsCkBAIC0xMDYsMTcgJiM0Mzs4MiwxMCBAQCBpbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlsaXN0X2RlbF9pbml0KCZhbXA7aXAtJmd0O3BlbmRpbmdfbW1hcHMpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7cnhlLSZndDtwZW5kaW5nX2xvY2spOwogCi0Jdm1hLSZndDt2bV9vcHMgPSAmYW1wO3J4ZV92bV9vcHM7Ci0Jdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBpcDsKLQogCXJldCA9IHJlbWFwX3ZtYWxsb2NfcmFuZ2Uodm1hLCBpcC0mZ3Q7b2JqLCAwKTsKLQlpZiAocmV0KSB7Ci0JCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gTlVMTDsKLQkJdm1hLSZndDt2bV9vcHMgPSBOVUxMOwotCQlrcmVmX3B1dCgmYW1wO2lwLSZndDtyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpOwomIzQzOwlrcmVmX3B1dCgmYW1wO2lwLSZndDtyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpOwomIzQzOwlpZiAocmV0KQogCQlyeGVfZGJnX2RldihyeGUsICYjMzQ7ZXJyICVkIGZyb20gcmVtYXBfdm1hbGxvY19yYW5nZVxuJiMzNDssIHJldCk7Ci0JCWdvdG8gZG9uZTsKLQl9CiAKIGRvbmU6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jCmluZGV4IDFlYzEzMGZlZThlYTdhLi42ZWIxMGQyZjA2NTNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jCkBAIC0yNDAsNiAmIzQzOzI0MCwxMCBAQCBzdGF0aWMgdm9pZCByeGVfZGVhbGxvY191Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmlidWMpCiAJCXJ4ZV9lcnJfdWModWMsICYjMzQ7Y2xlYW51cCBmYWlsZWQsIGVyciA9ICVkXG4mIzM0OywgZXJyKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ4ZV9kaXNhc3NvY2lhdGVfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiAvKiBwZCAqLwogc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogewpAQCAtMTQ3OCw2ICYjNDM7MTQ4Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyByeGVfZGV2X29wcyA9IHsKIAkuZGVzdHJveV9zcnEgPSByeGVfZGVzdHJveV9zcnEsCiAJLmRldGFjaF9tY2FzdCA9IHJ4ZV9kZXRhY2hfbWNhc3QsCiAJLmRldmljZV9ncm91cCA9ICZhbXA7cnhlX2F0dHJfZ3JvdXAsCiYjNDM7CS5kaXNhc3NvY2lhdGVfdWNvbnRleHQgPSByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0LAogCS5lbmFibGVfZHJpdmVyID0gcnhlX2VuYWJsZV9kcml2ZXIsCiAJLmdldF9kbWFfbXIgPSByeGVfZ2V0X2RtYV9tciwKIAkuZ2V0X2h3X3N0YXRzID0gcnhlX2liX2dldF9od19zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKaW5kZXggMGNhZWJiYzI4MTBmZjMuLjJmYzhlMTMzYzcwZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtMzE4OSwxMCAmIzQzOzMxODksMjQgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNycF9jbGFzc19hdHRyc1tdOwogCiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7CiAKJiM0MzsvKgomIzQzOyAqIFNSUCBob3N0cyBhcmUgbmFtZWQgYWZ0ZXIgdGhlaXIgaWIgZGV2aWNlLCBzbyB0YWcgdGhlIGNsYXNzIGJ5IHRoZSBpYgomIzQzOyAqIGRldmljZSYjMzk7cyBuZXQgbmFtZXNwYWNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGRldik7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHJkbWFfZGV2X25ldChob3N0LSZndDtzcnBfZGV2LSZndDtkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gbmV0ID8gdG9fbnNfY29tbW9uKG5ldCkgOiBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgc3JwX2NsYXNzID0gewogCS5uYW1lICAgID0gJiMzNDtpbmZpbmliYW5kX3NycCYjMzQ7LAogCS5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3VwcywKLQkuZGV2X3JlbGVhc2UgPSBzcnBfcmVsZWFzZV9kZXYKJiM0MzsJLmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2LAomIzQzOwkubnNfdHlwZSA9ICZhbXA7bmV0X25zX3R5cGVfb3BlcmF0aW9ucywKJiM0MzsJLm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgKaW5kZXggNDA0ZTc0NjU1MmNhOGYuLjlhNWM5ZWU3MjhlN2RmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oCkBAIC0zNCw2ICYjNDM7MzQsNyBAQCBzdHJ1Y3QgcmRtYWNnX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlkZXZfbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXJwb29sczsKIAljaGFyCQkJKm5hbWU7CiYjNDM7CXUzMgkJCWluZGV4OwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmgKaW5kZXggM2FmOTQ2ZWNiYWMzZWQuLmVlMTFjM2JiYmFlMjJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaApAQCAtNTE2LDcgJiM0Mzs1MTYsMTAgQEAgZW51bSByZG1hX25sZGV2X2F0dHIgewogCVJETUFfTkxERVZfQVRUUl9ERVZfUFJPVE9DT0wsCQkvKiBzdHJpbmcgKi8KIAogCS8qCi0JICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3QKJiM0MzsJICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3QuIE1heSBiZSBjb21iaW5lZAomIzQzOwkgKiB3aXRoIFJETUFfTkxERVZfQVRUUl9ERVZfTkFNRSAoYSBsaXRlcmFsIGRldmljZSBuYW1lKSB0byBhbHNvIHJlbmFtZQomIzQzOwkgKiB0aGUgZGV2aWNlIGluIHRoZSBkZXN0aW5hdGlvbiBuYW1lc3BhY2U7IHRoZSBtb3ZlIGZhaWxzIHdpdGggLUVFWElTVAomIzQzOwkgKiBpZiB0aGF0IG5hbWUgaXMgYWxyZWFkeSB0YWtlbiB0aGVyZS4KIAkgKi8KIAlSRE1BX05MREVWX05FVF9OU19GRCwJCQkvKiB1MzIgKi8KIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9yZG1hLmMgYi9rZXJuZWwvY2dyb3VwL3JkbWEuYwppbmRleCA1ZTgyYTAzYjMyNzBhZC4uOTQ4OWYzZGYwYmYzZmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jCkBAIC0xOSw2ICYjNDM7MTksNyBAQAogI2RlZmluZSBSRE1BQ0dfTUFYX1NUUiAmIzM0O21heCYjMzQ7CiAKIGVudW0gcmRtYWNnX2xpbWl0X3Rva2VucyB7CiYjNDM7CVJETUFDR19ERVZJQ0VfSU5ERVgsCiAJUkRNQUNHX0hDQV9IQU5ETEVfVkFMLAogCVJETUFDR19IQ0FfSEFORExFX01BWCwKIAlSRE1BQ0dfSENBX09CSkVDVF9WQUwsCkBAIC0yNyw2ICYjNDM7MjgsNyBAQCBlbnVtIHJkbWFjZ19saW1pdF90b2tlbnMgewogfTsKIAogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgcmRtYWNnX2xpbWl0X3Rva2VucyA9IHsKJiM0MzsJeyBSRE1BQ0dfREVWSUNFX0lOREVYLAkJJiMzNDtpbmRleD0ldSYjMzQ7CX0sCiAJeyBSRE1BQ0dfSENBX0hBTkRMRV9WQUwsCSYjMzQ7aGNhX2hhbmRsZT0lZCYjMzQ7CX0sCiAJeyBSRE1BQ0dfSENBX0hBTkRMRV9NQVgsCSYjMzQ7aGNhX2hhbmRsZT1tYXgmIzM0Owl9LAogCXsgUkRNQUNHX0hDQV9PQkpFQ1RfVkFMLAkmIzM0O2hjYV9vYmplY3Q9JWQmIzM0Owl9LApAQCAtNDY0LDE3ICYjNDM7NDY2LDUzIEBAIHZvaWQgcmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpCiB9CiBFWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7c3RhdGljIHN0cnVjdCByZG1hY2dfZGV2aWNlICoKJiM0MztyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBoYXNfaW5kZXgsIHUzMiBpbmRleCkKIHsKJiM0MzsJc3RydWN0IHJkbWFjZ19kZXZpY2UgKm1hdGNoID0gTlVMTDsKIAlzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkbWFjZ19tdXRleCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpCi0JCWlmICghc3RyY21wKG5hbWUsIGRldmljZS0mZ3Q7bmFtZSkpCi0JCQlyZXR1cm4gZGV2aWNlOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHsKJiM0MzsJCWlmIChzdHJjbXAobmFtZSwgZGV2aWNlLSZndDtuYW1lKSkKJiM0MzsJCQljb250aW51ZTsKIAotCXJldHVybiBOVUxMOwomIzQzOwkJaWYgKGhhc19pbmRleCkgewomIzQzOwkJCWlmIChkZXZpY2UtJmd0O2luZGV4ID09IGluZGV4KQomIzQzOwkJCQlyZXR1cm4gZGV2aWNlOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1hdGNoKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FTk9UVU5JUSk7CiYjNDM7CQltYXRjaCA9IGRldmljZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbWF0Y2ggPzogRVJSX1BUUigtRU5PREVWKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wKJiM0MztyZG1hY2dfZGV2aWNlX25hbWVfdW5pcXVlX2xvY2tlZChjb25zdCBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJkbWFjZ19kZXZpY2UgKm90aGVyOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cmRtYWNnX211dGV4KTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpCiYjNDM7CQlpZiAob3RoZXIgIT0gZGV2aWNlICZhbXA7JmFtcDsgIXN0cmNtcChvdGhlci0mZ3Q7bmFtZSwgZGV2aWNlLSZndDtuYW1lKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZG1hY2dfcHJpbnRfZGV2aWNlX2tleShzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLAomIzQzOwkJCQkgICAgY29uc3Qgc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXNlcV9wdXRzKHNmLCBkZXZpY2UtJmd0O25hbWUpOwomIzQzOwlpZiAoIXJkbWFjZ19kZXZpY2VfbmFtZV91bmlxdWVfbG9ja2VkKGRldmljZSkpCiYjNDM7CQlzZXFfcHJpbnRmKHNmLCAmIzM0OyBpbmRleD0ldSYjMzQ7LCBkZXZpY2UtJmd0O2luZGV4KTsKJiM0MzsJc2VxX3B1dGMoc2YsICYjMzk7ICYjMzk7KTsKIH0KIAogc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLApAQCAtNDg4LDYgJiM0Mzs1MjYsOCBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCiAJY2hhciAqcDsKIAlpbnQgKm5ld19saW1pdHM7CiAJdW5zaWduZWQgbG9uZyBlbmFibGVzID0gMDsKJiM0MzsJdTMyIGRldl9pbmRleCA9IDA7CiYjNDM7CWJvb2wgaGFzX2luZGV4ID0gZmFsc2U7CiAJaW50IGkgPSAwLCByZXQgPSAwOwogCiAJLyogZXh0cmFjdCB0aGUgZGV2aWNlIG5hbWUgZmlyc3QgKi8KQEAgLTUwMyw3ICYjNDM7NTQzLDcgQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLAogCQlnb3RvIGVycjsKIAl9CiAKLQkvKiBwYXJzZSByZXNvdXJjZSBsaW1pdCB0b2tlbnMgKi8KJiM0MzsJLyogcGFyc2UgdGhlIG9wdGlvbmFsIGRldmljZSBpbmRleCBhbmQgcmVzb3VyY2UgbGltaXQgdG9rZW5zICovCiAJd2hpbGUgKChwID0gc3Ryc2VwKCZhbXA7b3B0aW9ucywgJiMzNDsgXHRcbiYjMzQ7KSkpIHsKIAkJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwogCQlpbnQgdG9rLCBpbnR2YWw7CkBAIC01MTMsNiAmIzQzOzU1MywxMyBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCiAKIAkJdG9rID0gbWF0Y2hfdG9rZW4ocCwgcmRtYWNnX2xpbWl0X3Rva2VucywgYXJncyk7CiAJCXN3aXRjaCAodG9rKSB7CiYjNDM7CQljYXNlIFJETUFDR19ERVZJQ0VfSU5ERVg6CiYjNDM7CQkJaWYgKGhhc19pbmRleCB8fCBtYXRjaF91aW50KCZhbXA7YXJnc1swXSwgJmFtcDtkZXZfaW5kZXgpKSB7CiYjNDM7CQkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gcGFyc2VfZXJyOwomIzQzOwkJCX0KJiM0MzsJCQloYXNfaW5kZXggPSB0cnVlOwomIzQzOwkJCWJyZWFrOwogCQljYXNlIFJETUFDR19IQ0FfSEFORExFX1ZBTDoKIAkJCWlmIChtYXRjaF9pbnQoJmFtcDthcmdzWzBdLCAmYW1wO2ludHZhbCkgfHwgaW50dmFsICZsdDsgMCkgewogCQkJCXJldCA9IC1FSU5WQUw7CkBAIC01NDYsOSAmIzQzOzU5Myw5IEBAIHN0YXRpYyBzc2l6ZV90IHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwKIAkvKiBhY3F1aXJlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBob3QgcGx1ZyBkZXZpY2VzICovCiAJbXV0ZXhfbG9jaygmYW1wO3JkbWFjZ19tdXRleCk7CiAKLQlkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUpOwotCWlmICghZGV2aWNlKSB7Ci0JCXJldCA9IC1FTk9ERVY7CiYjNDM7CWRldmljZSA9IHJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChkZXZfbmFtZSwgaGFzX2luZGV4LCBkZXZfaW5kZXgpOwomIzQzOwlpZiAoSVNfRVJSKGRldmljZSkpIHsKJiM0MzsJCXJldCA9IFBUUl9FUlIoZGV2aWNlKTsKIAkJZ290byBkZXZfZXJyOwogCX0KIApAQCAtNjI2LDcgJiM0Mzs2NzMsNyBAQCBzdGF0aWMgaW50IHJkbWFjZ19yZXNvdXJjZV9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiAJbXV0ZXhfbG9jaygmYW1wO3JkbWFjZ19tdXRleCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHsKLQkJc2VxX3ByaW50ZihzZiwgJiMzNDslcyAmIzM0OywgZGV2aWNlLSZndDtuYW1lKTsKJiM0MzsJCXJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpOwogCiAJCXJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7CiAJCXByaW50X3Jwb29sX3ZhbHVlcyhzZiwgcnBvb2wpOwpAQCAtNjUwLDcgJiM0Mzs2OTcsNyBAQCBzdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KQogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCAmYW1wO3JkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkgewogCQlycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpOwogCi0JCXNlcV9wcmludGYoc2YsICYjMzQ7JXMgJiMzNDssIGRldmljZS0mZ3Q7bmFtZSk7CiYjNDM7CQlyZG1hY2dfcHJpbnRfZGV2aWNlX2tleShzZiwgZGV2aWNlKTsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IFJETUFDR19SRVNPVVJDRV9NQVg7IGkmIzQzOyYjNDM7KSB7CiAJCQlzZXFfcHJpbnRmKHNmLCAmIzM0OyVzLm1heD0lbGx1ICVzLmFsbG9jX2ZhaWw9JWxsdSYjMzQ7LAogCQkJCSAgIHJkbWFjZ19yZXNvdXJjZV9uYW1lc1tpXSwKQEAgLTY3OSw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdikKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHsKIAkJcnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTsKIAotCQlzZXFfcHJpbnRmKHNmLCAmIzM0OyVzICYjMzQ7LCBkZXZpY2UtJmd0O25hbWUpOwomIzQzOwkJcmRtYWNnX3ByaW50X2RldmljZV9rZXkoc2YsIGRldmljZSk7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBSRE1BQ0dfUkVTT1VSQ0VfTUFYOyBpJiM0MzsmIzQzOykgewogCQkJc2VxX3ByaW50ZihzZiwgJiMzNDslcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHUmIzM0OywKIAkJCQkgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19wbmV0LmMgYi9uZXQvc21jL3NtY19wbmV0LmMKaW5kZXggNjNlMjg2ZTJkZmFhOGQuLmZmOWM5YzM1Y2MyZjViIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19wbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfcG5ldC5jCkBAIC0zMDQsMTMgJiM0MzszMDQsMTggQEAgc3RhdGljIGJvb2wgc21jX3BuZXRpZF92YWxpZChjb25zdCBjaGFyICpwbmV0X25hbWUsIGNoYXIgKnBuZXRpZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogRmluZCBhbiBpbmZpbmliYW5kIGRldmljZSBieSBhIGdpdmVuIG5hbWUuIFRoZSBkZXZpY2UgbWlnaHQgbm90IGV4aXN0LiAqLwotc3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKGNoYXIgKmliX25hbWUpCiYjNDM7LyoKJiM0MzsgKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZSwgcmVzdHJpY3RlZCB0byB0aGUgZGV2aWNlcwomIzQzOyAqIGFjY2Vzc2libGUgZnJvbSBAbmV0LiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppYl9uYW1lKQogewogCXN0cnVjdCBzbWNfaWJfZGV2aWNlICppYmRldjsKIAogCW11dGV4X2xvY2soJmFtcDtzbWNfaWJfZGV2aWNlcy5tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpYmRldiwgJmFtcDtzbWNfaWJfZGV2aWNlcy5saXN0LCBsaXN0KSB7CiYjNDM7CQlpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhpYmRldi0mZ3Q7aWJkZXYsIG5ldCkpCiYjNDM7CQkJY29udGludWU7CiAJCWlmICghc3RybmNtcChpYmRldi0mZ3Q7aWJkZXYtJmd0O25hbWUsIGliX25hbWUsCiAJCQkgICAgIHNpemVvZihpYmRldi0mZ3Q7aWJkZXYtJmd0O25hbWUpKSB8fAogCQkgICAgKGliZGV2LSZndDtpYmRldi0mZ3Q7ZGV2LnBhcmVudCAmYW1wOyZhbXA7CkBAIC00MDgsOCAmIzQzOzQxMyw4IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2V0aChzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLAotCQkJICAgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKQomIzQzO3N0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2liKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIHN0cnVjdCBuZXQgKm5ldCwKJiM0MzsJCQkgICBjaGFyICppYl9uYW1lLCB1OCBpYl9wb3J0LCBjaGFyICpwbmV0X25hbWUpCiB7CiAJc3RydWN0IHNtY19wbmV0ZW50cnkgKnRtcF9wZSwgKm5ld19wZTsKIAlzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJfZGV2OwpAQCAtNDE5LDcgJiM0Mzs0MjQsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLAogCWJvb2wgbmV3X2liZGV2OwogCiAJLyogdHJ5IHRvIGFwcGx5IHRoZSBwbmV0aWQgdG8gYWN0aXZlIGRldmljZXMgKi8KLQlpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKGliX25hbWUpOwomIzQzOwlpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKG5ldCwgaWJfbmFtZSk7CiAJaWYgKGliX2RldikgewogCQlpYmRldl9hcHBsaWVkID0gc21jX3BuZXRfYXBwbHlfaWIoaWJfZGV2LCBpYl9wb3J0LCBwbmV0X25hbWUpOwogCQlpZiAoaWJkZXZfYXBwbGllZCkKQEAgLTUxOCw3ICYjNDM7NTIzLDcgQEAgc3RhdGljIGludCBzbWNfcG5ldF9lbnRlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10pCiAJCQlpZiAoaWJwb3J0ICZsdDsgMSB8fCBpYnBvcnQgJmd0OyBTTUNfTUFYX1BPUlRTKQogCQkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJcmMgPSBzbWNfcG5ldF9hZGRfaWIocG5ldHRhYmxlLCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTsKJiM0MzsJCXJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgbmV0LCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTsKIAkJaWYgKCFyYykKIAkJCW5ld19pYmRldiA9IHRydWU7CiAJCWVsc2UgaWYgKHJjICE9IC1FRVhJU1QpCkBAIC0xMTcwLDYgJiM0MzsxMTc1LDkgQEAgaW50IHNtY19wbmV0aWRfYnlfdGFibGVfaWIoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYl9wb3J0KQogCXN0cnVjdCBzbWNfbmV0ICpzbjsKIAlpbnQgcmMgPSAtRU5PRU5UOwogCiYjNDM7CWlmICghcmRtYV9kZXZfYWNjZXNzX25ldG5zKHNtY2liZGV2LSZndDtpYmRldiwgJmFtcDtpbml0X25ldCkpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKIAkvKiBnZXQgcG5ldHRhYmxlIGZvciBpbml0IG5hbWVzcGFjZSAqLwogCXNuID0gbmV0X2dlbmVyaWMoJmFtcDtpbml0X25ldCwgc21jX25ldF9pZCk7CiAJcG5ldHRhYmxlID0gJmFtcDtzbi0mZ3Q7cG5ldHRhYmxlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUKaW5kZXggMDdhZjdmMTVjMWJmNzQuLmE5MWMxNGM0NTAwNmUzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUKQEAgLTMsNiAmIzQzOzMsNyBAQCBURVNUX1BST0dTIDo9IHJ4ZV9ycGluZ19iZXR3ZWVuX25ldG5zLnNoIFwKIAkJcnhlX2lwdjYuc2ggXAogCQlyeGVfc29ja2V0X3dpdGhfbmV0bnMuc2ggXAogCQlyeGVfdGVzdF9ORVRERVZfVU5SRUdJU1RFUi5zaCBcCi0JCXJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2gKJiM0MzsJCXJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2ggXAomIzQzOwkJcnhlX25ldG5zX25hbWVzLnNoCiAKIGluY2x1ZGUgLi4vbGliLm1rCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnCmluZGV4IDRmZmI4MTRlMjUzYmJkLi5lMWZmNTRlYzBmNTc5MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWcKQEAgLTEsMyAmIzQzOzEsNSBAQAogQ09ORklHX1RVTgogQ09ORklHX1ZFVEgKJiM0MztDT05GSUdfRFVNTVkKJiM0MztDT05GSUdfTkVUX05TCiBDT05GSUdfUkRNQV9SWEUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0ZmFiZjg2YmRmNzllCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2gKQEAgLTAsMCAmIzQzOzEsMjgyIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgRXhlcmNpc2UgUkRNQSBkZXZpY2UgbmFtZSBoYW5kbGluZyBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLgomIzQzOwomIzQzO3NvdXJjZSAmIzM0OyQoZGlybmFtZSAmIzM0OyQwJiMzNDspLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2gmIzM0OwomIzQzOwomIzQzO05BTUVfUFJFRklYPSYjMzQ7cnhlX25ldG5zX25hbWVzXyQkJiMzNDsKJiM0MztORVRERVZfUFJFRklYPSYjMzQ7cnhuJCQmIzM0OwomIzQzO05TMT0mIzM0OyR7TkFNRV9QUkVGSVh9bnMxJiMzNDsKJiM0MztOUzI9JiMzNDske05BTUVfUFJFRklYfW5zMiYjMzQ7CiYjNDM7UlhFX0E9JiMzNDske05BTUVfUFJFRklYfXJ4ZV9hJiMzNDsKJiM0MztSWEVfQj0mIzM0OyR7TkFNRV9QUkVGSVh9cnhlX2ImIzM0OwomIzQzO1JYRV9TQU1FPSYjMzQ7JHtOQU1FX1BSRUZJWH1yeGVfc2FtZSYjMzQ7CiYjNDM7UlhFX05FVz0mIzM0OyR7TkFNRV9QUkVGSVh9cnhlX25ldyYjMzQ7CiYjNDM7RFVNTVlfQT0mIzM0OyR7TkVUREVWX1BSRUZJWH1hJiMzNDsKJiM0MztEVU1NWV9CPSYjMzQ7JHtORVRERVZfUFJFRklYfWImIzM0OwomIzQzO09MRF9NT0RFPSYjMzQ7JiMzNDsKJiM0MztNT0RFX0NIQU5HRUQ9MAomIzQzO01PRFM9KCYjMzQ7ZHVtbXkmIzM0OyAmIzM0O3JkbWFfcnhlJiMzNDspCiYjNDM7VEVTVF9TQU1FX05BTUVTPSYjMzQ7c2FtZSBSRE1BIGRldmljZSBuYW1lIGNhbiBleGlzdCBpbiB0d28gbmV0IG5hbWVzcGFjZXMmIzM0OwomIzQzO1RFU1RfTU9WRV9DT05GTElDVD0mIzM0O21vdmUgd2l0aG91dCByZW5hbWUgZmFpbHMgb24gZGVzdGluYXRpb24gbmFtZSBjb25mbGljdCYjMzQ7CiYjNDM7VEVTVF9NT1ZFX1JFTkFNRT0mIzM0O21vdmUgdGhlbiByZW5hbWUgc3VjY2VlZHMmIzM0OwomIzQzO1RFU1RfQ09NQklORURfTU9WRV9SRU5BTUU9JiMzNDttb3ZlIHdpdGggcmVxdWVzdGVkIGRlc3RpbmF0aW9uIG5hbWUgc3VjY2VlZHMmIzM0OwomIzQzO1RFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FPSYjMzQ7c2FtZS1uZXRucyByZW5hbWUgcmVqZWN0cyBkdXBsaWNhdGUgbmFtZSYjMzQ7CiYjNDM7VEVTVF9URUFSRE9XTl9SRVRVUk49JiMzNDtuZXRucyBkZWxldGUgcmV0dXJucyBkZXZpY2UgdG8gaW5pdF9uZXQgYW5kIHJlbmFtZXMgb24gY29uZmxpY3QmIzM0OwomIzQzOwomIzQzO2tzZnRfc2tpcCgpCiYjNDM7ewomIzQzOwlrdGFwX3NraXBfYWxsICYjMzQ7JComIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2ZhaWwoKQomIzQzO3sKJiM0MzsJa3RhcF9leGl0X2ZhaWxfbXNnICYjMzQ7JComIzM0OwomIzQzO30KJiM0MzsKJiM0MztuZWVkX2NtZCgpCiYjNDM7ewomIzQzOwljb21tYW5kIC12ICYjMzQ7JDEmIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxIHx8IGtzZnRfc2tpcCAmIzM0O21pc3NpbmcgY29tbWFuZDogJDEmIzM0OwomIzQzO30KJiM0MzsKJiM0MztyZG1hX25zKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSQxCiYjNDM7CiYjNDM7CXNoaWZ0CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMmIzM0OyByZG1hICYjMzQ7JEAmIzM0OwomIzQzO30KJiM0MzsKJiM0MztyZG1hX2Rldl9leGlzdHMoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JDEKJiM0MzsJbG9jYWwgZGV2PSQyCiYjNDM7CiYjNDM7CWlmIFsgLW4gJiMzNDskbnMmIzM0OyBdOyB0aGVuCiYjNDM7CQlyZG1hX25zICYjMzQ7JG5zJiMzNDsgZGV2IHNob3cgJiMzNDskZGV2JiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MQomIzQzOwllbHNlCiYjNDM7CQlyZG1hIGRldiBzaG93ICYjMzQ7JGRldiYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7YWRkX2R1bW15KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5ldGRldj0kMQomIzQzOwomIzQzOwlpcCBsaW5rIGFkZCAmIzM0OyRuZXRkZXYmIzM0OyB0eXBlIGR1bW15IHx8IHJldHVybiAxCiYjNDM7CWlwIGxpbmsgc2V0ICYjMzQ7JG5ldGRldiYjMzQ7IHVwIHx8IHJldHVybiAxCiYjNDM7fQomIzQzOwomIzQzO2FkZF9yeGUoKQomIzQzO3sKJiM0MzsJbG9jYWwgZGV2PSQxCiYjNDM7CWxvY2FsIG5ldGRldj0kMgomIzQzOwomIzQzOwlyZG1hIGxpbmsgYWRkICYjMzQ7JGRldiYjMzQ7IHR5cGUgcnhlIG5ldGRldiAmIzM0OyRuZXRkZXYmIzM0OwomIzQzO30KJiM0MzsKJiM0MztyZG1hX2Rldl9vbl9uZXRkZXYoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmV0ZGV2PSQxCiYjNDM7CiYjNDM7CXJkbWEgbGluayBzaG93IDImZ3Q7L2Rldi9udWxsIHwgYXdrIC12IHdhbnQ9JiMzNDskbmV0ZGV2JiMzNDsgJiMzOTsKJiM0MzsJCXsKJiM0MzsJCQlmb3IgKGkgPSAxOyBpICZsdDsgTkY7IGkmIzQzOyYjNDM7KQomIzQzOwkJCQlpZiAoJGkgPT0gJiMzNDtuZXRkZXYmIzM0OyAmYW1wOyZhbXA7ICQoaSAmIzQzOyAxKSA9PSB3YW50KSB7CiYjNDM7CQkJCQlkZXYgPSAkMgomIzQzOwkJCQkJc3ViKC9cLy4qLywgJiMzNDsmIzM0OywgZGV2KQomIzQzOwkJCQkJcHJpbnQgZGV2CiYjNDM7CQkJCQlleGl0CiYjNDM7CQkJCX0KJiM0MzsJCX0mIzM5OwomIzQzO30KJiM0MzsKJiM0Mzt3YWl0X3JkbWFfZGV2X29uX25ldGRldigpCiYjNDM7ewomIzQzOwlsb2NhbCBuZXRkZXY9JDEKJiM0MzsJbG9jYWwgZGV2CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQlkZXY9JChyZG1hX2Rldl9vbl9uZXRkZXYgJiMzNDskbmV0ZGV2JiMzNDspCiYjNDM7CQlpZiBbIC1uICYjMzQ7JGRldiYjMzQ7IF07IHRoZW4KJiM0MzsJCQllY2hvICYjMzQ7JGRldiYjMzQ7CiYjNDM7CQkJcmV0dXJuIDAKJiM0MzsJCWZpCiYjNDM7CQlzbGVlcCAwLjEKJiM0MzsJZG9uZQomIzQzOwomIzQzOwlyZXR1cm4gMQomIzQzO30KJiM0MzsKJiM0MztzZXR1cF9kZXZzKCkKJiM0Mzt7CiYjNDM7CWNsZWFudXBfZGV2cwomIzQzOwomIzQzOwlhZGRfZHVtbXkgJiMzNDskRFVNTVlfQSYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CWFkZF9kdW1teSAmIzM0OyREVU1NWV9CJiMzNDsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJYWRkX3J4ZSAmIzM0OyRSWEVfQSYjMzQ7ICYjMzQ7JERVTU1ZX0EmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlhZGRfcnhlICYjMzQ7JFJYRV9CJiMzNDsgJiMzNDskRFVNTVlfQiYjMzQ7IHx8IHJldHVybiAxCiYjNDM7fQomIzQzOwomIzQzO2NsZWFudXBfZGV2cygpCiYjNDM7ewomIzQzOwlpcCBsaW5rIGRlbCAmIzM0OyREVU1NWV9BJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJaXAgbGluayBkZWwgJiMzNDskRFVNTVlfQiYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7fQomIzQzOwomIzQzO3NldHVwKCkKJiM0Mzt7CiYjNDM7CU9MRF9NT0RFPSQocmRtYSBzeXN0ZW0gc2hvdyAyJmd0Oy9kZXYvbnVsbCB8CiYjNDM7CQkgICBzZWQgLW4gJiMzOTtzLy4qbmV0bnMgXChbXiBdKlwpLiovXDEvcCYjMzk7KQomIzQzOwlbIC1uICYjMzQ7JE9MRF9NT0RFJiMzNDsgXSB8fCBrc2Z0X3NraXAgJiMzNDtmYWlsZWQgdG8gcmVhZCBSRE1BIG5ldG5zIG1vZGUmIzM0OwomIzQzOwomIzQzOwlyZG1hIHN5c3RlbSBzZXQgbmV0bnMgZXhjbHVzaXZlICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgfHwKJiM0MzsJCWtzZnRfc2tpcCAmIzM0O3JkbWEgbmV0bnMgZXhjbHVzaXZlIG1vZGUgaXMgbm90IHN1cHBvcnRlZCYjMzQ7CiYjNDM7CU1PREVfQ0hBTkdFRD0xCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGFkZCAmIzM0OyROUzEmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlpcCBuZXRucyBhZGQgJiMzNDskTlMyJiMzNDsgfHwgcmV0dXJuIDEKJiM0Mzt9CiYjNDM7CiYjNDM7Y2xlYW51cCgpCiYjNDM7ewomIzQzOwljbGVhbnVwX2RldnMKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZGVsICYjMzQ7JE5TMSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWlwIG5ldG5zIGRlbCAmIzM0OyROUzImIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwomIzQzOwlpZiBbICYjMzQ7JE1PREVfQ0hBTkdFRCYjMzQ7IC1lcSAxIF07IHRoZW4KJiM0MzsJCXJkbWEgc3lzdGVtIHNldCBuZXRucyAmIzM0OyRPTERfTU9ERSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWZvciBtIGluICYjMzQ7JHtNT0RTW0BdfSYjMzQ7OyBkbwomIzQzOwkJbW9kcHJvYmUgLXIgJiMzNDskbSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7cmRtYV9zdXBwb3J0c19jb21iaW5lZF9tb3ZlX3JlbmFtZSgpCiYjNDM7ewomIzQzOwlyZG1hIGRldiBoZWxwIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtRXEgJiMzOTtuZXRucyAuKm5hbWV8bmFtZSAuKm5ldG5zJiMzOTsKJiM0Mzt9CiYjNDM7CiYjNDM7WyAmIzM0OyQoaWQgLXUpJiMzNDsgLWVxIDAgXSB8fCBrc2Z0X3NraXAgJiMzNDttdXN0IGJlIHJ1biBhcyByb290JiMzNDsKJiM0MztuZWVkX2NtZCBpcAomIzQzO25lZWRfY21kIHJkbWEKJiM0MztuZWVkX2NtZCBtb2Rwcm9iZQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7Zm9yIG0gaW4gJiMzNDske01PRFNbQF19JiMzNDs7IGRvCiYjNDM7CW1vZGluZm8gJiMzNDskbSYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgfHwga3NmdF9za2lwICYjMzQ7bW9kdWxlICRtIG5vdCBmb3VuZCYjMzQ7CiYjNDM7CW1vZHByb2JlICYjMzQ7JG0mIzM0OyB8fCBmYWlsICYjMzQ7ZmFpbGVkIHRvIGxvYWQgJG0mIzM0OwomIzQzO2RvbmUKJiM0MzsKJiM0MztzZXR1cCB8fCBmYWlsICYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBuZXQgbmFtZXNwYWNlcyYjMzQ7CiYjNDM7CiYjNDM7a3RhcF9wcmludF9oZWFkZXIKJiM0MztrdGFwX3NldF9wbGFuIDYKJiM0MzsKJiM0MztpZiBzZXR1cF9kZXZzICZhbXA7JmFtcDsKJiM0MzsgICByZG1hIGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuZXRucyAmIzM0OyROUzEmIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYV9ucyAmIzM0OyROUzEmIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsgICByZG1hIGRldiBzZXQgJiMzNDskUlhFX0ImIzM0OyBuZXRucyAmIzM0OyROUzImIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYV9ucyAmIzM0OyROUzImIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsgICByZG1hX2Rldl9leGlzdHMgJiMzNDskTlMxJiMzNDsgJiMzNDskUlhFX1NBTUUmIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JE5TMiYjMzQ7ICYjMzQ7JFJYRV9TQU1FJiMzNDs7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X3Bhc3MgJiMzNDskVEVTVF9TQU1FX05BTUVTJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfU0FNRV9OQU1FUyYjMzQ7CiYjNDM7ZmkKJiM0MztjbGVhbnVwX2RldnMKJiM0MzsKJiM0MztpZiAhIHNldHVwX2RldnMgfHwKJiM0MzsgICAhIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQSYjMzQ7IG5ldG5zICYjMzQ7JE5TMSYjMzQ7IHx8CiYjNDM7ICAgISByZG1hX25zICYjMzQ7JE5TMSYjMzQ7IGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuYW1lICYjMzQ7JFJYRV9TQU1FJiMzNDsgfHwKJiM0MzsgICAhIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQiYjMzQ7IG5ldG5zICYjMzQ7JE5TMiYjMzQ7IHx8CiYjNDM7ICAgISByZG1hX25zICYjMzQ7JE5TMiYjMzQ7IGRldiBzZXQgJiMzNDskUlhFX0ImIzM0OyBuYW1lICYjMzQ7JFJYRV9TQU1FJiMzNDs7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUJiMzNDsKJiM0MztlbGlmIHJkbWFfbnMgJiMzNDskTlMxJiMzNDsgZGV2IHNldCAmIzM0OyRSWEVfU0FNRSYjMzQ7IG5ldG5zICYjMzQ7JE5TMiYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzE7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUJiMzNDsKJiM0MztlbGlmIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyROUzEmIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsgICAgIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyROUzImIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7OyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7JFRFU1RfTU9WRV9DT05GTElDVCYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX01PVkVfQ09ORkxJQ1QmIzM0OwomIzQzO2ZpCiYjNDM7Y2xlYW51cF9kZXZzCiYjNDM7CiYjNDM7aWYgISBzZXR1cF9kZXZzOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfTU9WRV9SRU5BTUUmIzM0OwomIzQzO2VsaWYgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmV0bnMgJiMzNDskTlMyJiMzNDsgJmFtcDsmYW1wOwomIzQzOyAgICAgcmRtYV9ucyAmIzM0OyROUzImIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmFtZSAmIzM0OyRSWEVfTkVXJiMzNDs7IHRoZW4KJiM0MzsJaWYgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JE5TMiYjMzQ7ICYjMzQ7JFJYRV9ORVcmIzM0OyAmYW1wOyZhbXA7CiYjNDM7CSAgICEgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JiMzNDsgJiMzNDskUlhFX0EmIzM0OzsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDskVEVTVF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfTU9WRV9SRU5BTUUmIzM0OwomIzQzOwlmaQomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7ZmkKJiM0MztjbGVhbnVwX2RldnMKJiM0MzsKJiM0MztpZiAhIHJkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWU7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X3NraXAgJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7ZWxpZiAhIHNldHVwX2RldnM7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7ZWxpZiByZG1hIGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuZXRucyAmIzM0OyROUzImIzM0OyBuYW1lICYjMzQ7JFJYRV9ORVcmIzM0OzsgdGhlbgomIzQzOwlpZiByZG1hX2Rldl9leGlzdHMgJiMzNDskTlMyJiMzNDsgJiMzNDskUlhFX05FVyYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsJICAgISByZG1hX2Rldl9leGlzdHMgJiMzNDsmIzM0OyAmIzM0OyRSWEVfQSYjMzQ7OyB0aGVuCiYjNDM7CQlrdGFwX3Rlc3RfcGFzcyAmIzM0OyRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FJiMzNDsKJiM0MzsJZWxzZQomIzQzOwkJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7CWZpCiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FJiMzNDsKJiM0MztmaQomIzQzO2NsZWFudXBfZGV2cwomIzQzOwomIzQzO2lmICEgc2V0dXBfZGV2czsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRSYjMzQ7CiYjNDM7ZWxpZiByZG1hIGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuYW1lICYjMzQ7JFJYRV9TQU1FJiMzNDsgJmFtcDsmYW1wOwomIzQzOyAgICAgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmFtZSAmIzM0OyRSWEVfTkVXJiMzNDs7IHRoZW4KJiM0MzsJaWYgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9TQU1FJiMzNDsgbmFtZSAmIzM0OyRSWEVfTkVXJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUUmIzM0OwomIzQzOwllbGlmIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyYjMzQ7ICYjMzQ7JFJYRV9TQU1FJiMzNDsgJmFtcDsmYW1wOwomIzQzOwkgICAgIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyYjMzQ7ICYjMzQ7JFJYRV9ORVcmIzM0OzsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUUmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRSYjMzQ7CiYjNDM7CWZpCiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRSYjMzQ7CiYjNDM7ZmkKJiM0MztjbGVhbnVwX2RldnMKJiM0MzsKJiM0MztpZiAhIHNldHVwX2RldnM7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk4mIzM0OwomIzQzO2VsaWYgISByZG1hIGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuYW1lICYjMzQ7JFJYRV9TQU1FJiMzNDsgfHwKJiM0MzsgICAgICEgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmV0bnMgJiMzNDskTlMyJiMzNDsgfHwKJiM0MzsgICAgICEgcmRtYV9ucyAmIzM0OyROUzImIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7IHx8CiYjNDM7ICAgICAhIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyROUzImIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7OyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfVEVBUkRPV05fUkVUVVJOJiMzNDsKJiM0MztlbHNlCiYjNDM7CWlwIG5ldG5zIGRlbCAmIzM0OyROUzImIzM0OwomIzQzOwlyZXR1cm5lZD0kKHdhaXRfcmRtYV9kZXZfb25fbmV0ZGV2ICYjMzQ7JERVTU1ZX0ImIzM0OykKJiM0MzsJa3RhcF9wcmludF9tc2cgJiMzNDtkZXZpY2UgcmV0dXJuZWQgdG8gaW5pdF9uZXQgYXMgJiMzOTske3JldHVybmVkOi0mbHQ7bWlzc2luZyZndDt9JiMzOTsmIzM0OwomIzQzOwlpZiByZG1hX2Rldl9leGlzdHMgJiMzNDsmIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsJICAgWyAtbiAmIzM0OyRyZXR1cm5lZCYjMzQ7IF0gJmFtcDsmYW1wOwomIzQzOwkgICBbICYjMzQ7JHJldHVybmVkJiMzNDsgIT0gJiMzNDskUlhFX1NBTUUmIzM0OyBdICZhbXA7JmFtcDsKJiM0MzsJICAgWyAmIzM0OyR7cmV0dXJuZWQjaWJkZXZ9JiMzNDsgIT0gJiMzNDskcmV0dXJuZWQmIzM0OyBdOyB0aGVuCiYjNDM7CQlrdGFwX3Rlc3RfcGFzcyAmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTiYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfVEVBUkRPV05fUkVUVVJOJiMzNDsKJiM0MzsJZmkKJiM0MztmaQomIzQzO2NsZWFudXBfZGV2cwomIzQzOwomIzQzO2t0YXBfZmluaXNoZWQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJETUEgRGV2aWNlIE5hbWVzcGFjZSBJc29sYXRpb246IEluaXRpYWwgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRhcmdldGluZyB0aGUgUkRNQSBzdWJzeXN0ZW0uIFRoZSBwcmltYXJ5IGdvYWwgc2VlbXMgdG8gYmUgbmV0d29yayBuYW1lc3BhY2UgaXNvbGF0aW9uIGZvciBSRE1BIGRldmljZSBuYW1lcyDigJMgYSBjcnVjaWFsIGNoYW5nZSBpZiB3ZSB3YW50IHRvIHZpcnR1YWxpemUgdGhlc2UgcmVzb3VyY2VzIHByb3Blcmx5LiBUaGUgZGlmZiB0b3VjaGVzIGEgcHJldHR5IHdpZGUgcmFuZ2Ugb2YgZmlsZXM6IGBkZXZpY2UuY2AsIGBjZ3JvdXAuY2AsIGBubGRldi5jYCwgYHJkbWEuY2Ag4oCTIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIGZlYXR1cmUuIEJ1dCBob2xkIG9uLCBpdCBhbHNvIGRpZ3MgaW50byBgcnhlX21tYXAuY2AgYW5kIGByeGVfdmVyYnMuY2AsIHdoaWNoIG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLgoKTGV0JiMzOTtzIHpvb20gaW4gb24gYHJ4ZV9tbWFwLmNgLiBIbW0sIGl0JiMzOTtzIG1lc3Npbmcgd2l0aCB0aGUgYHZtX29wZXJhdGlvbnNfc3RydWN0YCAoYHJ4ZV92bV9vcHNgKS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSByZW1vdmluZyB0aGUgYG9wZW5gIGFuZCBgY2xvc2VgIGNhbGxiYWNrcyAoYHJ4ZV92bWFfb3BlbmAsIGByeGVfdm1hX2Nsb3NlYCkgYW5kIGRpcmVjdGx5IHVzaW5nIGByZW1hcF92bWFsbG9jX3JhbmdlYC4gVGhhdCYjMzk7cy4uLiBhIGxpdHRsZSBjb25jZXJuaW5nLiBgcmVtYXBfdm1hbGxvY19yYW5nZWAgZG9lc24mIzM5O3QgaW5oZXJlbnRseSBtYW5hZ2UgcmVmY291bnRzLCBzbyB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmU/IFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgcnhlX3ZtYV9vcGVuYCBhbmQgYHJ4ZV92bWFfY2xvc2VgIGluY3JlbWVudGluZyBhbmQgZGVjcmVtZW50aW5nIHRoZSByZWZjb3VudC4gTm93LCBpdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBqdXN0IGltbWVkaWF0ZWx5IHJlbGVhc2VzIHRoZSBga3JlZmAgYWZ0ZXIgdGhlIGByZW1hcF92bWFsbG9jX3JhbmdlYCBjYWxsLiBJcyB0aGlzIGEgYnVnIGZpeD8gQSByZWZhY3RvcmluZz8KCk9rYXksIHRoZSBjb2RlIG5vdyBkb2VzIHRoaXM6IGNhbGwgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgLCB0aGVuIGltbWVkaWF0ZWx5IGBrcmVmX3B1dGAuIFdoeSBpcyB0aGUgYHJ4ZV92bV9vcHNgIHN0cnVjdHVyZSBiZWluZyByZW1vdmVkPyBUaGF0IGhhcyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgVk1BIGNoYW5nZXMgYW5kIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSB3b3JrLiBUaGUgY29tbWl0IG1lc3NhZ2UgZG9lc24mIzM5O3QgaGVscC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHJ4ZV92ZXJicy5jYC4gQWhhISBJdCYjMzk7cyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0YC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgYWRkZWQgdG8gYHJ4ZV9kZXZfb3BzYC4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCBjaGVja3MgZm9yIHRoaXMgY2FsbGJhY2sgdG8gYmUgcHJlc2VudCBiZWZvcmUgbW92aW5nIGEgZGV2aWNlIGJldHdlZW4gbmV0IG5hbWVzcGFjZXMuIFNvLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBkaXNhc3NvY2lhdGVfdWNvbnRleHRgIG1lYW5zIFJYRSBkZXZpY2VzIGNhbiBub3cgYmUgbW92ZWQgYmV0d2VlbiBuZXR3b3JrIG5hbWVzcGFjZXMuCgpUaGUgY29yZSBxdWVzdGlvbiBub3cgaXMsIHdoYXQmIzM5O3MgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgYGRpc2Fzc29jaWF0ZV91Y29udGV4dGAgYWRkaXRpb24gYW5kIHRoZSBjaGFuZ2VzIGluIGByeGVfbW1hcGA/IFRoZSBuZXcgYGRpc2Fzc29jaWF0ZV91Y29udGV4dGAgZnVuY3Rpb24gaXMgZW1wdHkuIElmIGl0JiMzOTtzIGNhbGxlZCwgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gaGFuZGxlIHVubWFwcGluZyBvciBvdGhlcndpc2UgaGFuZGxpbmcgdGhlIHVjb250ZXh0LiBCdXQgaW4gdGhpcyBjYXNlIGl0IGRvZXNuJiMzOTt0LgoKQmFjayB0byB0aGUgYHJ4ZV9tbWFwYCBjaGFuZ2VzOiBpZiB0aGV5JiMzOTtyZSByZW1vdmluZyBgcnhlX3ZtX29wc2AsIHRoZW4gdGhlIFZNQSBpcyAqbm8gbG9uZ2VyKiByZXNwb25zaWJsZSBmb3IgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgYGlwYCBkYXRhLiBUaGF0JiMzOTtzIGEgYmlnIGRlYWwuIEluc3RlYWQsIHRoZSBwYXRjaCBpbW1lZGlhdGVseSByZWxlYXNlcyBgaXBgIGFmdGVyIHRoZSBjYWxsIHRvIGByZW1hcF92bWFsbG9jX3JhbmdlYC4gV2hhdCBrZWVwcyBgaXBgIGFsaXZlIGFmdGVyIHRoYXQ/IFNvbWV0aGluZyAqbXVzdCogc3RpbGwgaG9sZCBhIHJlZmVyZW5jZS4gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBrZXJuZWwgc291cmNlIGZvciBgcnhlX21tYXAuY2AgaW4gZGV0YWlsIHRvIHRyYWNrIGRvd24gd2hhdCBkb2VzIHRoYXQgbm93LiBUaGlzIHJlZmNvdW50aW5nIGNoYW5nZSBoYXMgbWUgd29ycmllZCBhYm91dCBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeGVfbW1hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGU9ND1yZG1hX3J4ZS15IDo9IFxcXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9NYWtlZmlsZS0xOS1cdHJ4ZV9vcGNvZGUubyBcXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9NYWtlZmlsZToyMDpcdHJ4ZV9tbWFwLm8gXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGUtMjEtXHRyeGVfaWNyYy5vIFxcXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmg9Mzc9dm9pZCByeGVfY2xlYW51cF9tY2coc3RydWN0IGtyZWYgKmtyZWYpO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtMzgtXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDozOTovKiByeGVfbW1hcC5jICovXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDo0MDpzdHJ1Y3QgcnhlX21tYXBfaW5mbyB7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC00MS1cdHN0cnVjdCBsaXN0X2hlYWRcdHBlbmRpbmdfbW1hcHM7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtNDgtXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDo0OTp2b2lkIHJ4ZV9tbWFwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZik7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC01MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX2xvYy5oOjUxOnN0cnVjdCByeGVfbW1hcF9pbmZvICpyeGVfY3JlYXRlX21tYXBfaW5mbyhzdHJ1Y3QgcnhlX2RldiAqZGV2LCB1MzIgc2l6ZSxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX2xvYy5oLTUyLVx0XHRcdFx0XHQgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhLCB2b2lkICpvYmopO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtNTMtXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDo1NDppbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC01NS1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMTQtXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmM6MTU6dm9pZCByeGVfbW1hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMTYte1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjE3Olx0c3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwID0gY29udGFpbmVyX29mKHJlZixcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzoxODpcdFx0XHRcdFx0c3RydWN0IHJ4ZV9tbWFwX2luZm8sIHJlZik7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMTktXHRzdHJ1Y3QgcnhlX2RldiAqcnhlID0gdG9fcmRldihpcC1cdTAwM2Vjb250ZXh0LVx1MDAzZWRldmljZSk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTMyLS8qKlxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjMzOiAqIHJ4ZV9tbWFwIC0gY3JlYXRlIGEgbmV3IG1tYXAgcmVnaW9uXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMzQtICogQGNvbnRleHQ6IHRoZSBJQiB1c2VyIGNvbnRleHQgb2YgdGhlIHByb2Nlc3MgbWFraW5nIHRoZSBtbWFwKCkgY2FsbFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0zNy0gKi9cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzozODppbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0zOS17XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTQyLVx0dW5zaWduZWQgbG9uZyBzaXplID0gdm1hLVx1MDAzZXZtX2VuZCAtIHZtYS1cdTAwM2V2bV9zdGFydDtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzo0MzpcdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCwgKnBwO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTQ0LVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtODUtXHRyZXQgPSByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgaXAtXHUwMDNlb2JqLCAwKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzo4NjpcdGtyZWZfcHV0KFx1MDAyNmlwLVx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSk7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtODctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy05NC0vKlxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjk1OiAqIEFsbG9jYXRlIGluZm9ybWF0aW9uIGZvciByeGVfbW1hcFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTk2LSAqL1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjk3OnN0cnVjdCByeGVfbW1hcF9pbmZvICpyeGVfY3JlYXRlX21tYXBfaW5mbyhzdHJ1Y3QgcnhlX2RldiAqcnhlLCB1MzIgc2l6ZSxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy05OC1cdFx0XHRcdFx0ICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgdm9pZCAqb2JqKVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTk5LXtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzoxMDA6XHRzdHJ1Y3QgcnhlX21tYXBfaW5mbyAqaXA7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMTAxLVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmM9MTI9aW50IGRvX21tYXBfaW5mbyhzdHJ1Y3QgcnhlX2RldiAqcnhlLCBzdHJ1Y3QgbW1pbmZvIF9fdXNlciAqb3V0YnVmLFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuYy0xMy1cdFx0IHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsIHN0cnVjdCByeGVfcXVldWVfYnVmICpidWYsXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jOjE0Olx0XHQgc2l6ZV90IGJ1Zl9zaXplLCBzdHJ1Y3QgcnhlX21tYXBfaW5mbyAqKmlwX3ApXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jLTE1LXtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmMtMTYtXHRpbnQgZXJyO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuYzoxNzpcdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IE5VTEw7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jLTE4LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmM9MTkzPXZvaWQgcnhlX3F1ZXVlX2NsZWFudXAoc3RydWN0IHJ4ZV9xdWV1ZSAqcSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jLTE5NS1cdGlmIChxLVx1MDAzZWlwKVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuYzoxOTY6XHRcdGtyZWZfcHV0KFx1MDAyNnEtXHUwMDNlaXAtXHUwMDNlcmVmLCByeGVfbW1hcF9yZWxlYXNlKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmMtMTk3LVx0ZWxzZVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmg9NjI9c3RydWN0IHJ4ZV9xdWV1ZSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaC02NC1cdHN0cnVjdCByeGVfcXVldWVfYnVmXHQqYnVmO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaDo2NTpcdHN0cnVjdCByeGVfbW1hcF9pbmZvXHQqaXA7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5oLTY2LVx0c2l6ZV90XHRcdFx0YnVmX3NpemU7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaD03OT1pbnQgZG9fbW1hcF9pbmZvKHN0cnVjdCByeGVfZGV2ICpyeGUsIHN0cnVjdCBtbWluZm8gX191c2VyICpvdXRidWYsXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5oLTgwLVx0XHQgc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgc3RydWN0IHJ4ZV9xdWV1ZV9idWYgKmJ1ZixcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmg6ODE6XHRcdCBzaXplX3QgYnVmX3NpemUsIHN0cnVjdCByeGVfbW1hcF9pbmZvICoqaXBfcCk7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5oLTgyLVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmM9MTQ1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGliX2RldmljZV9vcHMgcnhlX2Rldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYy0xNDkxLVx0Lm1hcF9tcl9zZyA9IHJ4ZV9tYXBfbXJfc2csXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jOjE0OTI6XHQubW1hcCA9IHJ4ZV9tbWFwLFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYy0xNDkzLVx0Lm1vZGlmeV9haCA9IHJ4ZV9tb2RpZnlfYWgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcnhlX21tYXAuY2AgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyBpbiBgcnhlX21tYXAuY2AuIFRoZXkmIzM5O3ZlIGdvdCB0aGlzIGNvZGUgYmxvY2s6CgpgYGBjCglyZXQgPSByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgaXAtJmd0O29iaiwgMCk7CglrcmVmX3B1dCgmYW1wO2lwLSZndDtyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpOwoJaWYgKHJldCkKCQlyeGVfZGJnX2RldihyeGUsICYjMzQ7ZXJyICVkIGZyb20gcmVtYXBfdm1hbGxvY19yYW5nZVxuJiMzNDssIHJldCk7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0htbSwgYGtyZWZfcHV0YCBpcyBoYXBwZW5pbmcgdW5jb25kaXRpb25hbGx5IHRoZXJlLiYjMzQ7IFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIGltbWVkaWF0ZWx5IHdvbmRlciwgaXMgYGlwYCBiZWluZyBrZXB0IGFsaXZlIGVsc2V3aGVyZT8gSXQgbG9va3MgbGlrZSB0aGVyZSBzaG91bGQgYmUgYW5vdGhlciByZWZlcmVuY2UgaG9sZGluZyBpdC4gTGV0IG1lIHRoaW5rLi4uIEFoLCByaWdodCwgYHEtJmd0O2lwYCBob2xkcyBhIHJlZmVyZW5jZSEgQW5kLCB5ZXAsIGByeGVfcXVldWVfY2xlYW51cGAgYWxzbyBjYWxscyBga3JlZl9wdXQoJmFtcDtxLSZndDtpcC0mZ3Q7cmVmLCByeGVfbW1hcF9yZWxlYXNlKWAuIFNvLCB0aGUgVk1BICpkb2VzbiYjMzk7dCogbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlLiBUaGF0IG1ha2VzIHNlbnNlLgoKTm93LCB3YWl0IGEgbWludXRlLCBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgd2h5IHRoZSBwYXRjaCByZW1vdmVkIGByeGVfdm1hX29wZW5gIGFuZCBgcnhlX3ZtYV9jbG9zZWAgYWx0b2dldGhlci4gVGhleSB3ZXJlbiYjMzk7dCBqdXN0IHNpbXBsaWZ5aW5nOyB0aGVyZSYjMzk7cyBnb3QgdG8gYmUgYSByZWFzb24uIEFoLCBvZiBjb3Vyc2UhIEl0JiMzOTtzIGJlY2F1c2UgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIHNldHMgYHZtYS0mZ3Q7dm1fb3BzYCB0byBgdm1hbGxvY192bV9vcHNgISBSaWdodCEgVGhhdCBtZWFucy4uLiB0aGUgY29kZSB0aGF0IHVzZWQgdG8gc2V0IGB2bWEtJmd0O3ZtX29wcyA9ICZhbXA7cnhlX3ZtX29wc2AgKndhcyogYmVpbmcgb3ZlcndyaXR0ZW4gYW55d2F5IQoKT2theSwgSSB0aGluayBJJiMzOTt2ZSBnb3QgaXQuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGByZW1hcF92bWFsbG9jX3JhbmdlYCBpbiB0aGUga2VybmVsIHNvdXJjZSwganVzdCB0byBtYWtlIHN1cmUgbXkgbG9naWMgaXMgc29saWQuIFRoaXMgbG9va3MgbGlrZSBhIHJlYXNvbmFibGUgc2ltcGxpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVtYXBfdm1hbGxvY19yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ub21tdS5jPTI4Nj1FWFBPUlRfU1lNQk9MKHZtYWxsb2NfMzJfbm9wcm9mKTtcbi0tXG5tbS9ub21tdS5jLTI5NS0gKiBWTV9VU0VSTUFQIGlzIHNldCBvbiB0aGUgY29ycmVzcG9uZGluZyBWTUEgc28gdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvXG5tbS9ub21tdS5jOjI5NjogKiByZW1hcF92bWFsbG9jX3JhbmdlKCkgYXJlIHBlcm1pc3NpYmxlLlxubW0vbm9tbXUuYy0yOTctICovXG4tLVxubW0vbm9tbXUuYz0xNjA5PUVYUE9SVF9TWU1CT0wodm1faW9tYXBfbWVtb3J5KTtcbm1tL25vbW11LmMtMTYxMC1cbm1tL25vbW11LmM6MTYxMTppbnQgcmVtYXBfdm1hbGxvY19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYWRkcixcbm1tL25vbW11LmMtMTYxMi1cdFx0XHR1bnNpZ25lZCBsb25nIHBnb2ZmKVxuLS1cbm1tL25vbW11LmMtMTYyMy19XG5tbS9ub21tdS5jOjE2MjQ6RVhQT1JUX1NZTUJPTChyZW1hcF92bWFsbG9jX3JhbmdlKTtcbm1tL25vbW11LmMtMTYyNS1cbi0tXG5tbS92bWFsbG9jLmM9NDMxNT12b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS92bWFsbG9jLmMtNDM2OS1cdFx0ICpcbm1tL3ZtYWxsb2MuYzo0MzcwOlx0XHQgKiBTa2lwIFZNX1VTRVJNQVAsIGFzIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIHZhbGlkYXRlc1xubW0vdm1hbGxvYy5jLTQzNzEtXHRcdCAqIG1hcHBpbmcgcmVxdWVzdHMgYWdhaW5zdCB0aGUgdW5jaGFuZ2VkIHZtLVx1MDAzZXNpemU7IGZyZWVpbmdcbi0tXG5tbS92bWFsbG9jLmM9NDY2OD1sb25nIHZyZWFkX2l0ZXIoc3RydWN0IGlvdl9pdGVyICppdGVyLCBjb25zdCBjaGFyICphZGRyLCBzaXplX3QgY291bnQpXG4tLVxubW0vdm1hbGxvYy5jLTQ3ODAtLyoqXG5tbS92bWFsbG9jLmM6NDc4MTogKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwgLSBtYXAgdm1hbGxvYyBwYWdlcyB0byB1c2Vyc3BhY2Vcbm1tL3ZtYWxsb2MuYy00NzgyLSAqIEB2bWE6XHRcdHZtYSB0byBjb3ZlclxuLS1cbm1tL3ZtYWxsb2MuYy00Nzk2LSAqL1xubW0vdm1hbGxvYy5jOjQ3OTc6aW50IHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB1YWRkcixcbm1tL3ZtYWxsb2MuYy00Nzk4LVx0XHRcdFx0dm9pZCAqa2FkZHIsIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4tLVxubW0vdm1hbGxvYy5jLTQ4NDMtLyoqXG5tbS92bWFsbG9jLmM6NDg0NDogKiByZW1hcF92bWFsbG9jX3JhbmdlIC0gbWFwIHZtYWxsb2MgcGFnZXMgdG8gdXNlcnNwYWNlXG5tbS92bWFsbG9jLmMtNDg0NS0gKiBAdm1hOlx0XHR2bWEgdG8gY292ZXIgKG1hcCBmdWxsIHJhbmdlIG9mIHZtYSlcbi0tXG5tbS92bWFsbG9jLmMtNDg1Ni0gKi9cbm1tL3ZtYWxsb2MuYzo0ODU3OmludCByZW1hcF92bWFsbG9jX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphZGRyLFxubW0vdm1hbGxvYy5jLTQ4NTgtXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBwZ29mZilcbm1tL3ZtYWxsb2MuYy00ODU5LXtcbm1tL3ZtYWxsb2MuYzo0ODYwOlx0cmV0dXJuIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCxcbm1tL3ZtYWxsb2MuYy00ODYxLVx0XHRcdFx0XHQgICBhZGRyLCBwZ29mZixcbi0tXG5tbS92bWFsbG9jLmMtNDg2My19XG5tbS92bWFsbG9jLmM6NDg2NDpFWFBPUlRfU1lNQk9MKHJlbWFwX3ZtYWxsb2NfcmFuZ2UpO1xubW0vdm1hbGxvYy5jLTQ4NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWxgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGludGVybmFscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGF0IHBhcnRpYWwgcmVtYXBwaW5nIGZ1bmN0aW9uIGZvciBgdm1hbGxvY2AgcmFuZ2VzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsYCBpbiBgbW0vdm1hbGxvYy5jYC4gSSBleHBlY3QgaXQgdG8gaGFuZGxlIHRoZSBudWFuY2VkIG1lY2hhbmljcyBvZiByZW1hcHBpbmcgb25seSBhIHNlY3Rpb24gb2YgYSBgdm1hbGxvY2AgcmVnaW9uLCB3aGljaCwgYXMgd2Uga25vdywgcmVxdWlyZXMgY2FyZWZ1bCBtYW5hZ2VtZW50IG9mIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgKFBURXMpIGludm9sdmVkLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBiYWxhbmNlcyB0aGUgbmVlZCBmb3IgY29udGlndW91cyB2aXJ0dWFsIGFkZHJlc3NlcyB3aXRoIHRoZSBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBvZiBwaHlzaWNhbCBtZW1vcnksIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBUTEIgaW52YWxpZGF0aW9uIHN0cmF0ZWdpZXMuIEkgaG9wZSB0aGVyZSYjMzk7cyBzb21lIGludGVyZXN0aW5nIGludGVycGxheSBiZXR3ZWVuIGBwdGVfb2Zmc2V0X21hcGAsIGBzZXRfcHRlYCwgYW5kIHRoZSBzdXJyb3VuZGluZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGxvY2tpbmcgaXMgY29ycmVjdCwgZ2l2ZW4gdGhhdCBtdWx0aXBsZSBwcm9jZXNzZXMgbWlnaHQgYmUgdG91Y2hpbmcgdGhpcyBjb2RlIGNvbmN1cnJlbnRseS4gSSBhbHNvIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBgcGdwcm90YCBmbGFncywgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IG1lbW9yeSBhdHRyaWJ1dGVzIGxpa2UgY2FjaGluZyBhbmQgd3JpdGUgY29tYmluaW5nLiBUaW1lIHRvIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3OTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDc5NzpcdGludCByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdWFkZHIsXG40Nzk4Olx0XHRcdFx0XHR2b2lkICprYWRkciwgdW5zaWduZWQgbG9uZyBwZ29mZixcbjQ3OTk6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSlcbjQ4MDA6XHR7XG40ODAxOlx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhO1xuNDgwMjpcdFx0dW5zaWduZWQgbG9uZyBvZmY7XG40ODAzOlx0XHR1bnNpZ25lZCBsb25nIGVuZF9pbmRleDtcbjQ4MDQ6XHRcbjQ4MDU6XHRcdGlmIChjaGVja19zaGxfb3ZlcmZsb3cocGdvZmYsIFBBR0VfU0hJRlQsIFx1MDAyNm9mZikpXG40ODA2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDgwNzpcdFxuNDgwODpcdFx0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG40ODA5Olx0XG40ODEwOlx0XHRpZiAoIVBBR0VfQUxJR05FRCh1YWRkcikgfHwgIVBBR0VfQUxJR05FRChrYWRkcikpXG40ODExOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDgxMjpcdFxuNDgxMzpcdFx0YXJlYSA9IGZpbmRfdm1fYXJlYShrYWRkcik7XG40ODE0Olx0XHRpZiAoIWFyZWEpXG40ODE1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDgxNjpcdFxuNDgxNzpcdFx0aWYgKCEoYXJlYS1cdTAwM2VmbGFncyBcdTAwMjYgKFZNX1VTRVJNQVAgfCBWTV9ETUFfQ09IRVJFTlQpKSlcbjQ4MTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40ODE5Olx0XG40ODIwOlx0XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUsIG9mZiwgXHUwMDI2ZW5kX2luZGV4KSB8fFxuNDgyMTpcdFx0ICAgIGVuZF9pbmRleCBcdTAwM2UgZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKSlcbjQ4MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40ODIzOlx0XHRrYWRkciAmIzQzOz0gb2ZmO1xuNDgyNDpcdFxuNDgyNTpcdFx0ZG8ge1xuNDgyNjpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShrYWRkcik7XG40ODI3Olx0XHRcdGludCByZXQ7XG40ODI4Olx0XG40ODI5Olx0XHRcdHJldCA9IHZtX2luc2VydF9wYWdlKHZtYSwgdWFkZHIsIHBhZ2UpO1xuNDgzMDpcdFx0XHRpZiAocmV0KVxuNDgzMTpcdFx0XHRcdHJldHVybiByZXQ7XG40ODMyOlx0XG40ODMzOlx0XHRcdHVhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG40ODM0Olx0XHRcdGthZGRyICYjNDM7PSBQQUdFX1NJWkU7XG40ODM1Olx0XHRcdHNpemUgLT0gUEFHRV9TSVpFO1xuNDgzNjpcdFx0fSB3aGlsZSAoc2l6ZSBcdTAwM2UgMCk7XG40ODM3Olx0XG40ODM4Olx0XHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuNDgzOTpcdFxuNDg0MDpcdFx0cmV0dXJuIDA7XG40ODQxOlx0fVxuNDg0MjpcdFxuNDg0MzpcdC8qKlxuNDg0NDpcdCAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2UgLSBtYXAgdm1hbGxvYyBwYWdlcyB0byB1c2Vyc3BhY2VcbjQ4NDU6XHQgKiBAdm1hOlx0XHR2bWEgdG8gY292ZXIgKG1hcCBmdWxsIHJhbmdlIG9mIHZtYSlcbjQ4NDY6XHQgKiBAYWRkcjpcdFx0dm1hbGxvYyBtZW1vcnlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYxOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCBzb21lIHNlZW1pbmdseSB1bnJlbGF0ZWQgY2hhbmdlcyB3aXRoaW4gYHJ4ZV9tbWFwLmNgLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIGByeGVfdm1fb3BzYCBhbmQgdGhlIHVzZSBvZiBgdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBpcGAuIEkgaW5pdGlhbGx5IHRob3VnaHQgdGhpcyBoYWQgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWxgIGZ1bmN0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gQnV0IHRoZW4gSSByZWFsaXplZCB0aGlzIGlzIGp1c3QgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgcmVsYXRlZCB0byBSRE1BIGRldmljZSBuYW1lcyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLgoKVGhlIHByaW1hcnkgZ29hbCBvZiB0aGlzIHBhdGNoIGlzIHRvIGVuYWJsZSBSRE1BIGRldmljZXMgdG8gY29leGlzdCB3aXRoIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuIFRoaXMgaW52b2x2ZXMgbW9kaWZ5aW5nIGNvcmUgZnVuY3Rpb25zIGluIHRoZSBSRE1BIGFuZCBuZXQgbmFtZXNwYWNlIGxvZ2ljLCBpbmNsdWRpbmcgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCwgYHJkbWFfZGV2X2NoYW5nZV9uZXRuc2AsIGFuZCBgYWxsb2NfbmFtZV9pZGAsIGFuZCBob3cgdGhlc2UgbmFtZXMgYXJlIG1hbmFnZWQuIFRoZSBwYXRjaCBhbHNvIHVwZGF0ZXMgYGNncm91cC9yZG1hLmNgIHRvIGhhbmRsZSBwb3RlbnRpYWxseSBkdXBsaWNhdGUgbmFtZXMsIGxpa2VseSBhcHBlbmRpbmcgYW4gaW5kZXggbGlrZSAmIzM0O2luZGV4PU4mIzM0Oy4KClRoaXMgaXMgd2hlcmUgdGhlIGZ1enppbmcgcG90ZW50aWFsIGxpZXMuIFRoZSBtYWluIGFyZWFzIHRoYXQgYXJlIHZ1bG5lcmFibGUgYXJlOgoKMS4gICoqTmV0bGluayBJbnRlcmZhY2U6KiogVGhlIHBhdGNoIG1vZGlmaWVzIGBubGRldl9zZXRfZG9pdGAgdG8gaGFuZGxlIHRoZSBgUkRNQV9OTERFVl9ORVRfTlNfRkRgIGF0dHJpYnV0ZSB2aWEgbmV0bGluay4gVGhpcyBpcyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgbWVhbmluZyB3ZSBjYW4gdHJpZ2dlciBpdCBhbmQgc2VuZCBwb3RlbnRpYWxseSBjcmFmdGVkIG5ldGxpbmsgbWVzc2FnZXMuCjIuICAqKkNncm91cCBJbnRlcmZhY2U6KiogSXQgYWxzbyB0b3VjaGVzIGByZG1hY2dfcmVzb3VyY2Vfc2V0X21heGAgd2l0aGluIGBrZXJuZWwvY2dyb3VwL3JkbWEuY2AsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwZnMuIE1vZGlmeWluZyBjZ3JvdXAgY29uZmlndXJhdGlvbnMgaXMgYWx3YXlzIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBpbnRlcmVzdGluZyBiZWhhdmlvci4KClRoZXJlZm9yZSwgZnV6emluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBuZXRsaW5rIGFuZCB0aGUgY2dyb3VwIGludGVyZmFjZSByZWxhdGVkIHRvIFJETUEgZGV2aWNlIG5hbWluZyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4KCkZvY3VzIFN5bWJvbHMgZm9yIEZ1enppbmc6CgoqICAgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YAoqICAgYHJkbWFfZGV2X2NoYW5nZV9uZXRuc2AKKiAgIGByZG1hX2Rldl9waWNrX25ldG5zX25hbWVgCiogICBgbmxkZXZfc2V0X2RvaXRgCiogICBgcmRtYWNnX3Jlc291cmNlX3NldF9tYXhgCiogICBgcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkYAoqICAgYGFsbG9jX25hbWVfaWRgCiogICBgX19hbGxvY19uYW1lX2lkYAoqICAgYHJ4ZV9tbWFwYCAod2hpbGUgdG91Y2hlZCwgdGhpcyBpcyBqdXN0IGEgbWlub3IgcGFydC4gRnV6emluZyBmb2N1c2VkIG9uIHRoaXMgaXMgbGVzcyBsaWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzKQoKVG8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgdGVzdGFibGUsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnM6CgoqICAgYENPTkZJR19DR1JPVVBfUkRNQWAgKGNyaXRpY2FsIGZvciBjZ3JvdXAgaW50ZXJmYWNlKQoqICAgYENPTkZJR19SRE1BX1JYRWAKKiAgIGBDT05GSUdfTkVUX05TYCAoZXNzZW50aWFsIGZvciBuZXRucykKKiAgIGBDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTU2AgKG5lZWRlZCBmb3IgYGliX3V2ZXJic19tbWFwYCwgd2hpY2ggbGVhZHMgdG8gdGhlIGByeGVfbW1hcGApCiogICBgQ09ORklHX0lORklOSUJBTkRgIChjb3JlIFJETUEgc3VwcG9ydCkKCkkgbmVlZCB0byBjb25maXJtIGBDT05GSUdfQ0dST1VQX1JETUFgIGluIGBrZXJuZWwvY2dyb3VwL0tjb25maWdgIHRvIGJlIHN1cmUuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIGZ1bmN0aW9uYWwgZnV6emluZy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBoZXJlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGV4cGxvcmluZyB3aXRoIGEgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX1JETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTIzND1jb25maWcgQ0dST1VQX1BJRFNcbi0tXG5pbml0L0tjb25maWctMTI0OS1cbmluaXQvS2NvbmZpZzoxMjUwOmNvbmZpZyBDR1JPVVBfUkRNQVxuaW5pdC9LY29uZmlnLTEyNTEtXHRib29sIFwmIzM0O1JETUEgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY3NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgUlhFIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBSWEUgY29uZmlndXJhdGlvbiBpcyBzZXQgY29ycmVjdGx5LiYjMzQ7IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX1JETUFfUlhFYCBpcyBwcm9wZXJseSBkZWZpbmVkLiBOYXR1cmFsbHksIEkga25vdyB0aGF0JiMzOTtzIHRoZSBrZXkgZmxhZyBmb3IgZW5hYmxpbmcgdGhlIFJYRSAoUmVsaWFibGUgZVhwcmVzcykgc29mdHdhcmUgUkRNQSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIEluZmluaUJhbmQgZHJpdmVycy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIGBkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgUlhFIG1vZHVsZSBhcmUgZGVmaW5lZCwgYW5kIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGRldGVybWluaW5nIHdoZXRoZXIgYENPTkZJR19SRE1BX1JYRWAgaXMgZXhwb3NlZCBvciBub3QsIGJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFyY2hpdGVjdHVyYWwgY2FwYWJpbGl0aWVzIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWUsIGFuZCBoZWxwIHRleHQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaXMgc2V0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBpdCBpcyBzZXQgZGlyZWN0bHkgaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZywgb3IgaWYgaXQgaXMgcHVsbGVkIGluIGFzIGEgZGVmYXVsdCwgb3IgaWYgaXQgaGFzIHNvbWUgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGltcG9ydGFudCBiZWZvcmUgZGlnZ2luZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRE1BX1JYRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnOjI6Y29uZmlnIFJETUFfUlhFXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NvZnR3YXJlIFJETUEgb3ZlciBFdGhlcm5ldCAoUm9DRSkgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTAxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIEluZmluaWJhbmQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSW5maW5pYmFuZC4gTXkgaW50dWl0aW9uIHNheXMgdGhhdCB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvaW5maW5pYmFuZGAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHRvcC1sZXZlbCBkZWZpbml0aW9ucyBmb3IgYSBkcml2ZXImIzM5O3MgY29uZmlndXJhdGlvbiBhcmUgbG9jYXRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0lORklOSUJBTkRgIGlzIGNvcnJlY3RseSBkZWZpbmVkIGFuZCBlbmFibGVkLCBvciBhdCBsZWFzdCB1bmRlcnN0YW5kIGl0cyBzdGF0ZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlbGluZSBmb3Igd2hhdGV2ZXIgdHJvdWJsZXNob290aW5nIG9yIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIHBlcmZvcm0gcmVnYXJkaW5nIEluZmluaWJhbmQuIExldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5GSU5JQkFORCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI6bWVudWNvbmZpZyBJTkZJTklCQU5EXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9MTY9aWYgSU5GSU5JQkFORFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTctXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoxODpjb25maWcgSU5GSU5JQkFORF9VU0VSX01BRFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtJbmZpbmlCYW5kIHVzZXJzcGFjZSBNQUQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTI3LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6Mjg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCB1c2Vyc3BhY2UgYWNjZXNzICh2ZXJicyBhbmQgQ00pXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMzktXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0MDpjb25maWcgSU5GSU5JQkFORF9VU0VSX0FDQ0VTU19DT1JFXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00MS1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ0OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00NS1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjUxOmNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtJbmZpbmlCYW5kIG9uLWRlbWFuZCBwYWdpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTYzLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjQ6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjUtXHRib29sIFwmIzM0O1JETUEvQ01cJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03MS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjcyOmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNfQ09ORklHRlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTczLVx0Ym9vbFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTgwLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6ODE6Y29uZmlnIElORklOSUJBTkRfVklSVF9ETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTgyLVx0ZGVmX2Jvb2wgIUhJR0hNRU1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm5nX3JlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0JOR19SRVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBOZXh0IGdlbmVyYXRpb24gUm9DRSBIQ0Egc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTlhUX1JFXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBOZXR4dHJlbWUgSENBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9DWEdCNFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NoZWxzaW8gVDQvVDUgUkRNQSBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL0tjb25maWctNi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX0VGQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtBbWF6b24gRWxhc3RpYyBGYWJyaWMgQWRhcHRlciAoRUZBKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfRVJETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbGliYWJhIEVsYXN0aWMgUkRNQSBBZGFwdGVyIChFUkRNQSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9IRkkxXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb3JuZWxpcyBPUFggR2VuMSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9ITlNfSElQMDhcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SGlzaWxpY29uIEhpcDA4IEZhbWlseSBSb0NFIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvS2NvbmZpZy0zLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWc6NDpjb25maWcgSU5GSU5JQkFORF9JT05JQ1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O0FNRCBQZW5zYW5kbyBEU0MgUkRNQS9Sb0NFIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JUkRNQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IFByb3RvY29sIERyaXZlciBmb3IgUkRNQVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX01USENBXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TWVsbGFub3ggSENBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy05LVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6MTA6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FfREVCVUdcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnLTExLVx0Ym9vbCBcJiMzNDtWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9PQ1JETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RW11bGV4IE9uZSBDb25uZWN0IEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3FlZHIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3FlZHIvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1FFRFJcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1FMb2dpYyBSb0NFIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1VTTklDXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VmVyYnMgc3VwcG9ydCBmb3IgQ2lzY28gVklDXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1ZNV0FSRV9QVlJETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZNd2FyZSBQYXJhdmlydHVhbGl6ZWQgUkRNQSBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcmRtYXZ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1JETUFWVFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtSRE1BIHZlcmJzIHRyYW5zcG9ydCBsaWJyYXJ5XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JUE9JQlxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJUC1vdmVyLUluZmluaUJhbmRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTEtXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6MTI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfQ01cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kIENvbm5lY3RlZCBNb2RlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMjYtXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjc6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kIGRlYnVnZ2luZ1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctNDEtXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6NDI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtJUC1vdmVyLUluZmluaUJhbmQgZGF0YSBwYXRoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0lTRVJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtpU0NTSSBFeHRlbnNpb25zIGZvciBSRE1BIChpU0VSKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVNFUlRcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7aVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUikgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0yLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy00LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy02LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9SVFJTX0NMSUVOVFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cdHRyaXN0YXRlIFwmIzM0O1JUUlMgY2xpZW50IG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7UlRSUyBzZXJ2ZXIgbW9kdWxlXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1NSUFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCBTQ1NJIFJETUEgUHJvdG9jb2xcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBUXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCBTQ1NJIFJETUEgUHJvdG9jb2wgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyNjQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJETUEgYW5kIE5ldCBOYW1lc3BhY2UgSW50ZWdyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBDR1JPVVBfUkRNQWAsIGBSRE1BX1JYRWAsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX1VTRVJfQUNDRVNTYC4gSSYjMzk7bSBnb2luZyB0byBza2lwIGNoZWNraW5nIGBORVRfTlNgIHNpbmNlIGl0JiMzOTtzIHByYWN0aWNhbGx5IGEgZ2l2ZW4uIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBsaXN0ZWQgb25lcyBpbnN0ZWFkLgoKTm93LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkmIzM5O20gc2VlaW5nOgoKKiAgIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAgaXMgYSBjZW50cmFsIHBpZWNlIGZvciBuZXRucyBjaGFuZ2VzLgoqICAgYHJkbWFfZGV2X2NoYW5nZV9uZXRuc2AgaXMgdGhlIGludGVybmFsIGhlbHBlciBmb3IgdGhlIGFib3ZlLgoqICAgYHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZWAgc2VlbXMgcmVsYXRlZCB0byBuYW1lIHJlc29sdXRpb24gd2l0aGluIHRoZSBuYW1lc3BhY2UgY29udGV4dC4KKiAgIGBubGRldl9zZXRfZG9pdGAgLSBBaCwgYSBOZXRsaW5rIGhhbmRsZXIuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBkaWdnaW5nIGludG87IGl0JiMzOTtzIHRoZSBpbnRlcmZhY2UuCiogICBgcmRtYWNnX3Jlc291cmNlX3NldF9tYXhgIGlzIHRoZSBjZ3JvdXAgaGFuZGxlci4KKiAgIGByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWRgIGNvdWxkIGJlIGludm9sdmVkIGFzIHdlbGwuCiogICBgYWxsb2NfbmFtZV9pZGAsIGBfX2FsbG9jX25hbWVfaWRgIHNlZW0gdG8gcmVsYXRlIHRvIG5hbWUgYWxsb2NhdGlvbiwgd2hpY2ggaXMgbGlrZWx5IGNyaXRpY2FsLgoqICAgYHJ4ZV9tbWFwYCAtIFRoaXMgaXMgdGhlIG1tYXAgZnVuY3Rpb24sIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkLgoKU28sIGBubGRldl9zZXRfZG9pdGAgaXMgb3VyIHByaW1hcnkgbmV0bGluayBoYW5kbGVyLiBgcmRtYWNnX3Jlc291cmNlX3NldF9tYXhgIGlzIHRoZSBjZ3JvdXAgaW50ZXJmYWNlLiBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgIGlzIHRoZSBrZXJuZWwgZnVuY3Rpb24gaGFuZGxpbmcgbmV0bnMgY2hhbmdlcy4gQW5kIG9mIGNvdXJzZSwgdGhlIG1vZGlmaWVkIGByeGVfbW1hcGAgaXMgdGhlcmUuCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIE9oLCBgc21jX3BuZXRfZmluZF9pYmAsIGBzbWNfcG5ldF9hZGRfaWJgLCBgc21jX3BuZXRfZW50ZXJgLCBgc21jX3BuZXRpZF9ieV90YWJsZV9pYmAgaW4gYG5ldC9zbWMvc21jX3BuZXQuY2AgaGF2ZSBiZWVuIG1vZGlmaWVkLCB0b28uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBDT05GSUdfU01DYCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEzLVxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMjItXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzcyCgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDczOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSRE1BIERldmljZSBOYW1lcyBhbmQgTmV0bnMgSW1wbGljYXRpb25zOiBGdXp6aW5nIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBwYXRjaCwgYW5kIHRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCBgU01DYCBzdXBwb3J0IGlzIGdvaW5nIHRvIGJlIGFkZGVkIHRvIHRoZSBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFyZSB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ/IGBDR1JPVVBfUkRNQWAsIGBSRE1BX1JYRWAsIGBJTkZJTklCQU5EX1VTRVJfQUNDRVNTYCwgYW5kIG5vdyBgU01DYC4gR290IGl0LgoKTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpbiBtaW5kOiBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgLCBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYCwgYHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZWAsIGBubGRldl9zZXRfZG9pdGAsIGByZG1hY2dfcmVzb3VyY2Vfc2V0X21heGAsIGByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWRgLCBgYWxsb2NfbmFtZV9pZGAsIGByeGVfbW1hcGAsIGFuZCBgc21jX3BuZXRfZmluZF9pYmAuCgpMZXQgbWUgcXVpY2tseSBjb25maXJtIGlmIHRoZSBmdW5jdGlvbnMgYXJlIHN0YXRpYy4gWWVwLCBgYWxsb2NfbmFtZV9pZGAsIGByZG1hX2Rldl9waWNrX25ldG5zX25hbWVgLCBgcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkYCwgYHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4YCwgYW5kIGBubGRldl9zZXRfZG9pdGAgYXJlIGFsbCBzdGF0aWMuIFRoZSBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgIGlzIGRlZmluZWQgaW4gYGNvcmVfcHJpdi5oYC4gYHJ4ZV9tbWFwYCBpcyBpbiBgcnhlX21tYXAuY2AsIGFuZCBgc21jX3BuZXRfZmluZF9pYmAgaXMgc3RhdGljIGluIGBzbWNfcG5ldC5jYC4KCk9rYXksIEkmIzM5O3ZlIGdvdCBteSBsaXN0LgoKT2gsIHdhaXQsIHRoZXJlJiMzOTtzIGByZG1hY2dfcHJpbnRfZGV2aWNlX2tleWAsIGByZG1hY2dfZGV2aWNlX25hbWVfdW5pcXVlX2xvY2tlZGAsIGByZG1hX2Rldl9uYW1lX2luX25ldG5zYCwgYGFzc2lnbl9uYW1lYCBhbmQgYGFsbG9jX25hbWVgIHRvby4gTGV0JiMzOTtzIGluY2x1ZGUgYHJkbWFfZGV2X25hbWVfaW5fbmV0bnNgIGFuZCBgcmRtYWNnX2RldmljZV9uYW1lX3VuaXF1ZV9sb2NrZWRgIHRvby4KClNvLCB0aGUgY29uZmlndXJhdGlvbnMgYXJlOiBgQ0dST1VQX1JETUFgLCBgUkRNQV9SWEVgLCBgSU5GSU5JQkFORF9VU0VSX0FDQ0VTU2AsIGBTTUNgLgoKTm93IGZvciB0aGUgKndoeSo6IFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGFsbG93aW5nIFJETUEgZGV2aWNlcyB0byBzaGFyZSBuYW1lcyBhY3Jvc3MgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIGRldmljZSBuYW1pbmcsIGhvdyBkZXZpY2VzIGFyZSBtb3ZlZCBiZXR3ZWVuIG5hbWVzcGFjZXMsIGFuZCBob3cgY2dyb3VwIHJlc291cmNlcyBhcmUgdHJhY2tlZC4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLgoKVGhlcmVmb3JlLCBmdXp6aW5nIHNob3VsZCBjb25jZW50cmF0ZSBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgdXNlZCB0byBtb3ZlIFJETUEgZGV2aWNlcyBiZXR3ZWVuIG5hbWVzcGFjZXMsIHRoZSBSRE1BIGNncm91cCBpbnRlcmZhY2UsIGFuZCB0aGUgUlhFIG1tYXAgcGF0aC4KCk9uZSBsYXN0IHRoaW5nLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgcnhlX21tYXBgIGNoYW5nZXMuIEFoLCB0aGUgcGF0Y2ggcmVtb3ZlcyBgcnhlX3ZtX29wc2AgYW5kIHVzZXMgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGRpcmVjdGx5LCBlZmZlY3RpdmVseSBkcm9wcGluZyBhIHJlZmVyZW5jZSBpbW1lZGlhdGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB0aGUgVk1BIGhvbGRzIHJlZmVyZW5jZXMuIERlZmluaXRlbHkgZnV6ei13b3J0aHkuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9SRE1BJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfVVNFUl9BQ0NFU1MmIzM0OywKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfcmVzb3VyY2Vfc2V0X21heCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7YWxsb2NfbmFtZV9pZCYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cnhlX21tYXAmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMsIG1vZGlmeWluZyB0aGUgY29yZSBSRE1BIGRldmljZSBuYW1pbmcsIG5ldG5zIGNoYW5nZSBsb2dpYywgYW5kIGNncm91cCByZXNvdXJjZSB0cmFja2luZy4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IHRhYmxlIGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1vdmluZyBSRE1BIGRldmljZXMgYmV0d2VlbiBuYW1lc3BhY2VzLCB0aGUgUkRNQSBjZ3JvdXAgaW50ZXJmYWNlLCBhbmQgdGhlIFJYRSBtbWFwIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9SRE1BJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfVVNFUl9BQ0NFU1MmIzM0OywKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfcmVzb3VyY2Vfc2V0X21heCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7YWxsb2NfbmFtZV9pZCYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cnhlX21tYXAmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMsIG1vZGlmeWluZyB0aGUgY29yZSBSRE1BIGRldmljZSBuYW1pbmcsIG5ldG5zIGNoYW5nZSBsb2dpYywgYW5kIGNncm91cCByZXNvdXJjZSB0cmFja2luZy4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IHRhYmxlIGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1vdmluZyBSRE1BIGRldmljZXMgYmV0d2VlbiBuYW1lc3BhY2VzLCB0aGUgUkRNQSBjZ3JvdXAgaW50ZXJmYWNlLCBhbmQgdGhlIFJYRSBtbWFwIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MjoxMy41MTgwNjYwMzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA5MjMzMDgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfUkRNQVwiLFxuICAgIFwiUkRNQV9SWEVcIixcbiAgICBcIklORklOSUJBTkRfVVNFUl9BQ0NFU1NcIixcbiAgICBcIlNNQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImliX2RldmljZV9zZXRfbmV0bnNfcHV0XCIsXG4gICAgXCJyZG1hX2Rldl9jaGFuZ2VfbmV0bnNcIixcbiAgICBcInJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZVwiLFxuICAgIFwibmxkZXZfc2V0X2RvaXRcIixcbiAgICBcInJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4XCIsXG4gICAgXCJyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWRcIixcbiAgICBcImFsbG9jX25hbWVfaWRcIixcbiAgICBcIl9fYWxsb2NfbmFtZV9pZFwiLFxuICAgIFwicnhlX21tYXBcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfaWJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMsIG1vZGlmeWluZyB0aGUgY29yZSBSRE1BIGRldmljZSBuYW1pbmcsIG5ldG5zIGNoYW5nZSBsb2dpYywgYW5kIGNncm91cCByZXNvdXJjZSB0cmFja2luZy4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IHRhYmxlIGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1vdmluZyBSRE1BIGRldmljZXMgYmV0d2VlbiBuYW1lc3BhY2VzLCB0aGUgUkRNQSBjZ3JvdXAgaW50ZXJmYWNlLCBhbmQgdGhlIFJYRSBtbWFwIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjEzLjUxODA3MzExOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1MDA1MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGIyMjMxNzU2MWJiNDM2N2RjNWU2ZWFkMGYyOTZlMmQwNzM2MWMzOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxNSAwMDo1MjoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cXG5pbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXFxuQEAgLTEyLDYgKzEyLDEwIEBAIERlc2NyaXB0aW9uOiBcXHRJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG9cXG4gXFx0XFx0Zm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOlxcbiBcXHRcXHRta2RpciAtcCAvY29uZmlnL3JkbWFfY20vXFx1MDAzY2hjYVxcdTAwM2VcXG4gXFxuK1xcdFxcdE5vdGU6IGNvbmZpZ2ZzIGhhcyBubyBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0LCBzbyB0aGlzXFxuK1xcdFxcdGludGVyZmFjZSBjYW5ub3QgcmVwcmVzZW50IHR3byBkZXZpY2VzIHRoYXQgc2hhcmUgYSBuYW1lIGluXFxuK1xcdFxcdGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS5cXG4rXFxuIFxcbiBXaGF0OiBcXHRcXHQvY29uZmlnL3JkbWFfY20vXFx1MDAzY2hjYVxcdTAwM2UvcG9ydHMvXFx1MDAzY3BvcnQtbnVtXFx1MDAzZS9kZWZhdWx0X3JvY2VfbW9kZVxcbiBEYXRlOiBcXHRcXHROb3ZlbWJlciAyOSwgMjAxNVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9yZG1hLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0XFxuaW5kZXggZTY5MzY5YjcyNTJlYTMuLjhkMGMzYTc5NmVlM2Q2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvcmRtYS5yc3RcXG5AQCAtOTAsNiArOTAsMTMgQEAgRm9sbG93aW5nIHJlc291cmNlcyBjYW4gYmUgYWNjb3VudGVkIGJ5IHJkbWEgY29udHJvbGxlci5cXG4gICBoY2Ffb2JqZWN0IFxcdE1heGltdW0gbnVtYmVyIG9mIEhDQSBPYmplY3RzXFxuICAgPT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG4rUkRNQSBkZXZpY2VzIGZyb20gYWxsIG5ldHdvcmsgbmFtZXNwYWNlcyBhcmUgbGlzdGVkLiBFYWNoIGxpbmUgc3RhcnRzIHdpdGhcXG4rdGhlIGRldmljZSBuYW1lLiBJZiBtb3JlIHRoYW4gb25lIGRldmljZSBoYXMgdGhlIHNhbWUgbmFtZSwgYGBpbmRleD1OYGBcXG4rZm9sbG93cyB0aGUgbmFtZSwgd2hlcmUgYGBOYGAgaXMgdGhlIHN5c3RlbS13aWRlIFJETUEgZGV2aWNlIGluZGV4LCB1bmlxdWVcXG4rYW1vbmcgcmVnaXN0ZXJlZCBkZXZpY2VzLiBXaGVuIGNvbmZpZ3VyaW5nIGEgbGltaXQsIHRoZSBpbmRleCBpcyBvcHRpb25hbFxcbitmb3IgYSBnbG9iYWxseSB1bmlxdWUgbmFtZSBhbmQgcmVxdWlyZWQgZm9yIGEgZHVwbGljYXRlIG5hbWUuIEEgd3JpdGUgd2l0aG91dFxcbit0aGUgcmVxdWlyZWQgaW5kZXggZmFpbHMgd2l0aCBgYC1FTk9UVU5JUWBgLlxcbitcXG4gMi4gVXNhZ2UgRXhhbXBsZXNcXG4gPT09PT09PT09PT09PT09PT1cXG4gXFxuQEAgLTk3LDYgKzEwNCw3IEBAIEZvbGxvd2luZyByZXNvdXJjZXMgY2FuIGJlIGFjY291bnRlZCBieSByZG1hIGNvbnRyb2xsZXIuXFxuIFxcbiBcXHRlY2hvIG1seDRfMCBoY2FfaGFuZGxlPTIgaGNhX29iamVjdD0yMDAwIFxcdTAwM2UgL3N5cy9mcy9jZ3JvdXAvcmRtYS8xL3JkbWEubWF4XFxuIFxcdGVjaG8gb2NyZG1hMSBoY2FfaGFuZGxlPTMgXFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9yZG1hLzIvcmRtYS5tYXhcXG4rXFx0ZWNobyBcXFwicnhlMCBpbmRleD01IGhjYV9oYW5kbGU9MlxcXCIgXFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9yZG1hLzMvcmRtYS5tYXhcXG4gXFxuIChiKSBRdWVyeSByZXNvdXJjZSBsaW1pdDo6XFxuIFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcXG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uZGY3NGQ1NTRkMmNkZmYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuQEAgLTI3NTIsNiArMjc1MiwxMSBAQCBSRE1BXFxuIFRoZSBcXFwicmRtYVxcXCIgY29udHJvbGxlciByZWd1bGF0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYWNjb3VudGluZyBvZlxcbiBSRE1BIHJlc291cmNlcy5cXG4gXFxuK1JETUEgZGV2aWNlcyBmcm9tIGFsbCBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlIGxpc3RlZC4gRWFjaCBsaW5lIHN0YXJ0cyB3aXRoXFxuK3RoZSBkZXZpY2UgbmFtZS4gSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaGFzIHRoZSBzYW1lIG5hbWUsIGBgaW5kZXg9TmBgXFxuK2ZvbGxvd3MgdGhlIG5hbWUsIHdoZXJlIGBgTmBgIGlzIHRoZSBzeXN0ZW0td2lkZSBSRE1BIGRldmljZSBpbmRleCwgdW5pcXVlXFxuK2Ftb25nIHJlZ2lzdGVyZWQgZGV2aWNlcy5cXG4rXFxuIFJETUEgSW50ZXJmYWNlIEZpbGVzXFxuIH5+fn5+fn5+fn5+fn5+fn5+fn5+XFxuIFxcbkBAIC0yNzYwLDcgKzI3NjUsMTEgQEAgUkRNQSBJbnRlcmZhY2UgRmlsZXNcXG4gXFx0ZXhjZXB0IHJvb3QgdGhhdCBkZXNjcmliZXMgY3VycmVudCBjb25maWd1cmVkIHJlc291cmNlIGxpbWl0XFxuIFxcdGZvciBhIFJETUEvSUIgZGV2aWNlLlxcbiBcXG4tXFx0TGluZXMgYXJlIGtleWVkIGJ5IGRldmljZSBuYW1lIGFuZCBhcmUgbm90IG9yZGVyZWQuXFxuK1xcdExpbmVzIGFyZSBrZXllZCBieSBkZXZpY2UgbmFtZSBhbmQgYXJlIG5vdCBvcmRlcmVkLiBBIHdyaXRlIG1heVxcbitcXHRpbmNsdWRlIGBgaW5kZXg9TmBgIGFmdGVyIHRoZSBkZXZpY2UgbmFtZS4gVGhlIGluZGV4IGlzIG9wdGlvbmFsXFxuK1xcdHdoZW4gdGhlIG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVlLiBJZiBtdWx0aXBsZSBkZXZpY2VzIGhhdmUgdGhhdFxcbitcXHRuYW1lLCB0aGUgaW5kZXggaXMgcmVxdWlyZWQgYW5kIGEgd3JpdGUgd2l0aG91dCBpdCBmYWlscyB3aXRoXFxuK1xcdGBgLUVOT1RVTklRYGAuXFxuIFxcdEVhY2ggbGluZSBjb250YWlucyBzcGFjZSBzZXBhcmF0ZWQgcmVzb3VyY2UgbmFtZSBhbmQgaXRzIGNvbmZpZ3VyZWRcXG4gXFx0bGltaXQgdGhhdCBjYW4gYmUgZGlzdHJpYnV0ZWQuXFxuIFxcbkBAIC0yNzc2LDYgKzI3ODUsMTAgQEAgUkRNQSBJbnRlcmZhY2UgRmlsZXNcXG4gXFx0ICBtbHg0XzAgaGNhX2hhbmRsZT0yIGhjYV9vYmplY3Q9MjAwMFxcbiBcXHQgIG9jcmRtYTEgaGNhX2hhbmRsZT0zIGhjYV9vYmplY3Q9bWF4XFxuIFxcbitcXHRGb3IgZGV2aWNlcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcywgc2VsZWN0IHRoZSBkZXZpY2UgYnkgaW5kZXg6OlxcbitcXG4rXFx0ICBlY2hvIFxcXCJyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yXFxcIiBcXHUwMDNlIHJkbWEubWF4XFxuK1xcbiAgIHJkbWEuY3VycmVudFxcbiBcXHRBIHJlYWQtb25seSBmaWxlIHRoYXQgZGVzY3JpYmVzIGN1cnJlbnQgcmVzb3VyY2UgdXNhZ2UuXFxuIFxcdEl0IGV4aXN0cyBmb3IgYWxsIHRoZSBjZ3JvdXAgZXhjZXB0IHJvb3QuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcXG5pbmRleCAxZjAzN2ZlMDE0NTBlZi4uODYxMWI0ZTMyY2ZiNjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuY1xcbkBAIC0xNyw2ICsxNyw3IEBAXFxuIHZvaWQgaWJfZGV2aWNlX3JlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXFxuIHtcXG4gXFx0ZGV2aWNlLVxcdTAwM2VjZ19kZXZpY2UubmFtZSA9IGRldmljZS1cXHUwMDNlbmFtZTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2VjZ19kZXZpY2UuaW5kZXggPSBkZXZpY2UtXFx1MDAzZWluZGV4O1xcbiBcXHRyZG1hY2dfcmVnaXN0ZXJfZGV2aWNlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNnX2RldmljZSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcXG5pbmRleCA4OTFlNTJhZmI4ZjRiYS4uYzM4OWQ0ZTM3YjZiY2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuY1xcbkBAIC02NSw2ICs2NSwxMCBAQCBzdGF0aWMgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCAqdG9fZGV2X3BvcnRfZ3JvdXAoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbiBcXHRyZXR1cm4gY29udGFpbmVyX29mKGdyb3VwLCBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwLCBncm91cCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIGNvbmZpZ2ZzIGlzIG5vdCBuZXQgbmFtZXNwYWNlIGF3YXJlLCBzbyBhIG5hbWUgc2hhcmVkIGJ5IGRldmljZXMgaW5cXG4rICogZGlmZmVyZW50IG5hbWVzcGFjZXMgcmVzb2x2ZXMgdG8gdGhlIGZpcnN0IG1hdGNoIGhlcmUuXFxuKyAqL1xcbiBzdGF0aWMgYm9vbCBmaWx0ZXJfYnlfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYsIHZvaWQgKmNvb2tpZSlcXG4ge1xcbiBcXHRyZXR1cm4gIXN0cmNtcChkZXZfbmFtZShcXHUwMDI2aWJfZGV2LVxcdTAwM2VkZXYpLCBjb29raWUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXFxuaW5kZXggMTkxMDRjNTQyYjI3MGQuLmFhZjMzMGIwZDMzM2FlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmhcXG5AQCAtMzU2LDcgKzM1Niw4IEBAIHZvaWQgaWJfcG9ydF91bnJlZ2lzdGVyX2NsaWVudF9ncm91cHMoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0X251bSxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTtcXG4gXFxuIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQpO1xcbitcXHRcXHRcXHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiBcXG4gaW50IHJkbWFfbmxfbmV0X2luaXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7XFxuIHZvaWQgcmRtYV9ubF9uZXRfZXhpdChzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xcbmluZGV4IGI4MTkzZTA3N2E3NDZmLi40Yzc1MDc4NDQ4YTMyNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jXFxuQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgREVDTEFSRV9SV1NFTShyZG1hX25ldHNfcndzZW0pO1xcbiBib29sIGliX2RldmljZXNfc2hhcmVkX25ldG5zID0gdHJ1ZTtcXG4gbW9kdWxlX3BhcmFtX25hbWVkKG5ldG5zX21vZGUsIGliX2RldmljZXNfc2hhcmVkX25ldG5zLCBib29sLCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhuZXRuc19tb2RlLFxcbi1cXHRcXHQgXFxcIlNoYXJlIGRldmljZSBhbW9uZyBuZXQgbmFtZXNwYWNlczsgZGVmYXVsdD0xIChzaGFyZWQpXFxcIik7XFxuK1xcdFxcdCBcXFwiU2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkuIEluIGV4Y2x1c2l2ZSBtb2RlIGRldmljZSBuYW1lcyBhcmUgdW5pcXVlIHBlciBuZXQgbmFtZXNwYWNlXFxcIik7XFxuIC8qKlxcbiAgKiByZG1hX2Rldl9hY2Nlc3NfbmV0bnMoKSAtIFJldHVybiB3aGV0aGVyIGFuIHJkbWEgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZFxcbiAgKlxcdFxcdFxcdCAgICAgZnJvbSBhIHNwZWNpZmllZCBuZXQgbmFtZXNwYWNlIG9yIG5vdC5cXG5AQCAtMjY4LDcgKzI2OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWJkZXZfbHNtX25iID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldCAqbmV0KTtcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKTtcXG4gXFxuIC8qIFBvaW50ZXIgdG8gdGhlIFJDVSBoZWFkIGF0IHRoZSBzdGFydCBvZiB0aGUgaWJfcG9ydF9kYXRhIGFycmF5ICovXFxuIHN0cnVjdCBpYl9wb3J0X2RhdGFfcmN1IHtcXG5AQCAtMzUxLDEzICszNTIsMTUgQEAgdm9pZCBpYl9kZXZpY2VfcHV0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGliX2RldmljZV9wdXQpO1xcbiBcXG4tc3RhdGljIHN0cnVjdCBpYl9kZXZpY2UgKl9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXFxuK3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4gXFxuIFxcdHhhX2Zvcl9lYWNoIChcXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSlcXG4tXFx0XFx0aWYgKCFzdHJjbXAobmFtZSwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSkpXFxuK1xcdFxcdGlmIChyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhc3RyY21wKG5hbWUsIGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldikpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZGV2aWNlO1xcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTM5NSw3ICszOTgsNyBAQCBpbnQgaWJfZGV2aWNlX3JlbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShuYW1lKSkge1xcbitcXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSwgcmRtYV9kZXZfbmV0KGliZGV2KSkpIHtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFx0fVxcbkBAIC00MzUsNyArNDM4LDEzIEBAIGludCBpYl9kZXZpY2Vfc2V0X2RpbShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggdXNlX2RpbSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcXG4rLypcXG4rICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAnJWQnIHN0eWxlIEBuYW1lIHBhdHRlcm4gd2l0aGluIG5ldCBuYW1lc3BhY2VcXG4rICogQG5ldC4gUmV0dXJucyB0aGUgaW5kZXggb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm5vLiBUaGUgY2FsbGVyIGJ1aWxkc1xcbisgKiB0aGUgZmluYWwgdW5pcXVlIGRldmljZSBuYW1lIGZyb20gdGhlIHJldHVybmVkIGluZGV4LlxcbisgKi9cXG4rc3RhdGljIGludCBfX2FsbG9jX25hbWVfaWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlICpza2lwKVxcbiB7XFxuIFxcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG5AQCAtNDQ4LDYgKzQ1Nyw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0eGFfZm9yX2VhY2ggKFxcdTAwMjZkZXZpY2VzLCBpbmRleCwgZGV2aWNlKSB7XFxuIFxcdFxcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XFxuIFxcbitcXHRcXHRpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoc3NjYW5mKGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldiksIG5hbWUsIFxcdTAwMjZpKSAhPSAxKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKGkgXFx1MDAzYyAwIHx8IGkgXFx1MDAzZT0gSU5UX01BWClcXG5AQCAtNDYyLDE1ICs0NzMsMjcgQEAgc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxcbiBcXHR9XFxuIFxcbiBcXHRyYyA9IGlkYV9hbGxvYyhcXHUwMDI2aW51c2UsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAocmMgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdHJjID0gZGV2X3NldF9uYW1lKFxcdTAwMjZpYmRldi1cXHUwMDNlZGV2LCBuYW1lLCByYyk7XFxuIG91dDpcXG4gXFx0aWRhX2Rlc3Ryb3koXFx1MDAyNmludXNlKTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGFsbG9jX25hbWVfaWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHJldHVybiBfX2FsbG9jX25hbWVfaWQobmV0LCBuYW1lLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGludCBpZDtcXG4rXFxuK1xcdGlkID0gYWxsb2NfbmFtZV9pZChyZG1hX2Rldl9uZXQoaWJkZXYpLCBuYW1lKTtcXG4rXFx0aWYgKGlkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGlkO1xcbitcXG4rXFx0cmV0dXJuIGRldl9zZXRfbmFtZShcXHUwMDI2aWJkZXYtXFx1MDAzZWRldiwgbmFtZSwgaWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBpYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXFxuIHtcXG4gXFx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTtcXG5AQCAtMTE1MSw4ICsxMTc0LDE3IEBAIHN0YXRpYyB2b2lkIHJkbWFfZGV2X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHRoZSByZWFsIGRldmljZSBpcyBpbiB0aGUgTlMgdGhlbiBtb3ZlIGl0IGJhY2sgdG8gaW5pdC5cXG4rXFx0XFx0ICogUHJvdmlkZSBhIGZhbGxiYWNrIHBhdHRlcm4gc28gYSBuYW1lIGNvbmZsaWN0IGluIGluaXRfbmV0XFxuK1xcdFxcdCAqIGNhbm5vdCBtYWtlIHRoZSB0ZWFyZG93biBtb3ZlIGZhaWwuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBuZXQsIFxcdTAwMjZpbml0X25ldCk7XFxuK1xcdFxcdGlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoXFx1MDAyNmRldi1cXHUwMDNlY29yZWRldi5yZG1hX25ldCkpKSB7XFxuK1xcdFxcdFxcdHJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIG5ldCwgXFx1MDAyNmluaXRfbmV0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgTlVMTCwgXFxcImliZGV2JWRcXFwiKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOT0RFVilcXG4rXFx0XFx0XFx0XFx0V0FSTigxLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gbW92ZSBSRE1BIGRldmljZSAlcyB0byBpbml0X25ldCBvbiBuZXRucyBleGl0OiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBkZXZfbmFtZShcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpLCByZXQpO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuIFxcdFxcdGRvd25fcmVhZChcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuQEAgLTEyMDYsNyArMTIzOCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByZG1hX2Rldl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIH1cXG4gXFxuIC8qXFxuLSAqIEFzc2lnbiB0aGUgdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZSBhbmQgdGhlIHVuaXF1ZSBkZXZpY2UgaW5kZXguIFRoaXMgaXNcXG4rICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhlIGRldmljZVxcbisgKiBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIG5ldCBuYW1lc3BhY2UgdGhlIGRldmljZSBpcyBhc3NpZ25lZCB0by4gVGhpcyBpc1xcbiAgKiB1bmRvbmUgYnkgaWJfZGVhbGxvY19kZXZpY2UuXFxuICAqL1xcbiBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcXG5AQCAtMTIyMyw3ICsxMjU2LDggQEAgc3RhdGljIGludCBhc3NpZ25fbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldikpKSB7XFxuK1xcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpLFxcbitcXHRcXHRcXHRcXHQgICAgcmRtYV9kZXZfbmV0KGRldmljZSkpKSB7XFxuIFxcdFxcdHJldCA9IC1FTkZJTEU7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTEzODgsOCArMTQyMiw5IEBAIHN0YXRpYyB2b2lkIGliX2RldmljZV9ub3RpZnlfcmVnaXN0ZXIoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbiAvKipcXG4gICogaWJfcmVnaXN0ZXJfZGV2aWNlIC0gUmVnaXN0ZXIgYW4gSUIgZGV2aWNlIHdpdGggSUIgY29yZVxcbiAgKiBAZGV2aWNlOiBEZXZpY2UgdG8gcmVnaXN0ZXJcXG4tICogQG5hbWU6IHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUuIFRoaXMgbWF5IGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbFxcbi0gKiBcXHQgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuXFxuKyAqIEBuYW1lOiBkZXZpY2UgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgZGV2aWNlJ3MgbmV0IG5hbWVzcGFjZS4gVGhpcyBtYXlcXG4rICpcXHQgIGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbCBjYXVzZSBhIHVuaXF1ZSBpbmRleCB0byBiZSBhZGRlZCB0byB0aGVcXG4rICpcXHQgIHBhc3NlZCBkZXZpY2UgbmFtZS5cXG4gICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQlxcbiAgKlxcdCAgICAgICAgZGV2aWNlIHdpbGwgYmUgdXNlZC4gSW4gdGhpcyBjYXNlIHRoZSBjYWxsZXIgc2hvdWxkIGZ1bGx5XFxuICAqXFx0XFx0c2V0dXAgdGhlIGliZGV2IGZvciBETUEuIFRoaXMgdXN1YWxseSBtZWFucyB1c2luZyBkbWFfdmlydF9vcHMuXFxuQEAgLTE2NzAsMTQgKzE3MDUsODMgQEAgdm9pZCBpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKTtcXG4gXFxuK3N0YXRpYyBib29sIHJkbWFfZGV2X25hbWVfaW5fbmV0bnMoc3RydWN0IGliX2RldmljZSAqc2tpcCwgc3RydWN0IG5ldCAqbmV0LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXFxuK1xcdFxcdGlmIChkZXZpY2UgIT0gc2tpcCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENob29zZSB0aGUgbmFtZSBAZGV2aWNlIHNob3VsZCB1c2UgaW4gbmV0IG5hbWVzcGFjZSBAbmV0LiBAcmVxdWVzdGVkX25hbWVcXG4rICogaXMgdXNlZCBhcyBhIGxpdGVyYWwgZGV2aWNlIG5hbWUgd2hlbiBzZXQuIE90aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50IG5hbWVcXG4rICogd2hlbiBpdCBpcyBmcmVlLCBvciB1c2UgYSB0cnVzdGVkICclZCcgQGZhbGxiYWNrX3BhdHRlcm4gZm9yIHRlYXJkb3duLiBUaGVcXG4rICogY2FsbGVyIG11c3QgaG9sZCB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtLlxcbisgKi9cXG4rc3RhdGljIGludCByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4sXFxuK1xcdFxcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKVxcbit7XFxuK1xcdGludCBpZDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXG4rXFx0aWYgKHJlcXVlc3RlZF9uYW1lKSB7XFxuK1xcdFxcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7XFxuK1xcdFxcdFxcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSkpIHtcXG4rXFx0XFx0Km5ld19uYW1lID0gZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZmFsbGJhY2tfcGF0dGVybilcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIFxcXCJpYmRldiV1XFxcIiwgZGV2aWNlLVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgYnVmKSkge1xcbitcXHRcXHQqbmV3X25hbWUgPSBidWY7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZCA9IF9fYWxsb2NfbmFtZV9pZChuZXQsIGZhbGxiYWNrX3BhdHRlcm4sIGRldmljZSk7XFxuK1xcdGlmIChpZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBpZDtcXG4rXFx0c25wcmludGYoYnVmLCBidWZfbGVuLCBmYWxsYmFja19wYXR0ZXJuLCBpZCk7XFxuK1xcdCpuZXdfbmFtZSA9IGJ1ZjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRoZSBjYWxsZXIgbXVzdCBwYXNzIGluIGEgZGV2aWNlIHRoYXQgaGFzIHRoZSBrcmVmIGhlbGQgYW5kIHRoZSByZWZjb3VudFxcbiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWRcXG4gICogaW50byBuZXQuXFxuKyAqXFxuKyAqIE5hbWluZyBydWxlcyBhcmUgaGFuZGxlZCBieSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoKS5cXG4gICovXFxuIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldClcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKVxcbiB7XFxuK1xcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XFxuK1xcdGNvbnN0IGNoYXIgKm5ld19uYW1lO1xcbiBcXHRpbnQgcmV0MiA9IC1FSU5WQUw7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0xNjk0LDMwICsxNzk4LDY1IEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghZmFsbGJhY2tfcGF0dGVybikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZWplY3QgYSBwcmVkaWN0YWJsZSBuYW1lIGNvbmZsaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nXFxuK1xcdFxcdCAqIGRvd24sIHNvIGEgZG9vbWVkIHVzZXIgbW92ZSBkb2VzIG5vdCBkaXNhYmxlIGEgbGl2ZSBkZXZpY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG4rXFx0XFx0cmV0ID0gcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1ZixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihidWYpLCBcXHUwMDI2bmV3X25hbWUpO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYua29iaiwgS09CSl9SRU1PVkUpO1xcbiBcXHRkaXNhYmxlX2RldmljZShkZXZpY2UpO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQXQgdGhpcyBwb2ludCBubyBvbmUgY2FuIGJlIHVzaW5nIHRoZSBkZXZpY2UsIHNvIGl0IGlzIHNhZmUgdG9cXG4tXFx0ICogY2hhbmdlIHRoZSBuYW1lc3BhY2UuXFxuK1xcdCAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtXFxuK1xcdCAqIG5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQsIGNsb3NpbmcgcmFjZXMgd2l0aCBhIGNvbmN1cnJlbnRcXG4rXFx0ICogcmVnaXN0cmF0aW9uIG9yIHJlbmFtZSwgdGhlbiBwdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlIGF0IHRoZSBzeXNmc1xcbitcXHQgKiBsZXZlbC5cXG4gXFx0ICovXFxuLVxcdHdyaXRlX3BuZXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcXG4rXFx0ZG93bl93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBmYWxsYmFja19wYXR0ZXJuLCBidWYsIHNpemVvZihidWYpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNm5ld19uYW1lKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xcbitcXHRcXHRcXHRXQVJOKDEsXFxuK1xcdFxcdFxcdCAgICAgXFxcIiVzOiBmYWlsZWQgdG8gcGljayBkZXZpY2UgbmFtZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcXG4rXFx0XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2ZGV2aWNlLVxcdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gcmVuYW1lX2RvbmU7XFxuK1xcdH1cXG4gXFxuLVxcdGRvd25fcmVhZChcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuLVxcdC8qXFxuLVxcdCAqIEN1cnJlbnRseSByZG1hIGRldmljZXMgYXJlIHN5c3RlbSB3aWRlIHVuaXF1ZS4gU28gdGhlIGRldmljZSBuYW1lXFxuLVxcdCAqIGlzIGd1YXJhbnRlZWQgZnJlZSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4gUHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZVxcbi1cXHQgKiBhdCB0aGUgc3lzZnMgbGV2ZWwuXFxuLVxcdCAqL1xcbi1cXHRyZXQgPSBkZXZpY2VfcmVuYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldiwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSk7XFxuLVxcdHVwX3JlYWQoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXHR3cml0ZV9wbmV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIG5ldCk7XFxuK1xcdHJldCA9IGRldmljZV9yZW5hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2LCBuZXdfbmFtZSk7XFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHQgXFxcIiVzOiBDb3VsZG4ndCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCBfX2Z1bmNfXyk7XFxuLVxcdFxcdC8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqL1xcbi1cXHRcXHR3cml0ZV9wbmV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIGN1cl9uZXQpO1xcbitcXHRcXHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xcbitcXHRcXHRcXHRXQVJOKDEsXFxuK1xcdFxcdFxcdCAgICAgXFxcIiVzOiBmYWlsZWQgdG8gcmVuYW1lIGRldmljZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgXFxcIiVzOiBDb3VsZG4ndCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBfX2Z1bmNfXyk7XFxuK1xcdFxcdFxcdC8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqL1xcbitcXHRcXHRcXHR3cml0ZV9wbmV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIGN1cl9uZXQpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN0cnNjcHkoZGV2aWNlLVxcdTAwM2VuYW1lLCBkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpLFxcbitcXHRcXHRcXHRJQl9ERVZJQ0VfTkFNRV9NQVgpO1xcbiBcXHR9XFxuK3JlbmFtZV9kb25lOlxcbitcXHR1cF93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuIFxcbiBcXHRyZXQyID0gZW5hYmxlX2RldmljZV9hbmRfZ2V0KGRldmljZSk7XFxuIFxcdGlmIChyZXQyKSB7XFxuQEAgLTE3NDAsMzYgKzE4NzksNzIgQEAgc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxcbiB9XFxuIFxcbiBpbnQgaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKVxcbitcXHRcXHRcXHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0bmV0ID0gZ2V0X25ldF9uc19ieV9mZChuc19mZCk7XFxuIFxcdGlmIChJU19FUlIobmV0KSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIHRhcmdldCBuZXQgbmFtZXNwYWNlIGZkXFxcIik7XFxuIFxcdFxcdHJldCA9IFBUUl9FUlIobmV0KTtcXG4gXFx0XFx0Z290byBuZXRfZXJyO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIW5ldGxpbmtfbnNfY2FwYWJsZShza2IsIG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIk1pc3NpbmcgQ0FQX05FVF9BRE1JTiBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVQRVJNO1xcbiBcXHRcXHRnb3RvIG5zX2VycjtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogTW92aW5nIGEgZGV2aWNlIHRvIHRoZSBuYW1lc3BhY2UgaXQgYWxyZWFkeSBsaXZlcyBpbiBpcyBhIG5vLW9wOyBhXFxuK1xcdCAqIHN1cHBsaWVkIG5hbWUgc3RpbGwgcmVuYW1lcyBpdCBpbiBwbGFjZS5cXG4rXFx0ICovXFxuK1xcdGlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoXFx1MDAyNmRldi1cXHUwMDNlY29yZWRldi5yZG1hX25ldCkpKSB7XFxuK1xcdFxcdHJldCA9IG5hbWUgPyBpYl9kZXZpY2VfcmVuYW1lKGRldiwgbmFtZSkgOiAwO1xcbitcXG4rXFx0XFx0aWYgKHJldCA9PSAtRUVYSVNUKVxcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiRGV2aWNlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXFxcIik7XFxuK1xcdFxcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFxcdTAwMjZcXHUwMDI2IG5hbWUpXFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJVbmFibGUgdG8gdXNlIHJlcXVlc3RlZCBkZXZpY2UgbmFtZSBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcXFwiKTtcXG4rXFx0XFx0Z290byBuc19lcnI7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIEFsbCB0aGUgaWJfY2xpZW50cywgaW5jbHVkaW5nIHV2ZXJicywgYXJlIHJlc2V0IHdoZW4gdGhlIG5hbWVzcGFjZSBpc1xcbiBcXHQgKiBjaGFuZ2VkIGFuZCB0aGlzIGNhbm5vdCBiZSBibG9ja2VkIHdhaXRpbmcgZm9yIHVzZXJzcGFjZSB0byBkb1xcbiBcXHQgKiBzb21ldGhpbmcsIHNvIGRpc2Fzc29jaWF0aW9uIGlzIG1hbmRhdG9yeS5cXG4gXFx0ICovXFxuLVxcdGlmICghZGV2LVxcdTAwM2VvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0IHx8IGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XFxuK1xcdGlmIChpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiQ2Fubm90IGNoYW5nZSBuZXQgbmFtZXNwYWNlIG9mIFJETUEgZGV2aWNlIGluIHNoYXJlZCBuZXRucyBtb2RlXFxcIik7XFxuK1xcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRnb3RvIG5zX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZW9wcy5kaXNhc3NvY2lhdGVfdWNvbnRleHQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkRldmljZSBkb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZSBjaGFuZ2VzIChubyBkaXNhc3NvY2lhdGUgc3VwcG9ydClcXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIFxcdFxcdGdvdG8gbnNfZXJyO1xcbiBcXHR9XFxuIFxcbiBcXHRnZXRfZGV2aWNlKFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuIFxcdGliX2RldmljZV9wdXQoZGV2KTtcXG4tXFx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cXHUwMDNlbnNwcm94eS1cXHUwMDNlbmV0X25zLCBuZXQpO1xcbitcXHRyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnMsIG5ldCwgbmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgIE5VTEwpO1xcbiBcXHRwdXRfZGV2aWNlKFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChyZXQgPT0gLUVFWElTVClcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkRldmljZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVxcXCIpO1xcbitcXHRlbHNlIGlmIChyZXQgPT0gLUVJTlZBTCBcXHUwMDI2XFx1MDAyNiBuYW1lKVxcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiVW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXFxcIik7XFxuIFxcbiBcXHRwdXRfbmV0KG5ldCk7XFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jXFxuaW5kZXggYWFlNGYzZjZiY2JhMTQuLjRlZmEzODdlYzFiZTE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jXFxuQEAgLTExNzgsNiArMTE3OCwyNCBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRpZiAoIWRldmljZSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7XFxuK1xcdFxcdGNoYXIgbmFtZVtJQl9ERVZJQ0VfTkFNRV9NQVhdID0ge307XFxuK1xcdFxcdHUzMiBuc19mZDtcXG4rXFxuK1xcdFxcdGlmICh0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdKSB7XFxuK1xcdFxcdFxcdG5sYV9zdHJzY3B5KG5hbWUsIHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0sXFxuK1xcdFxcdFxcdFxcdCAgICBJQl9ERVZJQ0VfTkFNRV9NQVgpO1xcbitcXHRcXHRcXHRpZiAoc3RybGVuKG5hbWUpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byBkb25lO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0XFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xcbitcXHRcXHRlcnIgPSBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChza2IsIGRldmljZSwgbnNfZmQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIG5hbWVbMF0gPyBuYW1lIDogTlVMTCwgZXh0YWNrKTtcXG4rXFx0XFx0Z290byBwdXRfZG9uZTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0pIHtcXG4gXFx0XFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcXG4gXFxuQEAgLTExOTEsMTQgKzEyMDksNiBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh0YltSRE1BX05MREVWX05FVF9OU19GRF0pIHtcXG4tXFx0XFx0dTMyIG5zX2ZkO1xcbi1cXG4tXFx0XFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xcbi1cXHRcXHRlcnIgPSBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChza2IsIGRldmljZSwgbnNfZmQpO1xcbi1cXHRcXHRnb3RvIHB1dF9kb25lO1xcbi1cXHR9XFxuLVxcbiBcXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9ESU1dKSB7XFxuIFxcdFxcdHU4IHVzZV9kaW07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuY1xcbmluZGV4IDlhZjMxZDFkOWQ3MGM3Li5hODJjNDY5NjU0MTZhMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuY1xcbkBAIC03MDAsNiArNzAwLDEyIEBAIGludCBpYl9tYWRfYWdlbnRfc2VjdXJpdHlfc2V0dXAoc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnQsXFxuIFxcdGlmIChxcF90eXBlICE9IElCX1FQVF9TTUkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogU0VMaW51eCBsYWJlbHMgYW4gZW5kcG9ydCBieSAoZGV2aWNlIG5hbWUsIHBvcnQpIGZyb20gYSBnbG9iYWxcXG4rXFx0ICogcG9saWN5LiBJZiBkZXZpY2VzIGluIGRpZmZlcmVudCBuZXQgbmFtZXNwYWNlcyBzaGFyZSBhIG5hbWUsIHRoZXkgZ2V0XFxuK1xcdCAqIHRoZSBzYW1lIGxhYmVsOyBkaXN0aW5ndWlzaGluZyB0aGVtIHdvdWxkIG5lZWQgbmV0IG5hbWVzcGFjZSBzdXBwb3J0XFxuK1xcdCAqIGluIHRoZSBwb2xpY3kgbGFuZ3VhZ2UgYW5kIHRvb2xpbmcuXFxuK1xcdCAqL1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNm1hZF9hZ2VudF9saXN0X2xvY2spO1xcbiBcXHRyZXQgPSBzZWN1cml0eV9pYl9lbmRwb3J0X21hbmFnZV9zdWJuZXQoYWdlbnQtXFx1MDAzZXNlY3VyaXR5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRkZXZfbmFtZShcXHUwMDI2YWdlbnQtXFx1MDAzZWRldmljZS1cXHUwMDNlZGV2KSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jXFxuaW5kZXggN2Y3MjNhMmYzNzAwNTkuLmE0ZWFkODljY2JkMzQzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuY1xcbkBAIC0xMSw3ICsxMSw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwicnhlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJyeGVfbG9jLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJyeGVfcXVldWUuaFxcXCJcXG4gXFxuIHZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbiB7XFxuQEAgLTMwLDI5ICsyOSw2IEBAIHZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbiBcXHRrZnJlZShpcCk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIG9wZW4gYW5kIGNsb3NlIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgdGltZXMgdGhlIG1lbW9yeSByZWdpb24gaXMgbWFwcGVkLFxcbi0gKiB0byBhdm9pZCByZWxlYXNpbmcgaXQuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCByeGVfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLXtcXG4tXFx0c3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuLVxcbi1cXHRrcmVmX2dldChcXHUwMDI2aXAtXFx1MDAzZXJlZik7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHJ4ZV92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLXtcXG4tXFx0c3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuLVxcbi1cXHRrcmVmX3B1dChcXHUwMDI2aXAtXFx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcnhlX3ZtX29wcyA9IHtcXG4tXFx0Lm9wZW4gPSByeGVfdm1hX29wZW4sXFxuLVxcdC5jbG9zZSA9IHJ4ZV92bWFfY2xvc2UsXFxuLX07XFxuLVxcbiAvKipcXG4gICogcnhlX21tYXAgLSBjcmVhdGUgYSBuZXcgbW1hcCByZWdpb25cXG4gICogQGNvbnRleHQ6IHRoZSBJQiB1c2VyIGNvbnRleHQgb2YgdGhlIHByb2Nlc3MgbWFraW5nIHRoZSBtbWFwKCkgY2FsbFxcbkBAIC0xMDYsMTcgKzgyLDEwIEBAIGludCByeGVfbW1hcChzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZpcC1cXHUwMDNlcGVuZGluZ19tbWFwcyk7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyeGUtXFx1MDAzZXBlbmRpbmdfbG9jayk7XFxuIFxcbi1cXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZyeGVfdm1fb3BzO1xcbi1cXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGlwO1xcbi1cXG4gXFx0cmV0ID0gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGlwLVxcdTAwM2VvYmosIDApO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gTlVMTDtcXG4tXFx0XFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBOVUxMO1xcbi1cXHRcXHRrcmVmX3B1dChcXHUwMDI2aXAtXFx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSk7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZpcC1cXHUwMDNlcmVmLCByeGVfbW1hcF9yZWxlYXNlKTtcXG4rXFx0aWYgKHJldClcXG4gXFx0XFx0cnhlX2RiZ19kZXYocnhlLCBcXFwiZXJyICVkIGZyb20gcmVtYXBfdm1hbGxvY19yYW5nZVxcXFxuXFxcIiwgcmV0KTtcXG4tXFx0XFx0Z290byBkb25lO1xcbi1cXHR9XFxuIFxcbiBkb25lOlxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xcbmluZGV4IDFlYzEzMGZlZThlYTdhLi42ZWIxMGQyZjA2NTNiYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xcbkBAIC0yNDAsNiArMjQwLDEwIEBAIHN0YXRpYyB2b2lkIHJ4ZV9kZWFsbG9jX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1YylcXG4gXFx0XFx0cnhlX2Vycl91Yyh1YywgXFxcImNsZWFudXAgZmFpbGVkLCBlcnIgPSAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnhlX2Rpc2Fzc29jaWF0ZV91Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmlidWMpXFxuK3tcXG4rfVxcbitcXG4gLyogcGQgKi9cXG4gc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxcbiB7XFxuQEAgLTE0NzgsNiArMTQ4Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyByeGVfZGV2X29wcyA9IHtcXG4gXFx0LmRlc3Ryb3lfc3JxID0gcnhlX2Rlc3Ryb3lfc3JxLFxcbiBcXHQuZGV0YWNoX21jYXN0ID0gcnhlX2RldGFjaF9tY2FzdCxcXG4gXFx0LmRldmljZV9ncm91cCA9IFxcdTAwMjZyeGVfYXR0cl9ncm91cCxcXG4rXFx0LmRpc2Fzc29jaWF0ZV91Y29udGV4dCA9IHJ4ZV9kaXNhc3NvY2lhdGVfdWNvbnRleHQsXFxuIFxcdC5lbmFibGVfZHJpdmVyID0gcnhlX2VuYWJsZV9kcml2ZXIsXFxuIFxcdC5nZXRfZG1hX21yID0gcnhlX2dldF9kbWFfbXIsXFxuIFxcdC5nZXRfaHdfc3RhdHMgPSByeGVfaWJfZ2V0X2h3X3N0YXRzLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXFxuaW5kZXggMGNhZWJiYzI4MTBmZjMuLjJmYzhlMTMzYzcwZmM1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcXG5AQCAtMzE4OSwxMCArMzE4OSwyNCBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc3JwX2NsYXNzX2F0dHJzW107XFxuIFxcbiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XFxuIFxcbisvKlxcbisgKiBTUlAgaG9zdHMgYXJlIG5hbWVkIGFmdGVyIHRoZWlyIGliIGRldmljZSwgc28gdGFnIHRoZSBjbGFzcyBieSB0aGUgaWJcXG4rICogZGV2aWNlJ3MgbmV0IG5hbWVzcGFjZS5cXG4rICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHNycF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZG1hX2Rldl9uZXQoaG9zdC1cXHUwMDNlc3JwX2Rldi1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHJldHVybiBuZXQgPyB0b19uc19jb21tb24obmV0KSA6IE5VTEw7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgc3JwX2NsYXNzID0ge1xcbiBcXHQubmFtZSAgICA9IFxcXCJpbmZpbmliYW5kX3NycFxcXCIsXFxuIFxcdC5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3VwcyxcXG4tXFx0LmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2XFxuK1xcdC5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldixcXG4rXFx0Lm5zX3R5cGUgPSBcXHUwMDI2bmV0X25zX3R5cGVfb3BlcmF0aW9ucyxcXG4rXFx0Lm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLFxcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxcbmluZGV4IDQwNGU3NDY1NTJjYThmLi45YTVjOWVlNzI4ZTdkZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcXG5AQCAtMzQsNiArMzQsNyBAQCBzdHJ1Y3QgcmRtYWNnX2RldmljZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRkZXZfbm9kZTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHJwb29scztcXG4gXFx0Y2hhclxcdFxcdFxcdCpuYW1lO1xcbitcXHR1MzJcXHRcXHRcXHRpbmRleDtcXG4gfTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcXG5pbmRleCAzYWY5NDZlY2JhYzNlZC4uZWUxMWMzYmJiYWUyMmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaFxcbkBAIC01MTYsNyArNTE2LDEwIEBAIGVudW0gcmRtYV9ubGRldl9hdHRyIHtcXG4gXFx0UkRNQV9OTERFVl9BVFRSX0RFVl9QUk9UT0NPTCxcXHRcXHQvKiBzdHJpbmcgKi9cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEZpbGUgZGVzY3JpcHRvciBoYW5kbGUgb2YgdGhlIG5ldCBuYW1lc3BhY2Ugb2JqZWN0XFxuK1xcdCAqIEZpbGUgZGVzY3JpcHRvciBoYW5kbGUgb2YgdGhlIG5ldCBuYW1lc3BhY2Ugb2JqZWN0LiBNYXkgYmUgY29tYmluZWRcXG4rXFx0ICogd2l0aCBSRE1BX05MREVWX0FUVFJfREVWX05BTUUgKGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSkgdG8gYWxzbyByZW5hbWVcXG4rXFx0ICogdGhlIGRldmljZSBpbiB0aGUgZGVzdGluYXRpb24gbmFtZXNwYWNlOyB0aGUgbW92ZSBmYWlscyB3aXRoIC1FRVhJU1RcXG4rXFx0ICogaWYgdGhhdCBuYW1lIGlzIGFscmVhZHkgdGFrZW4gdGhlcmUuXFxuIFxcdCAqL1xcbiBcXHRSRE1BX05MREVWX05FVF9OU19GRCxcXHRcXHRcXHQvKiB1MzIgKi9cXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9yZG1hLmMgYi9rZXJuZWwvY2dyb3VwL3JkbWEuY1xcbmluZGV4IDVlODJhMDNiMzI3MGFkLi45NDg5ZjNkZjBiZjNmZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvY2dyb3VwL3JkbWEuY1xcbisrKyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gI2RlZmluZSBSRE1BQ0dfTUFYX1NUUiBcXFwibWF4XFxcIlxcbiBcXG4gZW51bSByZG1hY2dfbGltaXRfdG9rZW5zIHtcXG4rXFx0UkRNQUNHX0RFVklDRV9JTkRFWCxcXG4gXFx0UkRNQUNHX0hDQV9IQU5ETEVfVkFMLFxcbiBcXHRSRE1BQ0dfSENBX0hBTkRMRV9NQVgsXFxuIFxcdFJETUFDR19IQ0FfT0JKRUNUX1ZBTCxcXG5AQCAtMjcsNiArMjgsNyBAQCBlbnVtIHJkbWFjZ19saW1pdF90b2tlbnMge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgcmRtYWNnX2xpbWl0X3Rva2VucyA9IHtcXG4rXFx0eyBSRE1BQ0dfREVWSUNFX0lOREVYLFxcdFxcdFxcXCJpbmRleD0ldVxcXCJcXHR9LFxcbiBcXHR7IFJETUFDR19IQ0FfSEFORExFX1ZBTCxcXHRcXFwiaGNhX2hhbmRsZT0lZFxcXCJcXHR9LFxcbiBcXHR7IFJETUFDR19IQ0FfSEFORExFX01BWCxcXHRcXFwiaGNhX2hhbmRsZT1tYXhcXFwiXFx0fSxcXG4gXFx0eyBSRE1BQ0dfSENBX09CSkVDVF9WQUwsXFx0XFxcImhjYV9vYmplY3Q9JWRcXFwiXFx0fSxcXG5AQCAtNDY0LDE3ICs0NjYsNTMgQEAgdm9pZCByZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7XFxuIFxcbi1zdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxcbitzdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKlxcbityZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBoYXNfaW5kZXgsIHUzMiBpbmRleClcXG4ge1xcbitcXHRzdHJ1Y3QgcmRtYWNnX2RldmljZSAqbWF0Y2ggPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cmRtYWNnX211dGV4KTtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKVxcbi1cXHRcXHRpZiAoIXN0cmNtcChuYW1lLCBkZXZpY2UtXFx1MDAzZW5hbWUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gZGV2aWNlO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xcbitcXHRcXHRpZiAoc3RyY21wKG5hbWUsIGRldmljZS1cXHUwMDNlbmFtZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdGlmIChoYXNfaW5kZXgpIHtcXG4rXFx0XFx0XFx0aWYgKGRldmljZS1cXHUwMDNlaW5kZXggPT0gaW5kZXgpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBkZXZpY2U7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobWF0Y2gpXFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9UVU5JUSk7XFxuK1xcdFxcdG1hdGNoID0gZGV2aWNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbWF0Y2ggPzogRVJSX1BUUigtRU5PREVWKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2xcXG4rcmRtYWNnX2RldmljZV9uYW1lX3VuaXF1ZV9sb2NrZWQoY29uc3Qgc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmRtYWNnX2RldmljZSAqb3RoZXI7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZyZG1hY2dfbXV0ZXgpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSlcXG4rXFx0XFx0aWYgKG90aGVyICE9IGRldmljZSBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKG90aGVyLVxcdTAwM2VuYW1lLCBkZXZpY2UtXFx1MDAzZW5hbWUpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmRtYWNnX3ByaW50X2RldmljZV9rZXkoc3RydWN0IHNlcV9maWxlICpzZixcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c2VxX3B1dHMoc2YsIGRldmljZS1cXHUwMDNlbmFtZSk7XFxuK1xcdGlmICghcmRtYWNnX2RldmljZV9uYW1lX3VuaXF1ZV9sb2NrZWQoZGV2aWNlKSlcXG4rXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiBpbmRleD0ldVxcXCIsIGRldmljZS1cXHUwMDNlaW5kZXgpO1xcbitcXHRzZXFfcHV0YyhzZiwgJyAnKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbkBAIC00ODgsNiArNTI2LDggQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHRjaGFyICpwO1xcbiBcXHRpbnQgKm5ld19saW1pdHM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5hYmxlcyA9IDA7XFxuK1xcdHUzMiBkZXZfaW5kZXggPSAwO1xcbitcXHRib29sIGhhc19pbmRleCA9IGZhbHNlO1xcbiBcXHRpbnQgaSA9IDAsIHJldCA9IDA7XFxuIFxcbiBcXHQvKiBleHRyYWN0IHRoZSBkZXZpY2UgbmFtZSBmaXJzdCAqL1xcbkBAIC01MDMsNyArNTQzLDcgQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0LyogcGFyc2UgcmVzb3VyY2UgbGltaXQgdG9rZW5zICovXFxuK1xcdC8qIHBhcnNlIHRoZSBvcHRpb25hbCBkZXZpY2UgaW5kZXggYW5kIHJlc291cmNlIGxpbWl0IHRva2VucyAqL1xcbiBcXHR3aGlsZSAoKHAgPSBzdHJzZXAoXFx1MDAyNm9wdGlvbnMsIFxcXCIgXFxcXHRcXFxcblxcXCIpKSkge1xcbiBcXHRcXHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XFxuIFxcdFxcdGludCB0b2ssIGludHZhbDtcXG5AQCAtNTEzLDYgKzU1MywxMyBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuIFxcbiBcXHRcXHR0b2sgPSBtYXRjaF90b2tlbihwLCByZG1hY2dfbGltaXRfdG9rZW5zLCBhcmdzKTtcXG4gXFx0XFx0c3dpdGNoICh0b2spIHtcXG4rXFx0XFx0Y2FzZSBSRE1BQ0dfREVWSUNFX0lOREVYOlxcbitcXHRcXHRcXHRpZiAoaGFzX2luZGV4IHx8IG1hdGNoX3VpbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZkZXZfaW5kZXgpKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gcGFyc2VfZXJyO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGhhc19pbmRleCA9IHRydWU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFJETUFDR19IQ0FfSEFORExFX1ZBTDpcXG4gXFx0XFx0XFx0aWYgKG1hdGNoX2ludChcXHUwMDI2YXJnc1swXSwgXFx1MDAyNmludHZhbCkgfHwgaW50dmFsIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbkBAIC01NDYsOSArNTkzLDkgQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHQvKiBhY3F1aXJlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBob3QgcGx1ZyBkZXZpY2VzICovXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnJkbWFjZ19tdXRleCk7XFxuIFxcbi1cXHRkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUpO1xcbi1cXHRpZiAoIWRldmljZSkge1xcbi1cXHRcXHRyZXQgPSAtRU5PREVWO1xcbitcXHRkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUsIGhhc19pbmRleCwgZGV2X2luZGV4KTtcXG4rXFx0aWYgKElTX0VSUihkZXZpY2UpKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIoZGV2aWNlKTtcXG4gXFx0XFx0Z290byBkZXZfZXJyO1xcbiBcXHR9XFxuIFxcbkBAIC02MjYsNyArNjczLDcgQEAgc3RhdGljIGludCByZG1hY2dfcmVzb3VyY2VfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZyZG1hY2dfbXV0ZXgpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFxcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcXG4tXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIFxcXCIsIGRldmljZS1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpO1xcbiBcXG4gXFx0XFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcXG4gXFx0XFx0cHJpbnRfcnBvb2xfdmFsdWVzKHNmLCBycG9vbCk7XFxuQEAgLTY1MCw3ICs2OTcsNyBAQCBzdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xcbiBcXHRcXHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xcbiBcXG4tXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIFxcXCIsIGRldmljZS1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpO1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWDsgaSsrKSB7XFxuIFxcdFxcdFxcdHNlcV9wcmludGYoc2YsIFxcXCIlcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHVcXFwiLFxcbiBcXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxuQEAgLTY3OSw3ICs3MjYsNyBAQCBzdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xcbiBcXHRcXHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xcbiBcXG4tXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIFxcXCIsIGRldmljZS1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpO1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWDsgaSsrKSB7XFxuIFxcdFxcdFxcdHNlcV9wcmludGYoc2YsIFxcXCIlcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHVcXFwiLFxcbiBcXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuY1xcbmluZGV4IDYzZTI4NmUyZGZhYThkLi5mZjljOWMzNWNjMmY1YiAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19wbmV0LmNcXG4rKysgYi9uZXQvc21jL3NtY19wbmV0LmNcXG5AQCAtMzA0LDEzICszMDQsMTggQEAgc3RhdGljIGJvb2wgc21jX3BuZXRpZF92YWxpZChjb25zdCBjaGFyICpwbmV0X25hbWUsIGNoYXIgKnBuZXRpZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLS8qIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC4gKi9cXG4tc3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKGNoYXIgKmliX25hbWUpXFxuKy8qXFxuKyAqIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLCByZXN0cmljdGVkIHRvIHRoZSBkZXZpY2VzXFxuKyAqIGFjY2Vzc2libGUgZnJvbSBAbmV0LiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jX3BuZXRfZmluZF9pYihzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmliX25hbWUpXFxuIHtcXG4gXFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2O1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2c21jX2liX2RldmljZXMubXV0ZXgpO1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGliZGV2LCBcXHUwMDI2c21jX2liX2RldmljZXMubGlzdCwgbGlzdCkge1xcbitcXHRcXHRpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhpYmRldi1cXHUwMDNlaWJkZXYsIG5ldCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXN0cm5jbXAoaWJkZXYtXFx1MDAzZWliZGV2LVxcdTAwM2VuYW1lLCBpYl9uYW1lLFxcbiBcXHRcXHRcXHQgICAgIHNpemVvZihpYmRldi1cXHUwMDNlaWJkZXYtXFx1MDAzZW5hbWUpKSB8fFxcbiBcXHRcXHQgICAgKGliZGV2LVxcdTAwM2VpYmRldi1cXHUwMDNlZGV2LnBhcmVudCBcXHUwMDI2XFx1MDAyNlxcbkBAIC00MDgsOCArNDEzLDggQEAgc3RhdGljIGludCBzbWNfcG5ldF9hZGRfZXRoKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxcbi1cXHRcXHRcXHQgICB1OCBpYl9wb3J0LCBjaGFyICpwbmV0X25hbWUpXFxuK3N0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2liKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIHN0cnVjdCBuZXQgKm5ldCxcXG4rXFx0XFx0XFx0ICAgY2hhciAqaWJfbmFtZSwgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKVxcbiB7XFxuIFxcdHN0cnVjdCBzbWNfcG5ldGVudHJ5ICp0bXBfcGUsICpuZXdfcGU7XFxuIFxcdHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYl9kZXY7XFxuQEAgLTQxOSw3ICs0MjQsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxcbiBcXHRib29sIG5ld19pYmRldjtcXG4gXFxuIFxcdC8qIHRyeSB0byBhcHBseSB0aGUgcG5ldGlkIHRvIGFjdGl2ZSBkZXZpY2VzICovXFxuLVxcdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIoaWJfbmFtZSk7XFxuK1xcdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIobmV0LCBpYl9uYW1lKTtcXG4gXFx0aWYgKGliX2Rldikge1xcbiBcXHRcXHRpYmRldl9hcHBsaWVkID0gc21jX3BuZXRfYXBwbHlfaWIoaWJfZGV2LCBpYl9wb3J0LCBwbmV0X25hbWUpO1xcbiBcXHRcXHRpZiAoaWJkZXZfYXBwbGllZClcXG5AQCAtNTE4LDcgKzUyMyw3IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZW50ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdKVxcbiBcXHRcXHRcXHRpZiAoaWJwb3J0IFxcdTAwM2MgMSB8fCBpYnBvcnQgXFx1MDAzZSBTTUNfTUFYX1BPUlRTKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7XFxuK1xcdFxcdHJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgbmV0LCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTtcXG4gXFx0XFx0aWYgKCFyYylcXG4gXFx0XFx0XFx0bmV3X2liZGV2ID0gdHJ1ZTtcXG4gXFx0XFx0ZWxzZSBpZiAocmMgIT0gLUVFWElTVClcXG5AQCAtMTE3MCw2ICsxMTc1LDkgQEAgaW50IHNtY19wbmV0aWRfYnlfdGFibGVfaWIoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYl9wb3J0KVxcbiBcXHRzdHJ1Y3Qgc21jX25ldCAqc247XFxuIFxcdGludCByYyA9IC1FTk9FTlQ7XFxuIFxcbitcXHRpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhzbWNpYmRldi1cXHUwMDNlaWJkZXYsIFxcdTAwMjZpbml0X25ldCkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4gXFx0LyogZ2V0IHBuZXR0YWJsZSBmb3IgaW5pdCBuYW1lc3BhY2UgKi9cXG4gXFx0c24gPSBuZXRfZ2VuZXJpYyhcXHUwMDI2aW5pdF9uZXQsIHNtY19uZXRfaWQpO1xcbiBcXHRwbmV0dGFibGUgPSBcXHUwMDI2c24tXFx1MDAzZXBuZXR0YWJsZTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcXG5pbmRleCAwN2FmN2YxNWMxYmY3NC4uYTkxYzE0YzQ1MDA2ZTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcXG5AQCAtMyw2ICszLDcgQEAgVEVTVF9QUk9HUyA6PSByeGVfcnBpbmdfYmV0d2Vlbl9uZXRucy5zaCBcXFxcXFxuIFxcdFxcdHJ4ZV9pcHY2LnNoIFxcXFxcXG4gXFx0XFx0cnhlX3NvY2tldF93aXRoX25ldG5zLnNoIFxcXFxcXG4gXFx0XFx0cnhlX3Rlc3RfTkVUREVWX1VOUkVHSVNURVIuc2ggXFxcXFxcbi1cXHRcXHRyeGVfc2VudF9yY3ZkX2J5dGVzLnNoXFxuK1xcdFxcdHJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2ggXFxcXFxcbitcXHRcXHRyeGVfbmV0bnNfbmFtZXMuc2hcXG4gXFxuIGluY2x1ZGUgLi4vbGliLm1rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcXG5pbmRleCA0ZmZiODE0ZTI1M2JiZC4uZTFmZjU0ZWMwZjU3OTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZ1xcbkBAIC0xLDMgKzEsNSBAQFxcbiBDT05GSUdfVFVOXFxuIENPTkZJR19WRVRIXFxuK0NPTkZJR19EVU1NWVxcbitDT05GSUdfTkVUX05TXFxuIENPTkZJR19SRE1BX1JYRVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTRmYWJmODZiZGY3OWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2hcXG5AQCAtMCwwICsxLDI4MiBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBFeGVyY2lzZSBSRE1BIGRldmljZSBuYW1lIGhhbmRsaW5nIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuXFxuK1xcbitzb3VyY2UgXFxcIiQoZGlybmFtZSBcXFwiJDBcXFwiKS8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXFxcIlxcbitcXG4rTkFNRV9QUkVGSVg9XFxcInJ4ZV9uZXRuc19uYW1lc18kJFxcXCJcXG4rTkVUREVWX1BSRUZJWD1cXFwicnhuJCRcXFwiXFxuK05TMT1cXFwiJHtOQU1FX1BSRUZJWH1uczFcXFwiXFxuK05TMj1cXFwiJHtOQU1FX1BSRUZJWH1uczJcXFwiXFxuK1JYRV9BPVxcXCIke05BTUVfUFJFRklYfXJ4ZV9hXFxcIlxcbitSWEVfQj1cXFwiJHtOQU1FX1BSRUZJWH1yeGVfYlxcXCJcXG4rUlhFX1NBTUU9XFxcIiR7TkFNRV9QUkVGSVh9cnhlX3NhbWVcXFwiXFxuK1JYRV9ORVc9XFxcIiR7TkFNRV9QUkVGSVh9cnhlX25ld1xcXCJcXG4rRFVNTVlfQT1cXFwiJHtORVRERVZfUFJFRklYfWFcXFwiXFxuK0RVTU1ZX0I9XFxcIiR7TkVUREVWX1BSRUZJWH1iXFxcIlxcbitPTERfTU9ERT1cXFwiXFxcIlxcbitNT0RFX0NIQU5HRUQ9MFxcbitNT0RTPShcXFwiZHVtbXlcXFwiIFxcXCJyZG1hX3J4ZVxcXCIpXFxuK1RFU1RfU0FNRV9OQU1FUz1cXFwic2FtZSBSRE1BIGRldmljZSBuYW1lIGNhbiBleGlzdCBpbiB0d28gbmV0IG5hbWVzcGFjZXNcXFwiXFxuK1RFU1RfTU9WRV9DT05GTElDVD1cXFwibW92ZSB3aXRob3V0IHJlbmFtZSBmYWlscyBvbiBkZXN0aW5hdGlvbiBuYW1lIGNvbmZsaWN0XFxcIlxcbitURVNUX01PVkVfUkVOQU1FPVxcXCJtb3ZlIHRoZW4gcmVuYW1lIHN1Y2NlZWRzXFxcIlxcbitURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FPVxcXCJtb3ZlIHdpdGggcmVxdWVzdGVkIGRlc3RpbmF0aW9uIG5hbWUgc3VjY2VlZHNcXFwiXFxuK1RFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FPVxcXCJzYW1lLW5ldG5zIHJlbmFtZSByZWplY3RzIGR1cGxpY2F0ZSBuYW1lXFxcIlxcbitURVNUX1RFQVJET1dOX1JFVFVSTj1cXFwibmV0bnMgZGVsZXRlIHJldHVybnMgZGV2aWNlIHRvIGluaXRfbmV0IGFuZCByZW5hbWVzIG9uIGNvbmZsaWN0XFxcIlxcbitcXG4ra3NmdF9za2lwKClcXG4re1xcbitcXHRrdGFwX3NraXBfYWxsIFxcXCIkKlxcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rfVxcbitcXG4rZmFpbCgpXFxuK3tcXG4rXFx0a3RhcF9leGl0X2ZhaWxfbXNnIFxcXCIkKlxcXCJcXG4rfVxcbitcXG4rbmVlZF9jbWQoKVxcbit7XFxuK1xcdGNvbW1hbmQgLXYgXFxcIiQxXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgfHwga3NmdF9za2lwIFxcXCJtaXNzaW5nIGNvbW1hbmQ6ICQxXFxcIlxcbit9XFxuK1xcbityZG1hX25zKClcXG4re1xcbitcXHRsb2NhbCBucz0kMVxcbitcXG4rXFx0c2hpZnRcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zXFxcIiByZG1hIFxcXCIkQFxcXCJcXG4rfVxcbitcXG4rcmRtYV9kZXZfZXhpc3RzKClcXG4re1xcbitcXHRsb2NhbCBucz0kMVxcbitcXHRsb2NhbCBkZXY9JDJcXG4rXFxuK1xcdGlmIFsgLW4gXFxcIiRuc1xcXCIgXTsgdGhlblxcbitcXHRcXHRyZG1hX25zIFxcXCIkbnNcXFwiIGRldiBzaG93IFxcXCIkZGV2XFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZG1hIGRldiBzaG93IFxcXCIkZGV2XFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rYWRkX2R1bW15KClcXG4re1xcbitcXHRsb2NhbCBuZXRkZXY9JDFcXG4rXFxuK1xcdGlwIGxpbmsgYWRkIFxcXCIkbmV0ZGV2XFxcIiB0eXBlIGR1bW15IHx8IHJldHVybiAxXFxuK1xcdGlwIGxpbmsgc2V0IFxcXCIkbmV0ZGV2XFxcIiB1cCB8fCByZXR1cm4gMVxcbit9XFxuK1xcbithZGRfcnhlKClcXG4re1xcbitcXHRsb2NhbCBkZXY9JDFcXG4rXFx0bG9jYWwgbmV0ZGV2PSQyXFxuK1xcbitcXHRyZG1hIGxpbmsgYWRkIFxcXCIkZGV2XFxcIiB0eXBlIHJ4ZSBuZXRkZXYgXFxcIiRuZXRkZXZcXFwiXFxuK31cXG4rXFxuK3JkbWFfZGV2X29uX25ldGRldigpXFxuK3tcXG4rXFx0bG9jYWwgbmV0ZGV2PSQxXFxuK1xcbitcXHRyZG1hIGxpbmsgc2hvdyAyXFx1MDAzZS9kZXYvbnVsbCB8IGF3ayAtdiB3YW50PVxcXCIkbmV0ZGV2XFxcIiAnXFxuK1xcdFxcdHtcXG4rXFx0XFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIE5GOyBpKyspXFxuK1xcdFxcdFxcdFxcdGlmICgkaSA9PSBcXFwibmV0ZGV2XFxcIiBcXHUwMDI2XFx1MDAyNiAkKGkgKyAxKSA9PSB3YW50KSB7XFxuK1xcdFxcdFxcdFxcdFxcdGRldiA9ICQyXFxuK1xcdFxcdFxcdFxcdFxcdHN1YigvXFxcXC8uKi8sIFxcXCJcXFwiLCBkZXYpXFxuK1xcdFxcdFxcdFxcdFxcdHByaW50IGRldlxcbitcXHRcXHRcXHRcXHRcXHRleGl0XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0fSdcXG4rfVxcbitcXG4rd2FpdF9yZG1hX2Rldl9vbl9uZXRkZXYoKVxcbit7XFxuK1xcdGxvY2FsIG5ldGRldj0kMVxcbitcXHRsb2NhbCBkZXZcXG4rXFx0bG9jYWwgaVxcbitcXG4rXFx0Zm9yIGkgaW4gJChzZXEgMSA1MCk7IGRvXFxuK1xcdFxcdGRldj0kKHJkbWFfZGV2X29uX25ldGRldiBcXFwiJG5ldGRldlxcXCIpXFxuK1xcdFxcdGlmIFsgLW4gXFxcIiRkZXZcXFwiIF07IHRoZW5cXG4rXFx0XFx0XFx0ZWNobyBcXFwiJGRldlxcXCJcXG4rXFx0XFx0XFx0cmV0dXJuIDBcXG4rXFx0XFx0ZmlcXG4rXFx0XFx0c2xlZXAgMC4xXFxuK1xcdGRvbmVcXG4rXFxuK1xcdHJldHVybiAxXFxuK31cXG4rXFxuK3NldHVwX2RldnMoKVxcbit7XFxuK1xcdGNsZWFudXBfZGV2c1xcbitcXG4rXFx0YWRkX2R1bW15IFxcXCIkRFVNTVlfQVxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0YWRkX2R1bW15IFxcXCIkRFVNTVlfQlxcXCIgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGFkZF9yeGUgXFxcIiRSWEVfQVxcXCIgXFxcIiREVU1NWV9BXFxcIiB8fCByZXR1cm4gMVxcbitcXHRhZGRfcnhlIFxcXCIkUlhFX0JcXFwiIFxcXCIkRFVNTVlfQlxcXCIgfHwgcmV0dXJuIDFcXG4rfVxcbitcXG4rY2xlYW51cF9kZXZzKClcXG4re1xcbitcXHRpcCBsaW5rIGRlbCBcXFwiJERVTU1ZX0FcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGlwIGxpbmsgZGVsIFxcXCIkRFVNTVlfQlxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rfVxcbitcXG4rc2V0dXAoKVxcbit7XFxuK1xcdE9MRF9NT0RFPSQocmRtYSBzeXN0ZW0gc2hvdyAyXFx1MDAzZS9kZXYvbnVsbCB8XFxuK1xcdFxcdCAgIHNlZCAtbiAncy8uKm5ldG5zIFxcXFwoW14gXSpcXFxcKS4qL1xcXFwxL3AnKVxcbitcXHRbIC1uIFxcXCIkT0xEX01PREVcXFwiIF0gfHwga3NmdF9za2lwIFxcXCJmYWlsZWQgdG8gcmVhZCBSRE1BIG5ldG5zIG1vZGVcXFwiXFxuK1xcbitcXHRyZG1hIHN5c3RlbSBzZXQgbmV0bnMgZXhjbHVzaXZlIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSB8fFxcbitcXHRcXHRrc2Z0X3NraXAgXFxcInJkbWEgbmV0bnMgZXhjbHVzaXZlIG1vZGUgaXMgbm90IHN1cHBvcnRlZFxcXCJcXG4rXFx0TU9ERV9DSEFOR0VEPTFcXG4rXFxuK1xcdGlwIG5ldG5zIGFkZCBcXFwiJE5TMVxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0aXAgbmV0bnMgYWRkIFxcXCIkTlMyXFxcIiB8fCByZXR1cm4gMVxcbit9XFxuK1xcbitjbGVhbnVwKClcXG4re1xcbitcXHRjbGVhbnVwX2RldnNcXG4rXFxuK1xcdGlwIG5ldG5zIGRlbCBcXFwiJE5TMVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0aXAgbmV0bnMgZGVsIFxcXCIkTlMyXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXG4rXFx0aWYgWyBcXFwiJE1PREVfQ0hBTkdFRFxcXCIgLWVxIDEgXTsgdGhlblxcbitcXHRcXHRyZG1hIHN5c3RlbSBzZXQgbmV0bnMgXFxcIiRPTERfTU9ERVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZmlcXG4rXFxuK1xcdGZvciBtIGluIFxcXCIke01PRFNbQF19XFxcIjsgZG9cXG4rXFx0XFx0bW9kcHJvYmUgLXIgXFxcIiRtXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRkb25lXFxuK31cXG4rXFxuK3JkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWUoKVxcbit7XFxuK1xcdHJkbWEgZGV2IGhlbHAgMlxcdTAwM2VcXHUwMDI2MSB8IGdyZXAgLUVxICduZXRucyAuKm5hbWV8bmFtZSAuKm5ldG5zJ1xcbit9XFxuK1xcbitbIFxcXCIkKGlkIC11KVxcXCIgLWVxIDAgXSB8fCBrc2Z0X3NraXAgXFxcIm11c3QgYmUgcnVuIGFzIHJvb3RcXFwiXFxuK25lZWRfY21kIGlwXFxuK25lZWRfY21kIHJkbWFcXG4rbmVlZF9jbWQgbW9kcHJvYmVcXG4rXFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK1xcbitmb3IgbSBpbiBcXFwiJHtNT0RTW0BdfVxcXCI7IGRvXFxuK1xcdG1vZGluZm8gXFxcIiRtXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgfHwga3NmdF9za2lwIFxcXCJtb2R1bGUgJG0gbm90IGZvdW5kXFxcIlxcbitcXHRtb2Rwcm9iZSBcXFwiJG1cXFwiIHx8IGZhaWwgXFxcImZhaWxlZCB0byBsb2FkICRtXFxcIlxcbitkb25lXFxuK1xcbitzZXR1cCB8fCBmYWlsIFxcXCJmYWlsZWQgdG8gY3JlYXRlIG5ldCBuYW1lc3BhY2VzXFxcIlxcbitcXG4ra3RhcF9wcmludF9oZWFkZXJcXG4ra3RhcF9zZXRfcGxhbiA2XFxuK1xcbitpZiBzZXR1cF9kZXZzIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9BXFxcIiBuZXRucyBcXFwiJE5TMVxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rICAgcmRtYV9ucyBcXFwiJE5TMVxcXCIgZGV2IHNldCBcXFwiJFJYRV9BXFxcIiBuYW1lIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9CXFxcIiBuZXRucyBcXFwiJE5TMlxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rICAgcmRtYV9ucyBcXFwiJE5TMlxcXCIgZGV2IHNldCBcXFwiJFJYRV9CXFxcIiBuYW1lIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWFfZGV2X2V4aXN0cyBcXFwiJE5TMVxcXCIgXFxcIiRSWEVfU0FNRVxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rICAgcmRtYV9kZXZfZXhpc3RzIFxcXCIkTlMyXFxcIiBcXFwiJFJYRV9TQU1FXFxcIjsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwiJFRFU1RfU0FNRV9OQU1FU1xcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfU0FNRV9OQU1FU1xcXCJcXG4rZmlcXG4rY2xlYW51cF9kZXZzXFxuK1xcbitpZiAhIHNldHVwX2RldnMgfHxcXG4rICAgISByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmV0bnMgXFxcIiROUzFcXFwiIHx8XFxuKyAgICEgcmRtYV9ucyBcXFwiJE5TMVxcXCIgZGV2IHNldCBcXFwiJFJYRV9BXFxcIiBuYW1lIFxcXCIkUlhFX1NBTUVcXFwiIHx8XFxuKyAgICEgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0JcXFwiIG5ldG5zIFxcXCIkTlMyXFxcIiB8fFxcbisgICAhIHJkbWFfbnMgXFxcIiROUzJcXFwiIGRldiBzZXQgXFxcIiRSWEVfQlxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIjsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfTU9WRV9DT05GTElDVFxcXCJcXG4rZWxpZiByZG1hX25zIFxcXCIkTlMxXFxcIiBkZXYgc2V0IFxcXCIkUlhFX1NBTUVcXFwiIG5ldG5zIFxcXCIkTlMyXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX01PVkVfQ09ORkxJQ1RcXFwiXFxuK2VsaWYgcmRtYV9kZXZfZXhpc3RzIFxcXCIkTlMxXFxcIiBcXFwiJFJYRV9TQU1FXFxcIiBcXHUwMDI2XFx1MDAyNlxcbisgICAgIHJkbWFfZGV2X2V4aXN0cyBcXFwiJE5TMlxcXCIgXFxcIiRSWEVfU0FNRVxcXCI7IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIiRURVNUX01PVkVfQ09ORkxJQ1RcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX01PVkVfQ09ORkxJQ1RcXFwiXFxuK2ZpXFxuK2NsZWFudXBfZGV2c1xcbitcXG4raWYgISBzZXR1cF9kZXZzOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9NT1ZFX1JFTkFNRVxcXCJcXG4rZWxpZiByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmV0bnMgXFxcIiROUzJcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgICAgcmRtYV9ucyBcXFwiJE5TMlxcXCIgZGV2IHNldCBcXFwiJFJYRV9BXFxcIiBuYW1lIFxcXCIkUlhFX05FV1xcXCI7IHRoZW5cXG4rXFx0aWYgcmRtYV9kZXZfZXhpc3RzIFxcXCIkTlMyXFxcIiBcXFwiJFJYRV9ORVdcXFwiIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICEgcmRtYV9kZXZfZXhpc3RzIFxcXCJcXFwiIFxcXCIkUlhFX0FcXFwiOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCIkVEVTVF9NT1ZFX1JFTkFNRVxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfTU9WRV9SRU5BTUVcXFwiXFxuK1xcdGZpXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX01PVkVfUkVOQU1FXFxcIlxcbitmaVxcbitjbGVhbnVwX2RldnNcXG4rXFxuK2lmICEgcmRtYV9zdXBwb3J0c19jb21iaW5lZF9tb3ZlX3JlbmFtZTsgdGhlblxcbitcXHRrdGFwX3Rlc3Rfc2tpcCBcXFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcXFwiXFxuK2VsaWYgISBzZXR1cF9kZXZzOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVxcXCJcXG4rZWxpZiByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmV0bnMgXFxcIiROUzJcXFwiIG5hbWUgXFxcIiRSWEVfTkVXXFxcIjsgdGhlblxcbitcXHRpZiByZG1hX2Rldl9leGlzdHMgXFxcIiROUzJcXFwiIFxcXCIkUlhFX05FV1xcXCIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgISByZG1hX2Rldl9leGlzdHMgXFxcIlxcXCIgXFxcIiRSWEVfQVxcXCI7IHRoZW5cXG4rXFx0XFx0a3RhcF90ZXN0X3Bhc3MgXFxcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVxcXCJcXG4rXFx0ZmlcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcXFwiXFxuK2ZpXFxuK2NsZWFudXBfZGV2c1xcbitcXG4raWYgISBzZXR1cF9kZXZzOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcXFwiXFxuK2VsaWYgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0FcXFwiIG5hbWUgXFxcIiRSWEVfU0FNRVxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rICAgICByZG1hIGRldiBzZXQgXFxcIiRSWEVfQlxcXCIgbmFtZSBcXFwiJFJYRV9ORVdcXFwiOyB0aGVuXFxuK1xcdGlmIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9TQU1FXFxcIiBuYW1lIFxcXCIkUlhFX05FV1xcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcXFwiXFxuK1xcdGVsaWYgcmRtYV9kZXZfZXhpc3RzIFxcXCJcXFwiIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgcmRtYV9kZXZfZXhpc3RzIFxcXCJcXFwiIFxcXCIkUlhFX05FV1xcXCI7IHRoZW5cXG4rXFx0XFx0a3RhcF90ZXN0X3Bhc3MgXFxcIiRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXFxcIlxcbitcXHRmaVxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcXFwiXFxuK2ZpXFxuK2NsZWFudXBfZGV2c1xcbitcXG4raWYgISBzZXR1cF9kZXZzOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9URUFSRE9XTl9SRVRVUk5cXFwiXFxuK2VsaWYgISByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIiB8fFxcbisgICAgICEgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0JcXFwiIG5ldG5zIFxcXCIkTlMyXFxcIiB8fFxcbisgICAgICEgcmRtYV9ucyBcXFwiJE5TMlxcXCIgZGV2IHNldCBcXFwiJFJYRV9CXFxcIiBuYW1lIFxcXCIkUlhFX1NBTUVcXFwiIHx8XFxuKyAgICAgISByZG1hX2Rldl9leGlzdHMgXFxcIiROUzJcXFwiIFxcXCIkUlhFX1NBTUVcXFwiOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9URUFSRE9XTl9SRVRVUk5cXFwiXFxuK2Vsc2VcXG4rXFx0aXAgbmV0bnMgZGVsIFxcXCIkTlMyXFxcIlxcbitcXHRyZXR1cm5lZD0kKHdhaXRfcmRtYV9kZXZfb25fbmV0ZGV2IFxcXCIkRFVNTVlfQlxcXCIpXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCJkZXZpY2UgcmV0dXJuZWQgdG8gaW5pdF9uZXQgYXMgJyR7cmV0dXJuZWQ6LVxcdTAwM2NtaXNzaW5nXFx1MDAzZX0nXFxcIlxcbitcXHRpZiByZG1hX2Rldl9leGlzdHMgXFxcIlxcXCIgXFxcIiRSWEVfU0FNRVxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgWyAtbiBcXFwiJHJldHVybmVkXFxcIiBdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgIFsgXFxcIiRyZXR1cm5lZFxcXCIgIT0gXFxcIiRSWEVfU0FNRVxcXCIgXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICBbIFxcXCIke3JldHVybmVkI2liZGV2fVxcXCIgIT0gXFxcIiRyZXR1cm5lZFxcXCIgXTsgdGhlblxcbitcXHRcXHRrdGFwX3Rlc3RfcGFzcyBcXFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9URUFSRE9XTl9SRVRVUk5cXFwiXFxuK1xcdGZpXFxuK2ZpXFxuK2NsZWFudXBfZGV2c1xcbitcXG4ra3RhcF9maW5pc2hlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MjoxNC4wMzM4OTE4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1NzY0OTUwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX1JETUFcIixcbiAgICBcIlJETUFfUlhFXCIsXG4gICAgXCJJTkZJTklCQU5EX1VTRVJfQUNDRVNTXCIsXG4gICAgXCJTTUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dFwiLFxuICAgIFwicmRtYV9kZXZfY2hhbmdlX25ldG5zXCIsXG4gICAgXCJyZG1hX2Rldl9waWNrX25ldG5zX25hbWVcIixcbiAgICBcIm5sZGV2X3NldF9kb2l0XCIsXG4gICAgXCJyZG1hY2dfcmVzb3VyY2Vfc2V0X21heFwiLFxuICAgIFwicmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkXCIsXG4gICAgXCJhbGxvY19uYW1lX2lkXCIsXG4gICAgXCJfX2FsbG9jX25hbWVfaWRcIixcbiAgICBcInJ4ZV9tbWFwXCIsXG4gICAgXCJzbWNfcG5ldF9maW5kX2liXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSRE1BIGRldmljZXMgdG8gaGF2ZSB0aGUgc2FtZSBuYW1lIGFjcm9zcyBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzLCBtb2RpZnlpbmcgdGhlIGNvcmUgUkRNQSBkZXZpY2UgbmFtaW5nLCBuZXRucyBjaGFuZ2UgbG9naWMsIGFuZCBjZ3JvdXAgcmVzb3VyY2UgdHJhY2tpbmcuIEl0IGFsc28gdG91Y2hlcyBTTUMgcG5ldCB0YWJsZSBsb29rdXBzIGFuZCBSWEUgbW1hcCBoYW5kbGluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBtb3ZpbmcgUkRNQSBkZXZpY2VzIGJldHdlZW4gbmFtZXNwYWNlcywgdGhlIFJETUEgY2dyb3VwIGludGVyZmFjZSwgYW5kIHRoZSBSWEUgbW1hcCBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRiMjIzMTc1NjFiYjQzNjdkYzVlNmVhZDBmMjk2ZTJkMDczNjFjMzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwMDo1MjoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbVxuaW5kZXggNzRmOTUwNmY0MmU3YWMuLjczOWY3YjZhMTI1OThiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cbkBAIC0xMiw2ICsxMiwxMCBAQCBEZXNjcmlwdGlvbjogXHRJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG9cbiBcdFx0Zm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOlxuIFx0XHRta2RpciAtcCAvY29uZmlnL3JkbWFfY20vXHUwMDNjaGNhXHUwMDNlXG4gXG4rXHRcdE5vdGU6IGNvbmZpZ2ZzIGhhcyBubyBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0LCBzbyB0aGlzXG4rXHRcdGludGVyZmFjZSBjYW5ub3QgcmVwcmVzZW50IHR3byBkZXZpY2VzIHRoYXQgc2hhcmUgYSBuYW1lIGluXG4rXHRcdGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS5cbitcbiBcbiBXaGF0OiBcdFx0L2NvbmZpZy9yZG1hX2NtL1x1MDAzY2hjYVx1MDAzZS9wb3J0cy9cdTAwM2Nwb3J0LW51bVx1MDAzZS9kZWZhdWx0X3JvY2VfbW9kZVxuIERhdGU6IFx0XHROb3ZlbWJlciAyOSwgMjAxNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvcmRtYS5yc3RcbmluZGV4IGU2OTM2OWI3MjUyZWEzLi44ZDBjM2E3OTZlZTNkNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9yZG1hLnJzdFxuQEAgLTkwLDYgKzkwLDEzIEBAIEZvbGxvd2luZyByZXNvdXJjZXMgY2FuIGJlIGFjY291bnRlZCBieSByZG1hIGNvbnRyb2xsZXIuXG4gICBoY2Ffb2JqZWN0IFx0TWF4aW11bSBudW1iZXIgb2YgSENBIE9iamVjdHNcbiAgID09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbitSRE1BIGRldmljZXMgZnJvbSBhbGwgbmV0d29yayBuYW1lc3BhY2VzIGFyZSBsaXN0ZWQuIEVhY2ggbGluZSBzdGFydHMgd2l0aFxuK3RoZSBkZXZpY2UgbmFtZS4gSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaGFzIHRoZSBzYW1lIG5hbWUsIGBgaW5kZXg9TmBgXG4rZm9sbG93cyB0aGUgbmFtZSwgd2hlcmUgYGBOYGAgaXMgdGhlIHN5c3RlbS13aWRlIFJETUEgZGV2aWNlIGluZGV4LCB1bmlxdWVcbithbW9uZyByZWdpc3RlcmVkIGRldmljZXMuIFdoZW4gY29uZmlndXJpbmcgYSBsaW1pdCwgdGhlIGluZGV4IGlzIG9wdGlvbmFsXG4rZm9yIGEgZ2xvYmFsbHkgdW5pcXVlIG5hbWUgYW5kIHJlcXVpcmVkIGZvciBhIGR1cGxpY2F0ZSBuYW1lLiBBIHdyaXRlIHdpdGhvdXRcbit0aGUgcmVxdWlyZWQgaW5kZXggZmFpbHMgd2l0aCBgYC1FTk9UVU5JUWBgLlxuK1xuIDIuIFVzYWdlIEV4YW1wbGVzXG4gPT09PT09PT09PT09PT09PT1cbiBcbkBAIC05Nyw2ICsxMDQsNyBAQCBGb2xsb3dpbmcgcmVzb3VyY2VzIGNhbiBiZSBhY2NvdW50ZWQgYnkgcmRtYSBjb250cm9sbGVyLlxuIFxuIFx0ZWNobyBtbHg0XzAgaGNhX2hhbmRsZT0yIGhjYV9vYmplY3Q9MjAwMCBcdTAwM2UgL3N5cy9mcy9jZ3JvdXAvcmRtYS8xL3JkbWEubWF4XG4gXHRlY2hvIG9jcmRtYTEgaGNhX2hhbmRsZT0zIFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9yZG1hLzIvcmRtYS5tYXhcbitcdGVjaG8gXCJyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yXCIgXHUwMDNlIC9zeXMvZnMvY2dyb3VwL3JkbWEvMy9yZG1hLm1heFxuIFxuIChiKSBRdWVyeSByZXNvdXJjZSBsaW1pdDo6XG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uZGY3NGQ1NTRkMmNkZmYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuQEAgLTI3NTIsNiArMjc1MiwxMSBAQCBSRE1BXG4gVGhlIFwicmRtYVwiIGNvbnRyb2xsZXIgcmVndWxhdGVzIHRoZSBkaXN0cmlidXRpb24gYW5kIGFjY291bnRpbmcgb2ZcbiBSRE1BIHJlc291cmNlcy5cbiBcbitSRE1BIGRldmljZXMgZnJvbSBhbGwgbmV0d29yayBuYW1lc3BhY2VzIGFyZSBsaXN0ZWQuIEVhY2ggbGluZSBzdGFydHMgd2l0aFxuK3RoZSBkZXZpY2UgbmFtZS4gSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaGFzIHRoZSBzYW1lIG5hbWUsIGBgaW5kZXg9TmBgXG4rZm9sbG93cyB0aGUgbmFtZSwgd2hlcmUgYGBOYGAgaXMgdGhlIHN5c3RlbS13aWRlIFJETUEgZGV2aWNlIGluZGV4LCB1bmlxdWVcbithbW9uZyByZWdpc3RlcmVkIGRldmljZXMuXG4rXG4gUkRNQSBJbnRlcmZhY2UgRmlsZXNcbiB+fn5+fn5+fn5+fn5+fn5+fn5+flxuIFxuQEAgLTI3NjAsNyArMjc2NSwxMSBAQCBSRE1BIEludGVyZmFjZSBGaWxlc1xuIFx0ZXhjZXB0IHJvb3QgdGhhdCBkZXNjcmliZXMgY3VycmVudCBjb25maWd1cmVkIHJlc291cmNlIGxpbWl0XG4gXHRmb3IgYSBSRE1BL0lCIGRldmljZS5cbiBcbi1cdExpbmVzIGFyZSBrZXllZCBieSBkZXZpY2UgbmFtZSBhbmQgYXJlIG5vdCBvcmRlcmVkLlxuK1x0TGluZXMgYXJlIGtleWVkIGJ5IGRldmljZSBuYW1lIGFuZCBhcmUgbm90IG9yZGVyZWQuIEEgd3JpdGUgbWF5XG4rXHRpbmNsdWRlIGBgaW5kZXg9TmBgIGFmdGVyIHRoZSBkZXZpY2UgbmFtZS4gVGhlIGluZGV4IGlzIG9wdGlvbmFsXG4rXHR3aGVuIHRoZSBuYW1lIGlzIGdsb2JhbGx5IHVuaXF1ZS4gSWYgbXVsdGlwbGUgZGV2aWNlcyBoYXZlIHRoYXRcbitcdG5hbWUsIHRoZSBpbmRleCBpcyByZXF1aXJlZCBhbmQgYSB3cml0ZSB3aXRob3V0IGl0IGZhaWxzIHdpdGhcbitcdGBgLUVOT1RVTklRYGAuXG4gXHRFYWNoIGxpbmUgY29udGFpbnMgc3BhY2Ugc2VwYXJhdGVkIHJlc291cmNlIG5hbWUgYW5kIGl0cyBjb25maWd1cmVkXG4gXHRsaW1pdCB0aGF0IGNhbiBiZSBkaXN0cmlidXRlZC5cbiBcbkBAIC0yNzc2LDYgKzI3ODUsMTAgQEAgUkRNQSBJbnRlcmZhY2UgRmlsZXNcbiBcdCAgbWx4NF8wIGhjYV9oYW5kbGU9MiBoY2Ffb2JqZWN0PTIwMDBcbiBcdCAgb2NyZG1hMSBoY2FfaGFuZGxlPTMgaGNhX29iamVjdD1tYXhcbiBcbitcdEZvciBkZXZpY2VzIHdpdGggZHVwbGljYXRlIG5hbWVzLCBzZWxlY3QgdGhlIGRldmljZSBieSBpbmRleDo6XG4rXG4rXHQgIGVjaG8gXCJyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yXCIgXHUwMDNlIHJkbWEubWF4XG4rXG4gICByZG1hLmN1cnJlbnRcbiBcdEEgcmVhZC1vbmx5IGZpbGUgdGhhdCBkZXNjcmliZXMgY3VycmVudCByZXNvdXJjZSB1c2FnZS5cbiBcdEl0IGV4aXN0cyBmb3IgYWxsIHRoZSBjZ3JvdXAgZXhjZXB0IHJvb3QuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuY1xuaW5kZXggMWYwMzdmZTAxNDUwZWYuLjg2MTFiNGUzMmNmYjYyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXG5AQCAtMTcsNiArMTcsNyBAQFxuIHZvaWQgaWJfZGV2aWNlX3JlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXG4ge1xuIFx0ZGV2aWNlLVx1MDAzZWNnX2RldmljZS5uYW1lID0gZGV2aWNlLVx1MDAzZW5hbWU7XG4rXHRkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLmluZGV4ID0gZGV2aWNlLVx1MDAzZWluZGV4O1xuIFx0cmRtYWNnX3JlZ2lzdGVyX2RldmljZShcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuY1xuaW5kZXggODkxZTUyYWZiOGY0YmEuLmMzODlkNGUzN2I2YmNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXG5AQCAtNjUsNiArNjUsMTAgQEAgc3RhdGljIHN0cnVjdCBjbWFfZGV2X3BvcnRfZ3JvdXAgKnRvX2Rldl9wb3J0X2dyb3VwKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbiBcdHJldHVybiBjb250YWluZXJfb2YoZ3JvdXAsIHN0cnVjdCBjbWFfZGV2X3BvcnRfZ3JvdXAsIGdyb3VwKTtcbiB9XG4gXG4rLypcbisgKiBjb25maWdmcyBpcyBub3QgbmV0IG5hbWVzcGFjZSBhd2FyZSwgc28gYSBuYW1lIHNoYXJlZCBieSBkZXZpY2VzIGluXG4rICogZGlmZmVyZW50IG5hbWVzcGFjZXMgcmVzb2x2ZXMgdG8gdGhlIGZpcnN0IG1hdGNoIGhlcmUuXG4rICovXG4gc3RhdGljIGJvb2wgZmlsdGVyX2J5X25hbWUoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LCB2b2lkICpjb29raWUpXG4ge1xuIFx0cmV0dXJuICFzdHJjbXAoZGV2X25hbWUoXHUwMDI2aWJfZGV2LVx1MDAzZWRldiksIGNvb2tpZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxuaW5kZXggMTkxMDRjNTQyYjI3MGQuLmFhZjMzMGIwZDMzM2FlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmhcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXG5AQCAtMzU2LDcgKzM1Niw4IEBAIHZvaWQgaWJfcG9ydF91bnJlZ2lzdGVyX2NsaWVudF9ncm91cHMoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0X251bSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcyk7XG4gXG4gaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKTtcbitcdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXG4gaW50IHJkbWFfbmxfbmV0X2luaXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7XG4gdm9pZCByZG1hX25sX25ldF9leGl0KHN0cnVjdCByZG1hX2Rldl9uZXQgKnJuZXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcbmluZGV4IGI4MTkzZTA3N2E3NDZmLi40Yzc1MDc4NDQ4YTMyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xuQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgREVDTEFSRV9SV1NFTShyZG1hX25ldHNfcndzZW0pO1xuIGJvb2wgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMgPSB0cnVlO1xuIG1vZHVsZV9wYXJhbV9uYW1lZChuZXRuc19tb2RlLCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucywgYm9vbCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhuZXRuc19tb2RlLFxuLVx0XHQgXCJTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKVwiKTtcbitcdFx0IFwiU2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkuIEluIGV4Y2x1c2l2ZSBtb2RlIGRldmljZSBuYW1lcyBhcmUgdW5pcXVlIHBlciBuZXQgbmFtZXNwYWNlXCIpO1xuIC8qKlxuICAqIHJkbWFfZGV2X2FjY2Vzc19uZXRucygpIC0gUmV0dXJuIHdoZXRoZXIgYW4gcmRtYSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkXG4gICpcdFx0XHQgICAgIGZyb20gYSBzcGVjaWZpZWQgbmV0IG5hbWVzcGFjZSBvciBub3QuXG5AQCAtMjY4LDcgKzI2OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWJkZXZfbHNtX25iID0ge1xuIH07XG4gXG4gc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuLVx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCk7XG4rXHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbitcdFx0XHRcdCBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKTtcbiBcbiAvKiBQb2ludGVyIHRvIHRoZSBSQ1UgaGVhZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGliX3BvcnRfZGF0YSBhcnJheSAqL1xuIHN0cnVjdCBpYl9wb3J0X2RhdGFfcmN1IHtcbkBAIC0zNTEsMTMgKzM1MiwxNSBAQCB2b2lkIGliX2RldmljZV9wdXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIH1cbiBFWFBPUlRfU1lNQk9MKGliX2RldmljZV9wdXQpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2aWNlO1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcbiBcdHhhX2Zvcl9lYWNoIChcdTAwMjZkZXZpY2VzLCBpbmRleCwgZGV2aWNlKVxuLVx0XHRpZiAoIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpXG4rXHRcdGlmIChyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpXG4gXHRcdFx0cmV0dXJuIGRldmljZTtcbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTM5NSw3ICszOTgsNyBAQCBpbnQgaWJfZGV2aWNlX3JlbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSkpIHtcbitcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShuYW1lLCByZG1hX2Rldl9uZXQoaWJkZXYpKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHR9XG5AQCAtNDM1LDcgKzQzOCwxMyBAQCBpbnQgaWJfZGV2aWNlX3NldF9kaW0oc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHVzZV9kaW0pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuKy8qXG4rICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAnJWQnIHN0eWxlIEBuYW1lIHBhdHRlcm4gd2l0aGluIG5ldCBuYW1lc3BhY2VcbisgKiBAbmV0LiBSZXR1cm5zIHRoZSBpbmRleCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8uIFRoZSBjYWxsZXIgYnVpbGRzXG4rICogdGhlIGZpbmFsIHVuaXF1ZSBkZXZpY2UgbmFtZSBmcm9tIHRoZSByZXR1cm5lZCBpbmRleC5cbisgKi9cbitzdGF0aWMgaW50IF9fYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IGliX2RldmljZSAqc2tpcClcbiB7XG4gXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XG4gXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuQEAgLTQ0OCw2ICs0NTcsOCBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4gXHR4YV9mb3JfZWFjaCAoXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSkge1xuIFx0XHRjaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdO1xuIFxuK1x0XHRpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzc2NhbmYoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksIG5hbWUsIFx1MDAyNmkpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChpIFx1MDAzYyAwIHx8IGkgXHUwMDNlPSBJTlRfTUFYKVxuQEAgLTQ2MiwxNSArNDczLDI3IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiBcdH1cbiBcbiBcdHJjID0gaWRhX2FsbG9jKFx1MDAyNmludXNlLCBHRlBfS0VSTkVMKTtcbi1cdGlmIChyYyBcdTAwM2MgMClcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRyYyA9IGRldl9zZXRfbmFtZShcdTAwMjZpYmRldi1cdTAwM2VkZXYsIG5hbWUsIHJjKTtcbiBvdXQ6XG4gXHRpZGFfZGVzdHJveShcdTAwMjZpbnVzZSk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0cmV0dXJuIF9fYWxsb2NfbmFtZV9pZChuZXQsIG5hbWUsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aW50IGlkO1xuK1xuK1x0aWQgPSBhbGxvY19uYW1lX2lkKHJkbWFfZGV2X25ldChpYmRldiksIG5hbWUpO1xuK1x0aWYgKGlkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gaWQ7XG4rXG4rXHRyZXR1cm4gZGV2X3NldF9uYW1lKFx1MDAyNmliZGV2LVx1MDAzZWRldiwgbmFtZSwgaWQpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBpYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTtcbkBAIC0xMTUxLDggKzExNzQsMTcgQEAgc3RhdGljIHZvaWQgcmRtYV9kZXZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0XHQvKlxuIFx0XHQgKiBJZiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gdGhlIE5TIHRoZW4gbW92ZSBpdCBiYWNrIHRvIGluaXQuXG4rXHRcdCAqIFByb3ZpZGUgYSBmYWxsYmFjayBwYXR0ZXJuIHNvIGEgbmFtZSBjb25mbGljdCBpbiBpbml0X25ldFxuK1x0XHQgKiBjYW5ub3QgbWFrZSB0aGUgdGVhcmRvd24gbW92ZSBmYWlsLlxuIFx0XHQgKi9cbi1cdFx0cmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCBcdTAwMjZpbml0X25ldCk7XG4rXHRcdGlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoXHUwMDI2ZGV2LVx1MDAzZWNvcmVkZXYucmRtYV9uZXQpKSkge1xuK1x0XHRcdHJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIG5ldCwgXHUwMDI2aW5pdF9uZXQsXG4rXHRcdFx0XHRcdFx0ICAgIE5VTEwsIFwiaWJkZXYlZFwiKTtcbitcdFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbitcdFx0XHRcdFdBUk4oMSxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gbW92ZSBSRE1BIGRldmljZSAlcyB0byBpbml0X25ldCBvbiBuZXRucyBleGl0OiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgICBkZXZfbmFtZShcdTAwMjZkZXYtXHUwMDNlZGV2KSwgcmV0KTtcbitcdFx0fVxuIFxuIFx0XHRwdXRfZGV2aWNlKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuIFx0XHRkb3duX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG5AQCAtMTIwNiw3ICsxMjM4LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHJkbWFfZGV2X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiB9XG4gXG4gLypcbi0gKiBBc3NpZ24gdGhlIHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUgYW5kIHRoZSB1bmlxdWUgZGV2aWNlIGluZGV4LiBUaGlzIGlzXG4rICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhlIGRldmljZVxuKyAqIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgbmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGlzIGFzc2lnbmVkIHRvLiBUaGlzIGlzXG4gICogdW5kb25lIGJ5IGliX2RlYWxsb2NfZGV2aWNlLlxuICAqL1xuIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKVxuQEAgLTEyMjMsNyArMTI1Niw4IEBAIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKSB7XG4rXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksXG4rXHRcdFx0XHQgICAgcmRtYV9kZXZfbmV0KGRldmljZSkpKSB7XG4gXHRcdHJldCA9IC1FTkZJTEU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTEzODgsOCArMTQyMiw5IEBAIHN0YXRpYyB2b2lkIGliX2RldmljZV9ub3RpZnlfcmVnaXN0ZXIoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIC8qKlxuICAqIGliX3JlZ2lzdGVyX2RldmljZSAtIFJlZ2lzdGVyIGFuIElCIGRldmljZSB3aXRoIElCIGNvcmVcbiAgKiBAZGV2aWNlOiBEZXZpY2UgdG8gcmVnaXN0ZXJcbi0gKiBAbmFtZTogdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZS4gVGhpcyBtYXkgaW5jbHVkZSBhICclJyB3aGljaCB3aWxsXG4tICogXHQgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuXG4rICogQG5hbWU6IGRldmljZSBuYW1lLCB1bmlxdWUgd2l0aGluIHRoZSBkZXZpY2UncyBuZXQgbmFtZXNwYWNlLiBUaGlzIG1heVxuKyAqXHQgIGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbCBjYXVzZSBhIHVuaXF1ZSBpbmRleCB0byBiZSBhZGRlZCB0byB0aGVcbisgKlx0ICBwYXNzZWQgZGV2aWNlIG5hbWUuXG4gICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQlxuICAqXHQgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuIEluIHRoaXMgY2FzZSB0aGUgY2FsbGVyIHNob3VsZCBmdWxseVxuICAqXHRcdHNldHVwIHRoZSBpYmRldiBmb3IgRE1BLiBUaGlzIHVzdWFsbHkgbWVhbnMgdXNpbmcgZG1hX3ZpcnRfb3BzLlxuQEAgLTE2NzAsMTQgKzE3MDUsODMgQEAgdm9pZCBpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKGliX3VucmVnaXN0ZXJfZGV2aWNlX3F1ZXVlZCk7XG4gXG4rc3RhdGljIGJvb2wgcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpza2lwLCBzdHJ1Y3QgbmV0ICpuZXQsXG4rXHRcdFx0XHQgICBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcbitcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuK1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSlcbitcdFx0aWYgKGRldmljZSAhPSBza2lwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFzdHJjbXAobmFtZSwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisvKlxuKyAqIENob29zZSB0aGUgbmFtZSBAZGV2aWNlIHNob3VsZCB1c2UgaW4gbmV0IG5hbWVzcGFjZSBAbmV0LiBAcmVxdWVzdGVkX25hbWVcbisgKiBpcyB1c2VkIGFzIGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSB3aGVuIHNldC4gT3RoZXJ3aXNlIGtlZXAgdGhlIGN1cnJlbnQgbmFtZVxuKyAqIHdoZW4gaXQgaXMgZnJlZSwgb3IgdXNlIGEgdHJ1c3RlZCAnJWQnIEBmYWxsYmFja19wYXR0ZXJuIGZvciB0ZWFyZG93bi4gVGhlXG4rICogY2FsbGVyIG11c3QgaG9sZCB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtLlxuKyAqL1xuK3N0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LFxuK1x0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lLFxuK1x0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4sXG4rXHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbixcbitcdFx0XHRcdCAgICBjb25zdCBjaGFyICoqbmV3X25hbWUpXG4re1xuK1x0aW50IGlkO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbitcbitcdGlmIChyZXF1ZXN0ZWRfbmFtZSkge1xuK1x0XHRpZiAoIXJkbWFfZGV2X25hbWVfaW5fbmV0bnMoZGV2aWNlLCBuZXQsIHJlcXVlc3RlZF9uYW1lKSkge1xuK1x0XHRcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1x0fVxuK1xuK1x0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpIHtcbitcdFx0Km5ld19uYW1lID0gZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKCFmYWxsYmFja19wYXR0ZXJuKVxuK1x0XHRyZXR1cm4gLUVFWElTVDtcbitcbitcdHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgXCJpYmRldiV1XCIsIGRldmljZS1cdTAwM2VpbmRleCk7XG4rXHRpZiAoIXJkbWFfZGV2X25hbWVfaW5fbmV0bnMoZGV2aWNlLCBuZXQsIGJ1ZikpIHtcbitcdFx0Km5ld19uYW1lID0gYnVmO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlkID0gX19hbGxvY19uYW1lX2lkKG5ldCwgZmFsbGJhY2tfcGF0dGVybiwgZGV2aWNlKTtcbitcdGlmIChpZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGlkO1xuK1x0c25wcmludGYoYnVmLCBidWZfbGVuLCBmYWxsYmFja19wYXR0ZXJuLCBpZCk7XG4rXHQqbmV3X25hbWUgPSBidWY7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbiAgKiBUaGUgY2FsbGVyIG11c3QgcGFzcyBpbiBhIGRldmljZSB0aGF0IGhhcyB0aGUga3JlZiBoZWxkIGFuZCB0aGUgcmVmY291bnRcbiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWRcbiAgKiBpbnRvIG5ldC5cbisgKlxuKyAqIE5hbWluZyBydWxlcyBhcmUgaGFuZGxlZCBieSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoKS5cbiAgKi9cbiBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsXG4tXHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0KVxuK1x0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXG4rXHRcdFx0XHQgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybilcbiB7XG4rXHRjaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdO1xuK1x0Y29uc3QgY2hhciAqbmV3X25hbWU7XG4gXHRpbnQgcmV0MiA9IC1FSU5WQUw7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE2OTQsMzAgKzE3OTgsNjUgQEAgc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGlmICghZmFsbGJhY2tfcGF0dGVybikge1xuK1x0XHQvKlxuK1x0XHQgKiBSZWplY3QgYSBwcmVkaWN0YWJsZSBuYW1lIGNvbmZsaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nXG4rXHRcdCAqIGRvd24sIHNvIGEgZG9vbWVkIHVzZXIgbW92ZSBkb2VzIG5vdCBkaXNhYmxlIGEgbGl2ZSBkZXZpY2UuXG4rXHRcdCAqL1xuK1x0XHRkb3duX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuK1x0XHRyZXQgPSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoZGV2aWNlLCBuZXQsIHJlcXVlc3RlZF9uYW1lLFxuK1x0XHRcdFx0XHQgICAgICAgZmFsbGJhY2tfcGF0dGVybiwgYnVmLFxuK1x0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGJ1ZiksIFx1MDAyNm5ld19uYW1lKTtcbitcdFx0dXBfd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LmtvYmosIEtPQkpfUkVNT1ZFKTtcbiBcdGRpc2FibGVfZGV2aWNlKGRldmljZSk7XG4gXG4gXHQvKlxuLVx0ICogQXQgdGhpcyBwb2ludCBubyBvbmUgY2FuIGJlIHVzaW5nIHRoZSBkZXZpY2UsIHNvIGl0IGlzIHNhZmUgdG9cbi1cdCAqIGNoYW5nZSB0aGUgbmFtZXNwYWNlLlxuK1x0ICogUmVjb21wdXRlIHRoZSBkZXN0aW5hdGlvbiBuYW1lIHVuZGVyIHRoZSB3cml0ZSBzaWRlIG9mIGRldmljZXNfcndzZW1cbitcdCAqIG5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQsIGNsb3NpbmcgcmFjZXMgd2l0aCBhIGNvbmN1cnJlbnRcbitcdCAqIHJlZ2lzdHJhdGlvbiBvciByZW5hbWUsIHRoZW4gcHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZSBhdCB0aGUgc3lzZnNcbitcdCAqIGxldmVsLlxuIFx0ICovXG4tXHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuK1x0ZG93bl93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbitcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXG4rXHRcdFx0XHQgICAgICAgZmFsbGJhY2tfcGF0dGVybiwgYnVmLCBzaXplb2YoYnVmKSxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZuZXdfbmFtZSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGlmIChmYWxsYmFja19wYXR0ZXJuKSB7XG4rXHRcdFx0V0FSTigxLFxuK1x0XHRcdCAgICAgXCIlczogZmFpbGVkIHRvIHBpY2sgZGV2aWNlIG5hbWUgZHVyaW5nIG5hbWVzcGFjZSB0ZWFyZG93bjogJWRcXG5cIixcbitcdFx0XHQgICAgIF9fZnVuY19fLCByZXQpO1xuK1x0XHRcdHdyaXRlX3BuZXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIG5ldCk7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fVxuK1x0XHRnb3RvIHJlbmFtZV9kb25lO1xuK1x0fVxuIFxuLVx0ZG93bl9yZWFkKFx1MDAyNmRldmljZXNfcndzZW0pO1xuLVx0Lypcbi1cdCAqIEN1cnJlbnRseSByZG1hIGRldmljZXMgYXJlIHN5c3RlbSB3aWRlIHVuaXF1ZS4gU28gdGhlIGRldmljZSBuYW1lXG4tXHQgKiBpcyBndWFyYW50ZWVkIGZyZWUgaW4gdGhlIG5ldyBuYW1lc3BhY2UuIFB1Ymxpc2ggdGhlIG5ldyBuYW1lc3BhY2Vcbi1cdCAqIGF0IHRoZSBzeXNmcyBsZXZlbC5cbi1cdCAqL1xuLVx0cmV0ID0gZGV2aWNlX3JlbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSk7XG4tXHR1cF9yZWFkKFx1MDAyNmRldmljZXNfcndzZW0pO1xuK1x0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcbitcdHJldCA9IGRldmljZV9yZW5hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiwgbmV3X25hbWUpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfd2FybihcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LFxuLVx0XHRcdCBcIiVzOiBDb3VsZG4ndCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXG5cIixcbi1cdFx0XHQgX19mdW5jX18pO1xuLVx0XHQvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi9cbi1cdFx0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgY3VyX25ldCk7XG4rXHRcdGlmIChmYWxsYmFja19wYXR0ZXJuKSB7XG4rXHRcdFx0V0FSTigxLFxuK1x0XHRcdCAgICAgXCIlczogZmFpbGVkIHRvIHJlbmFtZSBkZXZpY2UgZHVyaW5nIG5hbWVzcGFjZSB0ZWFyZG93bjogJWRcXG5cIixcbitcdFx0XHQgICAgIF9fZnVuY19fLCByZXQpO1xuK1x0XHRcdHJldCA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0ZGV2X3dhcm4oXHUwMDI2ZGV2aWNlLVx1MDAzZWRldixcbitcdFx0XHRcdCBcIiVzOiBDb3VsZG4ndCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXG5cIixcbitcdFx0XHRcdCBfX2Z1bmNfXyk7XG4rXHRcdFx0LyogVHJ5IGFuZCBwdXQgdGhpbmdzIGJhY2sgYW5kIHJlLWVuYWJsZSB0aGUgZGV2aWNlICovXG4rXHRcdFx0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgY3VyX25ldCk7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHN0cnNjcHkoZGV2aWNlLVx1MDAzZW5hbWUsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpLFxuK1x0XHRcdElCX0RFVklDRV9OQU1FX01BWCk7XG4gXHR9XG4rcmVuYW1lX2RvbmU6XG4rXHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiBcbiBcdHJldDIgPSBlbmFibGVfZGV2aWNlX2FuZF9nZXQoZGV2aWNlKTtcbiBcdGlmIChyZXQyKSB7XG5AQCAtMTc0MCwzNiArMTg3OSw3MiBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsXG4gfVxuIFxuIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZClcbitcdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gXHRpbnQgcmV0O1xuIFxuIFx0bmV0ID0gZ2V0X25ldF9uc19ieV9mZChuc19mZCk7XG4gXHRpZiAoSVNfRVJSKG5ldCkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkludmFsaWQgdGFyZ2V0IG5ldCBuYW1lc3BhY2UgZmRcIik7XG4gXHRcdHJldCA9IFBUUl9FUlIobmV0KTtcbiBcdFx0Z290byBuZXRfZXJyO1xuIFx0fVxuIFxuIFx0aWYgKCFuZXRsaW5rX25zX2NhcGFibGUoc2tiLCBuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIk1pc3NpbmcgQ0FQX05FVF9BRE1JTiBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcIik7XG4gXHRcdHJldCA9IC1FUEVSTTtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogTW92aW5nIGEgZGV2aWNlIHRvIHRoZSBuYW1lc3BhY2UgaXQgYWxyZWFkeSBsaXZlcyBpbiBpcyBhIG5vLW9wOyBhXG4rXHQgKiBzdXBwbGllZCBuYW1lIHN0aWxsIHJlbmFtZXMgaXQgaW4gcGxhY2UuXG4rXHQgKi9cbitcdGlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoXHUwMDI2ZGV2LVx1MDAzZWNvcmVkZXYucmRtYV9uZXQpKSkge1xuK1x0XHRyZXQgPSBuYW1lID8gaWJfZGV2aWNlX3JlbmFtZShkZXYsIG5hbWUpIDogMDtcbitcbitcdFx0aWYgKHJldCA9PSAtRUVYSVNUKVxuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkRldmljZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwiKTtcbitcdFx0ZWxzZSBpZiAocmV0ID09IC1FSU5WQUwgXHUwMDI2XHUwMDI2IG5hbWUpXG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiVW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCIpO1xuK1x0XHRnb3RvIG5zX2VycjtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBBbGwgdGhlIGliX2NsaWVudHMsIGluY2x1ZGluZyB1dmVyYnMsIGFyZSByZXNldCB3aGVuIHRoZSBuYW1lc3BhY2UgaXNcbiBcdCAqIGNoYW5nZWQgYW5kIHRoaXMgY2Fubm90IGJlIGJsb2NrZWQgd2FpdGluZyBmb3IgdXNlcnNwYWNlIHRvIGRvXG4gXHQgKiBzb21ldGhpbmcsIHNvIGRpc2Fzc29jaWF0aW9uIGlzIG1hbmRhdG9yeS5cbiBcdCAqL1xuLVx0aWYgKCFkZXYtXHUwMDNlb3BzLmRpc2Fzc29jaWF0ZV91Y29udGV4dCB8fCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykge1xuK1x0aWYgKGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJDYW5ub3QgY2hhbmdlIG5ldCBuYW1lc3BhY2Ugb2YgUkRNQSBkZXZpY2UgaW4gc2hhcmVkIG5ldG5zIG1vZGVcIik7XG4rXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuK1x0XHRnb3RvIG5zX2VycjtcbitcdH1cbitcbitcdGlmICghZGV2LVx1MDAzZW9wcy5kaXNhc3NvY2lhdGVfdWNvbnRleHQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkRldmljZSBkb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZSBjaGFuZ2VzIChubyBkaXNhc3NvY2lhdGUgc3VwcG9ydClcIik7XG4gXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuIFx0XHRnb3RvIG5zX2VycjtcbiBcdH1cbiBcbiBcdGdldF9kZXZpY2UoXHUwMDI2ZGV2LVx1MDAzZWRldik7XG4gXHRpYl9kZXZpY2VfcHV0KGRldik7XG4tXHRyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zLCBuZXQpO1xuK1x0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucywgbmV0LCBuYW1lLFxuK1x0XHRcdFx0ICAgIE5VTEwpO1xuIFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbitcdGlmIChyZXQgPT0gLUVFWElTVClcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkRldmljZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwiKTtcbitcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiVW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCIpO1xuIFxuIFx0cHV0X25ldChuZXQpO1xuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY1xuaW5kZXggYWFlNGYzZjZiY2JhMTQuLjRlZmEzODdlYzFiZTE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY1xuQEAgLTExNzgsNiArMTE3OCwyNCBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0aWYgKCFkZXZpY2UpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSkge1xuK1x0XHRjaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9O1xuK1x0XHR1MzIgbnNfZmQ7XG4rXG4rXHRcdGlmICh0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdKSB7XG4rXHRcdFx0bmxhX3N0cnNjcHkobmFtZSwgdGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSxcbitcdFx0XHRcdCAgICBJQl9ERVZJQ0VfTkFNRV9NQVgpO1xuK1x0XHRcdGlmIChzdHJsZW4obmFtZSkgPT0gMCkge1xuK1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gZG9uZTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xuK1x0XHRlcnIgPSBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChza2IsIGRldmljZSwgbnNfZmQsXG4rXHRcdFx0XHRcdCAgICAgIG5hbWVbMF0gPyBuYW1lIDogTlVMTCwgZXh0YWNrKTtcbitcdFx0Z290byBwdXRfZG9uZTtcbitcdH1cbitcbiBcdGlmICh0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdKSB7XG4gXHRcdGNoYXIgbmFtZVtJQl9ERVZJQ0VfTkFNRV9NQVhdID0ge307XG4gXG5AQCAtMTE5MSwxNCArMTIwOSw2IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmICh0YltSRE1BX05MREVWX05FVF9OU19GRF0pIHtcbi1cdFx0dTMyIG5zX2ZkO1xuLVxuLVx0XHRuc19mZCA9IG5sYV9nZXRfdTMyKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSk7XG4tXHRcdGVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCk7XG4tXHRcdGdvdG8gcHV0X2RvbmU7XG4tXHR9XG4tXG4gXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9ESU1dKSB7XG4gXHRcdHU4IHVzZV9kaW07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbmluZGV4IDlhZjMxZDFkOWQ3MGM3Li5hODJjNDY5NjU0MTZhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbkBAIC03MDAsNiArNzAwLDEyIEBAIGludCBpYl9tYWRfYWdlbnRfc2VjdXJpdHlfc2V0dXAoc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnQsXG4gXHRpZiAocXBfdHlwZSAhPSBJQl9RUFRfU01JKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdC8qXG4rXHQgKiBTRUxpbnV4IGxhYmVscyBhbiBlbmRwb3J0IGJ5IChkZXZpY2UgbmFtZSwgcG9ydCkgZnJvbSBhIGdsb2JhbFxuK1x0ICogcG9saWN5LiBJZiBkZXZpY2VzIGluIGRpZmZlcmVudCBuZXQgbmFtZXNwYWNlcyBzaGFyZSBhIG5hbWUsIHRoZXkgZ2V0XG4rXHQgKiB0aGUgc2FtZSBsYWJlbDsgZGlzdGluZ3Vpc2hpbmcgdGhlbSB3b3VsZCBuZWVkIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydFxuK1x0ICogaW4gdGhlIHBvbGljeSBsYW5ndWFnZSBhbmQgdG9vbGluZy5cbitcdCAqL1xuIFx0c3Bpbl9sb2NrKFx1MDAyNm1hZF9hZ2VudF9saXN0X2xvY2spO1xuIFx0cmV0ID0gc2VjdXJpdHlfaWJfZW5kcG9ydF9tYW5hZ2Vfc3VibmV0KGFnZW50LVx1MDAzZXNlY3VyaXR5LFxuIFx0XHRcdFx0XHRcdGRldl9uYW1lKFx1MDAyNmFnZW50LVx1MDAzZWRldmljZS1cdTAwM2VkZXYpLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuY1xuaW5kZXggN2Y3MjNhMmYzNzAwNTkuLmE0ZWFkODljY2JkMzQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmNcbkBAIC0xMSw3ICsxMSw2IEBAXG4gXG4gI2luY2x1ZGUgXCJyeGUuaFwiXG4gI2luY2x1ZGUgXCJyeGVfbG9jLmhcIlxuLSNpbmNsdWRlIFwicnhlX3F1ZXVlLmhcIlxuIFxuIHZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuIHtcbkBAIC0zMCwyOSArMjksNiBAQCB2b2lkIHJ4ZV9tbWFwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbiBcdGtmcmVlKGlwKTtcbiB9XG4gXG4tLypcbi0gKiBvcGVuIGFuZCBjbG9zZSBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IHRpbWVzIHRoZSBtZW1vcnkgcmVnaW9uIGlzIG1hcHBlZCxcbi0gKiB0byBhdm9pZCByZWxlYXNpbmcgaXQuXG4tICovXG4tc3RhdGljIHZvaWQgcnhlX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXG4tXHRrcmVmX2dldChcdTAwMjZpcC1cdTAwM2VyZWYpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByeGVfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXG4tXHRrcmVmX3B1dChcdTAwMjZpcC1cdTAwM2VyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHJ4ZV92bV9vcHMgPSB7XG4tXHQub3BlbiA9IHJ4ZV92bWFfb3Blbixcbi1cdC5jbG9zZSA9IHJ4ZV92bWFfY2xvc2UsXG4tfTtcbi1cbiAvKipcbiAgKiByeGVfbW1hcCAtIGNyZWF0ZSBhIG5ldyBtbWFwIHJlZ2lvblxuICAqIEBjb250ZXh0OiB0aGUgSUIgdXNlciBjb250ZXh0IG9mIHRoZSBwcm9jZXNzIG1ha2luZyB0aGUgbW1hcCgpIGNhbGxcbkBAIC0xMDYsMTcgKzgyLDEwIEBAIGludCByeGVfbW1hcChzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpcC1cdTAwM2VwZW5kaW5nX21tYXBzKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4ZS1cdTAwM2VwZW5kaW5nX2xvY2spO1xuIFxuLVx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnJ4ZV92bV9vcHM7XG4tXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gaXA7XG4tXG4gXHRyZXQgPSByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgaXAtXHUwMDNlb2JqLCAwKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IE5VTEw7XG4tXHRcdHZtYS1cdTAwM2V2bV9vcHMgPSBOVUxMO1xuLVx0XHRrcmVmX3B1dChcdTAwMjZpcC1cdTAwM2VyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpO1xuK1x0a3JlZl9wdXQoXHUwMDI2aXAtXHUwMDNlcmVmLCByeGVfbW1hcF9yZWxlYXNlKTtcbitcdGlmIChyZXQpXG4gXHRcdHJ4ZV9kYmdfZGV2KHJ4ZSwgXCJlcnIgJWQgZnJvbSByZW1hcF92bWFsbG9jX3JhbmdlXFxuXCIsIHJldCk7XG4tXHRcdGdvdG8gZG9uZTtcbi1cdH1cbiBcbiBkb25lOlxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuaW5kZXggMWVjMTMwZmVlOGVhN2EuLjZlYjEwZDJmMDY1M2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuQEAgLTI0MCw2ICsyNDAsMTAgQEAgc3RhdGljIHZvaWQgcnhlX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKVxuIFx0XHRyeGVfZXJyX3VjKHVjLCBcImNsZWFudXAgZmFpbGVkLCBlcnIgPSAlZFxcblwiLCBlcnIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1Yylcbit7XG4rfVxuK1xuIC8qIHBkICovXG4gc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuIHtcbkBAIC0xNDc4LDYgKzE0ODIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGliX2RldmljZV9vcHMgcnhlX2Rldl9vcHMgPSB7XG4gXHQuZGVzdHJveV9zcnEgPSByeGVfZGVzdHJveV9zcnEsXG4gXHQuZGV0YWNoX21jYXN0ID0gcnhlX2RldGFjaF9tY2FzdCxcbiBcdC5kZXZpY2VfZ3JvdXAgPSBcdTAwMjZyeGVfYXR0cl9ncm91cCxcbitcdC5kaXNhc3NvY2lhdGVfdWNvbnRleHQgPSByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0LFxuIFx0LmVuYWJsZV9kcml2ZXIgPSByeGVfZW5hYmxlX2RyaXZlcixcbiBcdC5nZXRfZG1hX21yID0gcnhlX2dldF9kbWFfbXIsXG4gXHQuZ2V0X2h3X3N0YXRzID0gcnhlX2liX2dldF9od19zdGF0cyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXG5pbmRleCAwY2FlYmJjMjgxMGZmMy4uMmZjOGUxMzNjNzBmYzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcbkBAIC0zMTg5LDEwICszMTg5LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzcnBfY2xhc3NfYXR0cnNbXTtcbiBcbiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XG4gXG4rLypcbisgKiBTUlAgaG9zdHMgYXJlIG5hbWVkIGFmdGVyIHRoZWlyIGliIGRldmljZSwgc28gdGFnIHRoZSBjbGFzcyBieSB0aGUgaWJcbisgKiBkZXZpY2UncyBuZXQgbmFtZXNwYWNlLlxuKyAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IHNycF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gcmRtYV9kZXZfbmV0KGhvc3QtXHUwMDNlc3JwX2Rldi1cdTAwM2VkZXYpO1xuK1xuK1x0cmV0dXJuIG5ldCA/IHRvX25zX2NvbW1vbihuZXQpIDogTlVMTDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBjbGFzcyBzcnBfY2xhc3MgPSB7XG4gXHQubmFtZSAgICA9IFwiaW5maW5pYmFuZF9zcnBcIixcbiBcdC5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3Vwcyxcbi1cdC5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldlxuK1x0LmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2LFxuK1x0Lm5zX3R5cGUgPSBcdTAwMjZuZXRfbnNfdHlwZV9vcGVyYXRpb25zLFxuK1x0Lm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLFxuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oXG5pbmRleCA0MDRlNzQ2NTUyY2E4Zi4uOWE1YzllZTcyOGU3ZGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxuQEAgLTM0LDYgKzM0LDcgQEAgc3RydWN0IHJkbWFjZ19kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0ZGV2X25vZGU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRycG9vbHM7XG4gXHRjaGFyXHRcdFx0Km5hbWU7XG4rXHR1MzJcdFx0XHRpbmRleDtcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaFxuaW5kZXggM2FmOTQ2ZWNiYWMzZWQuLmVlMTFjM2JiYmFlMjJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXG5AQCAtNTE2LDcgKzUxNiwxMCBAQCBlbnVtIHJkbWFfbmxkZXZfYXR0ciB7XG4gXHRSRE1BX05MREVWX0FUVFJfREVWX1BST1RPQ09MLFx0XHQvKiBzdHJpbmcgKi9cbiBcbiBcdC8qXG4tXHQgKiBGaWxlIGRlc2NyaXB0b3IgaGFuZGxlIG9mIHRoZSBuZXQgbmFtZXNwYWNlIG9iamVjdFxuK1x0ICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3QuIE1heSBiZSBjb21iaW5lZFxuK1x0ICogd2l0aCBSRE1BX05MREVWX0FUVFJfREVWX05BTUUgKGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSkgdG8gYWxzbyByZW5hbWVcbitcdCAqIHRoZSBkZXZpY2UgaW4gdGhlIGRlc3RpbmF0aW9uIG5hbWVzcGFjZTsgdGhlIG1vdmUgZmFpbHMgd2l0aCAtRUVYSVNUXG4rXHQgKiBpZiB0aGF0IG5hbWUgaXMgYWxyZWFkeSB0YWtlbiB0aGVyZS5cbiBcdCAqL1xuIFx0UkRNQV9OTERFVl9ORVRfTlNfRkQsXHRcdFx0LyogdTMyICovXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAvcmRtYS5jIGIva2VybmVsL2Nncm91cC9yZG1hLmNcbmluZGV4IDVlODJhMDNiMzI3MGFkLi45NDg5ZjNkZjBiZjNmZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9jZ3JvdXAvcmRtYS5jXG4rKysgYi9rZXJuZWwvY2dyb3VwL3JkbWEuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjZGVmaW5lIFJETUFDR19NQVhfU1RSIFwibWF4XCJcbiBcbiBlbnVtIHJkbWFjZ19saW1pdF90b2tlbnMge1xuK1x0UkRNQUNHX0RFVklDRV9JTkRFWCxcbiBcdFJETUFDR19IQ0FfSEFORExFX1ZBTCxcbiBcdFJETUFDR19IQ0FfSEFORExFX01BWCxcbiBcdFJETUFDR19IQ0FfT0JKRUNUX1ZBTCxcbkBAIC0yNyw2ICsyOCw3IEBAIGVudW0gcmRtYWNnX2xpbWl0X3Rva2VucyB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCByZG1hY2dfbGltaXRfdG9rZW5zID0ge1xuK1x0eyBSRE1BQ0dfREVWSUNFX0lOREVYLFx0XHRcImluZGV4PSV1XCJcdH0sXG4gXHR7IFJETUFDR19IQ0FfSEFORExFX1ZBTCxcdFwiaGNhX2hhbmRsZT0lZFwiXHR9LFxuIFx0eyBSRE1BQ0dfSENBX0hBTkRMRV9NQVgsXHRcImhjYV9oYW5kbGU9bWF4XCJcdH0sXG4gXHR7IFJETUFDR19IQ0FfT0JKRUNUX1ZBTCxcdFwiaGNhX29iamVjdD0lZFwiXHR9LFxuQEAgLTQ2NCwxNyArNDY2LDUzIEBAIHZvaWQgcmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXG4gfVxuIEVYUE9SVF9TWU1CT0wocmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKTtcbiBcbi1zdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqXG4rcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaGFzX2luZGV4LCB1MzIgaW5kZXgpXG4ge1xuK1x0c3RydWN0IHJkbWFjZ19kZXZpY2UgKm1hdGNoID0gTlVMTDtcbiBcdHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2U7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkbWFjZ19tdXRleCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKVxuLVx0XHRpZiAoIXN0cmNtcChuYW1lLCBkZXZpY2UtXHUwMDNlbmFtZSkpXG4tXHRcdFx0cmV0dXJuIGRldmljZTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbitcdFx0aWYgKHN0cmNtcChuYW1lLCBkZXZpY2UtXHUwMDNlbmFtZSkpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRyZXR1cm4gTlVMTDtcbitcdFx0aWYgKGhhc19pbmRleCkge1xuK1x0XHRcdGlmIChkZXZpY2UtXHUwMDNlaW5kZXggPT0gaW5kZXgpXG4rXHRcdFx0XHRyZXR1cm4gZGV2aWNlO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtYXRjaClcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PVFVOSVEpO1xuK1x0XHRtYXRjaCA9IGRldmljZTtcbitcdH1cbitcbitcdHJldHVybiBtYXRjaCA/OiBFUlJfUFRSKC1FTk9ERVYpO1xuK31cbitcbitzdGF0aWMgYm9vbFxuK3JkbWFjZ19kZXZpY2VfbmFtZV91bmlxdWVfbG9ja2VkKGNvbnN0IHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IHJkbWFjZ19kZXZpY2UgKm90aGVyO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKVxuK1x0XHRpZiAob3RoZXIgIT0gZGV2aWNlIFx1MDAyNlx1MDAyNiAhc3RyY21wKG90aGVyLVx1MDAzZW5hbWUsIGRldmljZS1cdTAwM2VuYW1lKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmRtYWNnX3ByaW50X2RldmljZV9rZXkoc3RydWN0IHNlcV9maWxlICpzZixcbitcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHNlcV9wdXRzKHNmLCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4rXHRpZiAoIXJkbWFjZ19kZXZpY2VfbmFtZV91bmlxdWVfbG9ja2VkKGRldmljZSkpXG4rXHRcdHNlcV9wcmludGYoc2YsIFwiIGluZGV4PSV1XCIsIGRldmljZS1cdTAwM2VpbmRleCk7XG4rXHRzZXFfcHV0YyhzZiwgJyAnKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuQEAgLTQ4OCw2ICs1MjYsOCBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4gXHRjaGFyICpwO1xuIFx0aW50ICpuZXdfbGltaXRzO1xuIFx0dW5zaWduZWQgbG9uZyBlbmFibGVzID0gMDtcbitcdHUzMiBkZXZfaW5kZXggPSAwO1xuK1x0Ym9vbCBoYXNfaW5kZXggPSBmYWxzZTtcbiBcdGludCBpID0gMCwgcmV0ID0gMDtcbiBcbiBcdC8qIGV4dHJhY3QgdGhlIGRldmljZSBuYW1lIGZpcnN0ICovXG5AQCAtNTAzLDcgKzU0Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdFx0Z290byBlcnI7XG4gXHR9XG4gXG4tXHQvKiBwYXJzZSByZXNvdXJjZSBsaW1pdCB0b2tlbnMgKi9cbitcdC8qIHBhcnNlIHRoZSBvcHRpb25hbCBkZXZpY2UgaW5kZXggYW5kIHJlc291cmNlIGxpbWl0IHRva2VucyAqL1xuIFx0d2hpbGUgKChwID0gc3Ryc2VwKFx1MDAyNm9wdGlvbnMsIFwiIFxcdFxcblwiKSkpIHtcbiBcdFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xuIFx0XHRpbnQgdG9rLCBpbnR2YWw7XG5AQCAtNTEzLDYgKzU1MywxMyBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4gXG4gXHRcdHRvayA9IG1hdGNoX3Rva2VuKHAsIHJkbWFjZ19saW1pdF90b2tlbnMsIGFyZ3MpO1xuIFx0XHRzd2l0Y2ggKHRvaykge1xuK1x0XHRjYXNlIFJETUFDR19ERVZJQ0VfSU5ERVg6XG4rXHRcdFx0aWYgKGhhc19pbmRleCB8fCBtYXRjaF91aW50KFx1MDAyNmFyZ3NbMF0sIFx1MDAyNmRldl9pbmRleCkpIHtcbitcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIHBhcnNlX2VycjtcbitcdFx0XHR9XG4rXHRcdFx0aGFzX2luZGV4ID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBSRE1BQ0dfSENBX0hBTkRMRV9WQUw6XG4gXHRcdFx0aWYgKG1hdGNoX2ludChcdTAwMjZhcmdzWzBdLCBcdTAwMjZpbnR2YWwpIHx8IGludHZhbCBcdTAwM2MgMCkge1xuIFx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbkBAIC01NDYsOSArNTkzLDkgQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuIFx0LyogYWNxdWlyZSBsb2NrIHRvIHN5bmNocm9uaXplIHdpdGggaG90IHBsdWcgZGV2aWNlcyAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuLVx0ZGV2aWNlID0gcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGRldl9uYW1lKTtcbi1cdGlmICghZGV2aWNlKSB7XG4tXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUsIGhhc19pbmRleCwgZGV2X2luZGV4KTtcbitcdGlmIChJU19FUlIoZGV2aWNlKSkge1xuK1x0XHRyZXQgPSBQVFJfRVJSKGRldmljZSk7XG4gXHRcdGdvdG8gZGV2X2VycjtcbiBcdH1cbiBcbkBAIC02MjYsNyArNjczLDcgQEAgc3RhdGljIGludCByZG1hY2dfcmVzb3VyY2VfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xuLVx0XHRzZXFfcHJpbnRmKHNmLCBcIiVzIFwiLCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4rXHRcdHJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpO1xuIFxuIFx0XHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xuIFx0XHRwcmludF9ycG9vbF92YWx1ZXMoc2YsIHJwb29sKTtcbkBAIC02NTAsNyArNjk3LDcgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbiBcdFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcbiBcbi1cdFx0c2VxX3ByaW50ZihzZiwgXCIlcyBcIiwgZGV2aWNlLVx1MDAzZW5hbWUpO1xuK1x0XHRyZG1hY2dfcHJpbnRfZGV2aWNlX2tleShzZiwgZGV2aWNlKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWDsgaSsrKSB7XG4gXHRcdFx0c2VxX3ByaW50ZihzZiwgXCIlcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHVcIixcbiBcdFx0XHRcdCAgIHJkbWFjZ19yZXNvdXJjZV9uYW1lc1tpXSxcbkBAIC02NzksNyArNzI2LDcgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbiBcdFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcbiBcbi1cdFx0c2VxX3ByaW50ZihzZiwgXCIlcyBcIiwgZGV2aWNlLVx1MDAzZW5hbWUpO1xuK1x0XHRyZG1hY2dfcHJpbnRfZGV2aWNlX2tleShzZiwgZGV2aWNlKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWDsgaSsrKSB7XG4gXHRcdFx0c2VxX3ByaW50ZihzZiwgXCIlcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHVcIixcbiBcdFx0XHRcdCAgIHJkbWFjZ19yZXNvdXJjZV9uYW1lc1tpXSxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19wbmV0LmMgYi9uZXQvc21jL3NtY19wbmV0LmNcbmluZGV4IDYzZTI4NmUyZGZhYThkLi5mZjljOWMzNWNjMmY1YiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX3BuZXQuY1xuKysrIGIvbmV0L3NtYy9zbWNfcG5ldC5jXG5AQCAtMzA0LDEzICszMDQsMTggQEAgc3RhdGljIGJvb2wgc21jX3BuZXRpZF92YWxpZChjb25zdCBjaGFyICpwbmV0X25hbWUsIGNoYXIgKnBuZXRpZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZS4gVGhlIGRldmljZSBtaWdodCBub3QgZXhpc3QuICovXG4tc3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKGNoYXIgKmliX25hbWUpXG4rLypcbisgKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZSwgcmVzdHJpY3RlZCB0byB0aGUgZGV2aWNlc1xuKyAqIGFjY2Vzc2libGUgZnJvbSBAbmV0LiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC5cbisgKi9cbitzdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppYl9uYW1lKVxuIHtcbiBcdHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYmRldjtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2c21jX2liX2RldmljZXMubXV0ZXgpO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpYmRldiwgXHUwMDI2c21jX2liX2RldmljZXMubGlzdCwgbGlzdCkge1xuK1x0XHRpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhpYmRldi1cdTAwM2VpYmRldiwgbmV0KSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFzdHJuY21wKGliZGV2LVx1MDAzZWliZGV2LVx1MDAzZW5hbWUsIGliX25hbWUsXG4gXHRcdFx0ICAgICBzaXplb2YoaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlbmFtZSkpIHx8XG4gXHRcdCAgICAoaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlZGV2LnBhcmVudCBcdTAwMjZcdTAwMjZcbkBAIC00MDgsOCArNDEzLDggQEAgc3RhdGljIGludCBzbWNfcG5ldF9hZGRfZXRoKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiByYztcbiB9XG4gXG4tc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSxcbi1cdFx0XHQgICB1OCBpYl9wb3J0LCBjaGFyICpwbmV0X25hbWUpXG4rc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LFxuK1x0XHRcdCAgIGNoYXIgKmliX25hbWUsIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSlcbiB7XG4gXHRzdHJ1Y3Qgc21jX3BuZXRlbnRyeSAqdG1wX3BlLCAqbmV3X3BlO1xuIFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmliX2RldjtcbkBAIC00MTksNyArNDI0LDcgQEAgc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSxcbiBcdGJvb2wgbmV3X2liZGV2O1xuIFxuIFx0LyogdHJ5IHRvIGFwcGx5IHRoZSBwbmV0aWQgdG8gYWN0aXZlIGRldmljZXMgKi9cbi1cdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIoaWJfbmFtZSk7XG4rXHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKG5ldCwgaWJfbmFtZSk7XG4gXHRpZiAoaWJfZGV2KSB7XG4gXHRcdGliZGV2X2FwcGxpZWQgPSBzbWNfcG5ldF9hcHBseV9pYihpYl9kZXYsIGliX3BvcnQsIHBuZXRfbmFtZSk7XG4gXHRcdGlmIChpYmRldl9hcHBsaWVkKVxuQEAgLTUxOCw3ICs1MjMsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2VudGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSlcbiBcdFx0XHRpZiAoaWJwb3J0IFx1MDAzYyAxIHx8IGlicG9ydCBcdTAwM2UgU01DX01BWF9QT1JUUylcbiBcdFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbi1cdFx0cmMgPSBzbWNfcG5ldF9hZGRfaWIocG5ldHRhYmxlLCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTtcbitcdFx0cmMgPSBzbWNfcG5ldF9hZGRfaWIocG5ldHRhYmxlLCBuZXQsIHN0cmluZywgaWJwb3J0LCBwbmV0X25hbWUpO1xuIFx0XHRpZiAoIXJjKVxuIFx0XHRcdG5ld19pYmRldiA9IHRydWU7XG4gXHRcdGVsc2UgaWYgKHJjICE9IC1FRVhJU1QpXG5AQCAtMTE3MCw2ICsxMTc1LDkgQEAgaW50IHNtY19wbmV0aWRfYnlfdGFibGVfaWIoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYl9wb3J0KVxuIFx0c3RydWN0IHNtY19uZXQgKnNuO1xuIFx0aW50IHJjID0gLUVOT0VOVDtcbiBcbitcdGlmICghcmRtYV9kZXZfYWNjZXNzX25ldG5zKHNtY2liZGV2LVx1MDAzZWliZGV2LCBcdTAwMjZpbml0X25ldCkpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuIFx0LyogZ2V0IHBuZXR0YWJsZSBmb3IgaW5pdCBuYW1lc3BhY2UgKi9cbiBcdHNuID0gbmV0X2dlbmVyaWMoXHUwMDI2aW5pdF9uZXQsIHNtY19uZXRfaWQpO1xuIFx0cG5ldHRhYmxlID0gXHUwMDI2c24tXHUwMDNlcG5ldHRhYmxlO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG5pbmRleCAwN2FmN2YxNWMxYmY3NC4uYTkxYzE0YzQ1MDA2ZTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG5AQCAtMyw2ICszLDcgQEAgVEVTVF9QUk9HUyA6PSByeGVfcnBpbmdfYmV0d2Vlbl9uZXRucy5zaCBcXFxuIFx0XHRyeGVfaXB2Ni5zaCBcXFxuIFx0XHRyeGVfc29ja2V0X3dpdGhfbmV0bnMuc2ggXFxcbiBcdFx0cnhlX3Rlc3RfTkVUREVWX1VOUkVHSVNURVIuc2ggXFxcbi1cdFx0cnhlX3NlbnRfcmN2ZF9ieXRlcy5zaFxuK1x0XHRyeGVfc2VudF9yY3ZkX2J5dGVzLnNoIFxcXG4rXHRcdHJ4ZV9uZXRuc19uYW1lcy5zaFxuIFxuIGluY2x1ZGUgLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZ1xuaW5kZXggNGZmYjgxNGUyNTNiYmQuLmUxZmY1NGVjMGY1NzkwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXG5AQCAtMSwzICsxLDUgQEBcbiBDT05GSUdfVFVOXG4gQ09ORklHX1ZFVEhcbitDT05GSUdfRFVNTVlcbitDT05GSUdfTkVUX05TXG4gQ09ORklHX1JETUFfUlhFXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNGZhYmY4NmJkZjc5ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2hcbkBAIC0wLDAgKzEsMjgyIEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI1xuKyMgRXhlcmNpc2UgUkRNQSBkZXZpY2UgbmFtZSBoYW5kbGluZyBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxuK1xuK3NvdXJjZSBcIiQoZGlybmFtZSBcIiQwXCIpLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcIlxuK1xuK05BTUVfUFJFRklYPVwicnhlX25ldG5zX25hbWVzXyQkXCJcbitORVRERVZfUFJFRklYPVwicnhuJCRcIlxuK05TMT1cIiR7TkFNRV9QUkVGSVh9bnMxXCJcbitOUzI9XCIke05BTUVfUFJFRklYfW5zMlwiXG4rUlhFX0E9XCIke05BTUVfUFJFRklYfXJ4ZV9hXCJcbitSWEVfQj1cIiR7TkFNRV9QUkVGSVh9cnhlX2JcIlxuK1JYRV9TQU1FPVwiJHtOQU1FX1BSRUZJWH1yeGVfc2FtZVwiXG4rUlhFX05FVz1cIiR7TkFNRV9QUkVGSVh9cnhlX25ld1wiXG4rRFVNTVlfQT1cIiR7TkVUREVWX1BSRUZJWH1hXCJcbitEVU1NWV9CPVwiJHtORVRERVZfUFJFRklYfWJcIlxuK09MRF9NT0RFPVwiXCJcbitNT0RFX0NIQU5HRUQ9MFxuK01PRFM9KFwiZHVtbXlcIiBcInJkbWFfcnhlXCIpXG4rVEVTVF9TQU1FX05BTUVTPVwic2FtZSBSRE1BIGRldmljZSBuYW1lIGNhbiBleGlzdCBpbiB0d28gbmV0IG5hbWVzcGFjZXNcIlxuK1RFU1RfTU9WRV9DT05GTElDVD1cIm1vdmUgd2l0aG91dCByZW5hbWUgZmFpbHMgb24gZGVzdGluYXRpb24gbmFtZSBjb25mbGljdFwiXG4rVEVTVF9NT1ZFX1JFTkFNRT1cIm1vdmUgdGhlbiByZW5hbWUgc3VjY2VlZHNcIlxuK1RFU1RfQ09NQklORURfTU9WRV9SRU5BTUU9XCJtb3ZlIHdpdGggcmVxdWVzdGVkIGRlc3RpbmF0aW9uIG5hbWUgc3VjY2VlZHNcIlxuK1RFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FPVwic2FtZS1uZXRucyByZW5hbWUgcmVqZWN0cyBkdXBsaWNhdGUgbmFtZVwiXG4rVEVTVF9URUFSRE9XTl9SRVRVUk49XCJuZXRucyBkZWxldGUgcmV0dXJucyBkZXZpY2UgdG8gaW5pdF9uZXQgYW5kIHJlbmFtZXMgb24gY29uZmxpY3RcIlxuK1xuK2tzZnRfc2tpcCgpXG4re1xuK1x0a3RhcF9za2lwX2FsbCBcIiQqXCJcbitcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbit9XG4rXG4rZmFpbCgpXG4re1xuK1x0a3RhcF9leGl0X2ZhaWxfbXNnIFwiJCpcIlxuK31cbitcbituZWVkX2NtZCgpXG4re1xuK1x0Y29tbWFuZCAtdiBcIiQxXCIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIHx8IGtzZnRfc2tpcCBcIm1pc3NpbmcgY29tbWFuZDogJDFcIlxuK31cbitcbityZG1hX25zKClcbit7XG4rXHRsb2NhbCBucz0kMVxuK1xuK1x0c2hpZnRcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNcIiByZG1hIFwiJEBcIlxuK31cbitcbityZG1hX2Rldl9leGlzdHMoKVxuK3tcbitcdGxvY2FsIG5zPSQxXG4rXHRsb2NhbCBkZXY9JDJcbitcbitcdGlmIFsgLW4gXCIkbnNcIiBdOyB0aGVuXG4rXHRcdHJkbWFfbnMgXCIkbnNcIiBkZXYgc2hvdyBcIiRkZXZcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbitcdGVsc2VcbitcdFx0cmRtYSBkZXYgc2hvdyBcIiRkZXZcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbitcdGZpXG4rfVxuK1xuK2FkZF9kdW1teSgpXG4re1xuK1x0bG9jYWwgbmV0ZGV2PSQxXG4rXG4rXHRpcCBsaW5rIGFkZCBcIiRuZXRkZXZcIiB0eXBlIGR1bW15IHx8IHJldHVybiAxXG4rXHRpcCBsaW5rIHNldCBcIiRuZXRkZXZcIiB1cCB8fCByZXR1cm4gMVxuK31cbitcbithZGRfcnhlKClcbit7XG4rXHRsb2NhbCBkZXY9JDFcbitcdGxvY2FsIG5ldGRldj0kMlxuK1xuK1x0cmRtYSBsaW5rIGFkZCBcIiRkZXZcIiB0eXBlIHJ4ZSBuZXRkZXYgXCIkbmV0ZGV2XCJcbit9XG4rXG4rcmRtYV9kZXZfb25fbmV0ZGV2KClcbit7XG4rXHRsb2NhbCBuZXRkZXY9JDFcbitcbitcdHJkbWEgbGluayBzaG93IDJcdTAwM2UvZGV2L251bGwgfCBhd2sgLXYgd2FudD1cIiRuZXRkZXZcIiAnXG4rXHRcdHtcbitcdFx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBORjsgaSsrKVxuK1x0XHRcdFx0aWYgKCRpID09IFwibmV0ZGV2XCIgXHUwMDI2XHUwMDI2ICQoaSArIDEpID09IHdhbnQpIHtcbitcdFx0XHRcdFx0ZGV2ID0gJDJcbitcdFx0XHRcdFx0c3ViKC9cXC8uKi8sIFwiXCIsIGRldilcbitcdFx0XHRcdFx0cHJpbnQgZGV2XG4rXHRcdFx0XHRcdGV4aXRcbitcdFx0XHRcdH1cbitcdFx0fSdcbit9XG4rXG4rd2FpdF9yZG1hX2Rldl9vbl9uZXRkZXYoKVxuK3tcbitcdGxvY2FsIG5ldGRldj0kMVxuK1x0bG9jYWwgZGV2XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSAxIDUwKTsgZG9cbitcdFx0ZGV2PSQocmRtYV9kZXZfb25fbmV0ZGV2IFwiJG5ldGRldlwiKVxuK1x0XHRpZiBbIC1uIFwiJGRldlwiIF07IHRoZW5cbitcdFx0XHRlY2hvIFwiJGRldlwiXG4rXHRcdFx0cmV0dXJuIDBcbitcdFx0ZmlcbitcdFx0c2xlZXAgMC4xXG4rXHRkb25lXG4rXG4rXHRyZXR1cm4gMVxuK31cbitcbitzZXR1cF9kZXZzKClcbit7XG4rXHRjbGVhbnVwX2RldnNcbitcbitcdGFkZF9kdW1teSBcIiREVU1NWV9BXCIgfHwgcmV0dXJuIDFcbitcdGFkZF9kdW1teSBcIiREVU1NWV9CXCIgfHwgcmV0dXJuIDFcbitcbitcdGFkZF9yeGUgXCIkUlhFX0FcIiBcIiREVU1NWV9BXCIgfHwgcmV0dXJuIDFcbitcdGFkZF9yeGUgXCIkUlhFX0JcIiBcIiREVU1NWV9CXCIgfHwgcmV0dXJuIDFcbit9XG4rXG4rY2xlYW51cF9kZXZzKClcbit7XG4rXHRpcCBsaW5rIGRlbCBcIiREVU1NWV9BXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0aXAgbGluayBkZWwgXCIkRFVNTVlfQlwiIDJcdTAwM2UvZGV2L251bGxcbit9XG4rXG4rc2V0dXAoKVxuK3tcbitcdE9MRF9NT0RFPSQocmRtYSBzeXN0ZW0gc2hvdyAyXHUwMDNlL2Rldi9udWxsIHxcbitcdFx0ICAgc2VkIC1uICdzLy4qbmV0bnMgXFwoW14gXSpcXCkuKi9cXDEvcCcpXG4rXHRbIC1uIFwiJE9MRF9NT0RFXCIgXSB8fCBrc2Z0X3NraXAgXCJmYWlsZWQgdG8gcmVhZCBSRE1BIG5ldG5zIG1vZGVcIlxuK1xuK1x0cmRtYSBzeXN0ZW0gc2V0IG5ldG5zIGV4Y2x1c2l2ZSBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHxcbitcdFx0a3NmdF9za2lwIFwicmRtYSBuZXRucyBleGNsdXNpdmUgbW9kZSBpcyBub3Qgc3VwcG9ydGVkXCJcbitcdE1PREVfQ0hBTkdFRD0xXG4rXG4rXHRpcCBuZXRucyBhZGQgXCIkTlMxXCIgfHwgcmV0dXJuIDFcbitcdGlwIG5ldG5zIGFkZCBcIiROUzJcIiB8fCByZXR1cm4gMVxuK31cbitcbitjbGVhbnVwKClcbit7XG4rXHRjbGVhbnVwX2RldnNcbitcbitcdGlwIG5ldG5zIGRlbCBcIiROUzFcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRpcCBuZXRucyBkZWwgXCIkTlMyXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1xuK1x0aWYgWyBcIiRNT0RFX0NIQU5HRURcIiAtZXEgMSBdOyB0aGVuXG4rXHRcdHJkbWEgc3lzdGVtIHNldCBuZXRucyBcIiRPTERfTU9ERVwiIDJcdTAwM2UvZGV2L251bGxcbitcdGZpXG4rXG4rXHRmb3IgbSBpbiBcIiR7TU9EU1tAXX1cIjsgZG9cbitcdFx0bW9kcHJvYmUgLXIgXCIkbVwiIDJcdTAwM2UvZGV2L251bGxcbitcdGRvbmVcbit9XG4rXG4rcmRtYV9zdXBwb3J0c19jb21iaW5lZF9tb3ZlX3JlbmFtZSgpXG4re1xuK1x0cmRtYSBkZXYgaGVscCAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLUVxICduZXRucyAuKm5hbWV8bmFtZSAuKm5ldG5zJ1xuK31cbitcbitbIFwiJChpZCAtdSlcIiAtZXEgMCBdIHx8IGtzZnRfc2tpcCBcIm11c3QgYmUgcnVuIGFzIHJvb3RcIlxuK25lZWRfY21kIGlwXG4rbmVlZF9jbWQgcmRtYVxuK25lZWRfY21kIG1vZHByb2JlXG4rXG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbitmb3IgbSBpbiBcIiR7TU9EU1tAXX1cIjsgZG9cbitcdG1vZGluZm8gXCIkbVwiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fCBrc2Z0X3NraXAgXCJtb2R1bGUgJG0gbm90IGZvdW5kXCJcbitcdG1vZHByb2JlIFwiJG1cIiB8fCBmYWlsIFwiZmFpbGVkIHRvIGxvYWQgJG1cIlxuK2RvbmVcbitcbitzZXR1cCB8fCBmYWlsIFwiZmFpbGVkIHRvIGNyZWF0ZSBuZXQgbmFtZXNwYWNlc1wiXG4rXG4ra3RhcF9wcmludF9oZWFkZXJcbitrdGFwX3NldF9wbGFuIDZcbitcbitpZiBzZXR1cF9kZXZzIFx1MDAyNlx1MDAyNlxuKyAgIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5ldG5zIFwiJE5TMVwiIFx1MDAyNlx1MDAyNlxuKyAgIHJkbWFfbnMgXCIkTlMxXCIgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX1NBTUVcIiBcdTAwMjZcdTAwMjZcbisgICByZG1hIGRldiBzZXQgXCIkUlhFX0JcIiBuZXRucyBcIiROUzJcIiBcdTAwMjZcdTAwMjZcbisgICByZG1hX25zIFwiJE5TMlwiIGRldiBzZXQgXCIkUlhFX0JcIiBuYW1lIFwiJFJYRV9TQU1FXCIgXHUwMDI2XHUwMDI2XG4rICAgcmRtYV9kZXZfZXhpc3RzIFwiJE5TMVwiIFwiJFJYRV9TQU1FXCIgXHUwMDI2XHUwMDI2XG4rICAgcmRtYV9kZXZfZXhpc3RzIFwiJE5TMlwiIFwiJFJYRV9TQU1FXCI7IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwiJFRFU1RfU0FNRV9OQU1FU1wiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9TQU1FX05BTUVTXCJcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2lmICEgc2V0dXBfZGV2cyB8fFxuKyAgICEgcmRtYSBkZXYgc2V0IFwiJFJYRV9BXCIgbmV0bnMgXCIkTlMxXCIgfHxcbisgICAhIHJkbWFfbnMgXCIkTlMxXCIgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX1NBTUVcIiB8fFxuKyAgICEgcmRtYSBkZXYgc2V0IFwiJFJYRV9CXCIgbmV0bnMgXCIkTlMyXCIgfHxcbisgICAhIHJkbWFfbnMgXCIkTlMyXCIgZGV2IHNldCBcIiRSWEVfQlwiIG5hbWUgXCIkUlhFX1NBTUVcIjsgdGhlblxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXCJcbitlbGlmIHJkbWFfbnMgXCIkTlMxXCIgZGV2IHNldCBcIiRSWEVfU0FNRVwiIG5ldG5zIFwiJE5TMlwiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXCJcbitlbGlmIHJkbWFfZGV2X2V4aXN0cyBcIiROUzFcIiBcIiRSWEVfU0FNRVwiIFx1MDAyNlx1MDAyNlxuKyAgICAgcmRtYV9kZXZfZXhpc3RzIFwiJE5TMlwiIFwiJFJYRV9TQU1FXCI7IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwiJFRFU1RfTU9WRV9DT05GTElDVFwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXCJcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2lmICEgc2V0dXBfZGV2czsgdGhlblxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9NT1ZFX1JFTkFNRVwiXG4rZWxpZiByZG1hIGRldiBzZXQgXCIkUlhFX0FcIiBuZXRucyBcIiROUzJcIiBcdTAwMjZcdTAwMjZcbisgICAgIHJkbWFfbnMgXCIkTlMyXCIgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX05FV1wiOyB0aGVuXG4rXHRpZiByZG1hX2Rldl9leGlzdHMgXCIkTlMyXCIgXCIkUlhFX05FV1wiIFx1MDAyNlx1MDAyNlxuK1x0ICAgISByZG1hX2Rldl9leGlzdHMgXCJcIiBcIiRSWEVfQVwiOyB0aGVuXG4rXHRcdGt0YXBfdGVzdF9wYXNzIFwiJFRFU1RfTU9WRV9SRU5BTUVcIlxuK1x0ZWxzZVxuK1x0XHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfUkVOQU1FXCJcbitcdGZpXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9NT1ZFX1JFTkFNRVwiXG4rZmlcbitjbGVhbnVwX2RldnNcbitcbitpZiAhIHJkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWU7IHRoZW5cbitcdGt0YXBfdGVzdF9za2lwIFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcIlxuK2VsaWYgISBzZXR1cF9kZXZzOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCJcbitlbGlmIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5ldG5zIFwiJE5TMlwiIG5hbWUgXCIkUlhFX05FV1wiOyB0aGVuXG4rXHRpZiByZG1hX2Rldl9leGlzdHMgXCIkTlMyXCIgXCIkUlhFX05FV1wiIFx1MDAyNlx1MDAyNlxuK1x0ICAgISByZG1hX2Rldl9leGlzdHMgXCJcIiBcIiRSWEVfQVwiOyB0aGVuXG4rXHRcdGt0YXBfdGVzdF9wYXNzIFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcIlxuK1x0ZWxzZVxuK1x0XHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCJcbitcdGZpXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwiXG4rZmlcbitjbGVhbnVwX2RldnNcbitcbitpZiAhIHNldHVwX2RldnM7IHRoZW5cbitcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCJcbitlbGlmIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX1NBTUVcIiBcdTAwMjZcdTAwMjZcbisgICAgIHJkbWEgZGV2IHNldCBcIiRSWEVfQlwiIG5hbWUgXCIkUlhFX05FV1wiOyB0aGVuXG4rXHRpZiByZG1hIGRldiBzZXQgXCIkUlhFX1NBTUVcIiBuYW1lIFwiJFJYRV9ORVdcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcIlxuK1x0ZWxpZiByZG1hX2Rldl9leGlzdHMgXCJcIiBcIiRSWEVfU0FNRVwiIFx1MDAyNlx1MDAyNlxuK1x0ICAgICByZG1hX2Rldl9leGlzdHMgXCJcIiBcIiRSWEVfTkVXXCI7IHRoZW5cbitcdFx0a3RhcF90ZXN0X3Bhc3MgXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcIlxuK1x0ZWxzZVxuK1x0XHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwiXG4rXHRmaVxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCJcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2lmICEgc2V0dXBfZGV2czsgdGhlblxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9URUFSRE9XTl9SRVRVUk5cIlxuK2VsaWYgISByZG1hIGRldiBzZXQgXCIkUlhFX0FcIiBuYW1lIFwiJFJYRV9TQU1FXCIgfHxcbisgICAgICEgcmRtYSBkZXYgc2V0IFwiJFJYRV9CXCIgbmV0bnMgXCIkTlMyXCIgfHxcbisgICAgICEgcmRtYV9ucyBcIiROUzJcIiBkZXYgc2V0IFwiJFJYRV9CXCIgbmFtZSBcIiRSWEVfU0FNRVwiIHx8XG4rICAgICAhIHJkbWFfZGV2X2V4aXN0cyBcIiROUzJcIiBcIiRSWEVfU0FNRVwiOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX1RFQVJET1dOX1JFVFVSTlwiXG4rZWxzZVxuK1x0aXAgbmV0bnMgZGVsIFwiJE5TMlwiXG4rXHRyZXR1cm5lZD0kKHdhaXRfcmRtYV9kZXZfb25fbmV0ZGV2IFwiJERVTU1ZX0JcIilcbitcdGt0YXBfcHJpbnRfbXNnIFwiZGV2aWNlIHJldHVybmVkIHRvIGluaXRfbmV0IGFzICcke3JldHVybmVkOi1cdTAwM2NtaXNzaW5nXHUwMDNlfSdcIlxuK1x0aWYgcmRtYV9kZXZfZXhpc3RzIFwiXCIgXCIkUlhFX1NBTUVcIiBcdTAwMjZcdTAwMjZcbitcdCAgIFsgLW4gXCIkcmV0dXJuZWRcIiBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgWyBcIiRyZXR1cm5lZFwiICE9IFwiJFJYRV9TQU1FXCIgXSBcdTAwMjZcdTAwMjZcbitcdCAgIFsgXCIke3JldHVybmVkI2liZGV2fVwiICE9IFwiJHJldHVybmVkXCIgXTsgdGhlblxuK1x0XHRrdGFwX3Rlc3RfcGFzcyBcIiRURVNUX1RFQVJET1dOX1JFVFVSTlwiXG4rXHRlbHNlXG4rXHRcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXCJcbitcdGZpXG4rZmlcbitjbGVhbnVwX2RldnNcbitcbitrdGFwX2ZpbmlzaGVkXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MjoxNC4wMzM4OTQwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzODk0ODU2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJETUEgRGV2aWNlIE5hbWVzcGFjZSBJc29sYXRpb246IEluaXRpYWwgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHRhcmdldGluZyB0aGUgUkRNQSBzdWJzeXN0ZW0uIFRoZSBwcmltYXJ5IGdvYWwgc2VlbXMgdG8gYmUgbmV0d29yayBuYW1lc3BhY2UgaXNvbGF0aW9uIGZvciBSRE1BIGRldmljZSBuYW1lcyDigJMgYSBjcnVjaWFsIGNoYW5nZSBpZiB3ZSB3YW50IHRvIHZpcnR1YWxpemUgdGhlc2UgcmVzb3VyY2VzIHByb3Blcmx5LiBUaGUgZGlmZiB0b3VjaGVzIGEgcHJldHR5IHdpZGUgcmFuZ2Ugb2YgZmlsZXM6IGBkZXZpY2UuY2AsIGBjZ3JvdXAuY2AsIGBubGRldi5jYCwgYHJkbWEuY2Ag4oCTIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIGZlYXR1cmUuIEJ1dCBob2xkIG9uLCBpdCBhbHNvIGRpZ3MgaW50byBgcnhlX21tYXAuY2AgYW5kIGByeGVfdmVyYnMuY2AsIHdoaWNoIG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLlxuXG5MZXQncyB6b29tIGluIG9uIGByeGVfbW1hcC5jYC4gSG1tLCBpdCdzIG1lc3Npbmcgd2l0aCB0aGUgYHZtX29wZXJhdGlvbnNfc3RydWN0YCAoYHJ4ZV92bV9vcHNgKS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHJlbW92aW5nIHRoZSBgb3BlbmAgYW5kIGBjbG9zZWAgY2FsbGJhY2tzIChgcnhlX3ZtYV9vcGVuYCwgYHJ4ZV92bWFfY2xvc2VgKSBhbmQgZGlyZWN0bHkgdXNpbmcgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgLiBUaGF0J3MuLi4gYSBsaXR0bGUgY29uY2VybmluZy4gYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGRvZXNuJ3QgaW5oZXJlbnRseSBtYW5hZ2UgcmVmY291bnRzLCBzbyB3aGF0J3MgZ29pbmcgb24gaGVyZT8gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGByeGVfdm1hX29wZW5gIGFuZCBgcnhlX3ZtYV9jbG9zZWAgaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgdGhlIHJlZmNvdW50LiBOb3csIGl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIGp1c3QgaW1tZWRpYXRlbHkgcmVsZWFzZXMgdGhlIGBrcmVmYCBhZnRlciB0aGUgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGNhbGwuIElzIHRoaXMgYSBidWcgZml4PyBBIHJlZmFjdG9yaW5nP1xuXG5Pa2F5LCB0aGUgY29kZSBub3cgZG9lcyB0aGlzOiBjYWxsIGByZW1hcF92bWFsbG9jX3JhbmdlYCwgdGhlbiBpbW1lZGlhdGVseSBga3JlZl9wdXRgLiBXaHkgaXMgdGhlIGByeGVfdm1fb3BzYCBzdHJ1Y3R1cmUgYmVpbmcgcmVtb3ZlZD8gVGhhdCBoYXMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIFZNQSBjaGFuZ2VzIGFuZCB0aGUgbmV0d29yayBuYW1lc3BhY2Ugd29yay4gVGhlIGNvbW1pdCBtZXNzYWdlIGRvZXNuJ3QgaGVscC5cblxuTm93LCBsZXQncyBsb29rIGF0IGByeGVfdmVyYnMuY2AuIEFoYSEgSXQncyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0YC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgYWRkZWQgdG8gYHJ4ZV9kZXZfb3BzYC4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCBjaGVja3MgZm9yIHRoaXMgY2FsbGJhY2sgdG8gYmUgcHJlc2VudCBiZWZvcmUgbW92aW5nIGEgZGV2aWNlIGJldHdlZW4gbmV0IG5hbWVzcGFjZXMuIFNvLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBkaXNhc3NvY2lhdGVfdWNvbnRleHRgIG1lYW5zIFJYRSBkZXZpY2VzIGNhbiBub3cgYmUgbW92ZWQgYmV0d2VlbiBuZXR3b3JrIG5hbWVzcGFjZXMuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCdzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGBkaXNhc3NvY2lhdGVfdWNvbnRleHRgIGFkZGl0aW9uIGFuZCB0aGUgY2hhbmdlcyBpbiBgcnhlX21tYXBgPyBUaGUgbmV3IGBkaXNhc3NvY2lhdGVfdWNvbnRleHRgIGZ1bmN0aW9uIGlzIGVtcHR5LiBJZiBpdCdzIGNhbGxlZCwgaXQncyBzdXBwb3NlZCB0byBoYW5kbGUgdW5tYXBwaW5nIG9yIG90aGVyd2lzZSBoYW5kbGluZyB0aGUgdWNvbnRleHQuIEJ1dCBpbiB0aGlzIGNhc2UgaXQgZG9lc24ndC5cblxuQmFjayB0byB0aGUgYHJ4ZV9tbWFwYCBjaGFuZ2VzOiBpZiB0aGV5J3JlIHJlbW92aW5nIGByeGVfdm1fb3BzYCwgdGhlbiB0aGUgVk1BIGlzICpubyBsb25nZXIqIHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBgaXBgIGRhdGEuIFRoYXQncyBhIGJpZyBkZWFsLiBJbnN0ZWFkLCB0aGUgcGF0Y2ggaW1tZWRpYXRlbHkgcmVsZWFzZXMgYGlwYCBhZnRlciB0aGUgY2FsbCB0byBgcmVtYXBfdm1hbGxvY19yYW5nZWAuIFdoYXQga2VlcHMgYGlwYCBhbGl2ZSBhZnRlciB0aGF0PyBTb21ldGhpbmcgKm11c3QqIHN0aWxsIGhvbGQgYSByZWZlcmVuY2UuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUga2VybmVsIHNvdXJjZSBmb3IgYHJ4ZV9tbWFwLmNgIGluIGRldGFpbCB0byB0cmFjayBkb3duIHdoYXQgZG9lcyB0aGF0IG5vdy4gVGhpcyByZWZjb3VudGluZyBjaGFuZ2UgaGFzIG1lIHdvcnJpZWQgYWJvdXQgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODYzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjI3LjkyODc1MjU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjQ2NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4ZV9tbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGU9ND1yZG1hX3J4ZS15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGUtMTktXFx0cnhlX29wY29kZS5vIFxcXFxcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL01ha2VmaWxlOjIwOlxcdHJ4ZV9tbWFwLm8gXFxcXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGUtMjEtXFx0cnhlX2ljcmMubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaD0zNz12b2lkIHJ4ZV9jbGVhbnVwX21jZyhzdHJ1Y3Qga3JlZiAqa3JlZik7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtMzgtXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmg6Mzk6LyogcnhlX21tYXAuYyAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX2xvYy5oOjQwOnN0cnVjdCByeGVfbW1hcF9pbmZvIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC00MS1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0cGVuZGluZ19tbWFwcztcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX2xvYy5oLTQ4LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX2xvYy5oOjQ5OnZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC01MC1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDo1MTpzdHJ1Y3QgcnhlX21tYXBfaW5mbyAqcnhlX2NyZWF0ZV9tbWFwX2luZm8oc3RydWN0IHJ4ZV9kZXYgKmRldiwgdTMyIHNpemUsXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtNTItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgdm9pZCAqb2JqKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC01My1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDo1NDppbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtNTUtXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMTQtXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjE1OnZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0xNi17XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjE3OlxcdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IGNvbnRhaW5lcl9vZihyZWYsXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjE4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCByeGVfbW1hcF9pbmZvLCByZWYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0xOS1cXHRzdHJ1Y3QgcnhlX2RldiAqcnhlID0gdG9fcmRldihpcC1cXHUwMDNlY29udGV4dC1cXHUwMDNlZGV2aWNlKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0zMi0vKipcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmM6MzM6ICogcnhlX21tYXAgLSBjcmVhdGUgYSBuZXcgbW1hcCByZWdpb25cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMzQtICogQGNvbnRleHQ6IHRoZSBJQiB1c2VyIGNvbnRleHQgb2YgdGhlIHByb2Nlc3MgbWFraW5nIHRoZSBtbWFwKCkgY2FsbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTM3LSAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzozODppbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMzkte1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTQyLVxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmM6NDM6XFx0c3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwLCAqcHA7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTQ0LVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtODUtXFx0cmV0ID0gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGlwLVxcdTAwM2VvYmosIDApO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzo4NjpcXHRrcmVmX3B1dChcXHUwMDI2aXAtXFx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTg3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtOTQtLypcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmM6OTU6ICogQWxsb2NhdGUgaW5mb3JtYXRpb24gZm9yIHJ4ZV9tbWFwXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTk2LSAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzo5NzpzdHJ1Y3QgcnhlX21tYXBfaW5mbyAqcnhlX2NyZWF0ZV9tbWFwX2luZm8oc3RydWN0IHJ4ZV9kZXYgKnJ4ZSwgdTMyIHNpemUsXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTk4LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsIHZvaWQgKm9iailcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtOTkte1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzoxMDA6XFx0c3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0xMDEtXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jPTEyPWludCBkb19tbWFwX2luZm8oc3RydWN0IHJ4ZV9kZXYgKnJ4ZSwgc3RydWN0IG1taW5mbyBfX3VzZXIgKm91dGJ1ZixcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jLTEzLVxcdFxcdCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhLCBzdHJ1Y3QgcnhlX3F1ZXVlX2J1ZiAqYnVmLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmM6MTQ6XFx0XFx0IHNpemVfdCBidWZfc2l6ZSwgc3RydWN0IHJ4ZV9tbWFwX2luZm8gKippcF9wKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmMtMTUte1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmMtMTYtXFx0aW50IGVycjtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jOjE3OlxcdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IE5VTEw7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuYy0xOC1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmM9MTkzPXZvaWQgcnhlX3F1ZXVlX2NsZWFudXAoc3RydWN0IHJ4ZV9xdWV1ZSAqcSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmMtMTk1LVxcdGlmIChxLVxcdTAwM2VpcClcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jOjE5NjpcXHRcXHRrcmVmX3B1dChcXHUwMDI2cS1cXHUwMDNlaXAtXFx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuYy0xOTctXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaD02Mj1zdHJ1Y3QgcnhlX3F1ZXVlIHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmgtNjQtXFx0c3RydWN0IHJ4ZV9xdWV1ZV9idWZcXHQqYnVmO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmg6NjU6XFx0c3RydWN0IHJ4ZV9tbWFwX2luZm9cXHQqaXA7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaC02Ni1cXHRzaXplX3RcXHRcXHRcXHRidWZfc2l6ZTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmg9Nzk9aW50IGRvX21tYXBfaW5mbyhzdHJ1Y3QgcnhlX2RldiAqcnhlLCBzdHJ1Y3QgbW1pbmZvIF9fdXNlciAqb3V0YnVmLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmgtODAtXFx0XFx0IHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsIHN0cnVjdCByeGVfcXVldWVfYnVmICpidWYsXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaDo4MTpcXHRcXHQgc2l6ZV90IGJ1Zl9zaXplLCBzdHJ1Y3QgcnhlX21tYXBfaW5mbyAqKmlwX3ApO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmgtODItXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jPTE0NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2Vfb3BzIHJ4ZV9kZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYy0xNDkxLVxcdC5tYXBfbXJfc2cgPSByeGVfbWFwX21yX3NnLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmM6MTQ5MjpcXHQubW1hcCA9IHJ4ZV9tbWFwLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMtMTQ5My1cXHQubW9kaWZ5X2FoID0gcnhlX21vZGlmeV9haCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6MjcuOTk2MDEwNzE1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMDgwOTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGByeGVfbW1hcC5jYCBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyBpbiBgcnhlX21tYXAuY2AuIFRoZXkndmUgZ290IHRoaXMgY29kZSBibG9jazpcblxuYGBgY1xuXHRyZXQgPSByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgaXAtXHUwMDNlb2JqLCAwKTtcblx0a3JlZl9wdXQoXHUwMDI2aXAtXHUwMDNlcmVmLCByeGVfbW1hcF9yZWxlYXNlKTtcblx0aWYgKHJldClcblx0XHRyeGVfZGJnX2RldihyeGUsIFwiZXJyICVkIGZyb20gcmVtYXBfdm1hbGxvY19yYW5nZVxcblwiLCByZXQpO1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgXCJIbW0sIGBrcmVmX3B1dGAgaXMgaGFwcGVuaW5nIHVuY29uZGl0aW9uYWxseSB0aGVyZS5cIiBUaGF0J3MgYSBiaXQgb2RkLiBJIGltbWVkaWF0ZWx5IHdvbmRlciwgaXMgYGlwYCBiZWluZyBrZXB0IGFsaXZlIGVsc2V3aGVyZT8gSXQgbG9va3MgbGlrZSB0aGVyZSBzaG91bGQgYmUgYW5vdGhlciByZWZlcmVuY2UgaG9sZGluZyBpdC4gTGV0IG1lIHRoaW5rLi4uIEFoLCByaWdodCwgYHEtXHUwMDNlaXBgIGhvbGRzIGEgcmVmZXJlbmNlISBBbmQsIHllcCwgYHJ4ZV9xdWV1ZV9jbGVhbnVwYCBhbHNvIGNhbGxzIGBrcmVmX3B1dChcdTAwMjZxLVx1MDAzZWlwLVx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSlgLiBTbywgdGhlIFZNQSAqZG9lc24ndCogbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIEknbSB0cnlpbmcgdG8gcmVjYWxsIHdoeSB0aGUgcGF0Y2ggcmVtb3ZlZCBgcnhlX3ZtYV9vcGVuYCBhbmQgYHJ4ZV92bWFfY2xvc2VgIGFsdG9nZXRoZXIuIFRoZXkgd2VyZW4ndCBqdXN0IHNpbXBsaWZ5aW5nOyB0aGVyZSdzIGdvdCB0byBiZSBhIHJlYXNvbi4gQWgsIG9mIGNvdXJzZSEgSXQncyBiZWNhdXNlIGByZW1hcF92bWFsbG9jX3JhbmdlYCBzZXRzIGB2bWEtXHUwMDNldm1fb3BzYCB0byBgdm1hbGxvY192bV9vcHNgISBSaWdodCEgVGhhdCBtZWFucy4uLiB0aGUgY29kZSB0aGF0IHVzZWQgdG8gc2V0IGB2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2cnhlX3ZtX29wc2AgKndhcyogYmVpbmcgb3ZlcndyaXR0ZW4gYW55d2F5IVxuXG5Pa2F5LCBJIHRoaW5rIEkndmUgZ290IGl0LiBJJ20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGByZW1hcF92bWFsbG9jX3JhbmdlYCBpbiB0aGUga2VybmVsIHNvdXJjZSwganVzdCB0byBtYWtlIHN1cmUgbXkgbG9naWMgaXMgc29saWQuIFRoaXMgbG9va3MgbGlrZSBhIHJlYXNvbmFibGUgc2ltcGxpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDIyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjMzLjgwNjgyMTk3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIwNzAwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVtYXBfdm1hbGxvY19yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbm9tbXUuYz0yODY9RVhQT1JUX1NZTUJPTCh2bWFsbG9jXzMyX25vcHJvZik7XFxuLS1cXG5tbS9ub21tdS5jLTI5NS0gKiBWTV9VU0VSTUFQIGlzIHNldCBvbiB0aGUgY29ycmVzcG9uZGluZyBWTUEgc28gdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvXFxubW0vbm9tbXUuYzoyOTY6ICogcmVtYXBfdm1hbGxvY19yYW5nZSgpIGFyZSBwZXJtaXNzaWJsZS5cXG5tbS9ub21tdS5jLTI5Ny0gKi9cXG4tLVxcbm1tL25vbW11LmM9MTYwOT1FWFBPUlRfU1lNQk9MKHZtX2lvbWFwX21lbW9yeSk7XFxubW0vbm9tbXUuYy0xNjEwLVxcbm1tL25vbW11LmM6MTYxMTppbnQgcmVtYXBfdm1hbGxvY19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYWRkcixcXG5tbS9ub21tdS5jLTE2MTItXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZ29mZilcXG4tLVxcbm1tL25vbW11LmMtMTYyMy19XFxubW0vbm9tbXUuYzoxNjI0OkVYUE9SVF9TWU1CT0wocmVtYXBfdm1hbGxvY19yYW5nZSk7XFxubW0vbm9tbXUuYy0xNjI1LVxcbi0tXFxubW0vdm1hbGxvYy5jPTQzMTU9dm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxuLS1cXG5tbS92bWFsbG9jLmMtNDM2OS1cXHRcXHQgKlxcbm1tL3ZtYWxsb2MuYzo0MzcwOlxcdFxcdCAqIFNraXAgVk1fVVNFUk1BUCwgYXMgcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKCkgdmFsaWRhdGVzXFxubW0vdm1hbGxvYy5jLTQzNzEtXFx0XFx0ICogbWFwcGluZyByZXF1ZXN0cyBhZ2FpbnN0IHRoZSB1bmNoYW5nZWQgdm0tXFx1MDAzZXNpemU7IGZyZWVpbmdcXG4tLVxcbm1tL3ZtYWxsb2MuYz00NjY4PWxvbmcgdnJlYWRfaXRlcihzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGNvbnN0IGNoYXIgKmFkZHIsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL3ZtYWxsb2MuYy00NzgwLS8qKlxcbm1tL3ZtYWxsb2MuYzo0NzgxOiAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCAtIG1hcCB2bWFsbG9jIHBhZ2VzIHRvIHVzZXJzcGFjZVxcbm1tL3ZtYWxsb2MuYy00NzgyLSAqIEB2bWE6XFx0XFx0dm1hIHRvIGNvdmVyXFxuLS1cXG5tbS92bWFsbG9jLmMtNDc5Ni0gKi9cXG5tbS92bWFsbG9jLmM6NDc5NzppbnQgcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHVhZGRyLFxcbm1tL3ZtYWxsb2MuYy00Nzk4LVxcdFxcdFxcdFxcdHZvaWQgKmthZGRyLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQ4NDMtLyoqXFxubW0vdm1hbGxvYy5jOjQ4NDQ6ICogcmVtYXBfdm1hbGxvY19yYW5nZSAtIG1hcCB2bWFsbG9jIHBhZ2VzIHRvIHVzZXJzcGFjZVxcbm1tL3ZtYWxsb2MuYy00ODQ1LSAqIEB2bWE6XFx0XFx0dm1hIHRvIGNvdmVyIChtYXAgZnVsbCByYW5nZSBvZiB2bWEpXFxuLS1cXG5tbS92bWFsbG9jLmMtNDg1Ni0gKi9cXG5tbS92bWFsbG9jLmM6NDg1NzppbnQgcmVtYXBfdm1hbGxvY19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYWRkcixcXG5tbS92bWFsbG9jLmMtNDg1OC1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBnb2ZmKVxcbm1tL3ZtYWxsb2MuYy00ODU5LXtcXG5tbS92bWFsbG9jLmM6NDg2MDpcXHRyZXR1cm4gcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCxcXG5tbS92bWFsbG9jLmMtNDg2MS1cXHRcXHRcXHRcXHRcXHQgICBhZGRyLCBwZ29mZixcXG4tLVxcbm1tL3ZtYWxsb2MuYy00ODYzLX1cXG5tbS92bWFsbG9jLmM6NDg2NDpFWFBPUlRfU1lNQk9MKHJlbWFwX3ZtYWxsb2NfcmFuZ2UpO1xcbm1tL3ZtYWxsb2MuYy00ODY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MjozMy45MDg4OTg0NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ5NTg3MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWxgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaW50ZXJuYWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhhdCBwYXJ0aWFsIHJlbWFwcGluZyBmdW5jdGlvbiBmb3IgYHZtYWxsb2NgIHJhbmdlcy4gTGV0J3Mgc3RhcnQgd2l0aCBgcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsYCBpbiBgbW0vdm1hbGxvYy5jYC4gSSBleHBlY3QgaXQgdG8gaGFuZGxlIHRoZSBudWFuY2VkIG1lY2hhbmljcyBvZiByZW1hcHBpbmcgb25seSBhIHNlY3Rpb24gb2YgYSBgdm1hbGxvY2AgcmVnaW9uLCB3aGljaCwgYXMgd2Uga25vdywgcmVxdWlyZXMgY2FyZWZ1bCBtYW5hZ2VtZW50IG9mIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgKFBURXMpIGludm9sdmVkLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGJhbGFuY2VzIHRoZSBuZWVkIGZvciBjb250aWd1b3VzIHZpcnR1YWwgYWRkcmVzc2VzIHdpdGggdGhlIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIG9mIHBoeXNpY2FsIG1lbW9yeSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIFRMQiBpbnZhbGlkYXRpb24gc3RyYXRlZ2llcy4gSSBob3BlIHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBpbnRlcnBsYXkgYmV0d2VlbiBgcHRlX29mZnNldF9tYXBgLCBgc2V0X3B0ZWAsIGFuZCB0aGUgc3Vycm91bmRpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBsb2NraW5nIGlzIGNvcnJlY3QsIGdpdmVuIHRoYXQgbXVsdGlwbGUgcHJvY2Vzc2VzIG1pZ2h0IGJlIHRvdWNoaW5nIHRoaXMgY29kZSBjb25jdXJyZW50bHkuIEkgYWxzbyB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYHBncHJvdGAgZmxhZ3MsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGRpZmZlcmVudCBtZW1vcnkgYXR0cmlidXRlcyBsaWtlIGNhY2hpbmcgYW5kIHdyaXRlIGNvbWJpbmluZy4gVGltZSB0byBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6MzcuMTU4NDg4Njg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0Nzk3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0Nzk3OlxcdGludCByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdWFkZHIsXFxuNDc5ODpcXHRcXHRcXHRcXHRcXHR2b2lkICprYWRkciwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG40Nzk5OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG40ODAwOlxcdHtcXG40ODAxOlxcdFxcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7XFxuNDgwMjpcXHRcXHR1bnNpZ25lZCBsb25nIG9mZjtcXG40ODAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kX2luZGV4O1xcbjQ4MDQ6XFx0XFxuNDgwNTpcXHRcXHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KHBnb2ZmLCBQQUdFX1NISUZULCBcXHUwMDI2b2ZmKSlcXG40ODA2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ4MDc6XFx0XFxuNDgwODpcXHRcXHRzaXplID0gUEFHRV9BTElHTihzaXplKTtcXG40ODA5OlxcdFxcbjQ4MTA6XFx0XFx0aWYgKCFQQUdFX0FMSUdORUQodWFkZHIpIHx8ICFQQUdFX0FMSUdORUQoa2FkZHIpKVxcbjQ4MTE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDgxMjpcXHRcXG40ODEzOlxcdFxcdGFyZWEgPSBmaW5kX3ZtX2FyZWEoa2FkZHIpO1xcbjQ4MTQ6XFx0XFx0aWYgKCFhcmVhKVxcbjQ4MTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDgxNjpcXHRcXG40ODE3OlxcdFxcdGlmICghKGFyZWEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKFZNX1VTRVJNQVAgfCBWTV9ETUFfQ09IRVJFTlQpKSlcXG40ODE4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ4MTk6XFx0XFxuNDgyMDpcXHRcXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUsIG9mZiwgXFx1MDAyNmVuZF9pbmRleCkgfHxcXG40ODIxOlxcdFxcdCAgICBlbmRfaW5kZXggXFx1MDAzZSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpKVxcbjQ4MjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDgyMzpcXHRcXHRrYWRkciArPSBvZmY7XFxuNDgyNDpcXHRcXG40ODI1OlxcdFxcdGRvIHtcXG40ODI2OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gdm1hbGxvY190b19wYWdlKGthZGRyKTtcXG40ODI3OlxcdFxcdFxcdGludCByZXQ7XFxuNDgyODpcXHRcXG40ODI5OlxcdFxcdFxcdHJldCA9IHZtX2luc2VydF9wYWdlKHZtYSwgdWFkZHIsIHBhZ2UpO1xcbjQ4MzA6XFx0XFx0XFx0aWYgKHJldClcXG40ODMxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDgzMjpcXHRcXG40ODMzOlxcdFxcdFxcdHVhZGRyICs9IFBBR0VfU0laRTtcXG40ODM0OlxcdFxcdFxcdGthZGRyICs9IFBBR0VfU0laRTtcXG40ODM1OlxcdFxcdFxcdHNpemUgLT0gUEFHRV9TSVpFO1xcbjQ4MzY6XFx0XFx0fSB3aGlsZSAoc2l6ZSBcXHUwMDNlIDApO1xcbjQ4Mzc6XFx0XFxuNDgzODpcXHRcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbjQ4Mzk6XFx0XFxuNDg0MDpcXHRcXHRyZXR1cm4gMDtcXG40ODQxOlxcdH1cXG40ODQyOlxcdFxcbjQ4NDM6XFx0LyoqXFxuNDg0NDpcXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlIC0gbWFwIHZtYWxsb2MgcGFnZXMgdG8gdXNlcnNwYWNlXFxuNDg0NTpcXHQgKiBAdm1hOlxcdFxcdHZtYSB0byBjb3ZlciAobWFwIGZ1bGwgcmFuZ2Ugb2Ygdm1hKVxcbjQ4NDY6XFx0ICogQGFkZHI6XFx0XFx0dm1hbGxvYyBtZW1vcnlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6MzcuMTU4Nzc1MDc0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ1Nzk3MjcwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5vdGljZWQgc29tZSBzZWVtaW5nbHkgdW5yZWxhdGVkIGNoYW5nZXMgd2l0aGluIGByeGVfbW1hcC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgcmVtb3ZhbCBvZiBgcnhlX3ZtX29wc2AgYW5kIHRoZSB1c2Ugb2YgYHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBpcGAuIEkgaW5pdGlhbGx5IHRob3VnaHQgdGhpcyBoYWQgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWxgIGZ1bmN0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gQnV0IHRoZW4gSSByZWFsaXplZCB0aGlzIGlzIGp1c3QgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgcmVsYXRlZCB0byBSRE1BIGRldmljZSBuYW1lcyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLlxuXG5UaGUgcHJpbWFyeSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgdG8gZW5hYmxlIFJETUEgZGV2aWNlcyB0byBjb2V4aXN0IHdpdGggdGhlIHNhbWUgbmFtZSBhY3Jvc3MgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhpcyBpbnZvbHZlcyBtb2RpZnlpbmcgY29yZSBmdW5jdGlvbnMgaW4gdGhlIFJETUEgYW5kIG5ldCBuYW1lc3BhY2UgbG9naWMsIGluY2x1ZGluZyBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgLCBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYCwgYW5kIGBhbGxvY19uYW1lX2lkYCwgYW5kIGhvdyB0aGVzZSBuYW1lcyBhcmUgbWFuYWdlZC4gVGhlIHBhdGNoIGFsc28gdXBkYXRlcyBgY2dyb3VwL3JkbWEuY2AgdG8gaGFuZGxlIHBvdGVudGlhbGx5IGR1cGxpY2F0ZSBuYW1lcywgbGlrZWx5IGFwcGVuZGluZyBhbiBpbmRleCBsaWtlIFwiaW5kZXg9TlwiLlxuXG5UaGlzIGlzIHdoZXJlIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBsaWVzLiBUaGUgbWFpbiBhcmVhcyB0aGF0IGFyZSB2dWxuZXJhYmxlIGFyZTpcblxuMS4gICoqTmV0bGluayBJbnRlcmZhY2U6KiogVGhlIHBhdGNoIG1vZGlmaWVzIGBubGRldl9zZXRfZG9pdGAgdG8gaGFuZGxlIHRoZSBgUkRNQV9OTERFVl9ORVRfTlNfRkRgIGF0dHJpYnV0ZSB2aWEgbmV0bGluay4gVGhpcyBpcyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgbWVhbmluZyB3ZSBjYW4gdHJpZ2dlciBpdCBhbmQgc2VuZCBwb3RlbnRpYWxseSBjcmFmdGVkIG5ldGxpbmsgbWVzc2FnZXMuXG4yLiAgKipDZ3JvdXAgSW50ZXJmYWNlOioqIEl0IGFsc28gdG91Y2hlcyBgcmRtYWNnX3Jlc291cmNlX3NldF9tYXhgIHdpdGhpbiBga2VybmVsL2Nncm91cC9yZG1hLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNncm91cGZzLiBNb2RpZnlpbmcgY2dyb3VwIGNvbmZpZ3VyYXRpb25zIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgaW50ZXJlc3RpbmcgYmVoYXZpb3IuXG5cblRoZXJlZm9yZSwgZnV6emluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBuZXRsaW5rIGFuZCB0aGUgY2dyb3VwIGludGVyZmFjZSByZWxhdGVkIHRvIFJETUEgZGV2aWNlIG5hbWluZyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC5cblxuRm9jdXMgU3ltYm9scyBmb3IgRnV6emluZzpcblxuKiAgIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGBcbiogICBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYFxuKiAgIGByZG1hX2Rldl9waWNrX25ldG5zX25hbWVgXG4qICAgYG5sZGV2X3NldF9kb2l0YFxuKiAgIGByZG1hY2dfcmVzb3VyY2Vfc2V0X21heGBcbiogICBgcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkYFxuKiAgIGBhbGxvY19uYW1lX2lkYFxuKiAgIGBfX2FsbG9jX25hbWVfaWRgXG4qICAgYHJ4ZV9tbWFwYCAod2hpbGUgdG91Y2hlZCwgdGhpcyBpcyBqdXN0IGEgbWlub3IgcGFydC4gRnV6emluZyBmb2N1c2VkIG9uIHRoaXMgaXMgbGVzcyBsaWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzKVxuXG5UbyBlbnN1cmUgdGhpcyBpcyBhY3R1YWxseSB0ZXN0YWJsZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9uczpcblxuKiAgIGBDT05GSUdfQ0dST1VQX1JETUFgIChjcml0aWNhbCBmb3IgY2dyb3VwIGludGVyZmFjZSlcbiogICBgQ09ORklHX1JETUFfUlhFYFxuKiAgIGBDT05GSUdfTkVUX05TYCAoZXNzZW50aWFsIGZvciBuZXRucylcbiogICBgQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1NgIChuZWVkZWQgZm9yIGBpYl91dmVyYnNfbW1hcGAsIHdoaWNoIGxlYWRzIHRvIHRoZSBgcnhlX21tYXBgKVxuKiAgIGBDT05GSUdfSU5GSU5JQkFORGAgKGNvcmUgUkRNQSBzdXBwb3J0KVxuXG5JIG5lZWQgdG8gY29uZmlybSBgQ09ORklHX0NHUk9VUF9SRE1BYCBpbiBga2VybmVsL2Nncm91cC9LY29uZmlnYCB0byBiZSBzdXJlLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIGZvciBmdW5jdGlvbmFsIGZ1enppbmcuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgaGVyZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBleHBsb3Jpbmcgd2l0aCBhIGZ1enplci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6NTEuNzM4NTA1ODc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk5MzAyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX1JETUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEyMzQ9Y29uZmlnIENHUk9VUF9QSURTXFxuLS1cXG5pbml0L0tjb25maWctMTI0OS1cXG5pbml0L0tjb25maWc6MTI1MDpjb25maWcgQ0dST1VQX1JETUFcXG5pbml0L0tjb25maWctMTI1MS1cXHRib29sIFxcXCJSRE1BIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjUxLjgxOTUwMjE4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTgxOTkxNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyB0aGUgUlhFIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIG1ha2Ugc3VyZSB0aGUgUlhFIGNvbmZpZ3VyYXRpb24gaXMgc2V0IGNvcnJlY3RseS5cIiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19SRE1BX1JYRWAgaXMgcHJvcGVybHkgZGVmaW5lZC4gTmF0dXJhbGx5LCBJIGtub3cgdGhhdCdzIHRoZSBrZXkgZmxhZyBmb3IgZW5hYmxpbmcgdGhlIFJYRSAoUmVsaWFibGUgZVhwcmVzcykgc29mdHdhcmUgUkRNQSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIEluZmluaUJhbmQgZHJpdmVycy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgYGRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvYCBkaXJlY3RvcnkuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFJYRSBtb2R1bGUgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGRldGVybWluaW5nIHdoZXRoZXIgYENPTkZJR19SRE1BX1JYRWAgaXMgZXhwb3NlZCBvciBub3QsIGJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFyY2hpdGVjdHVyYWwgY2FwYWJpbGl0aWVzIG9mIHRoZSBzeXN0ZW0uIEknbGwgYmUgbG9va2luZyBmb3IgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZSwgYW5kIGhlbHAgdGV4dCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpcyBzZXQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgaXQgaXMgc2V0IGRpcmVjdGx5IGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWcsIG9yIGlmIGl0IGlzIHB1bGxlZCBpbiBhcyBhIGRlZmF1bHQsIG9yIGlmIGl0IGhhcyBzb21lIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBpbXBvcnRhbnQgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY3NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjU1LjQwMTUwNDIyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxOTM1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJETUFfUlhFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZzoyOmNvbmZpZyBSRE1BX1JYRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6NTUuNDY2NzAzMzgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTAwNDEyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBJbmZpbmliYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSW5maW5pYmFuZC4gTXkgaW50dWl0aW9uIHNheXMgdGhhdCB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvaW5maW5pYmFuZGAgZGlyZWN0b3J5LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgdG9wLWxldmVsIGRlZmluaXRpb25zIGZvciBhIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24gYXJlIGxvY2F0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19JTkZJTklCQU5EYCBpcyBjb3JyZWN0bHkgZGVmaW5lZCBhbmQgZW5hYmxlZCwgb3IgYXQgbGVhc3QgdW5kZXJzdGFuZCBpdHMgc3RhdGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZWxpbmUgZm9yIHdoYXRldmVyIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBwZXJmb3JtIHJlZ2FyZGluZyBJbmZpbmliYW5kLiBMZXQncyBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzEwMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjU4LjI3Njc0ODU3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzNDE1ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORklOSUJBTkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI6bWVudWNvbmZpZyBJTkZJTklCQU5EXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9MTY9aWYgSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUFEXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMjctXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6Mjg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCB1c2Vyc3BhY2UgYWNjZXNzICh2ZXJicyBhbmQgQ00pXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMzktXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQxLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQzLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ0OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTE6Y29uZmlnIElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIkluZmluaUJhbmQgb24tZGVtYW5kIHBhZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjMtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjQ6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIlJETUEvQ01cXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctODAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6ODE6Y29uZmlnIElORklOSUJBTkRfVklSVF9ETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cXHRkZWZfYm9vbCAhSElHSE1FTVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5HX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIE5leHQgZ2VuZXJhdGlvbiBSb0NFIEhDQSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTlhUX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXR4dHJlbWUgSENBIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfRUZBXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTgtXFx0dHJpc3RhdGUgXFxcIkFtYXpvbiBFbGFzdGljIEZhYnJpYyBBZGFwdGVyIChFRkEpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfRVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbGliYWJhIEVsYXN0aWMgUkRNQSBBZGFwdGVyIChFUkRNQSkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0hOU19ISVAwOFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJIaXNpbGljb24gSGlwMDggRmFtaWx5IFJvQ0Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTMtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWc6NDpjb25maWcgSU5GSU5JQkFORF9JT05JQ1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkFNRCBQZW5zYW5kbyBEU0MgUkRNQS9Sb0NFIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnLTktXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6MTA6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FfREVCVUdcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkVtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUUVEUlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUUxvZ2ljIFJvQ0UgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1VTTklDXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVmVyYnMgc3VwcG9ydCBmb3IgQ2lzY28gVklDXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUkRNQVZUXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlJETUEgdmVyYnMgdHJhbnNwb3J0IGxpYnJhcnlcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JUE9JQlxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUC1vdmVyLUluZmluaUJhbmRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTEtXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIklQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZzoyNzpjb25maWcgSU5GSU5JQkFORF9JUE9JQl9ERUJVR1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGVidWdnaW5nXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6NDI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGF0YSBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiaVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSVFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJpU0NTSSBFeHRlbnNpb25zIGZvciBSRE1BIChpU0VSKSB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTItXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBjbGllbnQgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMTctXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBzZXJ2ZXIgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1NSUFRcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIFNDU0kgUkRNQSBQcm90b2NvbCB0YXJnZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6NTguMzQ1MDk1MjIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1ODU4NDAzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJETUEgYW5kIE5ldCBOYW1lc3BhY2UgSW50ZWdyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBDR1JPVVBfUkRNQWAsIGBSRE1BX1JYRWAsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX1VTRVJfQUNDRVNTYC4gSSdtIGdvaW5nIHRvIHNraXAgY2hlY2tpbmcgYE5FVF9OU2Agc2luY2UgaXQncyBwcmFjdGljYWxseSBhIGdpdmVuLiBJJ2xsIGZvY3VzIG9uIHRoZSBsaXN0ZWQgb25lcyBpbnN0ZWFkLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJ20gc2VlaW5nOlxuXG4qICAgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCBpcyBhIGNlbnRyYWwgcGllY2UgZm9yIG5ldG5zIGNoYW5nZXMuXG4qICAgYHJkbWFfZGV2X2NoYW5nZV9uZXRuc2AgaXMgdGhlIGludGVybmFsIGhlbHBlciBmb3IgdGhlIGFib3ZlLlxuKiAgIGByZG1hX2Rldl9waWNrX25ldG5zX25hbWVgIHNlZW1zIHJlbGF0ZWQgdG8gbmFtZSByZXNvbHV0aW9uIHdpdGhpbiB0aGUgbmFtZXNwYWNlIGNvbnRleHQuXG4qICAgYG5sZGV2X3NldF9kb2l0YCAtIEFoLCBhIE5ldGxpbmsgaGFuZGxlci4gVGhhdCdzIGRlZmluaXRlbHkgd29ydGggZGlnZ2luZyBpbnRvOyBpdCdzIHRoZSBpbnRlcmZhY2UuXG4qICAgYHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4YCBpcyB0aGUgY2dyb3VwIGhhbmRsZXIuXG4qICAgYHJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZGAgY291bGQgYmUgaW52b2x2ZWQgYXMgd2VsbC5cbiogICBgYWxsb2NfbmFtZV9pZGAsIGBfX2FsbG9jX25hbWVfaWRgIHNlZW0gdG8gcmVsYXRlIHRvIG5hbWUgYWxsb2NhdGlvbiwgd2hpY2ggaXMgbGlrZWx5IGNyaXRpY2FsLlxuKiAgIGByeGVfbW1hcGAgLSBUaGlzIGlzIHRoZSBtbWFwIGZ1bmN0aW9uLCB3aGljaCBoYXMgYmVlbiBtb2RpZmllZC5cblxuU28sIGBubGRldl9zZXRfZG9pdGAgaXMgb3VyIHByaW1hcnkgbmV0bGluayBoYW5kbGVyLiBgcmRtYWNnX3Jlc291cmNlX3NldF9tYXhgIGlzIHRoZSBjZ3JvdXAgaW50ZXJmYWNlLiBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgIGlzIHRoZSBrZXJuZWwgZnVuY3Rpb24gaGFuZGxpbmcgbmV0bnMgY2hhbmdlcy4gQW5kIG9mIGNvdXJzZSwgdGhlIG1vZGlmaWVkIGByeGVfbW1hcGAgaXMgdGhlcmUuXG5cbk9rYXksIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBPaCwgYHNtY19wbmV0X2ZpbmRfaWJgLCBgc21jX3BuZXRfYWRkX2liYCwgYHNtY19wbmV0X2VudGVyYCwgYHNtY19wbmV0aWRfYnlfdGFibGVfaWJgIGluIGBuZXQvc21jL3NtY19wbmV0LmNgIGhhdmUgYmVlbiBtb2RpZmllZCwgdG9vLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBDT05GSUdfU01DYCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDI2NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MzowNC45MzA5Mzc5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxMDAwNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MzowNS4xOTE5NDQwODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzMzM3MDg3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkRNQSBEZXZpY2UgTmFtZXMgYW5kIE5ldG5zIEltcGxpY2F0aW9uczogRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIHBhdGNoLCBhbmQgdGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IGBTTUNgIHN1cHBvcnQgaXMgZ29pbmcgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUuLi4gd2hhdCBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkPyBgQ0dST1VQX1JETUFgLCBgUkRNQV9SWEVgLCBgSU5GSU5JQkFORF9VU0VSX0FDQ0VTU2AsIGFuZCBub3cgYFNNQ2AuIEdvdCBpdC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkndmUgZ290IGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGluIG1pbmQ6IGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYG5sZGV2X3NldF9kb2l0YCwgYHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4YCwgYHJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZGAsIGBhbGxvY19uYW1lX2lkYCwgYHJ4ZV9tbWFwYCwgYW5kIGBzbWNfcG5ldF9maW5kX2liYC5cblxuTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiB0aGUgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIFllcCwgYGFsbG9jX25hbWVfaWRgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYHJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZGAsIGByZG1hY2dfcmVzb3VyY2Vfc2V0X21heGAsIGFuZCBgbmxkZXZfc2V0X2RvaXRgIGFyZSBhbGwgc3RhdGljLiBUaGUgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCBpcyBkZWZpbmVkIGluIGBjb3JlX3ByaXYuaGAuIGByeGVfbW1hcGAgaXMgaW4gYHJ4ZV9tbWFwLmNgLCBhbmQgYHNtY19wbmV0X2ZpbmRfaWJgIGlzIHN0YXRpYyBpbiBgc21jX3BuZXQuY2AuXG5cbk9rYXksIEkndmUgZ290IG15IGxpc3QuXG5cbk9oLCB3YWl0LCB0aGVyZSdzIGByZG1hY2dfcHJpbnRfZGV2aWNlX2tleWAsIGByZG1hY2dfZGV2aWNlX25hbWVfdW5pcXVlX2xvY2tlZGAsIGByZG1hX2Rldl9uYW1lX2luX25ldG5zYCwgYGFzc2lnbl9uYW1lYCBhbmQgYGFsbG9jX25hbWVgIHRvby4gTGV0J3MgaW5jbHVkZSBgcmRtYV9kZXZfbmFtZV9pbl9uZXRuc2AgYW5kIGByZG1hY2dfZGV2aWNlX25hbWVfdW5pcXVlX2xvY2tlZGAgdG9vLlxuXG5TbywgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZTogYENHUk9VUF9SRE1BYCwgYFJETUFfUlhFYCwgYElORklOSUJBTkRfVVNFUl9BQ0NFU1NgLCBgU01DYC5cblxuTm93IGZvciB0aGUgKndoeSo6IFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGFsbG93aW5nIFJETUEgZGV2aWNlcyB0byBzaGFyZSBuYW1lcyBhY3Jvc3MgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIGRldmljZSBuYW1pbmcsIGhvdyBkZXZpY2VzIGFyZSBtb3ZlZCBiZXR3ZWVuIG5hbWVzcGFjZXMsIGFuZCBob3cgY2dyb3VwIHJlc291cmNlcyBhcmUgdHJhY2tlZC4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLlxuXG5UaGVyZWZvcmUsIGZ1enppbmcgc2hvdWxkIGNvbmNlbnRyYXRlIG9uIHRoZSBuZXRsaW5rIGludGVyZmFjZSB1c2VkIHRvIG1vdmUgUkRNQSBkZXZpY2VzIGJldHdlZW4gbmFtZXNwYWNlcywgdGhlIFJETUEgY2dyb3VwIGludGVyZmFjZSwgYW5kIHRoZSBSWEUgbW1hcCBwYXRoLlxuXG5PbmUgbGFzdCB0aGluZywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgcnhlX21tYXBgIGNoYW5nZXMuIEFoLCB0aGUgcGF0Y2ggcmVtb3ZlcyBgcnhlX3ZtX29wc2AgYW5kIHVzZXMgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGRpcmVjdGx5LCBlZmZlY3RpdmVseSBkcm9wcGluZyBhIHJlZmVyZW5jZSBpbW1lZGlhdGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB0aGUgVk1BIGhvbGRzIHJlZmVyZW5jZXMuIERlZmluaXRlbHkgZnV6ei13b3J0aHkuXG5cbkFscmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzcyLCJPdXRwdXRUb2tlbnMiOjI1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MzoxNi41MjU2NTUxOTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDcyMjk1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX1JETUFcIixcbiAgICBcIlJETUFfUlhFXCIsXG4gICAgXCJJTkZJTklCQU5EX1VTRVJfQUNDRVNTXCIsXG4gICAgXCJTTUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dFwiLFxuICAgIFwicmRtYV9kZXZfY2hhbmdlX25ldG5zXCIsXG4gICAgXCJyZG1hX2Rldl9waWNrX25ldG5zX25hbWVcIixcbiAgICBcIm5sZGV2X3NldF9kb2l0XCIsXG4gICAgXCJyZG1hY2dfcmVzb3VyY2Vfc2V0X21heFwiLFxuICAgIFwicmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkXCIsXG4gICAgXCJhbGxvY19uYW1lX2lkXCIsXG4gICAgXCJfX2FsbG9jX25hbWVfaWRcIixcbiAgICBcInJ4ZV9tbWFwXCIsXG4gICAgXCJzbWNfcG5ldF9maW5kX2liXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSRE1BIGRldmljZXMgdG8gaGF2ZSB0aGUgc2FtZSBuYW1lIGFjcm9zcyBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzLCBtb2RpZnlpbmcgdGhlIGNvcmUgUkRNQSBkZXZpY2UgbmFtaW5nLCBuZXRucyBjaGFuZ2UgbG9naWMsIGFuZCBjZ3JvdXAgcmVzb3VyY2UgdHJhY2tpbmcuIEl0IGFsc28gdG91Y2hlcyBTTUMgcG5ldCB0YWJsZSBsb29rdXBzIGFuZCBSWEUgbW1hcCBoYW5kbGluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBtb3ZpbmcgUkRNQSBkZXZpY2VzIGJldHdlZW4gbmFtZXNwYWNlcywgdGhlIFJETUEgY2dyb3VwIGludGVyZmFjZSwgYW5kIHRoZSBSWEUgbW1hcCBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9SRE1BXCIsXG4gICAgXCJSRE1BX1JYRVwiLFxuICAgIFwiSU5GSU5JQkFORF9VU0VSX0FDQ0VTU1wiLFxuICAgIFwiU01DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWJfZGV2aWNlX3NldF9uZXRuc19wdXRcIixcbiAgICBcInJkbWFfZGV2X2NoYW5nZV9uZXRuc1wiLFxuICAgIFwicmRtYV9kZXZfcGlja19uZXRuc19uYW1lXCIsXG4gICAgXCJubGRldl9zZXRfZG9pdFwiLFxuICAgIFwicmRtYWNnX3Jlc291cmNlX3NldF9tYXhcIixcbiAgICBcInJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZFwiLFxuICAgIFwiYWxsb2NfbmFtZV9pZFwiLFxuICAgIFwiX19hbGxvY19uYW1lX2lkXCIsXG4gICAgXCJyeGVfbW1hcFwiLFxuICAgIFwic21jX3BuZXRfZmluZF9pYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzIHRvIGhhdmUgdGhlIHNhbWUgbmFtZSBhY3Jvc3MgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcywgbW9kaWZ5aW5nIHRoZSBjb3JlIFJETUEgZGV2aWNlIG5hbWluZywgbmV0bnMgY2hhbmdlIGxvZ2ljLCBhbmQgY2dyb3VwIHJlc291cmNlIHRyYWNraW5nLiBJdCBhbHNvIHRvdWNoZXMgU01DIHBuZXQgdGFibGUgbG9va3VwcyBhbmQgUlhFIG1tYXAgaGFuZGxpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGludGVyZmFjZSBmb3IgbW92aW5nIFJETUEgZGV2aWNlcyBiZXR3ZWVuIG5hbWVzcGFjZXMsIHRoZSBSRE1BIGNncm91cCBpbnRlcmZhY2UsIGFuZCB0aGUgUlhFIG1tYXAgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 00:19:11 +0000 UTC FinishedAt: 2026-07-15 00:53:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e26c48cf23a4940208c5d82fcb37d20df234092b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_RDMA", "RDMA_RXE", "INFINIBAND_USER_ACCESS", "SMC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e26c48cf23a4940208c5d82fcb37d20df234092b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_RDMA", "RDMA_RXE", "INFINIBAND_USER_ACCESS", "SMC" ], "series_id": "79a36670-9eb2-4d83-91db-cafcd06760c3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ib_device_set_netns_put", "rdma_dev_change_netns", "rdma_dev_pick_netns_name", "nldev_set_doit", "rdmacg_resource_set_max", "rdmacg_get_device_locked", "alloc_name_id", "__alloc_name_id", "rxe_mmap", "smc_pnet_find_ib" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9SRE1BJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfVVNFUl9BQ0NFU1MmIzM0OywKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfcmVzb3VyY2Vfc2V0X21heCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7YWxsb2NfbmFtZV9pZCYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cnhlX21tYXAmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMsIG1vZGlmeWluZyB0aGUgY29yZSBSRE1BIGRldmljZSBuYW1pbmcsIG5ldG5zIGNoYW5nZSBsb2dpYywgYW5kIGNncm91cCByZXNvdXJjZSB0cmFja2luZy4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IHRhYmxlIGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1vdmluZyBSRE1BIGRldmljZXMgYmV0d2VlbiBuYW1lc3BhY2VzLCB0aGUgUkRNQSBjZ3JvdXAgaW50ZXJmYWNlLCBhbmQgdGhlIFJYRSBtbWFwIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YjIyMzE3NTYxYmI0MzY3ZGM1ZTZlYWQwZjI5NmUyZDA3MzYxYzM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDA6NTI6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXG5pbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbVxuQEAgLTEyLDYgJiM0MzsxMiwxMCBAQCBEZXNjcmlwdGlvbjogXHRJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG9cbiBcdFx0Zm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOlxuIFx0XHRta2RpciAtcCAvY29uZmlnL3JkbWFfY20vXHUwMDNjaGNhXHUwMDNlXG4gXG4mIzQzO1x0XHROb3RlOiBjb25maWdmcyBoYXMgbm8gbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCwgc28gdGhpc1xuJiM0MztcdFx0aW50ZXJmYWNlIGNhbm5vdCByZXByZXNlbnQgdHdvIGRldmljZXMgdGhhdCBzaGFyZSBhIG5hbWUgaW5cbiYjNDM7XHRcdGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS5cbiYjNDM7XG4gXG4gV2hhdDogXHRcdC9jb25maWcvcmRtYV9jbS9cdTAwM2NoY2FcdTAwM2UvcG9ydHMvXHUwMDNjcG9ydC1udW1cdTAwM2UvZGVmYXVsdF9yb2NlX21vZGVcbiBEYXRlOiBcdFx0Tm92ZW1iZXIgMjksIDIwMTVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9yZG1hLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0XG5pbmRleCBlNjkzNjliNzI1MmVhMy4uOGQwYzNhNzk2ZWUzZDYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9yZG1hLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvcmRtYS5yc3RcbkBAIC05MCw2ICYjNDM7OTAsMTMgQEAgRm9sbG93aW5nIHJlc291cmNlcyBjYW4gYmUgYWNjb3VudGVkIGJ5IHJkbWEgY29udHJvbGxlci5cbiAgIGhjYV9vYmplY3QgXHRNYXhpbXVtIG51bWJlciBvZiBIQ0EgT2JqZWN0c1xuICAgPT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuJiM0MztSRE1BIGRldmljZXMgZnJvbSBhbGwgbmV0d29yayBuYW1lc3BhY2VzIGFyZSBsaXN0ZWQuIEVhY2ggbGluZSBzdGFydHMgd2l0aFxuJiM0Mzt0aGUgZGV2aWNlIG5hbWUuIElmIG1vcmUgdGhhbiBvbmUgZGV2aWNlIGhhcyB0aGUgc2FtZSBuYW1lLCBgYGluZGV4PU5gYFxuJiM0Mztmb2xsb3dzIHRoZSBuYW1lLCB3aGVyZSBgYE5gYCBpcyB0aGUgc3lzdGVtLXdpZGUgUkRNQSBkZXZpY2UgaW5kZXgsIHVuaXF1ZVxuJiM0MzthbW9uZyByZWdpc3RlcmVkIGRldmljZXMuIFdoZW4gY29uZmlndXJpbmcgYSBsaW1pdCwgdGhlIGluZGV4IGlzIG9wdGlvbmFsXG4mIzQzO2ZvciBhIGdsb2JhbGx5IHVuaXF1ZSBuYW1lIGFuZCByZXF1aXJlZCBmb3IgYSBkdXBsaWNhdGUgbmFtZS4gQSB3cml0ZSB3aXRob3V0XG4mIzQzO3RoZSByZXF1aXJlZCBpbmRleCBmYWlscyB3aXRoIGBgLUVOT1RVTklRYGAuXG4mIzQzO1xuIDIuIFVzYWdlIEV4YW1wbGVzXG4gPT09PT09PT09PT09PT09PT1cbiBcbkBAIC05Nyw2ICYjNDM7MTA0LDcgQEAgRm9sbG93aW5nIHJlc291cmNlcyBjYW4gYmUgYWNjb3VudGVkIGJ5IHJkbWEgY29udHJvbGxlci5cbiBcbiBcdGVjaG8gbWx4NF8wIGhjYV9oYW5kbGU9MiBoY2Ffb2JqZWN0PTIwMDAgXHUwMDNlIC9zeXMvZnMvY2dyb3VwL3JkbWEvMS9yZG1hLm1heFxuIFx0ZWNobyBvY3JkbWExIGhjYV9oYW5kbGU9MyBcdTAwM2UgL3N5cy9mcy9jZ3JvdXAvcmRtYS8yL3JkbWEubWF4XG4mIzQzO1x0ZWNobyBcJiMzNDtyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yXCYjMzQ7IFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9yZG1hLzMvcmRtYS5tYXhcbiBcbiAoYikgUXVlcnkgcmVzb3VyY2UgbGltaXQ6OlxuIFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuaW5kZXggOTkzNDQ2YWI2NmQwZmIuLmRmNzRkNTU0ZDJjZGZmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbkBAIC0yNzUyLDYgJiM0MzsyNzUyLDExIEBAIFJETUFcbiBUaGUgXCYjMzQ7cmRtYVwmIzM0OyBjb250cm9sbGVyIHJlZ3VsYXRlcyB0aGUgZGlzdHJpYnV0aW9uIGFuZCBhY2NvdW50aW5nIG9mXG4gUkRNQSByZXNvdXJjZXMuXG4gXG4mIzQzO1JETUEgZGV2aWNlcyBmcm9tIGFsbCBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlIGxpc3RlZC4gRWFjaCBsaW5lIHN0YXJ0cyB3aXRoXG4mIzQzO3RoZSBkZXZpY2UgbmFtZS4gSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaGFzIHRoZSBzYW1lIG5hbWUsIGBgaW5kZXg9TmBgXG4mIzQzO2ZvbGxvd3MgdGhlIG5hbWUsIHdoZXJlIGBgTmBgIGlzIHRoZSBzeXN0ZW0td2lkZSBSRE1BIGRldmljZSBpbmRleCwgdW5pcXVlXG4mIzQzO2Ftb25nIHJlZ2lzdGVyZWQgZGV2aWNlcy5cbiYjNDM7XG4gUkRNQSBJbnRlcmZhY2UgRmlsZXNcbiB+fn5+fn5+fn5+fn5+fn5+fn5+flxuIFxuQEAgLTI3NjAsNyAmIzQzOzI3NjUsMTEgQEAgUkRNQSBJbnRlcmZhY2UgRmlsZXNcbiBcdGV4Y2VwdCByb290IHRoYXQgZGVzY3JpYmVzIGN1cnJlbnQgY29uZmlndXJlZCByZXNvdXJjZSBsaW1pdFxuIFx0Zm9yIGEgUkRNQS9JQiBkZXZpY2UuXG4gXG4tXHRMaW5lcyBhcmUga2V5ZWQgYnkgZGV2aWNlIG5hbWUgYW5kIGFyZSBub3Qgb3JkZXJlZC5cbiYjNDM7XHRMaW5lcyBhcmUga2V5ZWQgYnkgZGV2aWNlIG5hbWUgYW5kIGFyZSBub3Qgb3JkZXJlZC4gQSB3cml0ZSBtYXlcbiYjNDM7XHRpbmNsdWRlIGBgaW5kZXg9TmBgIGFmdGVyIHRoZSBkZXZpY2UgbmFtZS4gVGhlIGluZGV4IGlzIG9wdGlvbmFsXG4mIzQzO1x0d2hlbiB0aGUgbmFtZSBpcyBnbG9iYWxseSB1bmlxdWUuIElmIG11bHRpcGxlIGRldmljZXMgaGF2ZSB0aGF0XG4mIzQzO1x0bmFtZSwgdGhlIGluZGV4IGlzIHJlcXVpcmVkIGFuZCBhIHdyaXRlIHdpdGhvdXQgaXQgZmFpbHMgd2l0aFxuJiM0MztcdGBgLUVOT1RVTklRYGAuXG4gXHRFYWNoIGxpbmUgY29udGFpbnMgc3BhY2Ugc2VwYXJhdGVkIHJlc291cmNlIG5hbWUgYW5kIGl0cyBjb25maWd1cmVkXG4gXHRsaW1pdCB0aGF0IGNhbiBiZSBkaXN0cmlidXRlZC5cbiBcbkBAIC0yNzc2LDYgJiM0MzsyNzg1LDEwIEBAIFJETUEgSW50ZXJmYWNlIEZpbGVzXG4gXHQgIG1seDRfMCBoY2FfaGFuZGxlPTIgaGNhX29iamVjdD0yMDAwXG4gXHQgIG9jcmRtYTEgaGNhX2hhbmRsZT0zIGhjYV9vYmplY3Q9bWF4XG4gXG4mIzQzO1x0Rm9yIGRldmljZXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMsIHNlbGVjdCB0aGUgZGV2aWNlIGJ5IGluZGV4OjpcbiYjNDM7XG4mIzQzO1x0ICBlY2hvIFwmIzM0O3J4ZTAgaW5kZXg9NSBoY2FfaGFuZGxlPTJcJiMzNDsgXHUwMDNlIHJkbWEubWF4XG4mIzQzO1xuICAgcmRtYS5jdXJyZW50XG4gXHRBIHJlYWQtb25seSBmaWxlIHRoYXQgZGVzY3JpYmVzIGN1cnJlbnQgcmVzb3VyY2UgdXNhZ2UuXG4gXHRJdCBleGlzdHMgZm9yIGFsbCB0aGUgY2dyb3VwIGV4Y2VwdCByb290LlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcbmluZGV4IDFmMDM3ZmUwMTQ1MGVmLi44NjExYjRlMzJjZmI2MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuY1xuQEAgLTE3LDYgJiM0MzsxNyw3IEBAXG4gdm9pZCBpYl9kZXZpY2VfcmVnaXN0ZXJfcmRtYWNnKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiB7XG4gXHRkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLm5hbWUgPSBkZXZpY2UtXHUwMDNlbmFtZTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLmluZGV4ID0gZGV2aWNlLVx1MDAzZWluZGV4O1xuIFx0cmRtYWNnX3JlZ2lzdGVyX2RldmljZShcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuY1xuaW5kZXggODkxZTUyYWZiOGY0YmEuLmMzODlkNGUzN2I2YmNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXG5AQCAtNjUsNiAmIzQzOzY1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwICp0b19kZXZfcG9ydF9ncm91cChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4gXHRyZXR1cm4gY29udGFpbmVyX29mKGdyb3VwLCBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwLCBncm91cCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBjb25maWdmcyBpcyBub3QgbmV0IG5hbWVzcGFjZSBhd2FyZSwgc28gYSBuYW1lIHNoYXJlZCBieSBkZXZpY2VzIGluXG4mIzQzOyAqIGRpZmZlcmVudCBuYW1lc3BhY2VzIHJlc29sdmVzIHRvIHRoZSBmaXJzdCBtYXRjaCBoZXJlLlxuJiM0MzsgKi9cbiBzdGF0aWMgYm9vbCBmaWx0ZXJfYnlfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYsIHZvaWQgKmNvb2tpZSlcbiB7XG4gXHRyZXR1cm4gIXN0cmNtcChkZXZfbmFtZShcdTAwMjZpYl9kZXYtXHUwMDNlZGV2KSwgY29va2llKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXG5pbmRleCAxOTEwNGM1NDJiMjcwZC4uYWFmMzMwYjBkMzMzYWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmhcbkBAIC0zNTYsNyAmIzQzOzM1Niw4IEBAIHZvaWQgaWJfcG9ydF91bnJlZ2lzdGVyX2NsaWVudF9ncm91cHMoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0X251bSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcyk7XG4gXG4gaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKTtcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcbiBpbnQgcmRtYV9ubF9uZXRfaW5pdChzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0KTtcbiB2b2lkIHJkbWFfbmxfbmV0X2V4aXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xuaW5kZXggYjgxOTNlMDc3YTc0NmYuLjRjNzUwNzg0NDhhMzI1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jXG5AQCAtMTI5LDcgJiM0MzsxMjksNyBAQCBzdGF0aWMgREVDTEFSRV9SV1NFTShyZG1hX25ldHNfcndzZW0pO1xuIGJvb2wgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMgPSB0cnVlO1xuIG1vZHVsZV9wYXJhbV9uYW1lZChuZXRuc19tb2RlLCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucywgYm9vbCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhuZXRuc19tb2RlLFxuLVx0XHQgXCYjMzQ7U2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZClcJiMzNDspO1xuJiM0MztcdFx0IFwmIzM0O1NoYXJlIGRldmljZSBhbW9uZyBuZXQgbmFtZXNwYWNlczsgZGVmYXVsdD0xIChzaGFyZWQpLiBJbiBleGNsdXNpdmUgbW9kZSBkZXZpY2UgbmFtZXMgYXJlIHVuaXF1ZSBwZXIgbmV0IG5hbWVzcGFjZVwmIzM0Oyk7XG4gLyoqXG4gICogcmRtYV9kZXZfYWNjZXNzX25ldG5zKCkgLSBSZXR1cm4gd2hldGhlciBhbiByZG1hIGRldmljZSBjYW4gYmUgYWNjZXNzZWRcbiAgKlx0XHRcdCAgICAgZnJvbSBhIHNwZWNpZmllZCBuZXQgbmFtZXNwYWNlIG9yIG5vdC5cbkBAIC0yNjgsNyAmIzQzOzI2OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWJkZXZfbHNtX25iID0ge1xuIH07XG4gXG4gc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuLVx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCk7XG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4pO1xuIFxuIC8qIFBvaW50ZXIgdG8gdGhlIFJDVSBoZWFkIGF0IHRoZSBzdGFydCBvZiB0aGUgaWJfcG9ydF9kYXRhIGFycmF5ICovXG4gc3RydWN0IGliX3BvcnRfZGF0YV9yY3Uge1xuQEAgLTM1MSwxMyAmIzQzOzM1MiwxNSBAQCB2b2lkIGliX2RldmljZV9wdXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIH1cbiBFWFBPUlRfU1lNQk9MKGliX2RldmljZV9wdXQpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKVxuJiM0MztzdGF0aWMgc3RydWN0IGliX2RldmljZSAqX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSxcbiYjNDM7XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbiB7XG4gXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XG4gXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuIFxuIFx0eGFfZm9yX2VhY2ggKFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXG4tXHRcdGlmICghc3RyY21wKG5hbWUsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSlcbiYjNDM7XHRcdGlmIChyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFzdHJjbXAobmFtZSwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKVxuIFx0XHRcdHJldHVybiBkZXZpY2U7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0zOTUsNyAmIzQzOzM5OCw3IEBAIGludCBpYl9kZXZpY2VfcmVuYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShuYW1lKSkge1xuJiM0MztcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShuYW1lLCByZG1hX2Rldl9uZXQoaWJkZXYpKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHR9XG5AQCAtNDM1LDcgJiM0Mzs0MzgsMTMgQEAgaW50IGliX2RldmljZV9zZXRfZGltKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCB1c2VfZGltKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7LypcbiYjNDM7ICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAmIzM5OyVkJiMzOTsgc3R5bGUgQG5hbWUgcGF0dGVybiB3aXRoaW4gbmV0IG5hbWVzcGFjZVxuJiM0MzsgKiBAbmV0LiBSZXR1cm5zIHRoZSBpbmRleCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8uIFRoZSBjYWxsZXIgYnVpbGRzXG4mIzQzOyAqIHRoZSBmaW5hbCB1bmlxdWUgZGV2aWNlIG5hbWUgZnJvbSB0aGUgcmV0dXJuZWQgaW5kZXguXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IF9fYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzQzO1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2UgKnNraXApXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2aWNlO1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbkBAIC00NDgsNiAmIzQzOzQ1Nyw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiBcdHhhX2Zvcl9lYWNoIChcdTAwMjZkZXZpY2VzLCBpbmRleCwgZGV2aWNlKSB7XG4gXHRcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XG4gXG4mIzQzO1x0XHRpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoc3NjYW5mKGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpLCBuYW1lLCBcdTAwMjZpKSAhPSAxKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoaSBcdTAwM2MgMCB8fCBpIFx1MDAzZT0gSU5UX01BWClcbkBAIC00NjIsMTUgJiM0Mzs0NzMsMjcgQEAgc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuIFx0fVxuIFxuIFx0cmMgPSBpZGFfYWxsb2MoXHUwMDI2aW51c2UsIEdGUF9LRVJORUwpO1xuLVx0aWYgKHJjIFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdHJjID0gZGV2X3NldF9uYW1lKFx1MDAyNmliZGV2LVx1MDAzZWRldiwgbmFtZSwgcmMpO1xuIG91dDpcbiBcdGlkYV9kZXN0cm95KFx1MDAyNmludXNlKTtcbiBcdHJldHVybiByYztcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19hbGxvY19uYW1lX2lkKG5ldCwgbmFtZSwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGludCBpZDtcbiYjNDM7XG4mIzQzO1x0aWQgPSBhbGxvY19uYW1lX2lkKHJkbWFfZGV2X25ldChpYmRldiksIG5hbWUpO1xuJiM0MztcdGlmIChpZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBpZDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldl9zZXRfbmFtZShcdTAwMjZpYmRldi1cdTAwM2VkZXYsIG5hbWUsIGlkKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBpYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTtcbkBAIC0xMTUxLDggJiM0MzsxMTc0LDE3IEBAIHN0YXRpYyB2b2lkIHJkbWFfZGV2X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdFx0LypcbiBcdFx0ICogSWYgdGhlIHJlYWwgZGV2aWNlIGlzIGluIHRoZSBOUyB0aGVuIG1vdmUgaXQgYmFjayB0byBpbml0LlxuJiM0MztcdFx0ICogUHJvdmlkZSBhIGZhbGxiYWNrIHBhdHRlcm4gc28gYSBuYW1lIGNvbmZsaWN0IGluIGluaXRfbmV0XG4mIzQzO1x0XHQgKiBjYW5ub3QgbWFrZSB0aGUgdGVhcmRvd24gbW92ZSBmYWlsLlxuIFx0XHQgKi9cbi1cdFx0cmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCBcdTAwMjZpbml0X25ldCk7XG4mIzQzO1x0XHRpZiAobmV0X2VxKG5ldCwgcmVhZF9wbmV0KFx1MDAyNmRldi1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0KSkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCBcdTAwMjZpbml0X25ldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIE5VTEwsIFwmIzM0O2liZGV2JWRcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbiYjNDM7XHRcdFx0XHRXQVJOKDEsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtGYWlsZWQgdG8gbW92ZSBSRE1BIGRldmljZSAlcyB0byBpbml0X25ldCBvbiBuZXRucyBleGl0OiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIGRldl9uYW1lKFx1MDAyNmRldi1cdTAwM2VkZXYpLCByZXQpO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRwdXRfZGV2aWNlKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuIFx0XHRkb3duX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG5AQCAtMTIwNiw3ICYjNDM7MTIzOCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByZG1hX2Rldl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gfVxuIFxuIC8qXG4tICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhpcyBpc1xuJiM0MzsgKiBBc3NpZ24gdGhlIHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUgYW5kIHRoZSB1bmlxdWUgZGV2aWNlIGluZGV4LiBUaGUgZGV2aWNlXG4mIzQzOyAqIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgbmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGlzIGFzc2lnbmVkIHRvLiBUaGlzIGlzXG4gICogdW5kb25lIGJ5IGliX2RlYWxsb2NfZGV2aWNlLlxuICAqL1xuIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKVxuQEAgLTEyMjMsNyAmIzQzOzEyNTYsOCBAQCBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSkge1xuJiM0MztcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgcmRtYV9kZXZfbmV0KGRldmljZSkpKSB7XG4gXHRcdHJldCA9IC1FTkZJTEU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTEzODgsOCAmIzQzOzE0MjIsOSBAQCBzdGF0aWMgdm9pZCBpYl9kZXZpY2Vfbm90aWZ5X3JlZ2lzdGVyKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbiAvKipcbiAgKiBpYl9yZWdpc3Rlcl9kZXZpY2UgLSBSZWdpc3RlciBhbiBJQiBkZXZpY2Ugd2l0aCBJQiBjb3JlXG4gICogQGRldmljZTogRGV2aWNlIHRvIHJlZ2lzdGVyXG4tICogQG5hbWU6IHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUuIFRoaXMgbWF5IGluY2x1ZGUgYSAmIzM5OyUmIzM5OyB3aGljaCB3aWxsXG4tICogXHQgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuXG4mIzQzOyAqIEBuYW1lOiBkZXZpY2UgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgZGV2aWNlJiMzOTtzIG5ldCBuYW1lc3BhY2UuIFRoaXMgbWF5XG4mIzQzOyAqXHQgIGluY2x1ZGUgYSAmIzM5OyUmIzM5OyB3aGljaCB3aWxsIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZVxuJiM0MzsgKlx0ICBwYXNzZWQgZGV2aWNlIG5hbWUuXG4gICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQlxuICAqXHQgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuIEluIHRoaXMgY2FzZSB0aGUgY2FsbGVyIHNob3VsZCBmdWxseVxuICAqXHRcdHNldHVwIHRoZSBpYmRldiBmb3IgRE1BLiBUaGlzIHVzdWFsbHkgbWVhbnMgdXNpbmcgZG1hX3ZpcnRfb3BzLlxuQEAgLTE2NzAsMTQgJiM0MzsxNzA1LDgzIEBAIHZvaWQgaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKHN0cnVjdCBpYl9kZXZpY2UgKmliX2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTChpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCByZG1hX2Rldl9uYW1lX2luX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKnNraXAsIHN0cnVjdCBuZXQgKm5ldCxcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGliX2RldmljZSAqZGV2aWNlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4mIzQzO1xuJiM0MztcdHhhX2Zvcl9lYWNoKFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXG4mIzQzO1x0XHRpZiAoZGV2aWNlICE9IHNraXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhc3RyY21wKG5hbWUsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ2hvb3NlIHRoZSBuYW1lIEBkZXZpY2Ugc2hvdWxkIHVzZSBpbiBuZXQgbmFtZXNwYWNlIEBuZXQuIEByZXF1ZXN0ZWRfbmFtZVxuJiM0MzsgKiBpcyB1c2VkIGFzIGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSB3aGVuIHNldC4gT3RoZXJ3aXNlIGtlZXAgdGhlIGN1cnJlbnQgbmFtZVxuJiM0MzsgKiB3aGVuIGl0IGlzIGZyZWUsIG9yIHVzZSBhIHRydXN0ZWQgJiMzOTslZCYjMzk7IEBmYWxsYmFja19wYXR0ZXJuIGZvciB0ZWFyZG93bi4gVGhlXG4mIzQzOyAqIGNhbGxlciBtdXN0IGhvbGQgdGhlIHdyaXRlIHNpZGUgb2YgZGV2aWNlc19yd3NlbS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybixcbiYjNDM7XHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlkO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuJiM0MztcbiYjNDM7XHRpZiAocmVxdWVzdGVkX25hbWUpIHtcbiYjNDM7XHRcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7XG4mIzQzO1x0XHRcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKSB7XG4mIzQzO1x0XHQqbmV3X25hbWUgPSBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFmYWxsYmFja19wYXR0ZXJuKVxuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgXCYjMzQ7aWJkZXYldVwmIzM0OywgZGV2aWNlLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAoIXJkbWFfZGV2X25hbWVfaW5fbmV0bnMoZGV2aWNlLCBuZXQsIGJ1ZikpIHtcbiYjNDM7XHRcdCpuZXdfbmFtZSA9IGJ1ZjtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWQgPSBfX2FsbG9jX25hbWVfaWQobmV0LCBmYWxsYmFja19wYXR0ZXJuLCBkZXZpY2UpO1xuJiM0MztcdGlmIChpZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBpZDtcbiYjNDM7XHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIGZhbGxiYWNrX3BhdHRlcm4sIGlkKTtcbiYjNDM7XHQqbmV3X25hbWUgPSBidWY7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUaGUgY2FsbGVyIG11c3QgcGFzcyBpbiBhIGRldmljZSB0aGF0IGhhcyB0aGUga3JlZiBoZWxkIGFuZCB0aGUgcmVmY291bnRcbiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWRcbiAgKiBpbnRvIG5ldC5cbiYjNDM7ICpcbiYjNDM7ICogTmFtaW5nIHJ1bGVzIGFyZSBoYW5kbGVkIGJ5IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSgpLlxuICAqL1xuIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcbi1cdFx0XHRcdCBzdHJ1Y3QgbmV0ICpuZXQpXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4pXG4ge1xuJiM0MztcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XG4mIzQzO1x0Y29uc3QgY2hhciAqbmV3X25hbWU7XG4gXHRpbnQgcmV0MiA9IC1FSU5WQUw7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE2OTQsMzAgJiM0MzsxNzk4LDY1IEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKCFmYWxsYmFja19wYXR0ZXJuKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmVqZWN0IGEgcHJlZGljdGFibGUgbmFtZSBjb25mbGljdCBiZWZvcmUgdGVhcmluZyBhbnl0aGluZ1xuJiM0MztcdFx0ICogZG93biwgc28gYSBkb29tZWQgdXNlciBtb3ZlIGRvZXMgbm90IGRpc2FibGUgYSBsaXZlIGRldmljZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZG93bl93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHRcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgZmFsbGJhY2tfcGF0dGVybiwgYnVmLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHNpemVvZihidWYpLCBcdTAwMjZuZXdfbmFtZSk7XG4mIzQzO1x0XHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LmtvYmosIEtPQkpfUkVNT1ZFKTtcbiBcdGRpc2FibGVfZGV2aWNlKGRldmljZSk7XG4gXG4gXHQvKlxuLVx0ICogQXQgdGhpcyBwb2ludCBubyBvbmUgY2FuIGJlIHVzaW5nIHRoZSBkZXZpY2UsIHNvIGl0IGlzIHNhZmUgdG9cbi1cdCAqIGNoYW5nZSB0aGUgbmFtZXNwYWNlLlxuJiM0MztcdCAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtXG4mIzQzO1x0ICogbm93IHRoYXQgdGhlIGRldmljZSBpcyBkaXNhYmxlZCwgY2xvc2luZyByYWNlcyB3aXRoIGEgY29uY3VycmVudFxuJiM0MztcdCAqIHJlZ2lzdHJhdGlvbiBvciByZW5hbWUsIHRoZW4gcHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZSBhdCB0aGUgc3lzZnNcbiYjNDM7XHQgKiBsZXZlbC5cbiBcdCAqL1xuLVx0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuJiM0MztcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNm5ld19uYW1lKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xuJiM0MztcdFx0XHRXQVJOKDEsXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7JXM6IGZhaWxlZCB0byBwaWNrIGRldmljZSBuYW1lIGR1cmluZyBuYW1lc3BhY2UgdGVhcmRvd246ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgIF9fZnVuY19fLCByZXQpO1xuJiM0MztcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuJiM0MztcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Z290byByZW5hbWVfZG9uZTtcbiYjNDM7XHR9XG4gXG4tXHRkb3duX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4tXHQvKlxuLVx0ICogQ3VycmVudGx5IHJkbWEgZGV2aWNlcyBhcmUgc3lzdGVtIHdpZGUgdW5pcXVlLiBTbyB0aGUgZGV2aWNlIG5hbWVcbi1cdCAqIGlzIGd1YXJhbnRlZWQgZnJlZSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4gUHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZVxuLVx0ICogYXQgdGhlIHN5c2ZzIGxldmVsLlxuLVx0ICovXG4tXHRyZXQgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpKTtcbi1cdHVwX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4mIzQzO1x0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcbiYjNDM7XHRyZXQgPSBkZXZpY2VfcmVuYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsIG5ld19uYW1lKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X3dhcm4oXHUwMDI2ZGV2aWNlLVx1MDAzZWRldixcbi1cdFx0XHQgXCYjMzQ7JXM6IENvdWxkbiYjMzk7dCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXG5cJiMzNDssXG4tXHRcdFx0IF9fZnVuY19fKTtcbi1cdFx0LyogVHJ5IGFuZCBwdXQgdGhpbmdzIGJhY2sgYW5kIHJlLWVuYWJsZSB0aGUgZGV2aWNlICovXG4tXHRcdHdyaXRlX3BuZXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIGN1cl9uZXQpO1xuJiM0MztcdFx0aWYgKGZhbGxiYWNrX3BhdHRlcm4pIHtcbiYjNDM7XHRcdFx0V0FSTigxLFxuJiM0MztcdFx0XHQgICAgIFwmIzM0OyVzOiBmYWlsZWQgdG8gcmVuYW1lIGRldmljZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKFx1MDAyNmRldmljZS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0OyVzOiBDb3VsZG4mIzM5O3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBfX2Z1bmNfXyk7XG4mIzQzO1x0XHRcdC8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqL1xuJiM0MztcdFx0XHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3Ryc2NweShkZXZpY2UtXHUwMDNlbmFtZSwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksXG4mIzQzO1x0XHRcdElCX0RFVklDRV9OQU1FX01BWCk7XG4gXHR9XG4mIzQzO3JlbmFtZV9kb25lOlxuJiM0MztcdHVwX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuIFxuIFx0cmV0MiA9IGVuYWJsZV9kZXZpY2VfYW5kX2dldChkZXZpY2UpO1xuIFx0aWYgKHJldDIpIHtcbkBAIC0xNzQwLDM2ICYjNDM7MTg3OSw3MiBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsXG4gfVxuIFxuIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZClcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkLCBjb25zdCBjaGFyICpuYW1lLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdGludCByZXQ7XG4gXG4gXHRuZXQgPSBnZXRfbmV0X25zX2J5X2ZkKG5zX2ZkKTtcbiBcdGlmIChJU19FUlIobmV0KSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJbnZhbGlkIHRhcmdldCBuZXQgbmFtZXNwYWNlIGZkXCYjMzQ7KTtcbiBcdFx0cmV0ID0gUFRSX0VSUihuZXQpO1xuIFx0XHRnb3RvIG5ldF9lcnI7XG4gXHR9XG4gXG4gXHRpZiAoIW5ldGxpbmtfbnNfY2FwYWJsZShza2IsIG5ldC1cdTAwM2V1c2VyX25zLCBDQVBfTkVUX0FETUlOKSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7TWlzc2luZyBDQVBfTkVUX0FETUlOIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FUEVSTTtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNb3ZpbmcgYSBkZXZpY2UgdG8gdGhlIG5hbWVzcGFjZSBpdCBhbHJlYWR5IGxpdmVzIGluIGlzIGEgbm8tb3A7IGFcbiYjNDM7XHQgKiBzdXBwbGllZCBuYW1lIHN0aWxsIHJlbmFtZXMgaXQgaW4gcGxhY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG5ldF9lcShuZXQsIHJlYWRfcG5ldChcdTAwMjZkZXYtXHUwMDNlY29yZWRldi5yZG1hX25ldCkpKSB7XG4mIzQzO1x0XHRyZXQgPSBuYW1lID8gaWJfZGV2aWNlX3JlbmFtZShkZXYsIG5hbWUpIDogMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0ID09IC1FRVhJU1QpXG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7RGV2aWNlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O1VuYWJsZSB0byB1c2UgcmVxdWVzdGVkIGRldmljZSBuYW1lIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG5zX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIEFsbCB0aGUgaWJfY2xpZW50cywgaW5jbHVkaW5nIHV2ZXJicywgYXJlIHJlc2V0IHdoZW4gdGhlIG5hbWVzcGFjZSBpc1xuIFx0ICogY2hhbmdlZCBhbmQgdGhpcyBjYW5ub3QgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciB1c2Vyc3BhY2UgdG8gZG9cbiBcdCAqIHNvbWV0aGluZywgc28gZGlzYXNzb2NpYXRpb24gaXMgbWFuZGF0b3J5LlxuIFx0ICovXG4tXHRpZiAoIWRldi1cdTAwM2VvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0IHx8IGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XG4mIzQzO1x0aWYgKGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtDYW5ub3QgY2hhbmdlIG5ldCBuYW1lc3BhY2Ugb2YgUkRNQSBkZXZpY2UgaW4gc2hhcmVkIG5ldG5zIG1vZGVcJiMzNDspO1xuJiM0MztcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRnb3RvIG5zX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW9wcy5kaXNhc3NvY2lhdGVfdWNvbnRleHQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0RldmljZSBkb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZSBjaGFuZ2VzIChubyBkaXNhc3NvY2lhdGUgc3VwcG9ydClcJiMzNDspO1xuIFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4gXHRnZXRfZGV2aWNlKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuIFx0aWJfZGV2aWNlX3B1dChkZXYpO1xuLVx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucywgbmV0KTtcbiYjNDM7XHRyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zLCBuZXQsIG5hbWUsXG4mIzQzO1x0XHRcdFx0ICAgIE5VTEwpO1xuIFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAocmV0ID09IC1FRVhJU1QpXG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcJiMzNDspO1xuJiM0MztcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7VW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCYjMzQ7KTtcbiBcbiBcdHB1dF9uZXQobmV0KTtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbmluZGV4IGFhZTRmM2Y2YmNiYTE0Li40ZWZhMzg3ZWMxYmUxNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcbkBAIC0xMTc4LDYgJiM0MzsxMTc4LDI0IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRpZiAoIWRldmljZSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0aWYgKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSkge1xuJiM0MztcdFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcbiYjNDM7XHRcdHUzMiBuc19mZDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkge1xuJiM0MztcdFx0XHRubGFfc3Ryc2NweShuYW1lLCB0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdLFxuJiM0MztcdFx0XHRcdCAgICBJQl9ERVZJQ0VfTkFNRV9NQVgpO1xuJiM0MztcdFx0XHRpZiAoc3RybGVuKG5hbWUpID09IDApIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xuJiM0MztcdFx0ZXJyID0gaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc2tiLCBkZXZpY2UsIG5zX2ZkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgbmFtZVswXSA/IG5hbWUgOiBOVUxMLCBleHRhY2spO1xuJiM0MztcdFx0Z290byBwdXRfZG9uZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0pIHtcbiBcdFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcbiBcbkBAIC0xMTkxLDE0ICYjNDM7MTIwOSw2IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmICh0YltSRE1BX05MREVWX05FVF9OU19GRF0pIHtcbi1cdFx0dTMyIG5zX2ZkO1xuLVxuLVx0XHRuc19mZCA9IG5sYV9nZXRfdTMyKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSk7XG4tXHRcdGVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCk7XG4tXHRcdGdvdG8gcHV0X2RvbmU7XG4tXHR9XG4tXG4gXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9ESU1dKSB7XG4gXHRcdHU4IHVzZV9kaW07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbmluZGV4IDlhZjMxZDFkOWQ3MGM3Li5hODJjNDY5NjU0MTZhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbkBAIC03MDAsNiAmIzQzOzcwMCwxMiBAQCBpbnQgaWJfbWFkX2FnZW50X3NlY3VyaXR5X3NldHVwKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LFxuIFx0aWYgKHFwX3R5cGUgIT0gSUJfUVBUX1NNSSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTRUxpbnV4IGxhYmVscyBhbiBlbmRwb3J0IGJ5IChkZXZpY2UgbmFtZSwgcG9ydCkgZnJvbSBhIGdsb2JhbFxuJiM0MztcdCAqIHBvbGljeS4gSWYgZGV2aWNlcyBpbiBkaWZmZXJlbnQgbmV0IG5hbWVzcGFjZXMgc2hhcmUgYSBuYW1lLCB0aGV5IGdldFxuJiM0MztcdCAqIHRoZSBzYW1lIGxhYmVsOyBkaXN0aW5ndWlzaGluZyB0aGVtIHdvdWxkIG5lZWQgbmV0IG5hbWVzcGFjZSBzdXBwb3J0XG4mIzQzO1x0ICogaW4gdGhlIHBvbGljeSBsYW5ndWFnZSBhbmQgdG9vbGluZy5cbiYjNDM7XHQgKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZtYWRfYWdlbnRfbGlzdF9sb2NrKTtcbiBcdHJldCA9IHNlY3VyaXR5X2liX2VuZHBvcnRfbWFuYWdlX3N1Ym5ldChhZ2VudC1cdTAwM2VzZWN1cml0eSxcbiBcdFx0XHRcdFx0XHRkZXZfbmFtZShcdTAwMjZhZ2VudC1cdTAwM2VkZXZpY2UtXHUwMDNlZGV2KSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmNcbmluZGV4IDdmNzIzYTJmMzcwMDU5Li5hNGVhZDg5Y2NiZDM0MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jXG5AQCAtMTEsNyAmIzQzOzExLDYgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtyeGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3J4ZV9sb2MuaFwmIzM0O1xuLSNpbmNsdWRlIFwmIzM0O3J4ZV9xdWV1ZS5oXCYjMzQ7XG4gXG4gdm9pZCByeGVfbW1hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4ge1xuQEAgLTMwLDI5ICYjNDM7MjksNiBAQCB2b2lkIHJ4ZV9tbWFwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbiBcdGtmcmVlKGlwKTtcbiB9XG4gXG4tLypcbi0gKiBvcGVuIGFuZCBjbG9zZSBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IHRpbWVzIHRoZSBtZW1vcnkgcmVnaW9uIGlzIG1hcHBlZCxcbi0gKiB0byBhdm9pZCByZWxlYXNpbmcgaXQuXG4tICovXG4tc3RhdGljIHZvaWQgcnhlX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXG4tXHRrcmVmX2dldChcdTAwMjZpcC1cdTAwM2VyZWYpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByeGVfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXG4tXHRrcmVmX3B1dChcdTAwMjZpcC1cdTAwM2VyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHJ4ZV92bV9vcHMgPSB7XG4tXHQub3BlbiA9IHJ4ZV92bWFfb3Blbixcbi1cdC5jbG9zZSA9IHJ4ZV92bWFfY2xvc2UsXG4tfTtcbi1cbiAvKipcbiAgKiByeGVfbW1hcCAtIGNyZWF0ZSBhIG5ldyBtbWFwIHJlZ2lvblxuICAqIEBjb250ZXh0OiB0aGUgSUIgdXNlciBjb250ZXh0IG9mIHRoZSBwcm9jZXNzIG1ha2luZyB0aGUgbW1hcCgpIGNhbGxcbkBAIC0xMDYsMTcgJiM0Mzs4MiwxMCBAQCBpbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2aXAtXHUwMDNlcGVuZGluZ19tbWFwcyk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZyeGUtXHUwMDNlcGVuZGluZ19sb2NrKTtcbiBcbi1cdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZyeGVfdm1fb3BzO1xuLVx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGlwO1xuLVxuIFx0cmV0ID0gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGlwLVx1MDAzZW9iaiwgMCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBOVUxMO1xuLVx0XHR2bWEtXHUwMDNldm1fb3BzID0gTlVMTDtcbi1cdFx0a3JlZl9wdXQoXHUwMDI2aXAtXHUwMDNlcmVmLCByeGVfbW1hcF9yZWxlYXNlKTtcbiYjNDM7XHRrcmVmX3B1dChcdTAwMjZpcC1cdTAwM2VyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpO1xuJiM0MztcdGlmIChyZXQpXG4gXHRcdHJ4ZV9kYmdfZGV2KHJ4ZSwgXCYjMzQ7ZXJyICVkIGZyb20gcmVtYXBfdm1hbGxvY19yYW5nZVxcblwmIzM0OywgcmV0KTtcbi1cdFx0Z290byBkb25lO1xuLVx0fVxuIFxuIGRvbmU6XG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXG5pbmRleCAxZWMxMzBmZWU4ZWE3YS4uNmViMTBkMmYwNjUzYmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXG5AQCAtMjQwLDYgJiM0MzsyNDAsMTAgQEAgc3RhdGljIHZvaWQgcnhlX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKVxuIFx0XHRyeGVfZXJyX3VjKHVjLCBcJiMzNDtjbGVhbnVwIGZhaWxlZCwgZXJyID0gJWRcXG5cJiMzNDssIGVycik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1YylcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHBkICovXG4gc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuIHtcbkBAIC0xNDc4LDYgJiM0MzsxNDgyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2Vfb3BzIHJ4ZV9kZXZfb3BzID0ge1xuIFx0LmRlc3Ryb3lfc3JxID0gcnhlX2Rlc3Ryb3lfc3JxLFxuIFx0LmRldGFjaF9tY2FzdCA9IHJ4ZV9kZXRhY2hfbWNhc3QsXG4gXHQuZGV2aWNlX2dyb3VwID0gXHUwMDI2cnhlX2F0dHJfZ3JvdXAsXG4mIzQzO1x0LmRpc2Fzc29jaWF0ZV91Y29udGV4dCA9IHJ4ZV9kaXNhc3NvY2lhdGVfdWNvbnRleHQsXG4gXHQuZW5hYmxlX2RyaXZlciA9IHJ4ZV9lbmFibGVfZHJpdmVyLFxuIFx0LmdldF9kbWFfbXIgPSByeGVfZ2V0X2RtYV9tcixcbiBcdC5nZXRfaHdfc3RhdHMgPSByeGVfaWJfZ2V0X2h3X3N0YXRzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcbmluZGV4IDBjYWViYmMyODEwZmYzLi4yZmM4ZTEzM2M3MGZjNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY1xuQEAgLTMxODksMTAgJiM0MzszMTg5LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzcnBfY2xhc3NfYXR0cnNbXTtcbiBcbiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFNSUCBob3N0cyBhcmUgbmFtZWQgYWZ0ZXIgdGhlaXIgaWIgZGV2aWNlLCBzbyB0YWcgdGhlIGNsYXNzIGJ5IHRoZSBpYlxuJiM0MzsgKiBkZXZpY2UmIzM5O3MgbmV0IG5hbWVzcGFjZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGRldik7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gcmRtYV9kZXZfbmV0KGhvc3QtXHUwMDNlc3JwX2Rldi1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmV0ID8gdG9fbnNfY29tbW9uKG5ldCkgOiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgc3JwX2NsYXNzID0ge1xuIFx0Lm5hbWUgICAgPSBcJiMzNDtpbmZpbmliYW5kX3NycFwmIzM0OyxcbiBcdC5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3Vwcyxcbi1cdC5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldlxuJiM0MztcdC5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldixcbiYjNDM7XHQubnNfdHlwZSA9IFx1MDAyNm5ldF9uc190eXBlX29wZXJhdGlvbnMsXG4mIzQzO1x0Lm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLFxuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oXG5pbmRleCA0MDRlNzQ2NTUyY2E4Zi4uOWE1YzllZTcyOGU3ZGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxuQEAgLTM0LDYgJiM0MzszNCw3IEBAIHN0cnVjdCByZG1hY2dfZGV2aWNlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRldl9ub2RlO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0cnBvb2xzO1xuIFx0Y2hhclx0XHRcdCpuYW1lO1xuJiM0MztcdHUzMlx0XHRcdGluZGV4O1xuIH07XG4gXG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXG5pbmRleCAzYWY5NDZlY2JhYzNlZC4uZWUxMWMzYmJiYWUyMmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcbkBAIC01MTYsNyAmIzQzOzUxNiwxMCBAQCBlbnVtIHJkbWFfbmxkZXZfYXR0ciB7XG4gXHRSRE1BX05MREVWX0FUVFJfREVWX1BST1RPQ09MLFx0XHQvKiBzdHJpbmcgKi9cbiBcbiBcdC8qXG4tXHQgKiBGaWxlIGRlc2NyaXB0b3IgaGFuZGxlIG9mIHRoZSBuZXQgbmFtZXNwYWNlIG9iamVjdFxuJiM0MztcdCAqIEZpbGUgZGVzY3JpcHRvciBoYW5kbGUgb2YgdGhlIG5ldCBuYW1lc3BhY2Ugb2JqZWN0LiBNYXkgYmUgY29tYmluZWRcbiYjNDM7XHQgKiB3aXRoIFJETUFfTkxERVZfQVRUUl9ERVZfTkFNRSAoYSBsaXRlcmFsIGRldmljZSBuYW1lKSB0byBhbHNvIHJlbmFtZVxuJiM0MztcdCAqIHRoZSBkZXZpY2UgaW4gdGhlIGRlc3RpbmF0aW9uIG5hbWVzcGFjZTsgdGhlIG1vdmUgZmFpbHMgd2l0aCAtRUVYSVNUXG4mIzQzO1x0ICogaWYgdGhhdCBuYW1lIGlzIGFscmVhZHkgdGFrZW4gdGhlcmUuXG4gXHQgKi9cbiBcdFJETUFfTkxERVZfTkVUX05TX0ZELFx0XHRcdC8qIHUzMiAqL1xuIFx0LypcbmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL3JkbWEuYyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jXG5pbmRleCA1ZTgyYTAzYjMyNzBhZC4uOTQ4OWYzZGYwYmYzZmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2dyb3VwL3JkbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Nncm91cC9yZG1hLmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNkZWZpbmUgUkRNQUNHX01BWF9TVFIgXCYjMzQ7bWF4XCYjMzQ7XG4gXG4gZW51bSByZG1hY2dfbGltaXRfdG9rZW5zIHtcbiYjNDM7XHRSRE1BQ0dfREVWSUNFX0lOREVYLFxuIFx0UkRNQUNHX0hDQV9IQU5ETEVfVkFMLFxuIFx0UkRNQUNHX0hDQV9IQU5ETEVfTUFYLFxuIFx0UkRNQUNHX0hDQV9PQkpFQ1RfVkFMLFxuQEAgLTI3LDYgJiM0MzsyOCw3IEBAIGVudW0gcmRtYWNnX2xpbWl0X3Rva2VucyB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCByZG1hY2dfbGltaXRfdG9rZW5zID0ge1xuJiM0MztcdHsgUkRNQUNHX0RFVklDRV9JTkRFWCxcdFx0XCYjMzQ7aW5kZXg9JXVcJiMzNDtcdH0sXG4gXHR7IFJETUFDR19IQ0FfSEFORExFX1ZBTCxcdFwmIzM0O2hjYV9oYW5kbGU9JWRcJiMzNDtcdH0sXG4gXHR7IFJETUFDR19IQ0FfSEFORExFX01BWCxcdFwmIzM0O2hjYV9oYW5kbGU9bWF4XCYjMzQ7XHR9LFxuIFx0eyBSRE1BQ0dfSENBX09CSkVDVF9WQUwsXHRcJiMzNDtoY2Ffb2JqZWN0PSVkXCYjMzQ7XHR9LFxuQEAgLTQ2NCwxNyAmIzQzOzQ2Niw1MyBAQCB2b2lkIHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7XG4gXG4tc3RhdGljIHN0cnVjdCByZG1hY2dfZGV2aWNlICpyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7c3RhdGljIHN0cnVjdCByZG1hY2dfZGV2aWNlICpcbiYjNDM7cmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaGFzX2luZGV4LCB1MzIgaW5kZXgpXG4ge1xuJiM0MztcdHN0cnVjdCByZG1hY2dfZGV2aWNlICptYXRjaCA9IE5VTEw7XG4gXHRzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSlcbi1cdFx0aWYgKCFzdHJjbXAobmFtZSwgZGV2aWNlLVx1MDAzZW5hbWUpKVxuLVx0XHRcdHJldHVybiBkZXZpY2U7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xuJiM0MztcdFx0aWYgKHN0cmNtcChuYW1lLCBkZXZpY2UtXHUwMDNlbmFtZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFxuLVx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRpZiAoaGFzX2luZGV4KSB7XG4mIzQzO1x0XHRcdGlmIChkZXZpY2UtXHUwMDNlaW5kZXggPT0gaW5kZXgpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGRldmljZTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hdGNoKVxuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PVFVOSVEpO1xuJiM0MztcdFx0bWF0Y2ggPSBkZXZpY2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWF0Y2ggPzogRVJSX1BUUigtRU5PREVWKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2xcbiYjNDM7cmRtYWNnX2RldmljZV9uYW1lX3VuaXF1ZV9sb2NrZWQoY29uc3Qgc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZG1hY2dfZGV2aWNlICpvdGhlcjtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG90aGVyLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpXG4mIzQzO1x0XHRpZiAob3RoZXIgIT0gZGV2aWNlIFx1MDAyNlx1MDAyNiAhc3RyY21wKG90aGVyLVx1MDAzZW5hbWUsIGRldmljZS1cdTAwM2VuYW1lKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmRtYWNnX3ByaW50X2RldmljZV9rZXkoc3RydWN0IHNlcV9maWxlICpzZixcbiYjNDM7XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHNlcV9wdXRzKHNmLCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4mIzQzO1x0aWYgKCFyZG1hY2dfZGV2aWNlX25hbWVfdW5pcXVlX2xvY2tlZChkZXZpY2UpKVxuJiM0MztcdFx0c2VxX3ByaW50ZihzZiwgXCYjMzQ7IGluZGV4PSV1XCYjMzQ7LCBkZXZpY2UtXHUwMDNlaW5kZXgpO1xuJiM0MztcdHNlcV9wdXRjKHNmLCAmIzM5OyAmIzM5Oyk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbkBAIC00ODgsNiAmIzQzOzUyNiw4IEBAIHN0YXRpYyBzc2l6ZV90IHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdGNoYXIgKnA7XG4gXHRpbnQgKm5ld19saW1pdHM7XG4gXHR1bnNpZ25lZCBsb25nIGVuYWJsZXMgPSAwO1xuJiM0MztcdHUzMiBkZXZfaW5kZXggPSAwO1xuJiM0MztcdGJvb2wgaGFzX2luZGV4ID0gZmFsc2U7XG4gXHRpbnQgaSA9IDAsIHJldCA9IDA7XG4gXG4gXHQvKiBleHRyYWN0IHRoZSBkZXZpY2UgbmFtZSBmaXJzdCAqL1xuQEAgLTUwMyw3ICYjNDM7NTQzLDcgQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuIFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbi1cdC8qIHBhcnNlIHJlc291cmNlIGxpbWl0IHRva2VucyAqL1xuJiM0MztcdC8qIHBhcnNlIHRoZSBvcHRpb25hbCBkZXZpY2UgaW5kZXggYW5kIHJlc291cmNlIGxpbWl0IHRva2VucyAqL1xuIFx0d2hpbGUgKChwID0gc3Ryc2VwKFx1MDAyNm9wdGlvbnMsIFwmIzM0OyBcXHRcXG5cJiMzNDspKSkge1xuIFx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG4gXHRcdGludCB0b2ssIGludHZhbDtcbkBAIC01MTMsNiAmIzQzOzU1MywxMyBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4gXG4gXHRcdHRvayA9IG1hdGNoX3Rva2VuKHAsIHJkbWFjZ19saW1pdF90b2tlbnMsIGFyZ3MpO1xuIFx0XHRzd2l0Y2ggKHRvaykge1xuJiM0MztcdFx0Y2FzZSBSRE1BQ0dfREVWSUNFX0lOREVYOlxuJiM0MztcdFx0XHRpZiAoaGFzX2luZGV4IHx8IG1hdGNoX3VpbnQoXHUwMDI2YXJnc1swXSwgXHUwMDI2ZGV2X2luZGV4KSkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0Z290byBwYXJzZV9lcnI7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aGFzX2luZGV4ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgUkRNQUNHX0hDQV9IQU5ETEVfVkFMOlxuIFx0XHRcdGlmIChtYXRjaF9pbnQoXHUwMDI2YXJnc1swXSwgXHUwMDI2aW50dmFsKSB8fCBpbnR2YWwgXHUwMDNjIDApIHtcbiBcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG5AQCAtNTQ2LDkgJiM0Mzs1OTMsOSBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4gXHQvKiBhY3F1aXJlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBob3QgcGx1ZyBkZXZpY2VzICovXG4gXHRtdXRleF9sb2NrKFx1MDAyNnJkbWFjZ19tdXRleCk7XG4gXG4tXHRkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUpO1xuLVx0aWYgKCFkZXZpY2UpIHtcbi1cdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUsIGhhc19pbmRleCwgZGV2X2luZGV4KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGRldmljZSkpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoZGV2aWNlKTtcbiBcdFx0Z290byBkZXZfZXJyO1xuIFx0fVxuIFxuQEAgLTYyNiw3ICYjNDM7NjczLDcgQEAgc3RhdGljIGludCByZG1hY2dfcmVzb3VyY2VfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xuLVx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDslcyBcJiMzNDssIGRldmljZS1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdHJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpO1xuIFxuIFx0XHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xuIFx0XHRwcmludF9ycG9vbF92YWx1ZXMoc2YsIHJwb29sKTtcbkBAIC02NTAsNyAmIzQzOzY5Nyw3IEBAIHN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKSB7XG4gXHRcdHJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7XG4gXG4tXHRcdHNlcV9wcmludGYoc2YsIFwmIzM0OyVzIFwmIzM0OywgZGV2aWNlLVx1MDAzZW5hbWUpO1xuJiM0MztcdFx0cmRtYWNnX3ByaW50X2RldmljZV9rZXkoc2YsIGRldmljZSk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJETUFDR19SRVNPVVJDRV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0c2VxX3ByaW50ZihzZiwgXCYjMzQ7JXMubWF4PSVsbHUgJXMuYWxsb2NfZmFpbD0lbGx1XCYjMzQ7LFxuIFx0XHRcdFx0ICAgcmRtYWNnX3Jlc291cmNlX25hbWVzW2ldLFxuQEAgLTY3OSw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbiBcdFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcbiBcbi1cdFx0c2VxX3ByaW50ZihzZiwgXCYjMzQ7JXMgXCYjMzQ7LCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4mIzQzO1x0XHRyZG1hY2dfcHJpbnRfZGV2aWNlX2tleShzZiwgZGV2aWNlKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDslcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHVcJiMzNDssXG4gXHRcdFx0XHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfcG5ldC5jIGIvbmV0L3NtYy9zbWNfcG5ldC5jXG5pbmRleCA2M2UyODZlMmRmYWE4ZC4uZmY5YzljMzVjYzJmNWIgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY19wbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zbWMvc21jX3BuZXQuY1xuQEAgLTMwNCwxMyAmIzQzOzMwNCwxOCBAQCBzdGF0aWMgYm9vbCBzbWNfcG5ldGlkX3ZhbGlkKGNvbnN0IGNoYXIgKnBuZXRfbmFtZSwgY2hhciAqcG5ldGlkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLS8qIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC4gKi9cbi1zdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoY2hhciAqaWJfbmFtZSlcbiYjNDM7LypcbiYjNDM7ICogRmluZCBhbiBpbmZpbmliYW5kIGRldmljZSBieSBhIGdpdmVuIG5hbWUsIHJlc3RyaWN0ZWQgdG8gdGhlIGRldmljZXNcbiYjNDM7ICogYWNjZXNzaWJsZSBmcm9tIEBuZXQuIFRoZSBkZXZpY2UgbWlnaHQgbm90IGV4aXN0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqaWJfbmFtZSlcbiB7XG4gXHRzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJkZXY7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnNtY19pYl9kZXZpY2VzLm11dGV4KTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaWJkZXYsIFx1MDAyNnNtY19pYl9kZXZpY2VzLmxpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGlmICghcmRtYV9kZXZfYWNjZXNzX25ldG5zKGliZGV2LVx1MDAzZWliZGV2LCBuZXQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFzdHJuY21wKGliZGV2LVx1MDAzZWliZGV2LVx1MDAzZW5hbWUsIGliX25hbWUsXG4gXHRcdFx0ICAgICBzaXplb2YoaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlbmFtZSkpIHx8XG4gXHRcdCAgICAoaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlZGV2LnBhcmVudCBcdTAwMjZcdTAwMjZcbkBAIC00MDgsOCAmIzQzOzQxMyw4IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2V0aChzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2liKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIGNoYXIgKmliX25hbWUsXG4tXHRcdFx0ICAgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKVxuJiM0MztzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsXG4mIzQzO1x0XHRcdCAgIGNoYXIgKmliX25hbWUsIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSlcbiB7XG4gXHRzdHJ1Y3Qgc21jX3BuZXRlbnRyeSAqdG1wX3BlLCAqbmV3X3BlO1xuIFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmliX2RldjtcbkBAIC00MTksNyAmIzQzOzQyNCw3IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2liKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIGNoYXIgKmliX25hbWUsXG4gXHRib29sIG5ld19pYmRldjtcbiBcbiBcdC8qIHRyeSB0byBhcHBseSB0aGUgcG5ldGlkIHRvIGFjdGl2ZSBkZXZpY2VzICovXG4tXHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKGliX25hbWUpO1xuJiM0MztcdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIobmV0LCBpYl9uYW1lKTtcbiBcdGlmIChpYl9kZXYpIHtcbiBcdFx0aWJkZXZfYXBwbGllZCA9IHNtY19wbmV0X2FwcGx5X2liKGliX2RldiwgaWJfcG9ydCwgcG5ldF9uYW1lKTtcbiBcdFx0aWYgKGliZGV2X2FwcGxpZWQpXG5AQCAtNTE4LDcgJiM0Mzs1MjMsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2VudGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSlcbiBcdFx0XHRpZiAoaWJwb3J0IFx1MDAzYyAxIHx8IGlicG9ydCBcdTAwM2UgU01DX01BWF9QT1JUUylcbiBcdFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbi1cdFx0cmMgPSBzbWNfcG5ldF9hZGRfaWIocG5ldHRhYmxlLCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTtcbiYjNDM7XHRcdHJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgbmV0LCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTtcbiBcdFx0aWYgKCFyYylcbiBcdFx0XHRuZXdfaWJkZXYgPSB0cnVlO1xuIFx0XHRlbHNlIGlmIChyYyAhPSAtRUVYSVNUKVxuQEAgLTExNzAsNiAmIzQzOzExNzUsOSBAQCBpbnQgc21jX3BuZXRpZF9ieV90YWJsZV9pYihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGliX3BvcnQpXG4gXHRzdHJ1Y3Qgc21jX25ldCAqc247XG4gXHRpbnQgcmMgPSAtRU5PRU5UO1xuIFxuJiM0MztcdGlmICghcmRtYV9kZXZfYWNjZXNzX25ldG5zKHNtY2liZGV2LVx1MDAzZWliZGV2LCBcdTAwMjZpbml0X25ldCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4gXHQvKiBnZXQgcG5ldHRhYmxlIGZvciBpbml0IG5hbWVzcGFjZSAqL1xuIFx0c24gPSBuZXRfZ2VuZXJpYyhcdTAwMjZpbml0X25ldCwgc21jX25ldF9pZCk7XG4gXHRwbmV0dGFibGUgPSBcdTAwMjZzbi1cdTAwM2VwbmV0dGFibGU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbmluZGV4IDA3YWY3ZjE1YzFiZjc0Li5hOTFjMTRjNDUwMDZlMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcbkBAIC0zLDYgJiM0MzszLDcgQEAgVEVTVF9QUk9HUyA6PSByeGVfcnBpbmdfYmV0d2Vlbl9uZXRucy5zaCBcXFxuIFx0XHRyeGVfaXB2Ni5zaCBcXFxuIFx0XHRyeGVfc29ja2V0X3dpdGhfbmV0bnMuc2ggXFxcbiBcdFx0cnhlX3Rlc3RfTkVUREVWX1VOUkVHSVNURVIuc2ggXFxcbi1cdFx0cnhlX3NlbnRfcmN2ZF9ieXRlcy5zaFxuJiM0MztcdFx0cnhlX3NlbnRfcmN2ZF9ieXRlcy5zaCBcXFxuJiM0MztcdFx0cnhlX25ldG5zX25hbWVzLnNoXG4gXG4gaW5jbHVkZSAuLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXG5pbmRleCA0ZmZiODE0ZTI1M2JiZC4uZTFmZjU0ZWMwZjU3OTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcbkBAIC0xLDMgJiM0MzsxLDUgQEBcbiBDT05GSUdfVFVOXG4gQ09ORklHX1ZFVEhcbiYjNDM7Q09ORklHX0RVTU1ZXG4mIzQzO0NPTkZJR19ORVRfTlNcbiBDT05GSUdfUkRNQV9SWEVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0ZmFiZjg2YmRmNzllXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaFxuQEAgLTAsMCAmIzQzOzEsMjgyIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIEV4ZXJjaXNlIFJETUEgZGV2aWNlIG5hbWUgaGFuZGxpbmcgYWNyb3NzIG5ldHdvcmsgbmFtZXNwYWNlcy5cbiYjNDM7XG4mIzQzO3NvdXJjZSBcJiMzNDskKGRpcm5hbWUgXCYjMzQ7JDBcJiMzNDspLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcJiMzNDtcbiYjNDM7XG4mIzQzO05BTUVfUFJFRklYPVwmIzM0O3J4ZV9uZXRuc19uYW1lc18kJFwmIzM0O1xuJiM0MztORVRERVZfUFJFRklYPVwmIzM0O3J4biQkXCYjMzQ7XG4mIzQzO05TMT1cJiMzNDske05BTUVfUFJFRklYfW5zMVwmIzM0O1xuJiM0MztOUzI9XCYjMzQ7JHtOQU1FX1BSRUZJWH1uczJcJiMzNDtcbiYjNDM7UlhFX0E9XCYjMzQ7JHtOQU1FX1BSRUZJWH1yeGVfYVwmIzM0O1xuJiM0MztSWEVfQj1cJiMzNDske05BTUVfUFJFRklYfXJ4ZV9iXCYjMzQ7XG4mIzQzO1JYRV9TQU1FPVwmIzM0OyR7TkFNRV9QUkVGSVh9cnhlX3NhbWVcJiMzNDtcbiYjNDM7UlhFX05FVz1cJiMzNDske05BTUVfUFJFRklYfXJ4ZV9uZXdcJiMzNDtcbiYjNDM7RFVNTVlfQT1cJiMzNDske05FVERFVl9QUkVGSVh9YVwmIzM0O1xuJiM0MztEVU1NWV9CPVwmIzM0OyR7TkVUREVWX1BSRUZJWH1iXCYjMzQ7XG4mIzQzO09MRF9NT0RFPVwmIzM0O1wmIzM0O1xuJiM0MztNT0RFX0NIQU5HRUQ9MFxuJiM0MztNT0RTPShcJiMzNDtkdW1teVwmIzM0OyBcJiMzNDtyZG1hX3J4ZVwmIzM0OylcbiYjNDM7VEVTVF9TQU1FX05BTUVTPVwmIzM0O3NhbWUgUkRNQSBkZXZpY2UgbmFtZSBjYW4gZXhpc3QgaW4gdHdvIG5ldCBuYW1lc3BhY2VzXCYjMzQ7XG4mIzQzO1RFU1RfTU9WRV9DT05GTElDVD1cJiMzNDttb3ZlIHdpdGhvdXQgcmVuYW1lIGZhaWxzIG9uIGRlc3RpbmF0aW9uIG5hbWUgY29uZmxpY3RcJiMzNDtcbiYjNDM7VEVTVF9NT1ZFX1JFTkFNRT1cJiMzNDttb3ZlIHRoZW4gcmVuYW1lIHN1Y2NlZWRzXCYjMzQ7XG4mIzQzO1RFU1RfQ09NQklORURfTU9WRV9SRU5BTUU9XCYjMzQ7bW92ZSB3aXRoIHJlcXVlc3RlZCBkZXN0aW5hdGlvbiBuYW1lIHN1Y2NlZWRzXCYjMzQ7XG4mIzQzO1RFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FPVwmIzM0O3NhbWUtbmV0bnMgcmVuYW1lIHJlamVjdHMgZHVwbGljYXRlIG5hbWVcJiMzNDtcbiYjNDM7VEVTVF9URUFSRE9XTl9SRVRVUk49XCYjMzQ7bmV0bnMgZGVsZXRlIHJldHVybnMgZGV2aWNlIHRvIGluaXRfbmV0IGFuZCByZW5hbWVzIG9uIGNvbmZsaWN0XCYjMzQ7XG4mIzQzO1xuJiM0Mztrc2Z0X3NraXAoKVxuJiM0Mzt7XG4mIzQzO1x0a3RhcF9za2lwX2FsbCBcJiMzNDskKlwmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JEtTRlRfU0tJUFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztmYWlsKClcbiYjNDM7e1xuJiM0MztcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDskKlwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztuZWVkX2NtZCgpXG4mIzQzO3tcbiYjNDM7XHRjb21tYW5kIC12IFwmIzM0OyQxXCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fCBrc2Z0X3NraXAgXCYjMzQ7bWlzc2luZyBjb21tYW5kOiAkMVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztyZG1hX25zKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPSQxXG4mIzQzO1xuJiM0MztcdHNoaWZ0XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNcJiMzNDsgcmRtYSBcJiMzNDskQFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztyZG1hX2Rldl9leGlzdHMoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9JDFcbiYjNDM7XHRsb2NhbCBkZXY9JDJcbiYjNDM7XG4mIzQzO1x0aWYgWyAtbiBcJiMzNDskbnNcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cmRtYV9ucyBcJiMzNDskbnNcJiMzNDsgZGV2IHNob3cgXCYjMzQ7JGRldlwmIzM0OyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZG1hIGRldiBzaG93IFwmIzM0OyRkZXZcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7YWRkX2R1bW15KClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5ldGRldj0kMVxuJiM0MztcbiYjNDM7XHRpcCBsaW5rIGFkZCBcJiMzNDskbmV0ZGV2XCYjMzQ7IHR5cGUgZHVtbXkgfHwgcmV0dXJuIDFcbiYjNDM7XHRpcCBsaW5rIHNldCBcJiMzNDskbmV0ZGV2XCYjMzQ7IHVwIHx8IHJldHVybiAxXG4mIzQzO31cbiYjNDM7XG4mIzQzO2FkZF9yeGUoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgZGV2PSQxXG4mIzQzO1x0bG9jYWwgbmV0ZGV2PSQyXG4mIzQzO1xuJiM0MztcdHJkbWEgbGluayBhZGQgXCYjMzQ7JGRldlwmIzM0OyB0eXBlIHJ4ZSBuZXRkZXYgXCYjMzQ7JG5ldGRldlwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztyZG1hX2Rldl9vbl9uZXRkZXYoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmV0ZGV2PSQxXG4mIzQzO1xuJiM0MztcdHJkbWEgbGluayBzaG93IDJcdTAwM2UvZGV2L251bGwgfCBhd2sgLXYgd2FudD1cJiMzNDskbmV0ZGV2XCYjMzQ7ICYjMzk7XG4mIzQzO1x0XHR7XG4mIzQzO1x0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIE5GOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0XHRpZiAoJGkgPT0gXCYjMzQ7bmV0ZGV2XCYjMzQ7IFx1MDAyNlx1MDAyNiAkKGkgJiM0MzsgMSkgPT0gd2FudCkge1xuJiM0MztcdFx0XHRcdFx0ZGV2ID0gJDJcbiYjNDM7XHRcdFx0XHRcdHN1YigvXFwvLiovLCBcJiMzNDtcJiMzNDssIGRldilcbiYjNDM7XHRcdFx0XHRcdHByaW50IGRldlxuJiM0MztcdFx0XHRcdFx0ZXhpdFxuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdH0mIzM5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt3YWl0X3JkbWFfZGV2X29uX25ldGRldigpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBuZXRkZXY9JDFcbiYjNDM7XHRsb2NhbCBkZXZcbiYjNDM7XHRsb2NhbCBpXG4mIzQzO1xuJiM0MztcdGZvciBpIGluICQoc2VxIDEgNTApOyBkb1xuJiM0MztcdFx0ZGV2PSQocmRtYV9kZXZfb25fbmV0ZGV2IFwmIzM0OyRuZXRkZXZcJiMzNDspXG4mIzQzO1x0XHRpZiBbIC1uIFwmIzM0OyRkZXZcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0XHRlY2hvIFwmIzM0OyRkZXZcJiMzNDtcbiYjNDM7XHRcdFx0cmV0dXJuIDBcbiYjNDM7XHRcdGZpXG4mIzQzO1x0XHRzbGVlcCAwLjFcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdHJldHVybiAxXG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwX2RldnMoKVxuJiM0Mzt7XG4mIzQzO1x0Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztcdGFkZF9kdW1teSBcJiMzNDskRFVNTVlfQVwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcdGFkZF9kdW1teSBcJiMzNDskRFVNTVlfQlwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcbiYjNDM7XHRhZGRfcnhlIFwmIzM0OyRSWEVfQVwmIzM0OyBcJiMzNDskRFVNTVlfQVwmIzM0OyB8fCByZXR1cm4gMVxuJiM0MztcdGFkZF9yeGUgXCYjMzQ7JFJYRV9CXCYjMzQ7IFwmIzM0OyREVU1NWV9CXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO31cbiYjNDM7XG4mIzQzO2NsZWFudXBfZGV2cygpXG4mIzQzO3tcbiYjNDM7XHRpcCBsaW5rIGRlbCBcJiMzNDskRFVNTVlfQVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0aXAgbGluayBkZWwgXCYjMzQ7JERVTU1ZX0JcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cCgpXG4mIzQzO3tcbiYjNDM7XHRPTERfTU9ERT0kKHJkbWEgc3lzdGVtIHNob3cgMlx1MDAzZS9kZXYvbnVsbCB8XG4mIzQzO1x0XHQgICBzZWQgLW4gJiMzOTtzLy4qbmV0bnMgXFwoW14gXSpcXCkuKi9cXDEvcCYjMzk7KVxuJiM0MztcdFsgLW4gXCYjMzQ7JE9MRF9NT0RFXCYjMzQ7IF0gfHwga3NmdF9za2lwIFwmIzM0O2ZhaWxlZCB0byByZWFkIFJETUEgbmV0bnMgbW9kZVwmIzM0O1xuJiM0MztcbiYjNDM7XHRyZG1hIHN5c3RlbSBzZXQgbmV0bnMgZXhjbHVzaXZlIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fFxuJiM0MztcdFx0a3NmdF9za2lwIFwmIzM0O3JkbWEgbmV0bnMgZXhjbHVzaXZlIG1vZGUgaXMgbm90IHN1cHBvcnRlZFwmIzM0O1xuJiM0MztcdE1PREVfQ0hBTkdFRD0xXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGFkZCBcJiMzNDskTlMxXCYjMzQ7IHx8IHJldHVybiAxXG4mIzQzO1x0aXAgbmV0bnMgYWRkIFwmIzM0OyROUzJcJiMzNDsgfHwgcmV0dXJuIDFcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2xlYW51cCgpXG4mIzQzO3tcbiYjNDM7XHRjbGVhbnVwX2RldnNcbiYjNDM7XG4mIzQzO1x0aXAgbmV0bnMgZGVsIFwmIzM0OyROUzFcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlwIG5ldG5zIGRlbCBcJiMzNDskTlMyXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XG4mIzQzO1x0aWYgWyBcJiMzNDskTU9ERV9DSEFOR0VEXCYjMzQ7IC1lcSAxIF07IHRoZW5cbiYjNDM7XHRcdHJkbWEgc3lzdGVtIHNldCBuZXRucyBcJiMzNDskT0xEX01PREVcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGZvciBtIGluIFwmIzM0OyR7TU9EU1tAXX1cJiMzNDs7IGRvXG4mIzQzO1x0XHRtb2Rwcm9iZSAtciBcJiMzNDskbVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZG9uZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztyZG1hX3N1cHBvcnRzX2NvbWJpbmVkX21vdmVfcmVuYW1lKClcbiYjNDM7e1xuJiM0MztcdHJkbWEgZGV2IGhlbHAgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1FcSAmIzM5O25ldG5zIC4qbmFtZXxuYW1lIC4qbmV0bnMmIzM5O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztbIFwmIzM0OyQoaWQgLXUpXCYjMzQ7IC1lcSAwIF0gfHwga3NmdF9za2lwIFwmIzM0O211c3QgYmUgcnVuIGFzIHJvb3RcJiMzNDtcbiYjNDM7bmVlZF9jbWQgaXBcbiYjNDM7bmVlZF9jbWQgcmRtYVxuJiM0MztuZWVkX2NtZCBtb2Rwcm9iZVxuJiM0MztcbiYjNDM7dHJhcCBjbGVhbnVwIEVYSVRcbiYjNDM7XG4mIzQzO2ZvciBtIGluIFwmIzM0OyR7TU9EU1tAXX1cJiMzNDs7IGRvXG4mIzQzO1x0bW9kaW5mbyBcJiMzNDskbVwmIzM0OyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHwga3NmdF9za2lwIFwmIzM0O21vZHVsZSAkbSBub3QgZm91bmRcJiMzNDtcbiYjNDM7XHRtb2Rwcm9iZSBcJiMzNDskbVwmIzM0OyB8fCBmYWlsIFwmIzM0O2ZhaWxlZCB0byBsb2FkICRtXCYjMzQ7XG4mIzQzO2RvbmVcbiYjNDM7XG4mIzQzO3NldHVwIHx8IGZhaWwgXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBuZXQgbmFtZXNwYWNlc1wmIzM0O1xuJiM0MztcbiYjNDM7a3RhcF9wcmludF9oZWFkZXJcbiYjNDM7a3RhcF9zZXRfcGxhbiA2XG4mIzQzO1xuJiM0MztpZiBzZXR1cF9kZXZzIFx1MDAyNlx1MDAyNlxuJiM0MzsgICByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9BXCYjMzQ7IG5ldG5zIFwmIzM0OyROUzFcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgIHJkbWFfbnMgXCYjMzQ7JE5TMVwmIzM0OyBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQlwmIzM0OyBuZXRucyBcJiMzNDskTlMyXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MzsgICByZG1hX25zIFwmIzM0OyROUzJcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgXHUwMDI2XHUwMDI2XG4mIzQzOyAgIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMxXCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgcmRtYV9kZXZfZXhpc3RzIFwmIzM0OyROUzJcJiMzNDsgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7OyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7JFRFU1RfU0FNRV9OQU1FU1wmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfU0FNRV9OQU1FU1wmIzM0O1xuJiM0MztmaVxuJiM0MztjbGVhbnVwX2RldnNcbiYjNDM7XG4mIzQzO2lmICEgc2V0dXBfZGV2cyB8fFxuJiM0MzsgICAhIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMVwmIzM0OyB8fFxuJiM0MzsgICAhIHJkbWFfbnMgXCYjMzQ7JE5TMVwmIzM0OyBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfU0FNRVwmIzM0OyB8fFxuJiM0MzsgICAhIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyB8fFxuJiM0MzsgICAhIHJkbWFfbnMgXCYjMzQ7JE5TMlwmIzM0OyBkZXYgc2V0IFwmIzM0OyRSWEVfQlwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfU0FNRVwmIzM0OzsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX01PVkVfQ09ORkxJQ1RcJiMzNDtcbiYjNDM7ZWxpZiByZG1hX25zIFwmIzM0OyROUzFcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX1NBTUVcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUXCYjMzQ7XG4mIzQzO2VsaWYgcmRtYV9kZXZfZXhpc3RzIFwmIzM0OyROUzFcJiMzNDsgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MzsgICAgIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMyXCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OzsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRURVNUX01PVkVfQ09ORkxJQ1RcJiMzNDtcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX01PVkVfQ09ORkxJQ1RcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztpZiAhIHNldHVwX2RldnM7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztlbGlmIHJkbWEgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmV0bnMgXCYjMzQ7JE5TMlwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgICByZG1hX25zIFwmIzM0OyROUzJcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0FcJiMzNDsgbmFtZSBcJiMzNDskUlhFX05FV1wmIzM0OzsgdGhlblxuJiM0MztcdGlmIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMyXCYjMzQ7IFwmIzM0OyRSWEVfTkVXXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICEgcmRtYV9kZXZfZXhpc3RzIFwmIzM0O1wmIzM0OyBcJiMzNDskUlhFX0FcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRURVNUX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfTU9WRV9SRU5BTUVcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztlbHNlXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfTU9WRV9SRU5BTUVcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7Y2xlYW51cF9kZXZzXG4mIzQzO1xuJiM0MztpZiAhIHJkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWU7IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3Rfc2tpcCBcJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztlbGlmICEgc2V0dXBfZGV2czsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO2VsaWYgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuZXRucyBcJiMzNDskTlMyXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9ORVdcJiMzNDs7IHRoZW5cbiYjNDM7XHRpZiByZG1hX2Rldl9leGlzdHMgXCYjMzQ7JE5TMlwmIzM0OyBcJiMzNDskUlhFX05FV1wmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAhIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDtcJiMzNDsgXCYjMzQ7JFJYRV9BXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO2NsZWFudXBfZGV2c1xuJiM0MztcbiYjNDM7aWYgISBzZXR1cF9kZXZzOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCYjMzQ7XG4mIzQzO2VsaWYgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7ICAgICByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9CXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9ORVdcJiMzNDs7IHRoZW5cbiYjNDM7XHRpZiByZG1hIGRldiBzZXQgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IG5hbWUgXCYjMzQ7JFJYRV9ORVdcJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4mIzQzO1x0XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcJiMzNDtcbiYjNDM7XHRlbGlmIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDtcJiMzNDsgXCYjMzQ7JFJYRV9TQU1FXCYjMzQ7IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgcmRtYV9kZXZfZXhpc3RzIFwmIzM0O1wmIzM0OyBcJiMzNDskUlhFX05FV1wmIzM0OzsgdGhlblxuJiM0MztcdFx0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0a3RhcF90ZXN0X2ZhaWwgXCYjMzQ7JFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7ZWxzZVxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwmIzM0O1xuJiM0MztmaVxuJiM0MztjbGVhbnVwX2RldnNcbiYjNDM7XG4mIzQzO2lmICEgc2V0dXBfZGV2czsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTlwmIzM0O1xuJiM0MztlbGlmICEgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQVwmIzM0OyBuYW1lIFwmIzM0OyRSWEVfU0FNRVwmIzM0OyB8fFxuJiM0MzsgICAgICEgcmRtYSBkZXYgc2V0IFwmIzM0OyRSWEVfQlwmIzM0OyBuZXRucyBcJiMzNDskTlMyXCYjMzQ7IHx8XG4mIzQzOyAgICAgISByZG1hX25zIFwmIzM0OyROUzJcJiMzNDsgZGV2IHNldCBcJiMzNDskUlhFX0JcJiMzNDsgbmFtZSBcJiMzNDskUlhFX1NBTUVcJiMzNDsgfHxcbiYjNDM7ICAgICAhIHJkbWFfZGV2X2V4aXN0cyBcJiMzNDskTlMyXCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OzsgdGhlblxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTlwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0aXAgbmV0bnMgZGVsIFwmIzM0OyROUzJcJiMzNDtcbiYjNDM7XHRyZXR1cm5lZD0kKHdhaXRfcmRtYV9kZXZfb25fbmV0ZGV2IFwmIzM0OyREVU1NWV9CXCYjMzQ7KVxuJiM0MztcdGt0YXBfcHJpbnRfbXNnIFwmIzM0O2RldmljZSByZXR1cm5lZCB0byBpbml0X25ldCBhcyAmIzM5OyR7cmV0dXJuZWQ6LVx1MDAzY21pc3NpbmdcdTAwM2V9JiMzOTtcJiMzNDtcbiYjNDM7XHRpZiByZG1hX2Rldl9leGlzdHMgXCYjMzQ7XCYjMzQ7IFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICBbIC1uIFwmIzM0OyRyZXR1cm5lZFwmIzM0OyBdIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgIFsgXCYjMzQ7JHJldHVybmVkXCYjMzQ7ICE9IFwmIzM0OyRSWEVfU0FNRVwmIzM0OyBdIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgIFsgXCYjMzQ7JHtyZXR1cm5lZCNpYmRldn1cJiMzNDsgIT0gXCYjMzQ7JHJldHVybmVkXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGt0YXBfdGVzdF9wYXNzIFwmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTlwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGt0YXBfdGVzdF9mYWlsIFwmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTlwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO2ZpXG4mIzQzO2NsZWFudXBfZGV2c1xuJiM0MztcbiYjNDM7a3RhcF9maW5pc2hlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9SRE1BJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfVVNFUl9BQ0NFU1MmIzM0OywKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfcmVzb3VyY2Vfc2V0X21heCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7YWxsb2NfbmFtZV9pZCYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cnhlX21tYXAmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMsIG1vZGlmeWluZyB0aGUgY29yZSBSRE1BIGRldmljZSBuYW1pbmcsIG5ldG5zIGNoYW5nZSBsb2dpYywgYW5kIGNncm91cCByZXNvdXJjZSB0cmFja2luZy4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IHRhYmxlIGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1vdmluZyBSRE1BIGRldmljZXMgYmV0d2VlbiBuYW1lc3BhY2VzLCB0aGUgUkRNQSBjZ3JvdXAgaW50ZXJmYWNlLCBhbmQgdGhlIFJYRSBtbWFwIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRiMjIzMTc1NjFiYjQzNjdkYzVlNmVhZDBmMjk2ZTJkMDczNjFjMzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxNSAwMDo1MjoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbQppbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbQomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20KQEAgLTEyLDYgJiM0MzsxMiwxMCBAQCBEZXNjcmlwdGlvbjogCUludGVyZmFjZSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBSRE1BLWNhYmxlIEhDQXMgaW4gcmVzcGVjdCB0bwogCQlmb3IgdGhpcyBIQ0EgaGFzIHRvIGJlIGNyZWF0ZWQ6CiAJCW1rZGlyIC1wIC9jb25maWcvcmRtYV9jbS8mbHQ7aGNhJmd0OwogCiYjNDM7CQlOb3RlOiBjb25maWdmcyBoYXMgbm8gbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCwgc28gdGhpcwomIzQzOwkJaW50ZXJmYWNlIGNhbm5vdCByZXByZXNlbnQgdHdvIGRldmljZXMgdGhhdCBzaGFyZSBhIG5hbWUgaW4KJiM0MzsJCWRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS4KJiM0MzsKIAogV2hhdDogCQkvY29uZmlnL3JkbWFfY20vJmx0O2hjYSZndDsvcG9ydHMvJmx0O3BvcnQtbnVtJmd0Oy9kZWZhdWx0X3JvY2VfbW9kZQogRGF0ZTogCQlOb3ZlbWJlciAyOSwgMjAxNQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvcmRtYS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9yZG1hLnJzdAppbmRleCBlNjkzNjliNzI1MmVhMy4uOGQwYzNhNzk2ZWUzZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0CkBAIC05MCw2ICYjNDM7OTAsMTMgQEAgRm9sbG93aW5nIHJlc291cmNlcyBjYW4gYmUgYWNjb3VudGVkIGJ5IHJkbWEgY29udHJvbGxlci4KICAgaGNhX29iamVjdCAJTWF4aW11bSBudW1iZXIgb2YgSENBIE9iamVjdHMKICAgPT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiYjNDM7UkRNQSBkZXZpY2VzIGZyb20gYWxsIG5ldHdvcmsgbmFtZXNwYWNlcyBhcmUgbGlzdGVkLiBFYWNoIGxpbmUgc3RhcnRzIHdpdGgKJiM0Mzt0aGUgZGV2aWNlIG5hbWUuIElmIG1vcmUgdGhhbiBvbmUgZGV2aWNlIGhhcyB0aGUgc2FtZSBuYW1lLCBgYGluZGV4PU5gYAomIzQzO2ZvbGxvd3MgdGhlIG5hbWUsIHdoZXJlIGBgTmBgIGlzIHRoZSBzeXN0ZW0td2lkZSBSRE1BIGRldmljZSBpbmRleCwgdW5pcXVlCiYjNDM7YW1vbmcgcmVnaXN0ZXJlZCBkZXZpY2VzLiBXaGVuIGNvbmZpZ3VyaW5nIGEgbGltaXQsIHRoZSBpbmRleCBpcyBvcHRpb25hbAomIzQzO2ZvciBhIGdsb2JhbGx5IHVuaXF1ZSBuYW1lIGFuZCByZXF1aXJlZCBmb3IgYSBkdXBsaWNhdGUgbmFtZS4gQSB3cml0ZSB3aXRob3V0CiYjNDM7dGhlIHJlcXVpcmVkIGluZGV4IGZhaWxzIHdpdGggYGAtRU5PVFVOSVFgYC4KJiM0MzsKIDIuIFVzYWdlIEV4YW1wbGVzCiA9PT09PT09PT09PT09PT09PQogCkBAIC05Nyw2ICYjNDM7MTA0LDcgQEAgRm9sbG93aW5nIHJlc291cmNlcyBjYW4gYmUgYWNjb3VudGVkIGJ5IHJkbWEgY29udHJvbGxlci4KIAogCWVjaG8gbWx4NF8wIGhjYV9oYW5kbGU9MiBoY2Ffb2JqZWN0PTIwMDAgJmd0OyAvc3lzL2ZzL2Nncm91cC9yZG1hLzEvcmRtYS5tYXgKIAllY2hvIG9jcmRtYTEgaGNhX2hhbmRsZT0zICZndDsgL3N5cy9mcy9jZ3JvdXAvcmRtYS8yL3JkbWEubWF4CiYjNDM7CWVjaG8gJiMzNDtyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yJiMzNDsgJmd0OyAvc3lzL2ZzL2Nncm91cC9yZG1hLzMvcmRtYS5tYXgKIAogKGIpIFF1ZXJ5IHJlc291cmNlIGxpbWl0OjoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CmluZGV4IDk5MzQ0NmFiNjZkMGZiLi5kZjc0ZDU1NGQyY2RmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdApAQCAtMjc1Miw2ICYjNDM7Mjc1MiwxMSBAQCBSRE1BCiBUaGUgJiMzNDtyZG1hJiMzNDsgY29udHJvbGxlciByZWd1bGF0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYWNjb3VudGluZyBvZgogUkRNQSByZXNvdXJjZXMuCiAKJiM0MztSRE1BIGRldmljZXMgZnJvbSBhbGwgbmV0d29yayBuYW1lc3BhY2VzIGFyZSBsaXN0ZWQuIEVhY2ggbGluZSBzdGFydHMgd2l0aAomIzQzO3RoZSBkZXZpY2UgbmFtZS4gSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaGFzIHRoZSBzYW1lIG5hbWUsIGBgaW5kZXg9TmBgCiYjNDM7Zm9sbG93cyB0aGUgbmFtZSwgd2hlcmUgYGBOYGAgaXMgdGhlIHN5c3RlbS13aWRlIFJETUEgZGV2aWNlIGluZGV4LCB1bmlxdWUKJiM0MzthbW9uZyByZWdpc3RlcmVkIGRldmljZXMuCiYjNDM7CiBSRE1BIEludGVyZmFjZSBGaWxlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn4KIApAQCAtMjc2MCw3ICYjNDM7Mjc2NSwxMSBAQCBSRE1BIEludGVyZmFjZSBGaWxlcwogCWV4Y2VwdCByb290IHRoYXQgZGVzY3JpYmVzIGN1cnJlbnQgY29uZmlndXJlZCByZXNvdXJjZSBsaW1pdAogCWZvciBhIFJETUEvSUIgZGV2aWNlLgogCi0JTGluZXMgYXJlIGtleWVkIGJ5IGRldmljZSBuYW1lIGFuZCBhcmUgbm90IG9yZGVyZWQuCiYjNDM7CUxpbmVzIGFyZSBrZXllZCBieSBkZXZpY2UgbmFtZSBhbmQgYXJlIG5vdCBvcmRlcmVkLiBBIHdyaXRlIG1heQomIzQzOwlpbmNsdWRlIGBgaW5kZXg9TmBgIGFmdGVyIHRoZSBkZXZpY2UgbmFtZS4gVGhlIGluZGV4IGlzIG9wdGlvbmFsCiYjNDM7CXdoZW4gdGhlIG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVlLiBJZiBtdWx0aXBsZSBkZXZpY2VzIGhhdmUgdGhhdAomIzQzOwluYW1lLCB0aGUgaW5kZXggaXMgcmVxdWlyZWQgYW5kIGEgd3JpdGUgd2l0aG91dCBpdCBmYWlscyB3aXRoCiYjNDM7CWBgLUVOT1RVTklRYGAuCiAJRWFjaCBsaW5lIGNvbnRhaW5zIHNwYWNlIHNlcGFyYXRlZCByZXNvdXJjZSBuYW1lIGFuZCBpdHMgY29uZmlndXJlZAogCWxpbWl0IHRoYXQgY2FuIGJlIGRpc3RyaWJ1dGVkLgogCkBAIC0yNzc2LDYgJiM0MzsyNzg1LDEwIEBAIFJETUEgSW50ZXJmYWNlIEZpbGVzCiAJICBtbHg0XzAgaGNhX2hhbmRsZT0yIGhjYV9vYmplY3Q9MjAwMAogCSAgb2NyZG1hMSBoY2FfaGFuZGxlPTMgaGNhX29iamVjdD1tYXgKIAomIzQzOwlGb3IgZGV2aWNlcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcywgc2VsZWN0IHRoZSBkZXZpY2UgYnkgaW5kZXg6OgomIzQzOwomIzQzOwkgIGVjaG8gJiMzNDtyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yJiMzNDsgJmd0OyByZG1hLm1heAomIzQzOwogICByZG1hLmN1cnJlbnQKIAlBIHJlYWQtb25seSBmaWxlIHRoYXQgZGVzY3JpYmVzIGN1cnJlbnQgcmVzb3VyY2UgdXNhZ2UuCiAJSXQgZXhpc3RzIGZvciBhbGwgdGhlIGNncm91cCBleGNlcHQgcm9vdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmMKaW5kZXggMWYwMzdmZTAxNDUwZWYuLjg2MTFiNGUzMmNmYjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuYwpAQCAtMTcsNiAmIzQzOzE3LDcgQEAKIHZvaWQgaWJfZGV2aWNlX3JlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCiB7CiAJZGV2aWNlLSZndDtjZ19kZXZpY2UubmFtZSA9IGRldmljZS0mZ3Q7bmFtZTsKJiM0MzsJZGV2aWNlLSZndDtjZ19kZXZpY2UuaW5kZXggPSBkZXZpY2UtJmd0O2luZGV4OwogCXJkbWFjZ19yZWdpc3Rlcl9kZXZpY2UoJmFtcDtkZXZpY2UtJmd0O2NnX2RldmljZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmMKaW5kZXggODkxZTUyYWZiOGY0YmEuLmMzODlkNGUzN2I2YmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuYwpAQCAtNjUsNiAmIzQzOzY1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwICp0b19kZXZfcG9ydF9ncm91cChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihncm91cCwgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCwgZ3JvdXApOwogfQogCiYjNDM7LyoKJiM0MzsgKiBjb25maWdmcyBpcyBub3QgbmV0IG5hbWVzcGFjZSBhd2FyZSwgc28gYSBuYW1lIHNoYXJlZCBieSBkZXZpY2VzIGluCiYjNDM7ICogZGlmZmVyZW50IG5hbWVzcGFjZXMgcmVzb2x2ZXMgdG8gdGhlIGZpcnN0IG1hdGNoIGhlcmUuCiYjNDM7ICovCiBzdGF0aWMgYm9vbCBmaWx0ZXJfYnlfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYsIHZvaWQgKmNvb2tpZSkKIHsKIAlyZXR1cm4gIXN0cmNtcChkZXZfbmFtZSgmYW1wO2liX2Rldi0mZ3Q7ZGV2KSwgY29va2llKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmgKaW5kZXggMTkxMDRjNTQyYjI3MGQuLmFhZjMzMGIwZDMzM2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaApAQCAtMzU2LDcgJiM0MzszNTYsOCBAQCB2b2lkIGliX3BvcnRfdW5yZWdpc3Rlcl9jbGllbnRfZ3JvdXBzKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydF9udW0sCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTsKIAogaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQpOwomIzQzOwkJCSAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAogaW50IHJkbWFfbmxfbmV0X2luaXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7CiB2b2lkIHJkbWFfbmxfbmV0X2V4aXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCmluZGV4IGI4MTkzZTA3N2E3NDZmLi40Yzc1MDc4NDQ4YTMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMKQEAgLTEyOSw3ICYjNDM7MTI5LDcgQEAgc3RhdGljIERFQ0xBUkVfUldTRU0ocmRtYV9uZXRzX3J3c2VtKTsKIGJvb2wgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMgPSB0cnVlOwogbW9kdWxlX3BhcmFtX25hbWVkKG5ldG5zX21vZGUsIGliX2RldmljZXNfc2hhcmVkX25ldG5zLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobmV0bnNfbW9kZSwKLQkJICYjMzQ7U2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkmIzM0Oyk7CiYjNDM7CQkgJiMzNDtTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKS4gSW4gZXhjbHVzaXZlIG1vZGUgZGV2aWNlIG5hbWVzIGFyZSB1bmlxdWUgcGVyIG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiAvKioKICAqIHJkbWFfZGV2X2FjY2Vzc19uZXRucygpIC0gUmV0dXJuIHdoZXRoZXIgYW4gcmRtYSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkCiAgKgkJCSAgICAgZnJvbSBhIHNwZWNpZmllZCBuZXQgbmFtZXNwYWNlIG9yIG5vdC4KQEAgLTI2OCw3ICYjNDM7MjY4LDggQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpYmRldl9sc21fbmIgPSB7CiB9OwogCiBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCi0JCQkJIHN0cnVjdCBuZXQgKm5ldCk7CiYjNDM7CQkJCSBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lLAomIzQzOwkJCQkgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybik7CiAKIC8qIFBvaW50ZXIgdG8gdGhlIFJDVSBoZWFkIGF0IHRoZSBzdGFydCBvZiB0aGUgaWJfcG9ydF9kYXRhIGFycmF5ICovCiBzdHJ1Y3QgaWJfcG9ydF9kYXRhX3JjdSB7CkBAIC0zNTEsMTMgJiM0MzszNTIsMTUgQEAgdm9pZCBpYl9kZXZpY2VfcHV0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIH0KIEVYUE9SVF9TWU1CT0woaWJfZGV2aWNlX3B1dCk7CiAKLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQomIzQzO3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLAomIzQzOwkJCQkJCSBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGliX2RldmljZSAqZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAKIAl4YV9mb3JfZWFjaCAoJmFtcDtkZXZpY2VzLCBpbmRleCwgZGV2aWNlKQotCQlpZiAoIXN0cmNtcChuYW1lLCBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSkpCiYjNDM7CQlpZiAocmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KSkpCiAJCQlyZXR1cm4gZGV2aWNlOwogCiAJcmV0dXJuIE5VTEw7CkBAIC0zOTUsNyAmIzQzOzM5OCw3IEBAIGludCBpYl9kZXZpY2VfcmVuYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKQogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSkpIHsKJiM0MzsJaWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKG5hbWUsIHJkbWFfZGV2X25ldChpYmRldikpKSB7CiAJCXVwX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiAJCXJldHVybiAtRUVYSVNUOwogCX0KQEAgLTQzNSw3ICYjNDM7NDM4LDEzIEBAIGludCBpYl9kZXZpY2Vfc2V0X2RpbShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggdXNlX2RpbSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKQomIzQzOy8qCiYjNDM7ICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAmIzM5OyVkJiMzOTsgc3R5bGUgQG5hbWUgcGF0dGVybiB3aXRoaW4gbmV0IG5hbWVzcGFjZQomIzQzOyAqIEBuZXQuIFJldHVybnMgdGhlIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJuby4gVGhlIGNhbGxlciBidWlsZHMKJiM0MzsgKiB0aGUgZmluYWwgdW5pcXVlIGRldmljZSBuYW1lIGZyb20gdGhlIHJldHVybmVkIGluZGV4LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX19hbGxvY19uYW1lX2lkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlICpza2lwKQogewogCXN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTsKIAl1bnNpZ25lZCBsb25nIGluZGV4OwpAQCAtNDQ4LDYgJiM0Mzs0NTcsOCBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiAJeGFfZm9yX2VhY2ggKCZhbXA7ZGV2aWNlcywgaW5kZXgsIGRldmljZSkgewogCQljaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdOwogCiYjNDM7CQlpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpCiYjNDM7CQkJY29udGludWU7CiAJCWlmIChzc2NhbmYoZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldiksIG5hbWUsICZhbXA7aSkgIT0gMSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaSAmbHQ7IDAgfHwgaSAmZ3Q7PSBJTlRfTUFYKQpAQCAtNDYyLDE1ICYjNDM7NDczLDI3IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSkKIAl9CiAKIAlyYyA9IGlkYV9hbGxvYygmYW1wO2ludXNlLCBHRlBfS0VSTkVMKTsKLQlpZiAocmMgJmx0OyAwKQotCQlnb3RvIG91dDsKLQotCXJjID0gZGV2X3NldF9uYW1lKCZhbXA7aWJkZXYtJmd0O2RldiwgbmFtZSwgcmMpOwogb3V0OgogCWlkYV9kZXN0cm95KCZhbXA7aW51c2UpOwogCXJldHVybiByYzsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19hbGxvY19uYW1lX2lkKG5ldCwgbmFtZSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWludCBpZDsKJiM0MzsKJiM0MzsJaWQgPSBhbGxvY19uYW1lX2lkKHJkbWFfZGV2X25ldChpYmRldiksIG5hbWUpOwomIzQzOwlpZiAoaWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGlkOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2X3NldF9uYW1lKCZhbXA7aWJkZXYtJmd0O2RldiwgbmFtZSwgaWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGliX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpOwpAQCAtMTE1MSw4ICYjNDM7MTE3NCwxNyBAQCBzdGF0aWMgdm9pZCByZG1hX2Rldl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAKIAkJLyoKIAkJICogSWYgdGhlIHJlYWwgZGV2aWNlIGlzIGluIHRoZSBOUyB0aGVuIG1vdmUgaXQgYmFjayB0byBpbml0LgomIzQzOwkJICogUHJvdmlkZSBhIGZhbGxiYWNrIHBhdHRlcm4gc28gYSBuYW1lIGNvbmZsaWN0IGluIGluaXRfbmV0CiYjNDM7CQkgKiBjYW5ub3QgbWFrZSB0aGUgdGVhcmRvd24gbW92ZSBmYWlsLgogCQkgKi8KLQkJcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCAmYW1wO2luaXRfbmV0KTsKJiM0MzsJCWlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoJmFtcDtkZXYtJmd0O2NvcmVkZXYucmRtYV9uZXQpKSkgewomIzQzOwkJCXJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIG5ldCwgJmFtcDtpbml0X25ldCwKJiM0MzsJCQkJCQkgICAgTlVMTCwgJiMzNDtpYmRldiVkJiMzNDspOwomIzQzOwkJCWlmIChyZXQgJmFtcDsmYW1wOyByZXQgIT0gLUVOT0RFVikKJiM0MzsJCQkJV0FSTigxLAomIzQzOwkJCQkgICAgICYjMzQ7RmFpbGVkIHRvIG1vdmUgUkRNQSBkZXZpY2UgJXMgdG8gaW5pdF9uZXQgb24gbmV0bnMgZXhpdDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICAgIGRldl9uYW1lKCZhbXA7ZGV2LSZndDtkZXYpLCByZXQpOwomIzQzOwkJfQogCiAJCXB1dF9kZXZpY2UoJmFtcDtkZXYtJmd0O2Rldik7CiAJCWRvd25fcmVhZCgmYW1wO2RldmljZXNfcndzZW0pOwpAQCAtMTIwNiw3ICYjNDM7MTIzOCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByZG1hX2Rldl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB9CiAKIC8qCi0gKiBBc3NpZ24gdGhlIHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUgYW5kIHRoZSB1bmlxdWUgZGV2aWNlIGluZGV4LiBUaGlzIGlzCiYjNDM7ICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhlIGRldmljZQomIzQzOyAqIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgbmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGlzIGFzc2lnbmVkIHRvLiBUaGlzIGlzCiAgKiB1bmRvbmUgYnkgaWJfZGVhbGxvY19kZXZpY2UuCiAgKi8KIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKQpAQCAtMTIyMyw3ICYjNDM7MTI1Niw4IEBAIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKQogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpKSkgewomIzQzOwlpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldiksCiYjNDM7CQkJCSAgICByZG1hX2Rldl9uZXQoZGV2aWNlKSkpIHsKIAkJcmV0ID0gLUVORklMRTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTM4OCw4ICYjNDM7MTQyMiw5IEBAIHN0YXRpYyB2b2lkIGliX2RldmljZV9ub3RpZnlfcmVnaXN0ZXIoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQogLyoqCiAgKiBpYl9yZWdpc3Rlcl9kZXZpY2UgLSBSZWdpc3RlciBhbiBJQiBkZXZpY2Ugd2l0aCBJQiBjb3JlCiAgKiBAZGV2aWNlOiBEZXZpY2UgdG8gcmVnaXN0ZXIKLSAqIEBuYW1lOiB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lLiBUaGlzIG1heSBpbmNsdWRlIGEgJiMzOTslJiMzOTsgd2hpY2ggd2lsbAotICogCSAgY2F1c2UgYSB1bmlxdWUgaW5kZXggdG8gYmUgYWRkZWQgdG8gdGhlIHBhc3NlZCBkZXZpY2UgbmFtZS4KJiM0MzsgKiBAbmFtZTogZGV2aWNlIG5hbWUsIHVuaXF1ZSB3aXRoaW4gdGhlIGRldmljZSYjMzk7cyBuZXQgbmFtZXNwYWNlLiBUaGlzIG1heQomIzQzOyAqCSAgaW5jbHVkZSBhICYjMzk7JSYjMzk7IHdoaWNoIHdpbGwgY2F1c2UgYSB1bmlxdWUgaW5kZXggdG8gYmUgYWRkZWQgdG8gdGhlCiYjNDM7ICoJICBwYXNzZWQgZGV2aWNlIG5hbWUuCiAgKiBAZG1hX2RldmljZTogcG9pbnRlciB0byBhIERNQS1jYXBhYmxlIGRldmljZS4gSWYgJU5VTEwsIHRoZW4gdGhlIElCCiAgKgkgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuIEluIHRoaXMgY2FzZSB0aGUgY2FsbGVyIHNob3VsZCBmdWxseQogICoJCXNldHVwIHRoZSBpYmRldiBmb3IgRE1BLiBUaGlzIHVzdWFsbHkgbWVhbnMgdXNpbmcgZG1hX3ZpcnRfb3BzLgpAQCAtMTY3MCwxNCAmIzQzOzE3MDUsODMgQEAgdm9pZCBpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2KQogfQogRVhQT1JUX1NZTUJPTChpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQpOwogCiYjNDM7c3RhdGljIGJvb2wgcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpza2lwLCBzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaW5kZXg7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtkZXZpY2VzX3J3c2VtKTsKJiM0MzsKJiM0MzsJeGFfZm9yX2VhY2goJmFtcDtkZXZpY2VzLCBpbmRleCwgZGV2aWNlKQomIzQzOwkJaWYgKGRldmljZSAhPSBza2lwICZhbXA7JmFtcDsKJiM0MzsJCSAgICByZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhc3RyY21wKG5hbWUsIGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENob29zZSB0aGUgbmFtZSBAZGV2aWNlIHNob3VsZCB1c2UgaW4gbmV0IG5hbWVzcGFjZSBAbmV0LiBAcmVxdWVzdGVkX25hbWUKJiM0MzsgKiBpcyB1c2VkIGFzIGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSB3aGVuIHNldC4gT3RoZXJ3aXNlIGtlZXAgdGhlIGN1cnJlbnQgbmFtZQomIzQzOyAqIHdoZW4gaXQgaXMgZnJlZSwgb3IgdXNlIGEgdHJ1c3RlZCAmIzM5OyVkJiMzOTsgQGZhbGxiYWNrX3BhdHRlcm4gZm9yIHRlYXJkb3duLiBUaGUKJiM0MzsgKiBjYWxsZXIgbXVzdCBob2xkIHRoZSB3cml0ZSBzaWRlIG9mIGRldmljZXNfcndzZW0uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCSAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSwKJiM0MzsJCQkJICAgIGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4sCiYjNDM7CQkJCSAgICBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAomIzQzOwkJCQkgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKQomIzQzO3sKJiM0MzsJaW50IGlkOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CiYjNDM7CWlmIChyZXF1ZXN0ZWRfbmFtZSkgewomIzQzOwkJaWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSkpIHsKJiM0MzsJCQkqbmV3X25hbWUgPSByZXF1ZXN0ZWRfbmFtZTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoJmFtcDtkZXZpY2UtJmd0O2RldikpKSB7CiYjNDM7CQkqbmV3X25hbWUgPSBkZXZfbmFtZSgmYW1wO2RldmljZS0mZ3Q7ZGV2KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZmFsbGJhY2tfcGF0dGVybikKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwomIzQzOwlzbnByaW50ZihidWYsIGJ1Zl9sZW4sICYjMzQ7aWJkZXYldSYjMzQ7LCBkZXZpY2UtJmd0O2luZGV4KTsKJiM0MzsJaWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCBidWYpKSB7CiYjNDM7CQkqbmV3X25hbWUgPSBidWY7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZCA9IF9fYWxsb2NfbmFtZV9pZChuZXQsIGZhbGxiYWNrX3BhdHRlcm4sIGRldmljZSk7CiYjNDM7CWlmIChpZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gaWQ7CiYjNDM7CXNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgZmFsbGJhY2tfcGF0dGVybiwgaWQpOwomIzQzOwkqbmV3X25hbWUgPSBidWY7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qCiAgKiBUaGUgY2FsbGVyIG11c3QgcGFzcyBpbiBhIGRldmljZSB0aGF0IGhhcyB0aGUga3JlZiBoZWxkIGFuZCB0aGUgcmVmY291bnQKICAqIHJlbGVhc2VkLiBJZiB0aGUgZGV2aWNlIGlzIGluIGN1cl9uZXQgYW5kIHN0aWxsIHJlZ2lzdGVyZWQgdGhlbiBpdCBpcyBtb3ZlZAogICogaW50byBuZXQuCiYjNDM7ICoKJiM0MzsgKiBOYW1pbmcgcnVsZXMgYXJlIGhhbmRsZWQgYnkgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKCkuCiAgKi8KIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCwKLQkJCQkgc3RydWN0IG5ldCAqbmV0KQomIzQzOwkJCQkgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSwKJiM0MzsJCQkJIGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4pCiB7CiYjNDM7CWNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07CiYjNDM7CWNvbnN0IGNoYXIgKm5ld19uYW1lOwogCWludCByZXQyID0gLUVJTlZBTDsKIAlpbnQgcmV0OwogCkBAIC0xNjk0LDMwICYjNDM7MTc5OCw2NSBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwlpZiAoIWZhbGxiYWNrX3BhdHRlcm4pIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZWplY3QgYSBwcmVkaWN0YWJsZSBuYW1lIGNvbmZsaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nCiYjNDM7CQkgKiBkb3duLCBzbyBhIGRvb21lZCB1c2VyIG1vdmUgZG9lcyBub3QgZGlzYWJsZSBhIGxpdmUgZGV2aWNlLgomIzQzOwkJICovCiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CQlyZXQgPSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoZGV2aWNlLCBuZXQsIHJlcXVlc3RlZF9uYW1lLAomIzQzOwkJCQkJICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1ZiwKJiM0MzsJCQkJCSAgICAgICBzaXplb2YoYnVmKSwgJmFtcDtuZXdfbmFtZSk7CiYjNDM7CQl1cF93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogCWtvYmplY3RfdWV2ZW50KCZhbXA7ZGV2aWNlLSZndDtkZXYua29iaiwgS09CSl9SRU1PVkUpOwogCWRpc2FibGVfZGV2aWNlKGRldmljZSk7CiAKIAkvKgotCSAqIEF0IHRoaXMgcG9pbnQgbm8gb25lIGNhbiBiZSB1c2luZyB0aGUgZGV2aWNlLCBzbyBpdCBpcyBzYWZlIHRvCi0JICogY2hhbmdlIHRoZSBuYW1lc3BhY2UuCiYjNDM7CSAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtCiYjNDM7CSAqIG5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQsIGNsb3NpbmcgcmFjZXMgd2l0aCBhIGNvbmN1cnJlbnQKJiM0MzsJICogcmVnaXN0cmF0aW9uIG9yIHJlbmFtZSwgdGhlbiBwdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlIGF0IHRoZSBzeXNmcwomIzQzOwkgKiBsZXZlbC4KIAkgKi8KLQl3cml0ZV9wbmV0KCZhbXA7ZGV2aWNlLSZndDtjb3JlZGV2LnJkbWFfbmV0LCBuZXQpOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CXJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsCiYjNDM7CQkJCSAgICAgICBmYWxsYmFja19wYXR0ZXJuLCBidWYsIHNpemVvZihidWYpLAomIzQzOwkJCQkgICAgICAgJmFtcDtuZXdfbmFtZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWlmIChmYWxsYmFja19wYXR0ZXJuKSB7CiYjNDM7CQkJV0FSTigxLAomIzQzOwkJCSAgICAgJiMzNDslczogZmFpbGVkIHRvIHBpY2sgZGV2aWNlIG5hbWUgZHVyaW5nIG5hbWVzcGFjZSB0ZWFyZG93bjogJWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgX19mdW5jX18sIHJldCk7CiYjNDM7CQkJd3JpdGVfcG5ldCgmYW1wO2RldmljZS0mZ3Q7Y29yZWRldi5yZG1hX25ldCwgbmV0KTsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJfQomIzQzOwkJZ290byByZW5hbWVfZG9uZTsKJiM0MzsJfQogCi0JZG93bl9yZWFkKCZhbXA7ZGV2aWNlc19yd3NlbSk7Ci0JLyoKLQkgKiBDdXJyZW50bHkgcmRtYSBkZXZpY2VzIGFyZSBzeXN0ZW0gd2lkZSB1bmlxdWUuIFNvIHRoZSBkZXZpY2UgbmFtZQotCSAqIGlzIGd1YXJhbnRlZWQgZnJlZSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4gUHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZQotCSAqIGF0IHRoZSBzeXNmcyBsZXZlbC4KLQkgKi8KLQlyZXQgPSBkZXZpY2VfcmVuYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYsIGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpKTsKLQl1cF9yZWFkKCZhbXA7ZGV2aWNlc19yd3NlbSk7CiYjNDM7CXdyaXRlX3BuZXQoJmFtcDtkZXZpY2UtJmd0O2NvcmVkZXYucmRtYV9uZXQsIG5ldCk7CiYjNDM7CXJldCA9IGRldmljZV9yZW5hbWUoJmFtcDtkZXZpY2UtJmd0O2RldiwgbmV3X25hbWUpOwogCWlmIChyZXQpIHsKLQkJZGV2X3dhcm4oJmFtcDtkZXZpY2UtJmd0O2RldiwKLQkJCSAmIzM0OyVzOiBDb3VsZG4mIzM5O3QgcmVuYW1lIGRldmljZSBhZnRlciBuYW1lc3BhY2UgY2hhbmdlXG4mIzM0OywKLQkJCSBfX2Z1bmNfXyk7Ci0JCS8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqLwotCQl3cml0ZV9wbmV0KCZhbXA7ZGV2aWNlLSZndDtjb3JlZGV2LnJkbWFfbmV0LCBjdXJfbmV0KTsKJiM0MzsJCWlmIChmYWxsYmFja19wYXR0ZXJuKSB7CiYjNDM7CQkJV0FSTigxLAomIzQzOwkJCSAgICAgJiMzNDslczogZmFpbGVkIHRvIHJlbmFtZSBkZXZpY2UgZHVyaW5nIG5hbWVzcGFjZSB0ZWFyZG93bjogJWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgX19mdW5jX18sIHJldCk7CiYjNDM7CQkJcmV0ID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZGV2X3dhcm4oJmFtcDtkZXZpY2UtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7JXM6IENvdWxkbiYjMzk7dCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcbiYjMzQ7LAomIzQzOwkJCQkgX19mdW5jX18pOwomIzQzOwkJCS8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqLwomIzQzOwkJCXdyaXRlX3BuZXQoJmFtcDtkZXZpY2UtJmd0O2NvcmVkZXYucmRtYV9uZXQsIGN1cl9uZXQpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJc3Ryc2NweShkZXZpY2UtJmd0O25hbWUsIGRldl9uYW1lKCZhbXA7ZGV2aWNlLSZndDtkZXYpLAomIzQzOwkJCUlCX0RFVklDRV9OQU1FX01BWCk7CiAJfQomIzQzO3JlbmFtZV9kb25lOgomIzQzOwl1cF93cml0ZSgmYW1wO2RldmljZXNfcndzZW0pOwogCiAJcmV0MiA9IGVuYWJsZV9kZXZpY2VfYW5kX2dldChkZXZpY2UpOwogCWlmIChyZXQyKSB7CkBAIC0xNzQwLDM2ICYjNDM7MTg3OSw3MiBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsCiB9CiAKIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKQomIzQzOwkJCSAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZCwgY29uc3QgY2hhciAqbmFtZSwKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgcmV0OwogCiAJbmV0ID0gZ2V0X25ldF9uc19ieV9mZChuc19mZCk7CiAJaWYgKElTX0VSUihuZXQpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7SW52YWxpZCB0YXJnZXQgbmV0IG5hbWVzcGFjZSBmZCYjMzQ7KTsKIAkJcmV0ID0gUFRSX0VSUihuZXQpOwogCQlnb3RvIG5ldF9lcnI7CiAJfQogCiAJaWYgKCFuZXRsaW5rX25zX2NhcGFibGUoc2tiLCBuZXQtJmd0O3VzZXJfbnMsIENBUF9ORVRfQURNSU4pKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7TWlzc2luZyBDQVBfTkVUX0FETUlOIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZSYjMzQ7KTsKIAkJcmV0ID0gLUVQRVJNOwogCQlnb3RvIG5zX2VycjsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogTW92aW5nIGEgZGV2aWNlIHRvIHRoZSBuYW1lc3BhY2UgaXQgYWxyZWFkeSBsaXZlcyBpbiBpcyBhIG5vLW9wOyBhCiYjNDM7CSAqIHN1cHBsaWVkIG5hbWUgc3RpbGwgcmVuYW1lcyBpdCBpbiBwbGFjZS4KJiM0MzsJICovCiYjNDM7CWlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoJmFtcDtkZXYtJmd0O2NvcmVkZXYucmRtYV9uZXQpKSkgewomIzQzOwkJcmV0ID0gbmFtZSA/IGliX2RldmljZV9yZW5hbWUoZGV2LCBuYW1lKSA6IDA7CiYjNDM7CiYjNDM7CQlpZiAocmV0ID09IC1FRVhJU1QpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtEZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiYjNDM7CQllbHNlIGlmIChyZXQgPT0gLUVJTlZBTCAmYW1wOyZhbXA7IG5hbWUpCiYjNDM7CQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtVbmFibGUgdG8gdXNlIHJlcXVlc3RlZCBkZXZpY2UgbmFtZSBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2UmIzM0Oyk7CiYjNDM7CQlnb3RvIG5zX2VycjsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogQWxsIHRoZSBpYl9jbGllbnRzLCBpbmNsdWRpbmcgdXZlcmJzLCBhcmUgcmVzZXQgd2hlbiB0aGUgbmFtZXNwYWNlIGlzCiAJICogY2hhbmdlZCBhbmQgdGhpcyBjYW5ub3QgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciB1c2Vyc3BhY2UgdG8gZG8KIAkgKiBzb21ldGhpbmcsIHNvIGRpc2Fzc29jaWF0aW9uIGlzIG1hbmRhdG9yeS4KIAkgKi8KLQlpZiAoIWRldi0mZ3Q7b3BzLmRpc2Fzc29jaWF0ZV91Y29udGV4dCB8fCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykgewomIzQzOwlpZiAoaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDtDYW5ub3QgY2hhbmdlIG5ldCBuYW1lc3BhY2Ugb2YgUkRNQSBkZXZpY2UgaW4gc2hhcmVkIG5ldG5zIG1vZGUmIzM0Oyk7CiYjNDM7CQlyZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWdvdG8gbnNfZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7RGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgbmFtZXNwYWNlIGNoYW5nZXMgKG5vIGRpc2Fzc29jaWF0ZSBzdXBwb3J0KSYjMzQ7KTsKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gbnNfZXJyOwogCX0KIAogCWdldF9kZXZpY2UoJmFtcDtkZXYtJmd0O2Rldik7CiAJaWJfZGV2aWNlX3B1dChkZXYpOwotCXJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIGN1cnJlbnQtJmd0O25zcHJveHktJmd0O25ldF9ucywgbmV0KTsKJiM0MzsJcmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC0mZ3Q7bnNwcm94eS0mZ3Q7bmV0X25zLCBuZXQsIG5hbWUsCiYjNDM7CQkJCSAgICBOVUxMKTsKIAlwdXRfZGV2aWNlKCZhbXA7ZGV2LSZndDtkZXYpOwomIzQzOwlpZiAocmV0ID09IC1FRVhJU1QpCiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7RGV2aWNlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlJiMzNDspOwomIzQzOwllbHNlIGlmIChyZXQgPT0gLUVJTlZBTCAmYW1wOyZhbXA7IG5hbWUpCiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiYjNDM7CQkJICAgICAgICYjMzQ7VW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlJiMzNDspOwogCiAJcHV0X25ldChuZXQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYwppbmRleCBhYWU0ZjNmNmJjYmExNC4uNGVmYTM4N2VjMWJlMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYwpAQCAtMTE3OCw2ICYjNDM7MTE3OCwyNCBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7CiYjNDM7CQljaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9OwomIzQzOwkJdTMyIG5zX2ZkOwomIzQzOwomIzQzOwkJaWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0pIHsKJiM0MzsJCQlubGFfc3Ryc2NweShuYW1lLCB0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdLAomIzQzOwkJCQkgICAgSUJfREVWSUNFX05BTUVfTUFYKTsKJiM0MzsJCQlpZiAoc3RybGVuKG5hbWUpID09IDApIHsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBkb25lOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCW5zX2ZkID0gbmxhX2dldF91MzIodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKTsKJiM0MzsJCWVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCwKJiM0MzsJCQkJCSAgICAgIG5hbWVbMF0gPyBuYW1lIDogTlVMTCwgZXh0YWNrKTsKJiM0MzsJCWdvdG8gcHV0X2RvbmU7CiYjNDM7CX0KJiM0MzsKIAlpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSkgewogCQljaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9OwogCkBAIC0xMTkxLDE0ICYjNDM7MTIwOSw2IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7Ci0JCXUzMiBuc19mZDsKLQotCQluc19mZCA9IG5sYV9nZXRfdTMyKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSk7Ci0JCWVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCk7Ci0JCWdvdG8gcHV0X2RvbmU7Ci0JfQotCiAJaWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfRElNXSkgewogCQl1OCB1c2VfZGltOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYwppbmRleCA5YWYzMWQxZDlkNzBjNy4uYTgyYzQ2OTY1NDE2YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYwpAQCAtNzAwLDYgJiM0Mzs3MDAsMTIgQEAgaW50IGliX21hZF9hZ2VudF9zZWN1cml0eV9zZXR1cChzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudCwKIAlpZiAocXBfdHlwZSAhPSBJQl9RUFRfU01JKQogCQlyZXR1cm4gMDsKIAomIzQzOwkvKgomIzQzOwkgKiBTRUxpbnV4IGxhYmVscyBhbiBlbmRwb3J0IGJ5IChkZXZpY2UgbmFtZSwgcG9ydCkgZnJvbSBhIGdsb2JhbAomIzQzOwkgKiBwb2xpY3kuIElmIGRldmljZXMgaW4gZGlmZmVyZW50IG5ldCBuYW1lc3BhY2VzIHNoYXJlIGEgbmFtZSwgdGhleSBnZXQKJiM0MzsJICogdGhlIHNhbWUgbGFiZWw7IGRpc3Rpbmd1aXNoaW5nIHRoZW0gd291bGQgbmVlZCBuZXQgbmFtZXNwYWNlIHN1cHBvcnQKJiM0MzsJICogaW4gdGhlIHBvbGljeSBsYW5ndWFnZSBhbmQgdG9vbGluZy4KJiM0MzsJICovCiAJc3Bpbl9sb2NrKCZhbXA7bWFkX2FnZW50X2xpc3RfbG9jayk7CiAJcmV0ID0gc2VjdXJpdHlfaWJfZW5kcG9ydF9tYW5hZ2Vfc3VibmV0KGFnZW50LSZndDtzZWN1cml0eSwKIAkJCQkJCWRldl9uYW1lKCZhbXA7YWdlbnQtJmd0O2RldmljZS0mZ3Q7ZGV2KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYwppbmRleCA3ZjcyM2EyZjM3MDA1OS4uYTRlYWQ4OWNjYmQzNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMKQEAgLTExLDcgJiM0MzsxMSw2IEBACiAKICNpbmNsdWRlICYjMzQ7cnhlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtyeGVfbG9jLmgmIzM0OwotI2luY2x1ZGUgJiMzNDtyeGVfcXVldWUuaCYjMzQ7CiAKIHZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQogewpAQCAtMzAsMjkgJiM0MzsyOSw2IEBAIHZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQogCWtmcmVlKGlwKTsKIH0KIAotLyoKLSAqIG9wZW4gYW5kIGNsb3NlIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgdGltZXMgdGhlIG1lbW9yeSByZWdpb24gaXMgbWFwcGVkLAotICogdG8gYXZvaWQgcmVsZWFzaW5nIGl0LgotICovCi1zdGF0aWMgdm9pZCByeGVfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwID0gdm1hLSZndDt2bV9wcml2YXRlX2RhdGE7Ci0KLQlrcmVmX2dldCgmYW1wO2lwLSZndDtyZWYpOwotfQotCi1zdGF0aWMgdm9pZCByeGVfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhOwotCi0Ja3JlZl9wdXQoJmFtcDtpcC0mZ3Q7cmVmLCByeGVfbW1hcF9yZWxlYXNlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCByeGVfdm1fb3BzID0gewotCS5vcGVuID0gcnhlX3ZtYV9vcGVuLAotCS5jbG9zZSA9IHJ4ZV92bWFfY2xvc2UsCi19OwotCiAvKioKICAqIHJ4ZV9tbWFwIC0gY3JlYXRlIGEgbmV3IG1tYXAgcmVnaW9uCiAgKiBAY29udGV4dDogdGhlIElCIHVzZXIgY29udGV4dCBvZiB0aGUgcHJvY2VzcyBtYWtpbmcgdGhlIG1tYXAoKSBjYWxsCkBAIC0xMDYsMTcgJiM0Mzs4MiwxMCBAQCBpbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlsaXN0X2RlbF9pbml0KCZhbXA7aXAtJmd0O3BlbmRpbmdfbW1hcHMpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7cnhlLSZndDtwZW5kaW5nX2xvY2spOwogCi0Jdm1hLSZndDt2bV9vcHMgPSAmYW1wO3J4ZV92bV9vcHM7Ci0Jdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBpcDsKLQogCXJldCA9IHJlbWFwX3ZtYWxsb2NfcmFuZ2Uodm1hLCBpcC0mZ3Q7b2JqLCAwKTsKLQlpZiAocmV0KSB7Ci0JCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gTlVMTDsKLQkJdm1hLSZndDt2bV9vcHMgPSBOVUxMOwotCQlrcmVmX3B1dCgmYW1wO2lwLSZndDtyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpOwomIzQzOwlrcmVmX3B1dCgmYW1wO2lwLSZndDtyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpOwomIzQzOwlpZiAocmV0KQogCQlyeGVfZGJnX2RldihyeGUsICYjMzQ7ZXJyICVkIGZyb20gcmVtYXBfdm1hbGxvY19yYW5nZVxuJiMzNDssIHJldCk7Ci0JCWdvdG8gZG9uZTsKLQl9CiAKIGRvbmU6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jCmluZGV4IDFlYzEzMGZlZThlYTdhLi42ZWIxMGQyZjA2NTNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jCkBAIC0yNDAsNiAmIzQzOzI0MCwxMCBAQCBzdGF0aWMgdm9pZCByeGVfZGVhbGxvY191Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmlidWMpCiAJCXJ4ZV9lcnJfdWModWMsICYjMzQ7Y2xlYW51cCBmYWlsZWQsIGVyciA9ICVkXG4mIzM0OywgZXJyKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ4ZV9kaXNhc3NvY2lhdGVfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiAvKiBwZCAqLwogc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogewpAQCAtMTQ3OCw2ICYjNDM7MTQ4Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyByeGVfZGV2X29wcyA9IHsKIAkuZGVzdHJveV9zcnEgPSByeGVfZGVzdHJveV9zcnEsCiAJLmRldGFjaF9tY2FzdCA9IHJ4ZV9kZXRhY2hfbWNhc3QsCiAJLmRldmljZV9ncm91cCA9ICZhbXA7cnhlX2F0dHJfZ3JvdXAsCiYjNDM7CS5kaXNhc3NvY2lhdGVfdWNvbnRleHQgPSByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0LAogCS5lbmFibGVfZHJpdmVyID0gcnhlX2VuYWJsZV9kcml2ZXIsCiAJLmdldF9kbWFfbXIgPSByeGVfZ2V0X2RtYV9tciwKIAkuZ2V0X2h3X3N0YXRzID0gcnhlX2liX2dldF9od19zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKaW5kZXggMGNhZWJiYzI4MTBmZjMuLjJmYzhlMTMzYzcwZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtMzE4OSwxMCAmIzQzOzMxODksMjQgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNycF9jbGFzc19hdHRyc1tdOwogCiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7CiAKJiM0MzsvKgomIzQzOyAqIFNSUCBob3N0cyBhcmUgbmFtZWQgYWZ0ZXIgdGhlaXIgaWIgZGV2aWNlLCBzbyB0YWcgdGhlIGNsYXNzIGJ5IHRoZSBpYgomIzQzOyAqIGRldmljZSYjMzk7cyBuZXQgbmFtZXNwYWNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3JwX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3JwX2hvc3QsIGRldik7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHJkbWFfZGV2X25ldChob3N0LSZndDtzcnBfZGV2LSZndDtkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gbmV0ID8gdG9fbnNfY29tbW9uKG5ldCkgOiBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgc3JwX2NsYXNzID0gewogCS5uYW1lICAgID0gJiMzNDtpbmZpbmliYW5kX3NycCYjMzQ7LAogCS5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3VwcywKLQkuZGV2X3JlbGVhc2UgPSBzcnBfcmVsZWFzZV9kZXYKJiM0MzsJLmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2LAomIzQzOwkubnNfdHlwZSA9ICZhbXA7bmV0X25zX3R5cGVfb3BlcmF0aW9ucywKJiM0MzsJLm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgKaW5kZXggNDA0ZTc0NjU1MmNhOGYuLjlhNWM5ZWU3MjhlN2RmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oCkBAIC0zNCw2ICYjNDM7MzQsNyBAQCBzdHJ1Y3QgcmRtYWNnX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlkZXZfbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXJwb29sczsKIAljaGFyCQkJKm5hbWU7CiYjNDM7CXUzMgkJCWluZGV4OwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmgKaW5kZXggM2FmOTQ2ZWNiYWMzZWQuLmVlMTFjM2JiYmFlMjJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaApAQCAtNTE2LDcgJiM0Mzs1MTYsMTAgQEAgZW51bSByZG1hX25sZGV2X2F0dHIgewogCVJETUFfTkxERVZfQVRUUl9ERVZfUFJPVE9DT0wsCQkvKiBzdHJpbmcgKi8KIAogCS8qCi0JICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3QKJiM0MzsJICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3QuIE1heSBiZSBjb21iaW5lZAomIzQzOwkgKiB3aXRoIFJETUFfTkxERVZfQVRUUl9ERVZfTkFNRSAoYSBsaXRlcmFsIGRldmljZSBuYW1lKSB0byBhbHNvIHJlbmFtZQomIzQzOwkgKiB0aGUgZGV2aWNlIGluIHRoZSBkZXN0aW5hdGlvbiBuYW1lc3BhY2U7IHRoZSBtb3ZlIGZhaWxzIHdpdGggLUVFWElTVAomIzQzOwkgKiBpZiB0aGF0IG5hbWUgaXMgYWxyZWFkeSB0YWtlbiB0aGVyZS4KIAkgKi8KIAlSRE1BX05MREVWX05FVF9OU19GRCwJCQkvKiB1MzIgKi8KIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9yZG1hLmMgYi9rZXJuZWwvY2dyb3VwL3JkbWEuYwppbmRleCA1ZTgyYTAzYjMyNzBhZC4uOTQ4OWYzZGYwYmYzZmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jCkBAIC0xOSw2ICYjNDM7MTksNyBAQAogI2RlZmluZSBSRE1BQ0dfTUFYX1NUUiAmIzM0O21heCYjMzQ7CiAKIGVudW0gcmRtYWNnX2xpbWl0X3Rva2VucyB7CiYjNDM7CVJETUFDR19ERVZJQ0VfSU5ERVgsCiAJUkRNQUNHX0hDQV9IQU5ETEVfVkFMLAogCVJETUFDR19IQ0FfSEFORExFX01BWCwKIAlSRE1BQ0dfSENBX09CSkVDVF9WQUwsCkBAIC0yNyw2ICYjNDM7MjgsNyBAQCBlbnVtIHJkbWFjZ19saW1pdF90b2tlbnMgewogfTsKIAogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgcmRtYWNnX2xpbWl0X3Rva2VucyA9IHsKJiM0MzsJeyBSRE1BQ0dfREVWSUNFX0lOREVYLAkJJiMzNDtpbmRleD0ldSYjMzQ7CX0sCiAJeyBSRE1BQ0dfSENBX0hBTkRMRV9WQUwsCSYjMzQ7aGNhX2hhbmRsZT0lZCYjMzQ7CX0sCiAJeyBSRE1BQ0dfSENBX0hBTkRMRV9NQVgsCSYjMzQ7aGNhX2hhbmRsZT1tYXgmIzM0Owl9LAogCXsgUkRNQUNHX0hDQV9PQkpFQ1RfVkFMLAkmIzM0O2hjYV9vYmplY3Q9JWQmIzM0Owl9LApAQCAtNDY0LDE3ICYjNDM7NDY2LDUzIEBAIHZvaWQgcmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpCiB9CiBFWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7c3RhdGljIHN0cnVjdCByZG1hY2dfZGV2aWNlICoKJiM0MztyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBoYXNfaW5kZXgsIHUzMiBpbmRleCkKIHsKJiM0MzsJc3RydWN0IHJkbWFjZ19kZXZpY2UgKm1hdGNoID0gTlVMTDsKIAlzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3JkbWFjZ19tdXRleCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpCi0JCWlmICghc3RyY21wKG5hbWUsIGRldmljZS0mZ3Q7bmFtZSkpCi0JCQlyZXR1cm4gZGV2aWNlOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHsKJiM0MzsJCWlmIChzdHJjbXAobmFtZSwgZGV2aWNlLSZndDtuYW1lKSkKJiM0MzsJCQljb250aW51ZTsKIAotCXJldHVybiBOVUxMOwomIzQzOwkJaWYgKGhhc19pbmRleCkgewomIzQzOwkJCWlmIChkZXZpY2UtJmd0O2luZGV4ID09IGluZGV4KQomIzQzOwkJCQlyZXR1cm4gZGV2aWNlOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1hdGNoKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FTk9UVU5JUSk7CiYjNDM7CQltYXRjaCA9IGRldmljZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbWF0Y2ggPzogRVJSX1BUUigtRU5PREVWKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wKJiM0MztyZG1hY2dfZGV2aWNlX25hbWVfdW5pcXVlX2xvY2tlZChjb25zdCBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJkbWFjZ19kZXZpY2UgKm90aGVyOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cmRtYWNnX211dGV4KTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpCiYjNDM7CQlpZiAob3RoZXIgIT0gZGV2aWNlICZhbXA7JmFtcDsgIXN0cmNtcChvdGhlci0mZ3Q7bmFtZSwgZGV2aWNlLSZndDtuYW1lKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZG1hY2dfcHJpbnRfZGV2aWNlX2tleShzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLAomIzQzOwkJCQkgICAgY29uc3Qgc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXNlcV9wdXRzKHNmLCBkZXZpY2UtJmd0O25hbWUpOwomIzQzOwlpZiAoIXJkbWFjZ19kZXZpY2VfbmFtZV91bmlxdWVfbG9ja2VkKGRldmljZSkpCiYjNDM7CQlzZXFfcHJpbnRmKHNmLCAmIzM0OyBpbmRleD0ldSYjMzQ7LCBkZXZpY2UtJmd0O2luZGV4KTsKJiM0MzsJc2VxX3B1dGMoc2YsICYjMzk7ICYjMzk7KTsKIH0KIAogc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLApAQCAtNDg4LDYgJiM0Mzs1MjYsOCBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCiAJY2hhciAqcDsKIAlpbnQgKm5ld19saW1pdHM7CiAJdW5zaWduZWQgbG9uZyBlbmFibGVzID0gMDsKJiM0MzsJdTMyIGRldl9pbmRleCA9IDA7CiYjNDM7CWJvb2wgaGFzX2luZGV4ID0gZmFsc2U7CiAJaW50IGkgPSAwLCByZXQgPSAwOwogCiAJLyogZXh0cmFjdCB0aGUgZGV2aWNlIG5hbWUgZmlyc3QgKi8KQEAgLTUwMyw3ICYjNDM7NTQzLDcgQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLAogCQlnb3RvIGVycjsKIAl9CiAKLQkvKiBwYXJzZSByZXNvdXJjZSBsaW1pdCB0b2tlbnMgKi8KJiM0MzsJLyogcGFyc2UgdGhlIG9wdGlvbmFsIGRldmljZSBpbmRleCBhbmQgcmVzb3VyY2UgbGltaXQgdG9rZW5zICovCiAJd2hpbGUgKChwID0gc3Ryc2VwKCZhbXA7b3B0aW9ucywgJiMzNDsgXHRcbiYjMzQ7KSkpIHsKIAkJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwogCQlpbnQgdG9rLCBpbnR2YWw7CkBAIC01MTMsNiAmIzQzOzU1MywxMyBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCiAKIAkJdG9rID0gbWF0Y2hfdG9rZW4ocCwgcmRtYWNnX2xpbWl0X3Rva2VucywgYXJncyk7CiAJCXN3aXRjaCAodG9rKSB7CiYjNDM7CQljYXNlIFJETUFDR19ERVZJQ0VfSU5ERVg6CiYjNDM7CQkJaWYgKGhhc19pbmRleCB8fCBtYXRjaF91aW50KCZhbXA7YXJnc1swXSwgJmFtcDtkZXZfaW5kZXgpKSB7CiYjNDM7CQkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gcGFyc2VfZXJyOwomIzQzOwkJCX0KJiM0MzsJCQloYXNfaW5kZXggPSB0cnVlOwomIzQzOwkJCWJyZWFrOwogCQljYXNlIFJETUFDR19IQ0FfSEFORExFX1ZBTDoKIAkJCWlmIChtYXRjaF9pbnQoJmFtcDthcmdzWzBdLCAmYW1wO2ludHZhbCkgfHwgaW50dmFsICZsdDsgMCkgewogCQkJCXJldCA9IC1FSU5WQUw7CkBAIC01NDYsOSAmIzQzOzU5Myw5IEBAIHN0YXRpYyBzc2l6ZV90IHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwKIAkvKiBhY3F1aXJlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBob3QgcGx1ZyBkZXZpY2VzICovCiAJbXV0ZXhfbG9jaygmYW1wO3JkbWFjZ19tdXRleCk7CiAKLQlkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUpOwotCWlmICghZGV2aWNlKSB7Ci0JCXJldCA9IC1FTk9ERVY7CiYjNDM7CWRldmljZSA9IHJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChkZXZfbmFtZSwgaGFzX2luZGV4LCBkZXZfaW5kZXgpOwomIzQzOwlpZiAoSVNfRVJSKGRldmljZSkpIHsKJiM0MzsJCXJldCA9IFBUUl9FUlIoZGV2aWNlKTsKIAkJZ290byBkZXZfZXJyOwogCX0KIApAQCAtNjI2LDcgJiM0Mzs2NzMsNyBAQCBzdGF0aWMgaW50IHJkbWFjZ19yZXNvdXJjZV9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiAJbXV0ZXhfbG9jaygmYW1wO3JkbWFjZ19tdXRleCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHsKLQkJc2VxX3ByaW50ZihzZiwgJiMzNDslcyAmIzM0OywgZGV2aWNlLSZndDtuYW1lKTsKJiM0MzsJCXJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpOwogCiAJCXJwb29sID0gZmluZF9jZ19ycG9vbF9sb2NrZWQoY2csIGRldmljZSk7CiAJCXByaW50X3Jwb29sX3ZhbHVlcyhzZiwgcnBvb2wpOwpAQCAtNjUwLDcgJiM0Mzs2OTcsNyBAQCBzdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KQogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCAmYW1wO3JkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkgewogCQlycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpOwogCi0JCXNlcV9wcmludGYoc2YsICYjMzQ7JXMgJiMzNDssIGRldmljZS0mZ3Q7bmFtZSk7CiYjNDM7CQlyZG1hY2dfcHJpbnRfZGV2aWNlX2tleShzZiwgZGV2aWNlKTsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IFJETUFDR19SRVNPVVJDRV9NQVg7IGkmIzQzOyYjNDM7KSB7CiAJCQlzZXFfcHJpbnRmKHNmLCAmIzM0OyVzLm1heD0lbGx1ICVzLmFsbG9jX2ZhaWw9JWxsdSYjMzQ7LAogCQkJCSAgIHJkbWFjZ19yZXNvdXJjZV9uYW1lc1tpXSwKQEAgLTY3OSw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdikKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmFtcDtyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHsKIAkJcnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTsKIAotCQlzZXFfcHJpbnRmKHNmLCAmIzM0OyVzICYjMzQ7LCBkZXZpY2UtJmd0O25hbWUpOwomIzQzOwkJcmRtYWNnX3ByaW50X2RldmljZV9rZXkoc2YsIGRldmljZSk7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBSRE1BQ0dfUkVTT1VSQ0VfTUFYOyBpJiM0MzsmIzQzOykgewogCQkJc2VxX3ByaW50ZihzZiwgJiMzNDslcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHUmIzM0OywKIAkJCQkgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sCmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19wbmV0LmMgYi9uZXQvc21jL3NtY19wbmV0LmMKaW5kZXggNjNlMjg2ZTJkZmFhOGQuLmZmOWM5YzM1Y2MyZjViIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19wbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfcG5ldC5jCkBAIC0zMDQsMTMgJiM0MzszMDQsMTggQEAgc3RhdGljIGJvb2wgc21jX3BuZXRpZF92YWxpZChjb25zdCBjaGFyICpwbmV0X25hbWUsIGNoYXIgKnBuZXRpZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogRmluZCBhbiBpbmZpbmliYW5kIGRldmljZSBieSBhIGdpdmVuIG5hbWUuIFRoZSBkZXZpY2UgbWlnaHQgbm90IGV4aXN0LiAqLwotc3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKGNoYXIgKmliX25hbWUpCiYjNDM7LyoKJiM0MzsgKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZSwgcmVzdHJpY3RlZCB0byB0aGUgZGV2aWNlcwomIzQzOyAqIGFjY2Vzc2libGUgZnJvbSBAbmV0LiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppYl9uYW1lKQogewogCXN0cnVjdCBzbWNfaWJfZGV2aWNlICppYmRldjsKIAogCW11dGV4X2xvY2soJmFtcDtzbWNfaWJfZGV2aWNlcy5tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpYmRldiwgJmFtcDtzbWNfaWJfZGV2aWNlcy5saXN0LCBsaXN0KSB7CiYjNDM7CQlpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhpYmRldi0mZ3Q7aWJkZXYsIG5ldCkpCiYjNDM7CQkJY29udGludWU7CiAJCWlmICghc3RybmNtcChpYmRldi0mZ3Q7aWJkZXYtJmd0O25hbWUsIGliX25hbWUsCiAJCQkgICAgIHNpemVvZihpYmRldi0mZ3Q7aWJkZXYtJmd0O25hbWUpKSB8fAogCQkgICAgKGliZGV2LSZndDtpYmRldi0mZ3Q7ZGV2LnBhcmVudCAmYW1wOyZhbXA7CkBAIC00MDgsOCAmIzQzOzQxMyw4IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2V0aChzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLAotCQkJICAgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKQomIzQzO3N0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2liKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIHN0cnVjdCBuZXQgKm5ldCwKJiM0MzsJCQkgICBjaGFyICppYl9uYW1lLCB1OCBpYl9wb3J0LCBjaGFyICpwbmV0X25hbWUpCiB7CiAJc3RydWN0IHNtY19wbmV0ZW50cnkgKnRtcF9wZSwgKm5ld19wZTsKIAlzdHJ1Y3Qgc21jX2liX2RldmljZSAqaWJfZGV2OwpAQCAtNDE5LDcgJiM0Mzs0MjQsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLAogCWJvb2wgbmV3X2liZGV2OwogCiAJLyogdHJ5IHRvIGFwcGx5IHRoZSBwbmV0aWQgdG8gYWN0aXZlIGRldmljZXMgKi8KLQlpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKGliX25hbWUpOwomIzQzOwlpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKG5ldCwgaWJfbmFtZSk7CiAJaWYgKGliX2RldikgewogCQlpYmRldl9hcHBsaWVkID0gc21jX3BuZXRfYXBwbHlfaWIoaWJfZGV2LCBpYl9wb3J0LCBwbmV0X25hbWUpOwogCQlpZiAoaWJkZXZfYXBwbGllZCkKQEAgLTUxOCw3ICYjNDM7NTIzLDcgQEAgc3RhdGljIGludCBzbWNfcG5ldF9lbnRlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10pCiAJCQlpZiAoaWJwb3J0ICZsdDsgMSB8fCBpYnBvcnQgJmd0OyBTTUNfTUFYX1BPUlRTKQogCQkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJcmMgPSBzbWNfcG5ldF9hZGRfaWIocG5ldHRhYmxlLCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTsKJiM0MzsJCXJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgbmV0LCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTsKIAkJaWYgKCFyYykKIAkJCW5ld19pYmRldiA9IHRydWU7CiAJCWVsc2UgaWYgKHJjICE9IC1FRVhJU1QpCkBAIC0xMTcwLDYgJiM0MzsxMTc1LDkgQEAgaW50IHNtY19wbmV0aWRfYnlfdGFibGVfaWIoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYl9wb3J0KQogCXN0cnVjdCBzbWNfbmV0ICpzbjsKIAlpbnQgcmMgPSAtRU5PRU5UOwogCiYjNDM7CWlmICghcmRtYV9kZXZfYWNjZXNzX25ldG5zKHNtY2liZGV2LSZndDtpYmRldiwgJmFtcDtpbml0X25ldCkpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKIAkvKiBnZXQgcG5ldHRhYmxlIGZvciBpbml0IG5hbWVzcGFjZSAqLwogCXNuID0gbmV0X2dlbmVyaWMoJmFtcDtpbml0X25ldCwgc21jX25ldF9pZCk7CiAJcG5ldHRhYmxlID0gJmFtcDtzbi0mZ3Q7cG5ldHRhYmxlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUKaW5kZXggMDdhZjdmMTVjMWJmNzQuLmE5MWMxNGM0NTAwNmUzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUKQEAgLTMsNiAmIzQzOzMsNyBAQCBURVNUX1BST0dTIDo9IHJ4ZV9ycGluZ19iZXR3ZWVuX25ldG5zLnNoIFwKIAkJcnhlX2lwdjYuc2ggXAogCQlyeGVfc29ja2V0X3dpdGhfbmV0bnMuc2ggXAogCQlyeGVfdGVzdF9ORVRERVZfVU5SRUdJU1RFUi5zaCBcCi0JCXJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2gKJiM0MzsJCXJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2ggXAomIzQzOwkJcnhlX25ldG5zX25hbWVzLnNoCiAKIGluY2x1ZGUgLi4vbGliLm1rCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnCmluZGV4IDRmZmI4MTRlMjUzYmJkLi5lMWZmNTRlYzBmNTc5MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWcKQEAgLTEsMyAmIzQzOzEsNSBAQAogQ09ORklHX1RVTgogQ09ORklHX1ZFVEgKJiM0MztDT05GSUdfRFVNTVkKJiM0MztDT05GSUdfTkVUX05TCiBDT05GSUdfUkRNQV9SWEUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmE0ZmFiZjg2YmRmNzllCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2gKQEAgLTAsMCAmIzQzOzEsMjgyIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgRXhlcmNpc2UgUkRNQSBkZXZpY2UgbmFtZSBoYW5kbGluZyBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLgomIzQzOwomIzQzO3NvdXJjZSAmIzM0OyQoZGlybmFtZSAmIzM0OyQwJiMzNDspLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2gmIzM0OwomIzQzOwomIzQzO05BTUVfUFJFRklYPSYjMzQ7cnhlX25ldG5zX25hbWVzXyQkJiMzNDsKJiM0MztORVRERVZfUFJFRklYPSYjMzQ7cnhuJCQmIzM0OwomIzQzO05TMT0mIzM0OyR7TkFNRV9QUkVGSVh9bnMxJiMzNDsKJiM0MztOUzI9JiMzNDske05BTUVfUFJFRklYfW5zMiYjMzQ7CiYjNDM7UlhFX0E9JiMzNDske05BTUVfUFJFRklYfXJ4ZV9hJiMzNDsKJiM0MztSWEVfQj0mIzM0OyR7TkFNRV9QUkVGSVh9cnhlX2ImIzM0OwomIzQzO1JYRV9TQU1FPSYjMzQ7JHtOQU1FX1BSRUZJWH1yeGVfc2FtZSYjMzQ7CiYjNDM7UlhFX05FVz0mIzM0OyR7TkFNRV9QUkVGSVh9cnhlX25ldyYjMzQ7CiYjNDM7RFVNTVlfQT0mIzM0OyR7TkVUREVWX1BSRUZJWH1hJiMzNDsKJiM0MztEVU1NWV9CPSYjMzQ7JHtORVRERVZfUFJFRklYfWImIzM0OwomIzQzO09MRF9NT0RFPSYjMzQ7JiMzNDsKJiM0MztNT0RFX0NIQU5HRUQ9MAomIzQzO01PRFM9KCYjMzQ7ZHVtbXkmIzM0OyAmIzM0O3JkbWFfcnhlJiMzNDspCiYjNDM7VEVTVF9TQU1FX05BTUVTPSYjMzQ7c2FtZSBSRE1BIGRldmljZSBuYW1lIGNhbiBleGlzdCBpbiB0d28gbmV0IG5hbWVzcGFjZXMmIzM0OwomIzQzO1RFU1RfTU9WRV9DT05GTElDVD0mIzM0O21vdmUgd2l0aG91dCByZW5hbWUgZmFpbHMgb24gZGVzdGluYXRpb24gbmFtZSBjb25mbGljdCYjMzQ7CiYjNDM7VEVTVF9NT1ZFX1JFTkFNRT0mIzM0O21vdmUgdGhlbiByZW5hbWUgc3VjY2VlZHMmIzM0OwomIzQzO1RFU1RfQ09NQklORURfTU9WRV9SRU5BTUU9JiMzNDttb3ZlIHdpdGggcmVxdWVzdGVkIGRlc3RpbmF0aW9uIG5hbWUgc3VjY2VlZHMmIzM0OwomIzQzO1RFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FPSYjMzQ7c2FtZS1uZXRucyByZW5hbWUgcmVqZWN0cyBkdXBsaWNhdGUgbmFtZSYjMzQ7CiYjNDM7VEVTVF9URUFSRE9XTl9SRVRVUk49JiMzNDtuZXRucyBkZWxldGUgcmV0dXJucyBkZXZpY2UgdG8gaW5pdF9uZXQgYW5kIHJlbmFtZXMgb24gY29uZmxpY3QmIzM0OwomIzQzOwomIzQzO2tzZnRfc2tpcCgpCiYjNDM7ewomIzQzOwlrdGFwX3NraXBfYWxsICYjMzQ7JComIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2ZhaWwoKQomIzQzO3sKJiM0MzsJa3RhcF9leGl0X2ZhaWxfbXNnICYjMzQ7JComIzM0OwomIzQzO30KJiM0MzsKJiM0MztuZWVkX2NtZCgpCiYjNDM7ewomIzQzOwljb21tYW5kIC12ICYjMzQ7JDEmIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxIHx8IGtzZnRfc2tpcCAmIzM0O21pc3NpbmcgY29tbWFuZDogJDEmIzM0OwomIzQzO30KJiM0MzsKJiM0MztyZG1hX25zKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSQxCiYjNDM7CiYjNDM7CXNoaWZ0CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMmIzM0OyByZG1hICYjMzQ7JEAmIzM0OwomIzQzO30KJiM0MzsKJiM0MztyZG1hX2Rldl9leGlzdHMoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JDEKJiM0MzsJbG9jYWwgZGV2PSQyCiYjNDM7CiYjNDM7CWlmIFsgLW4gJiMzNDskbnMmIzM0OyBdOyB0aGVuCiYjNDM7CQlyZG1hX25zICYjMzQ7JG5zJiMzNDsgZGV2IHNob3cgJiMzNDskZGV2JiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MQomIzQzOwllbHNlCiYjNDM7CQlyZG1hIGRldiBzaG93ICYjMzQ7JGRldiYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7YWRkX2R1bW15KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5ldGRldj0kMQomIzQzOwomIzQzOwlpcCBsaW5rIGFkZCAmIzM0OyRuZXRkZXYmIzM0OyB0eXBlIGR1bW15IHx8IHJldHVybiAxCiYjNDM7CWlwIGxpbmsgc2V0ICYjMzQ7JG5ldGRldiYjMzQ7IHVwIHx8IHJldHVybiAxCiYjNDM7fQomIzQzOwomIzQzO2FkZF9yeGUoKQomIzQzO3sKJiM0MzsJbG9jYWwgZGV2PSQxCiYjNDM7CWxvY2FsIG5ldGRldj0kMgomIzQzOwomIzQzOwlyZG1hIGxpbmsgYWRkICYjMzQ7JGRldiYjMzQ7IHR5cGUgcnhlIG5ldGRldiAmIzM0OyRuZXRkZXYmIzM0OwomIzQzO30KJiM0MzsKJiM0MztyZG1hX2Rldl9vbl9uZXRkZXYoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmV0ZGV2PSQxCiYjNDM7CiYjNDM7CXJkbWEgbGluayBzaG93IDImZ3Q7L2Rldi9udWxsIHwgYXdrIC12IHdhbnQ9JiMzNDskbmV0ZGV2JiMzNDsgJiMzOTsKJiM0MzsJCXsKJiM0MzsJCQlmb3IgKGkgPSAxOyBpICZsdDsgTkY7IGkmIzQzOyYjNDM7KQomIzQzOwkJCQlpZiAoJGkgPT0gJiMzNDtuZXRkZXYmIzM0OyAmYW1wOyZhbXA7ICQoaSAmIzQzOyAxKSA9PSB3YW50KSB7CiYjNDM7CQkJCQlkZXYgPSAkMgomIzQzOwkJCQkJc3ViKC9cLy4qLywgJiMzNDsmIzM0OywgZGV2KQomIzQzOwkJCQkJcHJpbnQgZGV2CiYjNDM7CQkJCQlleGl0CiYjNDM7CQkJCX0KJiM0MzsJCX0mIzM5OwomIzQzO30KJiM0MzsKJiM0Mzt3YWl0X3JkbWFfZGV2X29uX25ldGRldigpCiYjNDM7ewomIzQzOwlsb2NhbCBuZXRkZXY9JDEKJiM0MzsJbG9jYWwgZGV2CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQlkZXY9JChyZG1hX2Rldl9vbl9uZXRkZXYgJiMzNDskbmV0ZGV2JiMzNDspCiYjNDM7CQlpZiBbIC1uICYjMzQ7JGRldiYjMzQ7IF07IHRoZW4KJiM0MzsJCQllY2hvICYjMzQ7JGRldiYjMzQ7CiYjNDM7CQkJcmV0dXJuIDAKJiM0MzsJCWZpCiYjNDM7CQlzbGVlcCAwLjEKJiM0MzsJZG9uZQomIzQzOwomIzQzOwlyZXR1cm4gMQomIzQzO30KJiM0MzsKJiM0MztzZXR1cF9kZXZzKCkKJiM0Mzt7CiYjNDM7CWNsZWFudXBfZGV2cwomIzQzOwomIzQzOwlhZGRfZHVtbXkgJiMzNDskRFVNTVlfQSYjMzQ7IHx8IHJldHVybiAxCiYjNDM7CWFkZF9kdW1teSAmIzM0OyREVU1NWV9CJiMzNDsgfHwgcmV0dXJuIDEKJiM0MzsKJiM0MzsJYWRkX3J4ZSAmIzM0OyRSWEVfQSYjMzQ7ICYjMzQ7JERVTU1ZX0EmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlhZGRfcnhlICYjMzQ7JFJYRV9CJiMzNDsgJiMzNDskRFVNTVlfQiYjMzQ7IHx8IHJldHVybiAxCiYjNDM7fQomIzQzOwomIzQzO2NsZWFudXBfZGV2cygpCiYjNDM7ewomIzQzOwlpcCBsaW5rIGRlbCAmIzM0OyREVU1NWV9BJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJaXAgbGluayBkZWwgJiMzNDskRFVNTVlfQiYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7fQomIzQzOwomIzQzO3NldHVwKCkKJiM0Mzt7CiYjNDM7CU9MRF9NT0RFPSQocmRtYSBzeXN0ZW0gc2hvdyAyJmd0Oy9kZXYvbnVsbCB8CiYjNDM7CQkgICBzZWQgLW4gJiMzOTtzLy4qbmV0bnMgXChbXiBdKlwpLiovXDEvcCYjMzk7KQomIzQzOwlbIC1uICYjMzQ7JE9MRF9NT0RFJiMzNDsgXSB8fCBrc2Z0X3NraXAgJiMzNDtmYWlsZWQgdG8gcmVhZCBSRE1BIG5ldG5zIG1vZGUmIzM0OwomIzQzOwomIzQzOwlyZG1hIHN5c3RlbSBzZXQgbmV0bnMgZXhjbHVzaXZlICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgfHwKJiM0MzsJCWtzZnRfc2tpcCAmIzM0O3JkbWEgbmV0bnMgZXhjbHVzaXZlIG1vZGUgaXMgbm90IHN1cHBvcnRlZCYjMzQ7CiYjNDM7CU1PREVfQ0hBTkdFRD0xCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGFkZCAmIzM0OyROUzEmIzM0OyB8fCByZXR1cm4gMQomIzQzOwlpcCBuZXRucyBhZGQgJiMzNDskTlMyJiMzNDsgfHwgcmV0dXJuIDEKJiM0Mzt9CiYjNDM7CiYjNDM7Y2xlYW51cCgpCiYjNDM7ewomIzQzOwljbGVhbnVwX2RldnMKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZGVsICYjMzQ7JE5TMSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWlwIG5ldG5zIGRlbCAmIzM0OyROUzImIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwomIzQzOwlpZiBbICYjMzQ7JE1PREVfQ0hBTkdFRCYjMzQ7IC1lcSAxIF07IHRoZW4KJiM0MzsJCXJkbWEgc3lzdGVtIHNldCBuZXRucyAmIzM0OyRPTERfTU9ERSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWZvciBtIGluICYjMzQ7JHtNT0RTW0BdfSYjMzQ7OyBkbwomIzQzOwkJbW9kcHJvYmUgLXIgJiMzNDskbSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7cmRtYV9zdXBwb3J0c19jb21iaW5lZF9tb3ZlX3JlbmFtZSgpCiYjNDM7ewomIzQzOwlyZG1hIGRldiBoZWxwIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtRXEgJiMzOTtuZXRucyAuKm5hbWV8bmFtZSAuKm5ldG5zJiMzOTsKJiM0Mzt9CiYjNDM7CiYjNDM7WyAmIzM0OyQoaWQgLXUpJiMzNDsgLWVxIDAgXSB8fCBrc2Z0X3NraXAgJiMzNDttdXN0IGJlIHJ1biBhcyByb290JiMzNDsKJiM0MztuZWVkX2NtZCBpcAomIzQzO25lZWRfY21kIHJkbWEKJiM0MztuZWVkX2NtZCBtb2Rwcm9iZQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7Zm9yIG0gaW4gJiMzNDske01PRFNbQF19JiMzNDs7IGRvCiYjNDM7CW1vZGluZm8gJiMzNDskbSYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgfHwga3NmdF9za2lwICYjMzQ7bW9kdWxlICRtIG5vdCBmb3VuZCYjMzQ7CiYjNDM7CW1vZHByb2JlICYjMzQ7JG0mIzM0OyB8fCBmYWlsICYjMzQ7ZmFpbGVkIHRvIGxvYWQgJG0mIzM0OwomIzQzO2RvbmUKJiM0MzsKJiM0MztzZXR1cCB8fCBmYWlsICYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBuZXQgbmFtZXNwYWNlcyYjMzQ7CiYjNDM7CiYjNDM7a3RhcF9wcmludF9oZWFkZXIKJiM0MztrdGFwX3NldF9wbGFuIDYKJiM0MzsKJiM0MztpZiBzZXR1cF9kZXZzICZhbXA7JmFtcDsKJiM0MzsgICByZG1hIGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuZXRucyAmIzM0OyROUzEmIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYV9ucyAmIzM0OyROUzEmIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsgICByZG1hIGRldiBzZXQgJiMzNDskUlhFX0ImIzM0OyBuZXRucyAmIzM0OyROUzImIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYV9ucyAmIzM0OyROUzImIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsgICByZG1hX2Rldl9leGlzdHMgJiMzNDskTlMxJiMzNDsgJiMzNDskUlhFX1NBTUUmIzM0OyAmYW1wOyZhbXA7CiYjNDM7ICAgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JE5TMiYjMzQ7ICYjMzQ7JFJYRV9TQU1FJiMzNDs7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X3Bhc3MgJiMzNDskVEVTVF9TQU1FX05BTUVTJiMzNDsKJiM0MztlbHNlCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfU0FNRV9OQU1FUyYjMzQ7CiYjNDM7ZmkKJiM0MztjbGVhbnVwX2RldnMKJiM0MzsKJiM0MztpZiAhIHNldHVwX2RldnMgfHwKJiM0MzsgICAhIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQSYjMzQ7IG5ldG5zICYjMzQ7JE5TMSYjMzQ7IHx8CiYjNDM7ICAgISByZG1hX25zICYjMzQ7JE5TMSYjMzQ7IGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuYW1lICYjMzQ7JFJYRV9TQU1FJiMzNDsgfHwKJiM0MzsgICAhIHJkbWEgZGV2IHNldCAmIzM0OyRSWEVfQiYjMzQ7IG5ldG5zICYjMzQ7JE5TMiYjMzQ7IHx8CiYjNDM7ICAgISByZG1hX25zICYjMzQ7JE5TMiYjMzQ7IGRldiBzZXQgJiMzNDskUlhFX0ImIzM0OyBuYW1lICYjMzQ7JFJYRV9TQU1FJiMzNDs7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUJiMzNDsKJiM0MztlbGlmIHJkbWFfbnMgJiMzNDskTlMxJiMzNDsgZGV2IHNldCAmIzM0OyRSWEVfU0FNRSYjMzQ7IG5ldG5zICYjMzQ7JE5TMiYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzE7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9NT1ZFX0NPTkZMSUNUJiMzNDsKJiM0MztlbGlmIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyROUzEmIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsgICAgIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyROUzImIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7OyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7JFRFU1RfTU9WRV9DT05GTElDVCYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX01PVkVfQ09ORkxJQ1QmIzM0OwomIzQzO2ZpCiYjNDM7Y2xlYW51cF9kZXZzCiYjNDM7CiYjNDM7aWYgISBzZXR1cF9kZXZzOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfTU9WRV9SRU5BTUUmIzM0OwomIzQzO2VsaWYgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmV0bnMgJiMzNDskTlMyJiMzNDsgJmFtcDsmYW1wOwomIzQzOyAgICAgcmRtYV9ucyAmIzM0OyROUzImIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9BJiMzNDsgbmFtZSAmIzM0OyRSWEVfTkVXJiMzNDs7IHRoZW4KJiM0MzsJaWYgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JE5TMiYjMzQ7ICYjMzQ7JFJYRV9ORVcmIzM0OyAmYW1wOyZhbXA7CiYjNDM7CSAgICEgcmRtYV9kZXZfZXhpc3RzICYjMzQ7JiMzNDsgJiMzNDskUlhFX0EmIzM0OzsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDskVEVTVF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfTU9WRV9SRU5BTUUmIzM0OwomIzQzOwlmaQomIzQzO2Vsc2UKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7ZmkKJiM0MztjbGVhbnVwX2RldnMKJiM0MzsKJiM0MztpZiAhIHJkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWU7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X3NraXAgJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7ZWxpZiAhIHNldHVwX2RldnM7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7ZWxpZiByZG1hIGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuZXRucyAmIzM0OyROUzImIzM0OyBuYW1lICYjMzQ7JFJYRV9ORVcmIzM0OzsgdGhlbgomIzQzOwlpZiByZG1hX2Rldl9leGlzdHMgJiMzNDskTlMyJiMzNDsgJiMzNDskUlhFX05FVyYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsJICAgISByZG1hX2Rldl9leGlzdHMgJiMzNDsmIzM0OyAmIzM0OyRSWEVfQSYjMzQ7OyB0aGVuCiYjNDM7CQlrdGFwX3Rlc3RfcGFzcyAmIzM0OyRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FJiMzNDsKJiM0MzsJZWxzZQomIzQzOwkJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRSYjMzQ7CiYjNDM7CWZpCiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FJiMzNDsKJiM0MztmaQomIzQzO2NsZWFudXBfZGV2cwomIzQzOwomIzQzO2lmICEgc2V0dXBfZGV2czsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRSYjMzQ7CiYjNDM7ZWxpZiByZG1hIGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuYW1lICYjMzQ7JFJYRV9TQU1FJiMzNDsgJmFtcDsmYW1wOwomIzQzOyAgICAgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmFtZSAmIzM0OyRSWEVfTkVXJiMzNDs7IHRoZW4KJiM0MzsJaWYgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9TQU1FJiMzNDsgbmFtZSAmIzM0OyRSWEVfTkVXJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUUmIzM0OwomIzQzOwllbGlmIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyYjMzQ7ICYjMzQ7JFJYRV9TQU1FJiMzNDsgJmFtcDsmYW1wOwomIzQzOwkgICAgIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyYjMzQ7ICYjMzQ7JFJYRV9ORVcmIzM0OzsgdGhlbgomIzQzOwkJa3RhcF90ZXN0X3Bhc3MgJiMzNDskVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUUmIzM0OwomIzQzOwllbHNlCiYjNDM7CQlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRSYjMzQ7CiYjNDM7CWZpCiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0OyRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRSYjMzQ7CiYjNDM7ZmkKJiM0MztjbGVhbnVwX2RldnMKJiM0MzsKJiM0MztpZiAhIHNldHVwX2RldnM7IHRoZW4KJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDskVEVTVF9URUFSRE9XTl9SRVRVUk4mIzM0OwomIzQzO2VsaWYgISByZG1hIGRldiBzZXQgJiMzNDskUlhFX0EmIzM0OyBuYW1lICYjMzQ7JFJYRV9TQU1FJiMzNDsgfHwKJiM0MzsgICAgICEgcmRtYSBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmV0bnMgJiMzNDskTlMyJiMzNDsgfHwKJiM0MzsgICAgICEgcmRtYV9ucyAmIzM0OyROUzImIzM0OyBkZXYgc2V0ICYjMzQ7JFJYRV9CJiMzNDsgbmFtZSAmIzM0OyRSWEVfU0FNRSYjMzQ7IHx8CiYjNDM7ICAgICAhIHJkbWFfZGV2X2V4aXN0cyAmIzM0OyROUzImIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7OyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfVEVBUkRPV05fUkVUVVJOJiMzNDsKJiM0MztlbHNlCiYjNDM7CWlwIG5ldG5zIGRlbCAmIzM0OyROUzImIzM0OwomIzQzOwlyZXR1cm5lZD0kKHdhaXRfcmRtYV9kZXZfb25fbmV0ZGV2ICYjMzQ7JERVTU1ZX0ImIzM0OykKJiM0MzsJa3RhcF9wcmludF9tc2cgJiMzNDtkZXZpY2UgcmV0dXJuZWQgdG8gaW5pdF9uZXQgYXMgJiMzOTske3JldHVybmVkOi0mbHQ7bWlzc2luZyZndDt9JiMzOTsmIzM0OwomIzQzOwlpZiByZG1hX2Rldl9leGlzdHMgJiMzNDsmIzM0OyAmIzM0OyRSWEVfU0FNRSYjMzQ7ICZhbXA7JmFtcDsKJiM0MzsJICAgWyAtbiAmIzM0OyRyZXR1cm5lZCYjMzQ7IF0gJmFtcDsmYW1wOwomIzQzOwkgICBbICYjMzQ7JHJldHVybmVkJiMzNDsgIT0gJiMzNDskUlhFX1NBTUUmIzM0OyBdICZhbXA7JmFtcDsKJiM0MzsJICAgWyAmIzM0OyR7cmV0dXJuZWQjaWJkZXZ9JiMzNDsgIT0gJiMzNDskcmV0dXJuZWQmIzM0OyBdOyB0aGVuCiYjNDM7CQlrdGFwX3Rlc3RfcGFzcyAmIzM0OyRURVNUX1RFQVJET1dOX1JFVFVSTiYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWt0YXBfdGVzdF9mYWlsICYjMzQ7JFRFU1RfVEVBUkRPV05fUkVUVVJOJiMzNDsKJiM0MzsJZmkKJiM0MztmaQomIzQzO2NsZWFudXBfZGV2cwomIzQzOwomIzQzO2t0YXBfZmluaXNoZWQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJETUEgRGV2aWNlIE5hbWVzcGFjZSBJc29sYXRpb246IEluaXRpYWwgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRhcmdldGluZyB0aGUgUkRNQSBzdWJzeXN0ZW0uIFRoZSBwcmltYXJ5IGdvYWwgc2VlbXMgdG8gYmUgbmV0d29yayBuYW1lc3BhY2UgaXNvbGF0aW9uIGZvciBSRE1BIGRldmljZSBuYW1lcyDigJMgYSBjcnVjaWFsIGNoYW5nZSBpZiB3ZSB3YW50IHRvIHZpcnR1YWxpemUgdGhlc2UgcmVzb3VyY2VzIHByb3Blcmx5LiBUaGUgZGlmZiB0b3VjaGVzIGEgcHJldHR5IHdpZGUgcmFuZ2Ugb2YgZmlsZXM6IGBkZXZpY2UuY2AsIGBjZ3JvdXAuY2AsIGBubGRldi5jYCwgYHJkbWEuY2Ag4oCTIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIGZlYXR1cmUuIEJ1dCBob2xkIG9uLCBpdCBhbHNvIGRpZ3MgaW50byBgcnhlX21tYXAuY2AgYW5kIGByeGVfdmVyYnMuY2AsIHdoaWNoIG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLgoKTGV0JiMzOTtzIHpvb20gaW4gb24gYHJ4ZV9tbWFwLmNgLiBIbW0sIGl0JiMzOTtzIG1lc3Npbmcgd2l0aCB0aGUgYHZtX29wZXJhdGlvbnNfc3RydWN0YCAoYHJ4ZV92bV9vcHNgKS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSByZW1vdmluZyB0aGUgYG9wZW5gIGFuZCBgY2xvc2VgIGNhbGxiYWNrcyAoYHJ4ZV92bWFfb3BlbmAsIGByeGVfdm1hX2Nsb3NlYCkgYW5kIGRpcmVjdGx5IHVzaW5nIGByZW1hcF92bWFsbG9jX3JhbmdlYC4gVGhhdCYjMzk7cy4uLiBhIGxpdHRsZSBjb25jZXJuaW5nLiBgcmVtYXBfdm1hbGxvY19yYW5nZWAgZG9lc24mIzM5O3QgaW5oZXJlbnRseSBtYW5hZ2UgcmVmY291bnRzLCBzbyB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmU/IFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBgcnhlX3ZtYV9vcGVuYCBhbmQgYHJ4ZV92bWFfY2xvc2VgIGluY3JlbWVudGluZyBhbmQgZGVjcmVtZW50aW5nIHRoZSByZWZjb3VudC4gTm93LCBpdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBqdXN0IGltbWVkaWF0ZWx5IHJlbGVhc2VzIHRoZSBga3JlZmAgYWZ0ZXIgdGhlIGByZW1hcF92bWFsbG9jX3JhbmdlYCBjYWxsLiBJcyB0aGlzIGEgYnVnIGZpeD8gQSByZWZhY3RvcmluZz8KCk9rYXksIHRoZSBjb2RlIG5vdyBkb2VzIHRoaXM6IGNhbGwgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgLCB0aGVuIGltbWVkaWF0ZWx5IGBrcmVmX3B1dGAuIFdoeSBpcyB0aGUgYHJ4ZV92bV9vcHNgIHN0cnVjdHVyZSBiZWluZyByZW1vdmVkPyBUaGF0IGhhcyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgVk1BIGNoYW5nZXMgYW5kIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSB3b3JrLiBUaGUgY29tbWl0IG1lc3NhZ2UgZG9lc24mIzM5O3QgaGVscC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHJ4ZV92ZXJicy5jYC4gQWhhISBJdCYjMzk7cyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0YC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgYWRkZWQgdG8gYHJ4ZV9kZXZfb3BzYC4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCBjaGVja3MgZm9yIHRoaXMgY2FsbGJhY2sgdG8gYmUgcHJlc2VudCBiZWZvcmUgbW92aW5nIGEgZGV2aWNlIGJldHdlZW4gbmV0IG5hbWVzcGFjZXMuIFNvLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBkaXNhc3NvY2lhdGVfdWNvbnRleHRgIG1lYW5zIFJYRSBkZXZpY2VzIGNhbiBub3cgYmUgbW92ZWQgYmV0d2VlbiBuZXR3b3JrIG5hbWVzcGFjZXMuCgpUaGUgY29yZSBxdWVzdGlvbiBub3cgaXMsIHdoYXQmIzM5O3MgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgYGRpc2Fzc29jaWF0ZV91Y29udGV4dGAgYWRkaXRpb24gYW5kIHRoZSBjaGFuZ2VzIGluIGByeGVfbW1hcGA/IFRoZSBuZXcgYGRpc2Fzc29jaWF0ZV91Y29udGV4dGAgZnVuY3Rpb24gaXMgZW1wdHkuIElmIGl0JiMzOTtzIGNhbGxlZCwgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gaGFuZGxlIHVubWFwcGluZyBvciBvdGhlcndpc2UgaGFuZGxpbmcgdGhlIHVjb250ZXh0LiBCdXQgaW4gdGhpcyBjYXNlIGl0IGRvZXNuJiMzOTt0LgoKQmFjayB0byB0aGUgYHJ4ZV9tbWFwYCBjaGFuZ2VzOiBpZiB0aGV5JiMzOTtyZSByZW1vdmluZyBgcnhlX3ZtX29wc2AsIHRoZW4gdGhlIFZNQSBpcyAqbm8gbG9uZ2VyKiByZXNwb25zaWJsZSBmb3IgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgYGlwYCBkYXRhLiBUaGF0JiMzOTtzIGEgYmlnIGRlYWwuIEluc3RlYWQsIHRoZSBwYXRjaCBpbW1lZGlhdGVseSByZWxlYXNlcyBgaXBgIGFmdGVyIHRoZSBjYWxsIHRvIGByZW1hcF92bWFsbG9jX3JhbmdlYC4gV2hhdCBrZWVwcyBgaXBgIGFsaXZlIGFmdGVyIHRoYXQ/IFNvbWV0aGluZyAqbXVzdCogc3RpbGwgaG9sZCBhIHJlZmVyZW5jZS4gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBrZXJuZWwgc291cmNlIGZvciBgcnhlX21tYXAuY2AgaW4gZGV0YWlsIHRvIHRyYWNrIGRvd24gd2hhdCBkb2VzIHRoYXQgbm93LiBUaGlzIHJlZmNvdW50aW5nIGNoYW5nZSBoYXMgbWUgd29ycmllZCBhYm91dCBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeGVfbW1hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGU9ND1yZG1hX3J4ZS15IDo9IFxcXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9NYWtlZmlsZS0xOS1cdHJ4ZV9vcGNvZGUubyBcXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9NYWtlZmlsZToyMDpcdHJ4ZV9tbWFwLm8gXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGUtMjEtXHRyeGVfaWNyYy5vIFxcXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmg9Mzc9dm9pZCByeGVfY2xlYW51cF9tY2coc3RydWN0IGtyZWYgKmtyZWYpO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtMzgtXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDozOTovKiByeGVfbW1hcC5jICovXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDo0MDpzdHJ1Y3QgcnhlX21tYXBfaW5mbyB7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC00MS1cdHN0cnVjdCBsaXN0X2hlYWRcdHBlbmRpbmdfbW1hcHM7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtNDgtXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDo0OTp2b2lkIHJ4ZV9tbWFwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZik7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC01MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX2xvYy5oOjUxOnN0cnVjdCByeGVfbW1hcF9pbmZvICpyeGVfY3JlYXRlX21tYXBfaW5mbyhzdHJ1Y3QgcnhlX2RldiAqZGV2LCB1MzIgc2l6ZSxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX2xvYy5oLTUyLVx0XHRcdFx0XHQgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhLCB2b2lkICpvYmopO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtNTMtXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDo1NDppbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC01NS1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMTQtXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmM6MTU6dm9pZCByeGVfbW1hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMTYte1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjE3Olx0c3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwID0gY29udGFpbmVyX29mKHJlZixcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzoxODpcdFx0XHRcdFx0c3RydWN0IHJ4ZV9tbWFwX2luZm8sIHJlZik7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMTktXHRzdHJ1Y3QgcnhlX2RldiAqcnhlID0gdG9fcmRldihpcC1cdTAwM2Vjb250ZXh0LVx1MDAzZWRldmljZSk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTMyLS8qKlxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjMzOiAqIHJ4ZV9tbWFwIC0gY3JlYXRlIGEgbmV3IG1tYXAgcmVnaW9uXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMzQtICogQGNvbnRleHQ6IHRoZSBJQiB1c2VyIGNvbnRleHQgb2YgdGhlIHByb2Nlc3MgbWFraW5nIHRoZSBtbWFwKCkgY2FsbFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0zNy0gKi9cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzozODppbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0zOS17XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTQyLVx0dW5zaWduZWQgbG9uZyBzaXplID0gdm1hLVx1MDAzZXZtX2VuZCAtIHZtYS1cdTAwM2V2bV9zdGFydDtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzo0MzpcdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCwgKnBwO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTQ0LVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtODUtXHRyZXQgPSByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgaXAtXHUwMDNlb2JqLCAwKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzo4NjpcdGtyZWZfcHV0KFx1MDAyNmlwLVx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSk7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtODctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy05NC0vKlxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjk1OiAqIEFsbG9jYXRlIGluZm9ybWF0aW9uIGZvciByeGVfbW1hcFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTk2LSAqL1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjk3OnN0cnVjdCByeGVfbW1hcF9pbmZvICpyeGVfY3JlYXRlX21tYXBfaW5mbyhzdHJ1Y3QgcnhlX2RldiAqcnhlLCB1MzIgc2l6ZSxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy05OC1cdFx0XHRcdFx0ICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgdm9pZCAqb2JqKVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTk5LXtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzoxMDA6XHRzdHJ1Y3QgcnhlX21tYXBfaW5mbyAqaXA7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMTAxLVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmM9MTI9aW50IGRvX21tYXBfaW5mbyhzdHJ1Y3QgcnhlX2RldiAqcnhlLCBzdHJ1Y3QgbW1pbmZvIF9fdXNlciAqb3V0YnVmLFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuYy0xMy1cdFx0IHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsIHN0cnVjdCByeGVfcXVldWVfYnVmICpidWYsXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jOjE0Olx0XHQgc2l6ZV90IGJ1Zl9zaXplLCBzdHJ1Y3QgcnhlX21tYXBfaW5mbyAqKmlwX3ApXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jLTE1LXtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmMtMTYtXHRpbnQgZXJyO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuYzoxNzpcdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IE5VTEw7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jLTE4LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmM9MTkzPXZvaWQgcnhlX3F1ZXVlX2NsZWFudXAoc3RydWN0IHJ4ZV9xdWV1ZSAqcSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jLTE5NS1cdGlmIChxLVx1MDAzZWlwKVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuYzoxOTY6XHRcdGtyZWZfcHV0KFx1MDAyNnEtXHUwMDNlaXAtXHUwMDNlcmVmLCByeGVfbW1hcF9yZWxlYXNlKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmMtMTk3LVx0ZWxzZVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmg9NjI9c3RydWN0IHJ4ZV9xdWV1ZSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaC02NC1cdHN0cnVjdCByeGVfcXVldWVfYnVmXHQqYnVmO1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaDo2NTpcdHN0cnVjdCByeGVfbW1hcF9pbmZvXHQqaXA7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5oLTY2LVx0c2l6ZV90XHRcdFx0YnVmX3NpemU7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaD03OT1pbnQgZG9fbW1hcF9pbmZvKHN0cnVjdCByeGVfZGV2ICpyeGUsIHN0cnVjdCBtbWluZm8gX191c2VyICpvdXRidWYsXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5oLTgwLVx0XHQgc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgc3RydWN0IHJ4ZV9xdWV1ZV9idWYgKmJ1ZixcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmg6ODE6XHRcdCBzaXplX3QgYnVmX3NpemUsIHN0cnVjdCByeGVfbW1hcF9pbmZvICoqaXBfcCk7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5oLTgyLVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmM9MTQ1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGliX2RldmljZV9vcHMgcnhlX2Rldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYy0xNDkxLVx0Lm1hcF9tcl9zZyA9IHJ4ZV9tYXBfbXJfc2csXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jOjE0OTI6XHQubW1hcCA9IHJ4ZV9tbWFwLFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYy0xNDkzLVx0Lm1vZGlmeV9haCA9IHJ4ZV9tb2RpZnlfYWgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcnhlX21tYXAuY2AgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyBpbiBgcnhlX21tYXAuY2AuIFRoZXkmIzM5O3ZlIGdvdCB0aGlzIGNvZGUgYmxvY2s6CgpgYGBjCglyZXQgPSByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgaXAtJmd0O29iaiwgMCk7CglrcmVmX3B1dCgmYW1wO2lwLSZndDtyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpOwoJaWYgKHJldCkKCQlyeGVfZGJnX2RldihyeGUsICYjMzQ7ZXJyICVkIGZyb20gcmVtYXBfdm1hbGxvY19yYW5nZVxuJiMzNDssIHJldCk7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0htbSwgYGtyZWZfcHV0YCBpcyBoYXBwZW5pbmcgdW5jb25kaXRpb25hbGx5IHRoZXJlLiYjMzQ7IFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIGltbWVkaWF0ZWx5IHdvbmRlciwgaXMgYGlwYCBiZWluZyBrZXB0IGFsaXZlIGVsc2V3aGVyZT8gSXQgbG9va3MgbGlrZSB0aGVyZSBzaG91bGQgYmUgYW5vdGhlciByZWZlcmVuY2UgaG9sZGluZyBpdC4gTGV0IG1lIHRoaW5rLi4uIEFoLCByaWdodCwgYHEtJmd0O2lwYCBob2xkcyBhIHJlZmVyZW5jZSEgQW5kLCB5ZXAsIGByeGVfcXVldWVfY2xlYW51cGAgYWxzbyBjYWxscyBga3JlZl9wdXQoJmFtcDtxLSZndDtpcC0mZ3Q7cmVmLCByeGVfbW1hcF9yZWxlYXNlKWAuIFNvLCB0aGUgVk1BICpkb2VzbiYjMzk7dCogbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlLiBUaGF0IG1ha2VzIHNlbnNlLgoKTm93LCB3YWl0IGEgbWludXRlLCBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgd2h5IHRoZSBwYXRjaCByZW1vdmVkIGByeGVfdm1hX29wZW5gIGFuZCBgcnhlX3ZtYV9jbG9zZWAgYWx0b2dldGhlci4gVGhleSB3ZXJlbiYjMzk7dCBqdXN0IHNpbXBsaWZ5aW5nOyB0aGVyZSYjMzk7cyBnb3QgdG8gYmUgYSByZWFzb24uIEFoLCBvZiBjb3Vyc2UhIEl0JiMzOTtzIGJlY2F1c2UgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIHNldHMgYHZtYS0mZ3Q7dm1fb3BzYCB0byBgdm1hbGxvY192bV9vcHNgISBSaWdodCEgVGhhdCBtZWFucy4uLiB0aGUgY29kZSB0aGF0IHVzZWQgdG8gc2V0IGB2bWEtJmd0O3ZtX29wcyA9ICZhbXA7cnhlX3ZtX29wc2AgKndhcyogYmVpbmcgb3ZlcndyaXR0ZW4gYW55d2F5IQoKT2theSwgSSB0aGluayBJJiMzOTt2ZSBnb3QgaXQuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGByZW1hcF92bWFsbG9jX3JhbmdlYCBpbiB0aGUga2VybmVsIHNvdXJjZSwganVzdCB0byBtYWtlIHN1cmUgbXkgbG9naWMgaXMgc29saWQuIFRoaXMgbG9va3MgbGlrZSBhIHJlYXNvbmFibGUgc2ltcGxpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVtYXBfdm1hbGxvY19yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ub21tdS5jPTI4Nj1FWFBPUlRfU1lNQk9MKHZtYWxsb2NfMzJfbm9wcm9mKTtcbi0tXG5tbS9ub21tdS5jLTI5NS0gKiBWTV9VU0VSTUFQIGlzIHNldCBvbiB0aGUgY29ycmVzcG9uZGluZyBWTUEgc28gdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvXG5tbS9ub21tdS5jOjI5NjogKiByZW1hcF92bWFsbG9jX3JhbmdlKCkgYXJlIHBlcm1pc3NpYmxlLlxubW0vbm9tbXUuYy0yOTctICovXG4tLVxubW0vbm9tbXUuYz0xNjA5PUVYUE9SVF9TWU1CT0wodm1faW9tYXBfbWVtb3J5KTtcbm1tL25vbW11LmMtMTYxMC1cbm1tL25vbW11LmM6MTYxMTppbnQgcmVtYXBfdm1hbGxvY19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYWRkcixcbm1tL25vbW11LmMtMTYxMi1cdFx0XHR1bnNpZ25lZCBsb25nIHBnb2ZmKVxuLS1cbm1tL25vbW11LmMtMTYyMy19XG5tbS9ub21tdS5jOjE2MjQ6RVhQT1JUX1NZTUJPTChyZW1hcF92bWFsbG9jX3JhbmdlKTtcbm1tL25vbW11LmMtMTYyNS1cbi0tXG5tbS92bWFsbG9jLmM9NDMxNT12b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS92bWFsbG9jLmMtNDM2OS1cdFx0ICpcbm1tL3ZtYWxsb2MuYzo0MzcwOlx0XHQgKiBTa2lwIFZNX1VTRVJNQVAsIGFzIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCgpIHZhbGlkYXRlc1xubW0vdm1hbGxvYy5jLTQzNzEtXHRcdCAqIG1hcHBpbmcgcmVxdWVzdHMgYWdhaW5zdCB0aGUgdW5jaGFuZ2VkIHZtLVx1MDAzZXNpemU7IGZyZWVpbmdcbi0tXG5tbS92bWFsbG9jLmM9NDY2OD1sb25nIHZyZWFkX2l0ZXIoc3RydWN0IGlvdl9pdGVyICppdGVyLCBjb25zdCBjaGFyICphZGRyLCBzaXplX3QgY291bnQpXG4tLVxubW0vdm1hbGxvYy5jLTQ3ODAtLyoqXG5tbS92bWFsbG9jLmM6NDc4MTogKiByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwgLSBtYXAgdm1hbGxvYyBwYWdlcyB0byB1c2Vyc3BhY2Vcbm1tL3ZtYWxsb2MuYy00NzgyLSAqIEB2bWE6XHRcdHZtYSB0byBjb3ZlclxuLS1cbm1tL3ZtYWxsb2MuYy00Nzk2LSAqL1xubW0vdm1hbGxvYy5jOjQ3OTc6aW50IHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB1YWRkcixcbm1tL3ZtYWxsb2MuYy00Nzk4LVx0XHRcdFx0dm9pZCAqa2FkZHIsIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4tLVxubW0vdm1hbGxvYy5jLTQ4NDMtLyoqXG5tbS92bWFsbG9jLmM6NDg0NDogKiByZW1hcF92bWFsbG9jX3JhbmdlIC0gbWFwIHZtYWxsb2MgcGFnZXMgdG8gdXNlcnNwYWNlXG5tbS92bWFsbG9jLmMtNDg0NS0gKiBAdm1hOlx0XHR2bWEgdG8gY292ZXIgKG1hcCBmdWxsIHJhbmdlIG9mIHZtYSlcbi0tXG5tbS92bWFsbG9jLmMtNDg1Ni0gKi9cbm1tL3ZtYWxsb2MuYzo0ODU3OmludCByZW1hcF92bWFsbG9jX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphZGRyLFxubW0vdm1hbGxvYy5jLTQ4NTgtXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBwZ29mZilcbm1tL3ZtYWxsb2MuYy00ODU5LXtcbm1tL3ZtYWxsb2MuYzo0ODYwOlx0cmV0dXJuIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCxcbm1tL3ZtYWxsb2MuYy00ODYxLVx0XHRcdFx0XHQgICBhZGRyLCBwZ29mZixcbi0tXG5tbS92bWFsbG9jLmMtNDg2My19XG5tbS92bWFsbG9jLmM6NDg2NDpFWFBPUlRfU1lNQk9MKHJlbWFwX3ZtYWxsb2NfcmFuZ2UpO1xubW0vdm1hbGxvYy5jLTQ4NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWxgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGludGVybmFscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGF0IHBhcnRpYWwgcmVtYXBwaW5nIGZ1bmN0aW9uIGZvciBgdm1hbGxvY2AgcmFuZ2VzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsYCBpbiBgbW0vdm1hbGxvYy5jYC4gSSBleHBlY3QgaXQgdG8gaGFuZGxlIHRoZSBudWFuY2VkIG1lY2hhbmljcyBvZiByZW1hcHBpbmcgb25seSBhIHNlY3Rpb24gb2YgYSBgdm1hbGxvY2AgcmVnaW9uLCB3aGljaCwgYXMgd2Uga25vdywgcmVxdWlyZXMgY2FyZWZ1bCBtYW5hZ2VtZW50IG9mIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgKFBURXMpIGludm9sdmVkLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBiYWxhbmNlcyB0aGUgbmVlZCBmb3IgY29udGlndW91cyB2aXJ0dWFsIGFkZHJlc3NlcyB3aXRoIHRoZSBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBvZiBwaHlzaWNhbCBtZW1vcnksIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBUTEIgaW52YWxpZGF0aW9uIHN0cmF0ZWdpZXMuIEkgaG9wZSB0aGVyZSYjMzk7cyBzb21lIGludGVyZXN0aW5nIGludGVycGxheSBiZXR3ZWVuIGBwdGVfb2Zmc2V0X21hcGAsIGBzZXRfcHRlYCwgYW5kIHRoZSBzdXJyb3VuZGluZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGxvY2tpbmcgaXMgY29ycmVjdCwgZ2l2ZW4gdGhhdCBtdWx0aXBsZSBwcm9jZXNzZXMgbWlnaHQgYmUgdG91Y2hpbmcgdGhpcyBjb2RlIGNvbmN1cnJlbnRseS4gSSBhbHNvIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBgcGdwcm90YCBmbGFncywgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IG1lbW9yeSBhdHRyaWJ1dGVzIGxpa2UgY2FjaGluZyBhbmQgd3JpdGUgY29tYmluaW5nLiBUaW1lIHRvIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3OTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDc5NzpcdGludCByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdWFkZHIsXG40Nzk4Olx0XHRcdFx0XHR2b2lkICprYWRkciwgdW5zaWduZWQgbG9uZyBwZ29mZixcbjQ3OTk6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSlcbjQ4MDA6XHR7XG40ODAxOlx0XHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhO1xuNDgwMjpcdFx0dW5zaWduZWQgbG9uZyBvZmY7XG40ODAzOlx0XHR1bnNpZ25lZCBsb25nIGVuZF9pbmRleDtcbjQ4MDQ6XHRcbjQ4MDU6XHRcdGlmIChjaGVja19zaGxfb3ZlcmZsb3cocGdvZmYsIFBBR0VfU0hJRlQsIFx1MDAyNm9mZikpXG40ODA2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDgwNzpcdFxuNDgwODpcdFx0c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7XG40ODA5Olx0XG40ODEwOlx0XHRpZiAoIVBBR0VfQUxJR05FRCh1YWRkcikgfHwgIVBBR0VfQUxJR05FRChrYWRkcikpXG40ODExOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDgxMjpcdFxuNDgxMzpcdFx0YXJlYSA9IGZpbmRfdm1fYXJlYShrYWRkcik7XG40ODE0Olx0XHRpZiAoIWFyZWEpXG40ODE1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDgxNjpcdFxuNDgxNzpcdFx0aWYgKCEoYXJlYS1cdTAwM2VmbGFncyBcdTAwMjYgKFZNX1VTRVJNQVAgfCBWTV9ETUFfQ09IRVJFTlQpKSlcbjQ4MTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40ODE5Olx0XG40ODIwOlx0XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUsIG9mZiwgXHUwMDI2ZW5kX2luZGV4KSB8fFxuNDgyMTpcdFx0ICAgIGVuZF9pbmRleCBcdTAwM2UgZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKSlcbjQ4MjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40ODIzOlx0XHRrYWRkciAmIzQzOz0gb2ZmO1xuNDgyNDpcdFxuNDgyNTpcdFx0ZG8ge1xuNDgyNjpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShrYWRkcik7XG40ODI3Olx0XHRcdGludCByZXQ7XG40ODI4Olx0XG40ODI5Olx0XHRcdHJldCA9IHZtX2luc2VydF9wYWdlKHZtYSwgdWFkZHIsIHBhZ2UpO1xuNDgzMDpcdFx0XHRpZiAocmV0KVxuNDgzMTpcdFx0XHRcdHJldHVybiByZXQ7XG40ODMyOlx0XG40ODMzOlx0XHRcdHVhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG40ODM0Olx0XHRcdGthZGRyICYjNDM7PSBQQUdFX1NJWkU7XG40ODM1Olx0XHRcdHNpemUgLT0gUEFHRV9TSVpFO1xuNDgzNjpcdFx0fSB3aGlsZSAoc2l6ZSBcdTAwM2UgMCk7XG40ODM3Olx0XG40ODM4Olx0XHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xuNDgzOTpcdFxuNDg0MDpcdFx0cmV0dXJuIDA7XG40ODQxOlx0fVxuNDg0MjpcdFxuNDg0MzpcdC8qKlxuNDg0NDpcdCAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2UgLSBtYXAgdm1hbGxvYyBwYWdlcyB0byB1c2Vyc3BhY2VcbjQ4NDU6XHQgKiBAdm1hOlx0XHR2bWEgdG8gY292ZXIgKG1hcCBmdWxsIHJhbmdlIG9mIHZtYSlcbjQ4NDY6XHQgKiBAYWRkcjpcdFx0dm1hbGxvYyBtZW1vcnlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYxOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCBzb21lIHNlZW1pbmdseSB1bnJlbGF0ZWQgY2hhbmdlcyB3aXRoaW4gYHJ4ZV9tbWFwLmNgLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIGByeGVfdm1fb3BzYCBhbmQgdGhlIHVzZSBvZiBgdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBpcGAuIEkgaW5pdGlhbGx5IHRob3VnaHQgdGhpcyBoYWQgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWxgIGZ1bmN0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gQnV0IHRoZW4gSSByZWFsaXplZCB0aGlzIGlzIGp1c3QgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgcmVsYXRlZCB0byBSRE1BIGRldmljZSBuYW1lcyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLgoKVGhlIHByaW1hcnkgZ29hbCBvZiB0aGlzIHBhdGNoIGlzIHRvIGVuYWJsZSBSRE1BIGRldmljZXMgdG8gY29leGlzdCB3aXRoIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMuIFRoaXMgaW52b2x2ZXMgbW9kaWZ5aW5nIGNvcmUgZnVuY3Rpb25zIGluIHRoZSBSRE1BIGFuZCBuZXQgbmFtZXNwYWNlIGxvZ2ljLCBpbmNsdWRpbmcgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCwgYHJkbWFfZGV2X2NoYW5nZV9uZXRuc2AsIGFuZCBgYWxsb2NfbmFtZV9pZGAsIGFuZCBob3cgdGhlc2UgbmFtZXMgYXJlIG1hbmFnZWQuIFRoZSBwYXRjaCBhbHNvIHVwZGF0ZXMgYGNncm91cC9yZG1hLmNgIHRvIGhhbmRsZSBwb3RlbnRpYWxseSBkdXBsaWNhdGUgbmFtZXMsIGxpa2VseSBhcHBlbmRpbmcgYW4gaW5kZXggbGlrZSAmIzM0O2luZGV4PU4mIzM0Oy4KClRoaXMgaXMgd2hlcmUgdGhlIGZ1enppbmcgcG90ZW50aWFsIGxpZXMuIFRoZSBtYWluIGFyZWFzIHRoYXQgYXJlIHZ1bG5lcmFibGUgYXJlOgoKMS4gICoqTmV0bGluayBJbnRlcmZhY2U6KiogVGhlIHBhdGNoIG1vZGlmaWVzIGBubGRldl9zZXRfZG9pdGAgdG8gaGFuZGxlIHRoZSBgUkRNQV9OTERFVl9ORVRfTlNfRkRgIGF0dHJpYnV0ZSB2aWEgbmV0bGluay4gVGhpcyBpcyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgbWVhbmluZyB3ZSBjYW4gdHJpZ2dlciBpdCBhbmQgc2VuZCBwb3RlbnRpYWxseSBjcmFmdGVkIG5ldGxpbmsgbWVzc2FnZXMuCjIuICAqKkNncm91cCBJbnRlcmZhY2U6KiogSXQgYWxzbyB0b3VjaGVzIGByZG1hY2dfcmVzb3VyY2Vfc2V0X21heGAgd2l0aGluIGBrZXJuZWwvY2dyb3VwL3JkbWEuY2AsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwZnMuIE1vZGlmeWluZyBjZ3JvdXAgY29uZmlndXJhdGlvbnMgaXMgYWx3YXlzIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBpbnRlcmVzdGluZyBiZWhhdmlvci4KClRoZXJlZm9yZSwgZnV6emluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBuZXRsaW5rIGFuZCB0aGUgY2dyb3VwIGludGVyZmFjZSByZWxhdGVkIHRvIFJETUEgZGV2aWNlIG5hbWluZyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC4KCkZvY3VzIFN5bWJvbHMgZm9yIEZ1enppbmc6CgoqICAgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YAoqICAgYHJkbWFfZGV2X2NoYW5nZV9uZXRuc2AKKiAgIGByZG1hX2Rldl9waWNrX25ldG5zX25hbWVgCiogICBgbmxkZXZfc2V0X2RvaXRgCiogICBgcmRtYWNnX3Jlc291cmNlX3NldF9tYXhgCiogICBgcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkYAoqICAgYGFsbG9jX25hbWVfaWRgCiogICBgX19hbGxvY19uYW1lX2lkYAoqICAgYHJ4ZV9tbWFwYCAod2hpbGUgdG91Y2hlZCwgdGhpcyBpcyBqdXN0IGEgbWlub3IgcGFydC4gRnV6emluZyBmb2N1c2VkIG9uIHRoaXMgaXMgbGVzcyBsaWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzKQoKVG8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgdGVzdGFibGUsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnM6CgoqICAgYENPTkZJR19DR1JPVVBfUkRNQWAgKGNyaXRpY2FsIGZvciBjZ3JvdXAgaW50ZXJmYWNlKQoqICAgYENPTkZJR19SRE1BX1JYRWAKKiAgIGBDT05GSUdfTkVUX05TYCAoZXNzZW50aWFsIGZvciBuZXRucykKKiAgIGBDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTU2AgKG5lZWRlZCBmb3IgYGliX3V2ZXJic19tbWFwYCwgd2hpY2ggbGVhZHMgdG8gdGhlIGByeGVfbW1hcGApCiogICBgQ09ORklHX0lORklOSUJBTkRgIChjb3JlIFJETUEgc3VwcG9ydCkKCkkgbmVlZCB0byBjb25maXJtIGBDT05GSUdfQ0dST1VQX1JETUFgIGluIGBrZXJuZWwvY2dyb3VwL0tjb25maWdgIHRvIGJlIHN1cmUuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIGZ1bmN0aW9uYWwgZnV6emluZy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBoZXJlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGV4cGxvcmluZyB3aXRoIGEgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0dST1VQX1JETUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTIzND1jb25maWcgQ0dST1VQX1BJRFNcbi0tXG5pbml0L0tjb25maWctMTI0OS1cbmluaXQvS2NvbmZpZzoxMjUwOmNvbmZpZyBDR1JPVVBfUkRNQVxuaW5pdC9LY29uZmlnLTEyNTEtXHRib29sIFwmIzM0O1JETUEgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY3NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgUlhFIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBSWEUgY29uZmlndXJhdGlvbiBpcyBzZXQgY29ycmVjdGx5LiYjMzQ7IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX1JETUFfUlhFYCBpcyBwcm9wZXJseSBkZWZpbmVkLiBOYXR1cmFsbHksIEkga25vdyB0aGF0JiMzOTtzIHRoZSBrZXkgZmxhZyBmb3IgZW5hYmxpbmcgdGhlIFJYRSAoUmVsaWFibGUgZVhwcmVzcykgc29mdHdhcmUgUkRNQSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIEluZmluaUJhbmQgZHJpdmVycy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIGBkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgUlhFIG1vZHVsZSBhcmUgZGVmaW5lZCwgYW5kIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGRldGVybWluaW5nIHdoZXRoZXIgYENPTkZJR19SRE1BX1JYRWAgaXMgZXhwb3NlZCBvciBub3QsIGJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFyY2hpdGVjdHVyYWwgY2FwYWJpbGl0aWVzIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWUsIGFuZCBoZWxwIHRleHQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaXMgc2V0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciBpdCBpcyBzZXQgZGlyZWN0bHkgaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZywgb3IgaWYgaXQgaXMgcHVsbGVkIGluIGFzIGEgZGVmYXVsdCwgb3IgaWYgaXQgaGFzIHNvbWUgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGltcG9ydGFudCBiZWZvcmUgZGlnZ2luZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRE1BX1JYRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnOjI6Y29uZmlnIFJETUFfUlhFXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NvZnR3YXJlIFJETUEgb3ZlciBFdGhlcm5ldCAoUm9DRSkgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTAxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIEluZmluaWJhbmQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSW5maW5pYmFuZC4gTXkgaW50dWl0aW9uIHNheXMgdGhhdCB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvaW5maW5pYmFuZGAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHRvcC1sZXZlbCBkZWZpbml0aW9ucyBmb3IgYSBkcml2ZXImIzM5O3MgY29uZmlndXJhdGlvbiBhcmUgbG9jYXRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0lORklOSUJBTkRgIGlzIGNvcnJlY3RseSBkZWZpbmVkIGFuZCBlbmFibGVkLCBvciBhdCBsZWFzdCB1bmRlcnN0YW5kIGl0cyBzdGF0ZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlbGluZSBmb3Igd2hhdGV2ZXIgdHJvdWJsZXNob290aW5nIG9yIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIHBlcmZvcm0gcmVnYXJkaW5nIEluZmluaWJhbmQuIExldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5GSU5JQkFORCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI6bWVudWNvbmZpZyBJTkZJTklCQU5EXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9MTY9aWYgSU5GSU5JQkFORFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTctXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoxODpjb25maWcgSU5GSU5JQkFORF9VU0VSX01BRFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtJbmZpbmlCYW5kIHVzZXJzcGFjZSBNQUQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTI3LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6Mjg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCB1c2Vyc3BhY2UgYWNjZXNzICh2ZXJicyBhbmQgQ00pXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMzktXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0MDpjb25maWcgSU5GSU5JQkFORF9VU0VSX0FDQ0VTU19DT1JFXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00MS1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ0OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00NS1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjUxOmNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtJbmZpbmlCYW5kIG9uLWRlbWFuZCBwYWdpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTYzLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjQ6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjUtXHRib29sIFwmIzM0O1JETUEvQ01cJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03MS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjcyOmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNfQ09ORklHRlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTczLVx0Ym9vbFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTgwLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6ODE6Y29uZmlnIElORklOSUJBTkRfVklSVF9ETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTgyLVx0ZGVmX2Jvb2wgIUhJR0hNRU1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm5nX3JlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibmdfcmUvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0JOR19SRVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBOZXh0IGdlbmVyYXRpb24gUm9DRSBIQ0Egc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTlhUX1JFXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBOZXR4dHJlbWUgSENBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9DWEdCNFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NoZWxzaW8gVDQvVDUgUkRNQSBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZWZhL0tjb25maWctNi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lZmEvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX0VGQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtBbWF6b24gRWxhc3RpYyBGYWJyaWMgQWRhcHRlciAoRUZBKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfRVJETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbGliYWJhIEVsYXN0aWMgUkRNQSBBZGFwdGVyIChFUkRNQSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9IRkkxXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb3JuZWxpcyBPUFggR2VuMSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9ITlNfSElQMDhcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SGlzaWxpY29uIEhpcDA4IEZhbWlseSBSb0NFIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvS2NvbmZpZy0zLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWc6NDpjb25maWcgSU5GSU5JQkFORF9JT05JQ1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O0FNRCBQZW5zYW5kbyBEU0MgUkRNQS9Sb0NFIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JUkRNQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IFByb3RvY29sIERyaXZlciBmb3IgUkRNQVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX01USENBXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TWVsbGFub3ggSENBIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy05LVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6MTA6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FfREVCVUdcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnLTExLVx0Ym9vbCBcJiMzNDtWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9PQ1JETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RW11bGV4IE9uZSBDb25uZWN0IEhDQSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3FlZHIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3FlZHIvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1FFRFJcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1FMb2dpYyBSb0NFIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1VTTklDXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VmVyYnMgc3VwcG9ydCBmb3IgQ2lzY28gVklDXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1ZNV0FSRV9QVlJETUFcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZNd2FyZSBQYXJhdmlydHVhbGl6ZWQgUkRNQSBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcmRtYXZ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yZG1hdnQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1JETUFWVFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtSRE1BIHZlcmJzIHRyYW5zcG9ydCBsaWJyYXJ5XCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JUE9JQlxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJUC1vdmVyLUluZmluaUJhbmRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTEtXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6MTI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfQ01cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kIENvbm5lY3RlZCBNb2RlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMjYtXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjc6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7SVAtb3Zlci1JbmZpbmlCYW5kIGRlYnVnZ2luZ1wmIzM0OyBpZiBFWFBFUlRcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctNDEtXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6NDI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtJUC1vdmVyLUluZmluaUJhbmQgZGF0YSBwYXRoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0lTRVJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtpU0NTSSBFeHRlbnNpb25zIGZvciBSRE1BIChpU0VSKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVNFUlRcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7aVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUikgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0yLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy00LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy02LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Nzpjb25maWcgSU5GSU5JQkFORF9SVFJTX0NMSUVOVFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cdHRyaXN0YXRlIFwmIzM0O1JUUlMgY2xpZW50IG1vZHVsZVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7UlRSUyBzZXJ2ZXIgbW9kdWxlXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1NSUFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCBTQ1NJIFJETUEgUHJvdG9jb2xcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBUXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCBTQ1NJIFJETUEgUHJvdG9jb2wgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyNjQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJETUEgYW5kIE5ldCBOYW1lc3BhY2UgSW50ZWdyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBDR1JPVVBfUkRNQWAsIGBSRE1BX1JYRWAsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX1VTRVJfQUNDRVNTYC4gSSYjMzk7bSBnb2luZyB0byBza2lwIGNoZWNraW5nIGBORVRfTlNgIHNpbmNlIGl0JiMzOTtzIHByYWN0aWNhbGx5IGEgZ2l2ZW4uIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBsaXN0ZWQgb25lcyBpbnN0ZWFkLgoKTm93LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkmIzM5O20gc2VlaW5nOgoKKiAgIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAgaXMgYSBjZW50cmFsIHBpZWNlIGZvciBuZXRucyBjaGFuZ2VzLgoqICAgYHJkbWFfZGV2X2NoYW5nZV9uZXRuc2AgaXMgdGhlIGludGVybmFsIGhlbHBlciBmb3IgdGhlIGFib3ZlLgoqICAgYHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZWAgc2VlbXMgcmVsYXRlZCB0byBuYW1lIHJlc29sdXRpb24gd2l0aGluIHRoZSBuYW1lc3BhY2UgY29udGV4dC4KKiAgIGBubGRldl9zZXRfZG9pdGAgLSBBaCwgYSBOZXRsaW5rIGhhbmRsZXIuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBkaWdnaW5nIGludG87IGl0JiMzOTtzIHRoZSBpbnRlcmZhY2UuCiogICBgcmRtYWNnX3Jlc291cmNlX3NldF9tYXhgIGlzIHRoZSBjZ3JvdXAgaGFuZGxlci4KKiAgIGByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWRgIGNvdWxkIGJlIGludm9sdmVkIGFzIHdlbGwuCiogICBgYWxsb2NfbmFtZV9pZGAsIGBfX2FsbG9jX25hbWVfaWRgIHNlZW0gdG8gcmVsYXRlIHRvIG5hbWUgYWxsb2NhdGlvbiwgd2hpY2ggaXMgbGlrZWx5IGNyaXRpY2FsLgoqICAgYHJ4ZV9tbWFwYCAtIFRoaXMgaXMgdGhlIG1tYXAgZnVuY3Rpb24sIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkLgoKU28sIGBubGRldl9zZXRfZG9pdGAgaXMgb3VyIHByaW1hcnkgbmV0bGluayBoYW5kbGVyLiBgcmRtYWNnX3Jlc291cmNlX3NldF9tYXhgIGlzIHRoZSBjZ3JvdXAgaW50ZXJmYWNlLiBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgIGlzIHRoZSBrZXJuZWwgZnVuY3Rpb24gaGFuZGxpbmcgbmV0bnMgY2hhbmdlcy4gQW5kIG9mIGNvdXJzZSwgdGhlIG1vZGlmaWVkIGByeGVfbW1hcGAgaXMgdGhlcmUuCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIE9oLCBgc21jX3BuZXRfZmluZF9pYmAsIGBzbWNfcG5ldF9hZGRfaWJgLCBgc21jX3BuZXRfZW50ZXJgLCBgc21jX3BuZXRpZF9ieV90YWJsZV9pYmAgaW4gYG5ldC9zbWMvc21jX3BuZXQuY2AgaGF2ZSBiZWVuIG1vZGlmaWVkLCB0b28uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBDT05GSUdfU01DYCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEzLVxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMjItXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzcyCgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDczOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSRE1BIERldmljZSBOYW1lcyBhbmQgTmV0bnMgSW1wbGljYXRpb25zOiBGdXp6aW5nIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBwYXRjaCwgYW5kIHRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCBgU01DYCBzdXBwb3J0IGlzIGdvaW5nIHRvIGJlIGFkZGVkIHRvIHRoZSBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFyZSB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ/IGBDR1JPVVBfUkRNQWAsIGBSRE1BX1JYRWAsIGBJTkZJTklCQU5EX1VTRVJfQUNDRVNTYCwgYW5kIG5vdyBgU01DYC4gR290IGl0LgoKTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpbiBtaW5kOiBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgLCBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYCwgYHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZWAsIGBubGRldl9zZXRfZG9pdGAsIGByZG1hY2dfcmVzb3VyY2Vfc2V0X21heGAsIGByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWRgLCBgYWxsb2NfbmFtZV9pZGAsIGByeGVfbW1hcGAsIGFuZCBgc21jX3BuZXRfZmluZF9pYmAuCgpMZXQgbWUgcXVpY2tseSBjb25maXJtIGlmIHRoZSBmdW5jdGlvbnMgYXJlIHN0YXRpYy4gWWVwLCBgYWxsb2NfbmFtZV9pZGAsIGByZG1hX2Rldl9waWNrX25ldG5zX25hbWVgLCBgcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkYCwgYHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4YCwgYW5kIGBubGRldl9zZXRfZG9pdGAgYXJlIGFsbCBzdGF0aWMuIFRoZSBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgIGlzIGRlZmluZWQgaW4gYGNvcmVfcHJpdi5oYC4gYHJ4ZV9tbWFwYCBpcyBpbiBgcnhlX21tYXAuY2AsIGFuZCBgc21jX3BuZXRfZmluZF9pYmAgaXMgc3RhdGljIGluIGBzbWNfcG5ldC5jYC4KCk9rYXksIEkmIzM5O3ZlIGdvdCBteSBsaXN0LgoKT2gsIHdhaXQsIHRoZXJlJiMzOTtzIGByZG1hY2dfcHJpbnRfZGV2aWNlX2tleWAsIGByZG1hY2dfZGV2aWNlX25hbWVfdW5pcXVlX2xvY2tlZGAsIGByZG1hX2Rldl9uYW1lX2luX25ldG5zYCwgYGFzc2lnbl9uYW1lYCBhbmQgYGFsbG9jX25hbWVgIHRvby4gTGV0JiMzOTtzIGluY2x1ZGUgYHJkbWFfZGV2X25hbWVfaW5fbmV0bnNgIGFuZCBgcmRtYWNnX2RldmljZV9uYW1lX3VuaXF1ZV9sb2NrZWRgIHRvby4KClNvLCB0aGUgY29uZmlndXJhdGlvbnMgYXJlOiBgQ0dST1VQX1JETUFgLCBgUkRNQV9SWEVgLCBgSU5GSU5JQkFORF9VU0VSX0FDQ0VTU2AsIGBTTUNgLgoKTm93IGZvciB0aGUgKndoeSo6IFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGFsbG93aW5nIFJETUEgZGV2aWNlcyB0byBzaGFyZSBuYW1lcyBhY3Jvc3MgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIGRldmljZSBuYW1pbmcsIGhvdyBkZXZpY2VzIGFyZSBtb3ZlZCBiZXR3ZWVuIG5hbWVzcGFjZXMsIGFuZCBob3cgY2dyb3VwIHJlc291cmNlcyBhcmUgdHJhY2tlZC4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLgoKVGhlcmVmb3JlLCBmdXp6aW5nIHNob3VsZCBjb25jZW50cmF0ZSBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgdXNlZCB0byBtb3ZlIFJETUEgZGV2aWNlcyBiZXR3ZWVuIG5hbWVzcGFjZXMsIHRoZSBSRE1BIGNncm91cCBpbnRlcmZhY2UsIGFuZCB0aGUgUlhFIG1tYXAgcGF0aC4KCk9uZSBsYXN0IHRoaW5nLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgcnhlX21tYXBgIGNoYW5nZXMuIEFoLCB0aGUgcGF0Y2ggcmVtb3ZlcyBgcnhlX3ZtX29wc2AgYW5kIHVzZXMgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGRpcmVjdGx5LCBlZmZlY3RpdmVseSBkcm9wcGluZyBhIHJlZmVyZW5jZSBpbW1lZGlhdGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB0aGUgVk1BIGhvbGRzIHJlZmVyZW5jZXMuIERlZmluaXRlbHkgZnV6ei13b3J0aHkuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9SRE1BJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfVVNFUl9BQ0NFU1MmIzM0OywKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfcmVzb3VyY2Vfc2V0X21heCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7YWxsb2NfbmFtZV9pZCYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cnhlX21tYXAmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMsIG1vZGlmeWluZyB0aGUgY29yZSBSRE1BIGRldmljZSBuYW1pbmcsIG5ldG5zIGNoYW5nZSBsb2dpYywgYW5kIGNncm91cCByZXNvdXJjZSB0cmFja2luZy4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IHRhYmxlIGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1vdmluZyBSRE1BIGRldmljZXMgYmV0d2VlbiBuYW1lc3BhY2VzLCB0aGUgUkRNQSBjZ3JvdXAgaW50ZXJmYWNlLCBhbmQgdGhlIFJYRSBtbWFwIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9SRE1BJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfVVNFUl9BQ0NFU1MmIzM0OywKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZGV2aWNlX3NldF9uZXRuc19wdXQmIzM0OywKICAgICYjMzQ7cmRtYV9kZXZfY2hhbmdlX25ldG5zJiMzNDssCiAgICAmIzM0O3JkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZSYjMzQ7LAogICAgJiMzNDtubGRldl9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfcmVzb3VyY2Vfc2V0X21heCYjMzQ7LAogICAgJiMzNDtyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7YWxsb2NfbmFtZV9pZCYjMzQ7LAogICAgJiMzNDtfX2FsbG9jX25hbWVfaWQmIzM0OywKICAgICYjMzQ7cnhlX21tYXAmIzM0OywKICAgICYjMzQ7c21jX3BuZXRfZmluZF9pYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMsIG1vZGlmeWluZyB0aGUgY29yZSBSRE1BIGRldmljZSBuYW1pbmcsIG5ldG5zIGNoYW5nZSBsb2dpYywgYW5kIGNncm91cCByZXNvdXJjZSB0cmFja2luZy4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IHRhYmxlIGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1vdmluZyBSRE1BIGRldmljZXMgYmV0d2VlbiBuYW1lc3BhY2VzLCB0aGUgUkRNQSBjZ3JvdXAgaW50ZXJmYWNlLCBhbmQgdGhlIFJYRSBtbWFwIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MjoxMy41MTgwNjYwMzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA5MjMzMDgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBfUkRNQVwiLFxuICAgIFwiUkRNQV9SWEVcIixcbiAgICBcIklORklOSUJBTkRfVVNFUl9BQ0NFU1NcIixcbiAgICBcIlNNQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImliX2RldmljZV9zZXRfbmV0bnNfcHV0XCIsXG4gICAgXCJyZG1hX2Rldl9jaGFuZ2VfbmV0bnNcIixcbiAgICBcInJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZVwiLFxuICAgIFwibmxkZXZfc2V0X2RvaXRcIixcbiAgICBcInJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4XCIsXG4gICAgXCJyZG1hY2dfZ2V0X2RldmljZV9sb2NrZWRcIixcbiAgICBcImFsbG9jX25hbWVfaWRcIixcbiAgICBcIl9fYWxsb2NfbmFtZV9pZFwiLFxuICAgIFwicnhlX21tYXBcIixcbiAgICBcInNtY19wbmV0X2ZpbmRfaWJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFJETUEgZGV2aWNlcyB0byBoYXZlIHRoZSBzYW1lIG5hbWUgYWNyb3NzIGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMsIG1vZGlmeWluZyB0aGUgY29yZSBSRE1BIGRldmljZSBuYW1pbmcsIG5ldG5zIGNoYW5nZSBsb2dpYywgYW5kIGNncm91cCByZXNvdXJjZSB0cmFja2luZy4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IHRhYmxlIGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBpbnRlcmZhY2UgZm9yIG1vdmluZyBSRE1BIGRldmljZXMgYmV0d2VlbiBuYW1lc3BhY2VzLCB0aGUgUkRNQSBjZ3JvdXAgaW50ZXJmYWNlLCBhbmQgdGhlIFJYRSBtbWFwIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjEzLjUxODA3MzExOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1MDA1MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGIyMjMxNzU2MWJiNDM2N2RjNWU2ZWFkMGYyOTZlMmQwNzM2MWMzOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxNSAwMDo1MjoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY20gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cXG5pbmRleCA3NGY5NTA2ZjQyZTdhYy4uNzM5ZjdiNmExMjU5OGIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXFxuQEAgLTEyLDYgKzEyLDEwIEBAIERlc2NyaXB0aW9uOiBcXHRJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG9cXG4gXFx0XFx0Zm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOlxcbiBcXHRcXHRta2RpciAtcCAvY29uZmlnL3JkbWFfY20vXFx1MDAzY2hjYVxcdTAwM2VcXG4gXFxuK1xcdFxcdE5vdGU6IGNvbmZpZ2ZzIGhhcyBubyBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0LCBzbyB0aGlzXFxuK1xcdFxcdGludGVyZmFjZSBjYW5ub3QgcmVwcmVzZW50IHR3byBkZXZpY2VzIHRoYXQgc2hhcmUgYSBuYW1lIGluXFxuK1xcdFxcdGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS5cXG4rXFxuIFxcbiBXaGF0OiBcXHRcXHQvY29uZmlnL3JkbWFfY20vXFx1MDAzY2hjYVxcdTAwM2UvcG9ydHMvXFx1MDAzY3BvcnQtbnVtXFx1MDAzZS9kZWZhdWx0X3JvY2VfbW9kZVxcbiBEYXRlOiBcXHRcXHROb3ZlbWJlciAyOSwgMjAxNVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9yZG1hLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0XFxuaW5kZXggZTY5MzY5YjcyNTJlYTMuLjhkMGMzYTc5NmVlM2Q2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvcmRtYS5yc3RcXG5AQCAtOTAsNiArOTAsMTMgQEAgRm9sbG93aW5nIHJlc291cmNlcyBjYW4gYmUgYWNjb3VudGVkIGJ5IHJkbWEgY29udHJvbGxlci5cXG4gICBoY2Ffb2JqZWN0IFxcdE1heGltdW0gbnVtYmVyIG9mIEhDQSBPYmplY3RzXFxuICAgPT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG4rUkRNQSBkZXZpY2VzIGZyb20gYWxsIG5ldHdvcmsgbmFtZXNwYWNlcyBhcmUgbGlzdGVkLiBFYWNoIGxpbmUgc3RhcnRzIHdpdGhcXG4rdGhlIGRldmljZSBuYW1lLiBJZiBtb3JlIHRoYW4gb25lIGRldmljZSBoYXMgdGhlIHNhbWUgbmFtZSwgYGBpbmRleD1OYGBcXG4rZm9sbG93cyB0aGUgbmFtZSwgd2hlcmUgYGBOYGAgaXMgdGhlIHN5c3RlbS13aWRlIFJETUEgZGV2aWNlIGluZGV4LCB1bmlxdWVcXG4rYW1vbmcgcmVnaXN0ZXJlZCBkZXZpY2VzLiBXaGVuIGNvbmZpZ3VyaW5nIGEgbGltaXQsIHRoZSBpbmRleCBpcyBvcHRpb25hbFxcbitmb3IgYSBnbG9iYWxseSB1bmlxdWUgbmFtZSBhbmQgcmVxdWlyZWQgZm9yIGEgZHVwbGljYXRlIG5hbWUuIEEgd3JpdGUgd2l0aG91dFxcbit0aGUgcmVxdWlyZWQgaW5kZXggZmFpbHMgd2l0aCBgYC1FTk9UVU5JUWBgLlxcbitcXG4gMi4gVXNhZ2UgRXhhbXBsZXNcXG4gPT09PT09PT09PT09PT09PT1cXG4gXFxuQEAgLTk3LDYgKzEwNCw3IEBAIEZvbGxvd2luZyByZXNvdXJjZXMgY2FuIGJlIGFjY291bnRlZCBieSByZG1hIGNvbnRyb2xsZXIuXFxuIFxcbiBcXHRlY2hvIG1seDRfMCBoY2FfaGFuZGxlPTIgaGNhX29iamVjdD0yMDAwIFxcdTAwM2UgL3N5cy9mcy9jZ3JvdXAvcmRtYS8xL3JkbWEubWF4XFxuIFxcdGVjaG8gb2NyZG1hMSBoY2FfaGFuZGxlPTMgXFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9yZG1hLzIvcmRtYS5tYXhcXG4rXFx0ZWNobyBcXFwicnhlMCBpbmRleD01IGhjYV9oYW5kbGU9MlxcXCIgXFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9yZG1hLzMvcmRtYS5tYXhcXG4gXFxuIChiKSBRdWVyeSByZXNvdXJjZSBsaW1pdDo6XFxuIFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcXG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uZGY3NGQ1NTRkMmNkZmYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XFxuQEAgLTI3NTIsNiArMjc1MiwxMSBAQCBSRE1BXFxuIFRoZSBcXFwicmRtYVxcXCIgY29udHJvbGxlciByZWd1bGF0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYWNjb3VudGluZyBvZlxcbiBSRE1BIHJlc291cmNlcy5cXG4gXFxuK1JETUEgZGV2aWNlcyBmcm9tIGFsbCBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlIGxpc3RlZC4gRWFjaCBsaW5lIHN0YXJ0cyB3aXRoXFxuK3RoZSBkZXZpY2UgbmFtZS4gSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaGFzIHRoZSBzYW1lIG5hbWUsIGBgaW5kZXg9TmBgXFxuK2ZvbGxvd3MgdGhlIG5hbWUsIHdoZXJlIGBgTmBgIGlzIHRoZSBzeXN0ZW0td2lkZSBSRE1BIGRldmljZSBpbmRleCwgdW5pcXVlXFxuK2Ftb25nIHJlZ2lzdGVyZWQgZGV2aWNlcy5cXG4rXFxuIFJETUEgSW50ZXJmYWNlIEZpbGVzXFxuIH5+fn5+fn5+fn5+fn5+fn5+fn5+XFxuIFxcbkBAIC0yNzYwLDcgKzI3NjUsMTEgQEAgUkRNQSBJbnRlcmZhY2UgRmlsZXNcXG4gXFx0ZXhjZXB0IHJvb3QgdGhhdCBkZXNjcmliZXMgY3VycmVudCBjb25maWd1cmVkIHJlc291cmNlIGxpbWl0XFxuIFxcdGZvciBhIFJETUEvSUIgZGV2aWNlLlxcbiBcXG4tXFx0TGluZXMgYXJlIGtleWVkIGJ5IGRldmljZSBuYW1lIGFuZCBhcmUgbm90IG9yZGVyZWQuXFxuK1xcdExpbmVzIGFyZSBrZXllZCBieSBkZXZpY2UgbmFtZSBhbmQgYXJlIG5vdCBvcmRlcmVkLiBBIHdyaXRlIG1heVxcbitcXHRpbmNsdWRlIGBgaW5kZXg9TmBgIGFmdGVyIHRoZSBkZXZpY2UgbmFtZS4gVGhlIGluZGV4IGlzIG9wdGlvbmFsXFxuK1xcdHdoZW4gdGhlIG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVlLiBJZiBtdWx0aXBsZSBkZXZpY2VzIGhhdmUgdGhhdFxcbitcXHRuYW1lLCB0aGUgaW5kZXggaXMgcmVxdWlyZWQgYW5kIGEgd3JpdGUgd2l0aG91dCBpdCBmYWlscyB3aXRoXFxuK1xcdGBgLUVOT1RVTklRYGAuXFxuIFxcdEVhY2ggbGluZSBjb250YWlucyBzcGFjZSBzZXBhcmF0ZWQgcmVzb3VyY2UgbmFtZSBhbmQgaXRzIGNvbmZpZ3VyZWRcXG4gXFx0bGltaXQgdGhhdCBjYW4gYmUgZGlzdHJpYnV0ZWQuXFxuIFxcbkBAIC0yNzc2LDYgKzI3ODUsMTAgQEAgUkRNQSBJbnRlcmZhY2UgRmlsZXNcXG4gXFx0ICBtbHg0XzAgaGNhX2hhbmRsZT0yIGhjYV9vYmplY3Q9MjAwMFxcbiBcXHQgIG9jcmRtYTEgaGNhX2hhbmRsZT0zIGhjYV9vYmplY3Q9bWF4XFxuIFxcbitcXHRGb3IgZGV2aWNlcyB3aXRoIGR1cGxpY2F0ZSBuYW1lcywgc2VsZWN0IHRoZSBkZXZpY2UgYnkgaW5kZXg6OlxcbitcXG4rXFx0ICBlY2hvIFxcXCJyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yXFxcIiBcXHUwMDNlIHJkbWEubWF4XFxuK1xcbiAgIHJkbWEuY3VycmVudFxcbiBcXHRBIHJlYWQtb25seSBmaWxlIHRoYXQgZGVzY3JpYmVzIGN1cnJlbnQgcmVzb3VyY2UgdXNhZ2UuXFxuIFxcdEl0IGV4aXN0cyBmb3IgYWxsIHRoZSBjZ3JvdXAgZXhjZXB0IHJvb3QuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcXG5pbmRleCAxZjAzN2ZlMDE0NTBlZi4uODYxMWI0ZTMyY2ZiNjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuY1xcbkBAIC0xNyw2ICsxNyw3IEBAXFxuIHZvaWQgaWJfZGV2aWNlX3JlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXFxuIHtcXG4gXFx0ZGV2aWNlLVxcdTAwM2VjZ19kZXZpY2UubmFtZSA9IGRldmljZS1cXHUwMDNlbmFtZTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2VjZ19kZXZpY2UuaW5kZXggPSBkZXZpY2UtXFx1MDAzZWluZGV4O1xcbiBcXHRyZG1hY2dfcmVnaXN0ZXJfZGV2aWNlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNnX2RldmljZSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcXG5pbmRleCA4OTFlNTJhZmI4ZjRiYS4uYzM4OWQ0ZTM3YjZiY2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuY1xcbkBAIC02NSw2ICs2NSwxMCBAQCBzdGF0aWMgc3RydWN0IGNtYV9kZXZfcG9ydF9ncm91cCAqdG9fZGV2X3BvcnRfZ3JvdXAoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbiBcXHRyZXR1cm4gY29udGFpbmVyX29mKGdyb3VwLCBzdHJ1Y3QgY21hX2Rldl9wb3J0X2dyb3VwLCBncm91cCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIGNvbmZpZ2ZzIGlzIG5vdCBuZXQgbmFtZXNwYWNlIGF3YXJlLCBzbyBhIG5hbWUgc2hhcmVkIGJ5IGRldmljZXMgaW5cXG4rICogZGlmZmVyZW50IG5hbWVzcGFjZXMgcmVzb2x2ZXMgdG8gdGhlIGZpcnN0IG1hdGNoIGhlcmUuXFxuKyAqL1xcbiBzdGF0aWMgYm9vbCBmaWx0ZXJfYnlfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYsIHZvaWQgKmNvb2tpZSlcXG4ge1xcbiBcXHRyZXR1cm4gIXN0cmNtcChkZXZfbmFtZShcXHUwMDI2aWJfZGV2LVxcdTAwM2VkZXYpLCBjb29raWUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXFxuaW5kZXggMTkxMDRjNTQyYjI3MGQuLmFhZjMzMGIwZDMzM2FlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmhcXG5AQCAtMzU2LDcgKzM1Niw4IEBAIHZvaWQgaWJfcG9ydF91bnJlZ2lzdGVyX2NsaWVudF9ncm91cHMoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0X251bSxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKTtcXG4gXFxuIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQpO1xcbitcXHRcXHRcXHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiBcXG4gaW50IHJkbWFfbmxfbmV0X2luaXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7XFxuIHZvaWQgcmRtYV9ubF9uZXRfZXhpdChzdHJ1Y3QgcmRtYV9kZXZfbmV0ICpybmV0KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xcbmluZGV4IGI4MTkzZTA3N2E3NDZmLi40Yzc1MDc4NDQ4YTMyNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jXFxuQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgREVDTEFSRV9SV1NFTShyZG1hX25ldHNfcndzZW0pO1xcbiBib29sIGliX2RldmljZXNfc2hhcmVkX25ldG5zID0gdHJ1ZTtcXG4gbW9kdWxlX3BhcmFtX25hbWVkKG5ldG5zX21vZGUsIGliX2RldmljZXNfc2hhcmVkX25ldG5zLCBib29sLCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhuZXRuc19tb2RlLFxcbi1cXHRcXHQgXFxcIlNoYXJlIGRldmljZSBhbW9uZyBuZXQgbmFtZXNwYWNlczsgZGVmYXVsdD0xIChzaGFyZWQpXFxcIik7XFxuK1xcdFxcdCBcXFwiU2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkuIEluIGV4Y2x1c2l2ZSBtb2RlIGRldmljZSBuYW1lcyBhcmUgdW5pcXVlIHBlciBuZXQgbmFtZXNwYWNlXFxcIik7XFxuIC8qKlxcbiAgKiByZG1hX2Rldl9hY2Nlc3NfbmV0bnMoKSAtIFJldHVybiB3aGV0aGVyIGFuIHJkbWEgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZFxcbiAgKlxcdFxcdFxcdCAgICAgZnJvbSBhIHNwZWNpZmllZCBuZXQgbmFtZXNwYWNlIG9yIG5vdC5cXG5AQCAtMjY4LDcgKzI2OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWJkZXZfbHNtX25iID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldCAqbmV0KTtcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKTtcXG4gXFxuIC8qIFBvaW50ZXIgdG8gdGhlIFJDVSBoZWFkIGF0IHRoZSBzdGFydCBvZiB0aGUgaWJfcG9ydF9kYXRhIGFycmF5ICovXFxuIHN0cnVjdCBpYl9wb3J0X2RhdGFfcmN1IHtcXG5AQCAtMzUxLDEzICszNTIsMTUgQEAgdm9pZCBpYl9kZXZpY2VfcHV0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGliX2RldmljZV9wdXQpO1xcbiBcXG4tc3RhdGljIHN0cnVjdCBpYl9kZXZpY2UgKl9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXFxuK3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuIFxcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4gXFxuIFxcdHhhX2Zvcl9lYWNoIChcXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSlcXG4tXFx0XFx0aWYgKCFzdHJjbXAobmFtZSwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSkpXFxuK1xcdFxcdGlmIChyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhc3RyY21wKG5hbWUsIGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldikpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZGV2aWNlO1xcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTM5NSw3ICszOTgsNyBAQCBpbnQgaWJfZGV2aWNlX3JlbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShuYW1lKSkge1xcbitcXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSwgcmRtYV9kZXZfbmV0KGliZGV2KSkpIHtcXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFx0fVxcbkBAIC00MzUsNyArNDM4LDEzIEBAIGludCBpYl9kZXZpY2Vfc2V0X2RpbShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggdXNlX2RpbSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcXG4rLypcXG4rICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAnJWQnIHN0eWxlIEBuYW1lIHBhdHRlcm4gd2l0aGluIG5ldCBuYW1lc3BhY2VcXG4rICogQG5ldC4gUmV0dXJucyB0aGUgaW5kZXggb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm5vLiBUaGUgY2FsbGVyIGJ1aWxkc1xcbisgKiB0aGUgZmluYWwgdW5pcXVlIGRldmljZSBuYW1lIGZyb20gdGhlIHJldHVybmVkIGluZGV4LlxcbisgKi9cXG4rc3RhdGljIGludCBfX2FsbG9jX25hbWVfaWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlICpza2lwKVxcbiB7XFxuIFxcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG5AQCAtNDQ4LDYgKzQ1Nyw4IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcXG4gXFx0eGFfZm9yX2VhY2ggKFxcdTAwMjZkZXZpY2VzLCBpbmRleCwgZGV2aWNlKSB7XFxuIFxcdFxcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XFxuIFxcbitcXHRcXHRpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoc3NjYW5mKGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldiksIG5hbWUsIFxcdTAwMjZpKSAhPSAxKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKGkgXFx1MDAzYyAwIHx8IGkgXFx1MDAzZT0gSU5UX01BWClcXG5AQCAtNDYyLDE1ICs0NzMsMjcgQEAgc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxcbiBcXHR9XFxuIFxcbiBcXHRyYyA9IGlkYV9hbGxvYyhcXHUwMDI2aW51c2UsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAocmMgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdHJjID0gZGV2X3NldF9uYW1lKFxcdTAwMjZpYmRldi1cXHUwMDNlZGV2LCBuYW1lLCByYyk7XFxuIG91dDpcXG4gXFx0aWRhX2Rlc3Ryb3koXFx1MDAyNmludXNlKTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGFsbG9jX25hbWVfaWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHJldHVybiBfX2FsbG9jX25hbWVfaWQobmV0LCBuYW1lLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGludCBpZDtcXG4rXFxuK1xcdGlkID0gYWxsb2NfbmFtZV9pZChyZG1hX2Rldl9uZXQoaWJkZXYpLCBuYW1lKTtcXG4rXFx0aWYgKGlkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGlkO1xcbitcXG4rXFx0cmV0dXJuIGRldl9zZXRfbmFtZShcXHUwMDI2aWJkZXYtXFx1MDAzZWRldiwgbmFtZSwgaWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBpYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXFxuIHtcXG4gXFx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTtcXG5AQCAtMTE1MSw4ICsxMTc0LDE3IEBAIHN0YXRpYyB2b2lkIHJkbWFfZGV2X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHRoZSByZWFsIGRldmljZSBpcyBpbiB0aGUgTlMgdGhlbiBtb3ZlIGl0IGJhY2sgdG8gaW5pdC5cXG4rXFx0XFx0ICogUHJvdmlkZSBhIGZhbGxiYWNrIHBhdHRlcm4gc28gYSBuYW1lIGNvbmZsaWN0IGluIGluaXRfbmV0XFxuK1xcdFxcdCAqIGNhbm5vdCBtYWtlIHRoZSB0ZWFyZG93biBtb3ZlIGZhaWwuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBuZXQsIFxcdTAwMjZpbml0X25ldCk7XFxuK1xcdFxcdGlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoXFx1MDAyNmRldi1cXHUwMDNlY29yZWRldi5yZG1hX25ldCkpKSB7XFxuK1xcdFxcdFxcdHJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIG5ldCwgXFx1MDAyNmluaXRfbmV0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgTlVMTCwgXFxcImliZGV2JWRcXFwiKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOT0RFVilcXG4rXFx0XFx0XFx0XFx0V0FSTigxLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gbW92ZSBSRE1BIGRldmljZSAlcyB0byBpbml0X25ldCBvbiBuZXRucyBleGl0OiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBkZXZfbmFtZShcXHUwMDI2ZGV2LVxcdTAwM2VkZXYpLCByZXQpO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuIFxcdFxcdGRvd25fcmVhZChcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuQEAgLTEyMDYsNyArMTIzOCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCByZG1hX2Rldl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIH1cXG4gXFxuIC8qXFxuLSAqIEFzc2lnbiB0aGUgdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZSBhbmQgdGhlIHVuaXF1ZSBkZXZpY2UgaW5kZXguIFRoaXMgaXNcXG4rICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhlIGRldmljZVxcbisgKiBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIG5ldCBuYW1lc3BhY2UgdGhlIGRldmljZSBpcyBhc3NpZ25lZCB0by4gVGhpcyBpc1xcbiAgKiB1bmRvbmUgYnkgaWJfZGVhbGxvY19kZXZpY2UuXFxuICAqL1xcbiBzdGF0aWMgaW50IGFzc2lnbl9uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSlcXG5AQCAtMTIyMyw3ICsxMjU2LDggQEAgc3RhdGljIGludCBhc3NpZ25fbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUpXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0aWYgKF9faWJfZGV2aWNlX2dldF9ieV9uYW1lKGRldl9uYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldikpKSB7XFxuK1xcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpLFxcbitcXHRcXHRcXHRcXHQgICAgcmRtYV9kZXZfbmV0KGRldmljZSkpKSB7XFxuIFxcdFxcdHJldCA9IC1FTkZJTEU7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTEzODgsOCArMTQyMiw5IEBAIHN0YXRpYyB2b2lkIGliX2RldmljZV9ub3RpZnlfcmVnaXN0ZXIoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxcbiAvKipcXG4gICogaWJfcmVnaXN0ZXJfZGV2aWNlIC0gUmVnaXN0ZXIgYW4gSUIgZGV2aWNlIHdpdGggSUIgY29yZVxcbiAgKiBAZGV2aWNlOiBEZXZpY2UgdG8gcmVnaXN0ZXJcXG4tICogQG5hbWU6IHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUuIFRoaXMgbWF5IGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbFxcbi0gKiBcXHQgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuXFxuKyAqIEBuYW1lOiBkZXZpY2UgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgZGV2aWNlJ3MgbmV0IG5hbWVzcGFjZS4gVGhpcyBtYXlcXG4rICpcXHQgIGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbCBjYXVzZSBhIHVuaXF1ZSBpbmRleCB0byBiZSBhZGRlZCB0byB0aGVcXG4rICpcXHQgIHBhc3NlZCBkZXZpY2UgbmFtZS5cXG4gICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQlxcbiAgKlxcdCAgICAgICAgZGV2aWNlIHdpbGwgYmUgdXNlZC4gSW4gdGhpcyBjYXNlIHRoZSBjYWxsZXIgc2hvdWxkIGZ1bGx5XFxuICAqXFx0XFx0c2V0dXAgdGhlIGliZGV2IGZvciBETUEuIFRoaXMgdXN1YWxseSBtZWFucyB1c2luZyBkbWFfdmlydF9vcHMuXFxuQEAgLTE2NzAsMTQgKzE3MDUsODMgQEAgdm9pZCBpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woaWJfdW5yZWdpc3Rlcl9kZXZpY2VfcXVldWVkKTtcXG4gXFxuK3N0YXRpYyBib29sIHJkbWFfZGV2X25hbWVfaW5fbmV0bnMoc3RydWN0IGliX2RldmljZSAqc2tpcCwgc3RydWN0IG5ldCAqbmV0LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXG4rXFx0eGFfZm9yX2VhY2goXFx1MDAyNmRldmljZXMsIGluZGV4LCBkZXZpY2UpXFxuK1xcdFxcdGlmIChkZXZpY2UgIT0gc2tpcCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENob29zZSB0aGUgbmFtZSBAZGV2aWNlIHNob3VsZCB1c2UgaW4gbmV0IG5hbWVzcGFjZSBAbmV0LiBAcmVxdWVzdGVkX25hbWVcXG4rICogaXMgdXNlZCBhcyBhIGxpdGVyYWwgZGV2aWNlIG5hbWUgd2hlbiBzZXQuIE90aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50IG5hbWVcXG4rICogd2hlbiBpdCBpcyBmcmVlLCBvciB1c2UgYSB0cnVzdGVkICclZCcgQGZhbGxiYWNrX3BhdHRlcm4gZm9yIHRlYXJkb3duLiBUaGVcXG4rICogY2FsbGVyIG11c3QgaG9sZCB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtLlxcbisgKi9cXG4rc3RhdGljIGludCByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4sXFxuK1xcdFxcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqKm5ld19uYW1lKVxcbit7XFxuK1xcdGludCBpZDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXG4rXFx0aWYgKHJlcXVlc3RlZF9uYW1lKSB7XFxuK1xcdFxcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUpKSB7XFxuK1xcdFxcdFxcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSkpIHtcXG4rXFx0XFx0Km5ld19uYW1lID0gZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZmFsbGJhY2tfcGF0dGVybilcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcbitcXHRzbnByaW50ZihidWYsIGJ1Zl9sZW4sIFxcXCJpYmRldiV1XFxcIiwgZGV2aWNlLVxcdTAwM2VpbmRleCk7XFxuK1xcdGlmICghcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhkZXZpY2UsIG5ldCwgYnVmKSkge1xcbitcXHRcXHQqbmV3X25hbWUgPSBidWY7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZCA9IF9fYWxsb2NfbmFtZV9pZChuZXQsIGZhbGxiYWNrX3BhdHRlcm4sIGRldmljZSk7XFxuK1xcdGlmIChpZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBpZDtcXG4rXFx0c25wcmludGYoYnVmLCBidWZfbGVuLCBmYWxsYmFja19wYXR0ZXJuLCBpZCk7XFxuK1xcdCpuZXdfbmFtZSA9IGJ1ZjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRoZSBjYWxsZXIgbXVzdCBwYXNzIGluIGEgZGV2aWNlIHRoYXQgaGFzIHRoZSBrcmVmIGhlbGQgYW5kIHRoZSByZWZjb3VudFxcbiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWRcXG4gICogaW50byBuZXQuXFxuKyAqXFxuKyAqIE5hbWluZyBydWxlcyBhcmUgaGFuZGxlZCBieSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoKS5cXG4gICovXFxuIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldClcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKVxcbiB7XFxuK1xcdGNoYXIgYnVmW0lCX0RFVklDRV9OQU1FX01BWF07XFxuK1xcdGNvbnN0IGNoYXIgKm5ld19uYW1lO1xcbiBcXHRpbnQgcmV0MiA9IC1FSU5WQUw7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0xNjk0LDMwICsxNzk4LDY1IEBAIHN0YXRpYyBpbnQgcmRtYV9kZXZfY2hhbmdlX25ldG5zKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqY3VyX25ldCxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghZmFsbGJhY2tfcGF0dGVybikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZWplY3QgYSBwcmVkaWN0YWJsZSBuYW1lIGNvbmZsaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nXFxuK1xcdFxcdCAqIGRvd24sIHNvIGEgZG9vbWVkIHVzZXIgbW92ZSBkb2VzIG5vdCBkaXNhYmxlIGEgbGl2ZSBkZXZpY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZkZXZpY2VzX3J3c2VtKTtcXG4rXFx0XFx0cmV0ID0gcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKGRldmljZSwgbmV0LCByZXF1ZXN0ZWRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGZhbGxiYWNrX3BhdHRlcm4sIGJ1ZixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihidWYpLCBcXHUwMDI2bmV3X25hbWUpO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYua29iaiwgS09CSl9SRU1PVkUpO1xcbiBcXHRkaXNhYmxlX2RldmljZShkZXZpY2UpO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQXQgdGhpcyBwb2ludCBubyBvbmUgY2FuIGJlIHVzaW5nIHRoZSBkZXZpY2UsIHNvIGl0IGlzIHNhZmUgdG9cXG4tXFx0ICogY2hhbmdlIHRoZSBuYW1lc3BhY2UuXFxuK1xcdCAqIFJlY29tcHV0ZSB0aGUgZGVzdGluYXRpb24gbmFtZSB1bmRlciB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtXFxuK1xcdCAqIG5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQsIGNsb3NpbmcgcmFjZXMgd2l0aCBhIGNvbmN1cnJlbnRcXG4rXFx0ICogcmVnaXN0cmF0aW9uIG9yIHJlbmFtZSwgdGhlbiBwdWJsaXNoIHRoZSBuZXcgbmFtZXNwYWNlIGF0IHRoZSBzeXNmc1xcbitcXHQgKiBsZXZlbC5cXG4gXFx0ICovXFxuLVxcdHdyaXRlX3BuZXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcXG4rXFx0ZG93bl93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuK1xcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBmYWxsYmFja19wYXR0ZXJuLCBidWYsIHNpemVvZihidWYpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNm5ld19uYW1lKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xcbitcXHRcXHRcXHRXQVJOKDEsXFxuK1xcdFxcdFxcdCAgICAgXFxcIiVzOiBmYWlsZWQgdG8gcGljayBkZXZpY2UgbmFtZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcXG4rXFx0XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2ZGV2aWNlLVxcdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gcmVuYW1lX2RvbmU7XFxuK1xcdH1cXG4gXFxuLVxcdGRvd25fcmVhZChcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuLVxcdC8qXFxuLVxcdCAqIEN1cnJlbnRseSByZG1hIGRldmljZXMgYXJlIHN5c3RlbSB3aWRlIHVuaXF1ZS4gU28gdGhlIGRldmljZSBuYW1lXFxuLVxcdCAqIGlzIGd1YXJhbnRlZWQgZnJlZSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4gUHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZVxcbi1cXHQgKiBhdCB0aGUgc3lzZnMgbGV2ZWwuXFxuLVxcdCAqL1xcbi1cXHRyZXQgPSBkZXZpY2VfcmVuYW1lKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWRldiwgZGV2X25hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2KSk7XFxuLVxcdHVwX3JlYWQoXFx1MDAyNmRldmljZXNfcndzZW0pO1xcbitcXHR3cml0ZV9wbmV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIG5ldCk7XFxuK1xcdHJldCA9IGRldmljZV9yZW5hbWUoXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2LCBuZXdfbmFtZSk7XFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHQgXFxcIiVzOiBDb3VsZG4ndCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCBfX2Z1bmNfXyk7XFxuLVxcdFxcdC8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqL1xcbi1cXHRcXHR3cml0ZV9wbmV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIGN1cl9uZXQpO1xcbitcXHRcXHRpZiAoZmFsbGJhY2tfcGF0dGVybikge1xcbitcXHRcXHRcXHRXQVJOKDEsXFxuK1xcdFxcdFxcdCAgICAgXFxcIiVzOiBmYWlsZWQgdG8gcmVuYW1lIGRldmljZSBkdXJpbmcgbmFtZXNwYWNlIHRlYXJkb3duOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICBfX2Z1bmNfXywgcmV0KTtcXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmRldmljZS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgXFxcIiVzOiBDb3VsZG4ndCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBfX2Z1bmNfXyk7XFxuK1xcdFxcdFxcdC8qIFRyeSBhbmQgcHV0IHRoaW5ncyBiYWNrIGFuZCByZS1lbmFibGUgdGhlIGRldmljZSAqL1xcbitcXHRcXHRcXHR3cml0ZV9wbmV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIGN1cl9uZXQpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN0cnNjcHkoZGV2aWNlLVxcdTAwM2VuYW1lLCBkZXZfbmFtZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2VkZXYpLFxcbitcXHRcXHRcXHRJQl9ERVZJQ0VfTkFNRV9NQVgpO1xcbiBcXHR9XFxuK3JlbmFtZV9kb25lOlxcbitcXHR1cF93cml0ZShcXHUwMDI2ZGV2aWNlc19yd3NlbSk7XFxuIFxcbiBcXHRyZXQyID0gZW5hYmxlX2RldmljZV9hbmRfZ2V0KGRldmljZSk7XFxuIFxcdGlmIChyZXQyKSB7XFxuQEAgLTE3NDAsMzYgKzE4NzksNzIgQEAgc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxcbiB9XFxuIFxcbiBpbnQgaWJfZGV2aWNlX3NldF9uZXRuc19wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKVxcbitcXHRcXHRcXHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0bmV0ID0gZ2V0X25ldF9uc19ieV9mZChuc19mZCk7XFxuIFxcdGlmIChJU19FUlIobmV0KSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIHRhcmdldCBuZXQgbmFtZXNwYWNlIGZkXFxcIik7XFxuIFxcdFxcdHJldCA9IFBUUl9FUlIobmV0KTtcXG4gXFx0XFx0Z290byBuZXRfZXJyO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIW5ldGxpbmtfbnNfY2FwYWJsZShza2IsIG5ldC1cXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIk1pc3NpbmcgQ0FQX05FVF9BRE1JTiBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVQRVJNO1xcbiBcXHRcXHRnb3RvIG5zX2VycjtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogTW92aW5nIGEgZGV2aWNlIHRvIHRoZSBuYW1lc3BhY2UgaXQgYWxyZWFkeSBsaXZlcyBpbiBpcyBhIG5vLW9wOyBhXFxuK1xcdCAqIHN1cHBsaWVkIG5hbWUgc3RpbGwgcmVuYW1lcyBpdCBpbiBwbGFjZS5cXG4rXFx0ICovXFxuK1xcdGlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoXFx1MDAyNmRldi1cXHUwMDNlY29yZWRldi5yZG1hX25ldCkpKSB7XFxuK1xcdFxcdHJldCA9IG5hbWUgPyBpYl9kZXZpY2VfcmVuYW1lKGRldiwgbmFtZSkgOiAwO1xcbitcXG4rXFx0XFx0aWYgKHJldCA9PSAtRUVYSVNUKVxcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiRGV2aWNlIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXFxcIik7XFxuK1xcdFxcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFxcdTAwMjZcXHUwMDI2IG5hbWUpXFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJVbmFibGUgdG8gdXNlIHJlcXVlc3RlZCBkZXZpY2UgbmFtZSBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcXFwiKTtcXG4rXFx0XFx0Z290byBuc19lcnI7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIEFsbCB0aGUgaWJfY2xpZW50cywgaW5jbHVkaW5nIHV2ZXJicywgYXJlIHJlc2V0IHdoZW4gdGhlIG5hbWVzcGFjZSBpc1xcbiBcXHQgKiBjaGFuZ2VkIGFuZCB0aGlzIGNhbm5vdCBiZSBibG9ja2VkIHdhaXRpbmcgZm9yIHVzZXJzcGFjZSB0byBkb1xcbiBcXHQgKiBzb21ldGhpbmcsIHNvIGRpc2Fzc29jaWF0aW9uIGlzIG1hbmRhdG9yeS5cXG4gXFx0ICovXFxuLVxcdGlmICghZGV2LVxcdTAwM2VvcHMuZGlzYXNzb2NpYXRlX3Vjb250ZXh0IHx8IGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XFxuK1xcdGlmIChpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiQ2Fubm90IGNoYW5nZSBuZXQgbmFtZXNwYWNlIG9mIFJETUEgZGV2aWNlIGluIHNoYXJlZCBuZXRucyBtb2RlXFxcIik7XFxuK1xcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRnb3RvIG5zX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZW9wcy5kaXNhc3NvY2lhdGVfdWNvbnRleHQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkRldmljZSBkb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZSBjaGFuZ2VzIChubyBkaXNhc3NvY2lhdGUgc3VwcG9ydClcXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIFxcdFxcdGdvdG8gbnNfZXJyO1xcbiBcXHR9XFxuIFxcbiBcXHRnZXRfZGV2aWNlKFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuIFxcdGliX2RldmljZV9wdXQoZGV2KTtcXG4tXFx0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cXHUwMDNlbnNwcm94eS1cXHUwMDNlbmV0X25zLCBuZXQpO1xcbitcXHRyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnMsIG5ldCwgbmFtZSxcXG4rXFx0XFx0XFx0XFx0ICAgIE5VTEwpO1xcbiBcXHRwdXRfZGV2aWNlKFxcdTAwMjZkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChyZXQgPT0gLUVFWElTVClcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkRldmljZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVxcXCIpO1xcbitcXHRlbHNlIGlmIChyZXQgPT0gLUVJTlZBTCBcXHUwMDI2XFx1MDAyNiBuYW1lKVxcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiVW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXFxcIik7XFxuIFxcbiBcXHRwdXRfbmV0KG5ldCk7XFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jXFxuaW5kZXggYWFlNGYzZjZiY2JhMTQuLjRlZmEzODdlYzFiZTE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmNcXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jXFxuQEAgLTExNzgsNiArMTE3OCwyNCBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRpZiAoIWRldmljZSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHRpZiAodGJbUkRNQV9OTERFVl9ORVRfTlNfRkRdKSB7XFxuK1xcdFxcdGNoYXIgbmFtZVtJQl9ERVZJQ0VfTkFNRV9NQVhdID0ge307XFxuK1xcdFxcdHUzMiBuc19mZDtcXG4rXFxuK1xcdFxcdGlmICh0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdKSB7XFxuK1xcdFxcdFxcdG5sYV9zdHJzY3B5KG5hbWUsIHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0sXFxuK1xcdFxcdFxcdFxcdCAgICBJQl9ERVZJQ0VfTkFNRV9NQVgpO1xcbitcXHRcXHRcXHRpZiAoc3RybGVuKG5hbWUpID09IDApIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0XFx0Z290byBkb25lO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0XFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xcbitcXHRcXHRlcnIgPSBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChza2IsIGRldmljZSwgbnNfZmQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIG5hbWVbMF0gPyBuYW1lIDogTlVMTCwgZXh0YWNrKTtcXG4rXFx0XFx0Z290byBwdXRfZG9uZTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHRiW1JETUFfTkxERVZfQVRUUl9ERVZfTkFNRV0pIHtcXG4gXFx0XFx0Y2hhciBuYW1lW0lCX0RFVklDRV9OQU1FX01BWF0gPSB7fTtcXG4gXFxuQEAgLTExOTEsMTQgKzEyMDksNiBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRnb3RvIGRvbmU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh0YltSRE1BX05MREVWX05FVF9OU19GRF0pIHtcXG4tXFx0XFx0dTMyIG5zX2ZkO1xcbi1cXG4tXFx0XFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xcbi1cXHRcXHRlcnIgPSBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChza2IsIGRldmljZSwgbnNfZmQpO1xcbi1cXHRcXHRnb3RvIHB1dF9kb25lO1xcbi1cXHR9XFxuLVxcbiBcXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9ESU1dKSB7XFxuIFxcdFxcdHU4IHVzZV9kaW07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuY1xcbmluZGV4IDlhZjMxZDFkOWQ3MGM3Li5hODJjNDY5NjU0MTZhMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zZWN1cml0eS5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuY1xcbkBAIC03MDAsNiArNzAwLDEyIEBAIGludCBpYl9tYWRfYWdlbnRfc2VjdXJpdHlfc2V0dXAoc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnQsXFxuIFxcdGlmIChxcF90eXBlICE9IElCX1FQVF9TTUkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogU0VMaW51eCBsYWJlbHMgYW4gZW5kcG9ydCBieSAoZGV2aWNlIG5hbWUsIHBvcnQpIGZyb20gYSBnbG9iYWxcXG4rXFx0ICogcG9saWN5LiBJZiBkZXZpY2VzIGluIGRpZmZlcmVudCBuZXQgbmFtZXNwYWNlcyBzaGFyZSBhIG5hbWUsIHRoZXkgZ2V0XFxuK1xcdCAqIHRoZSBzYW1lIGxhYmVsOyBkaXN0aW5ndWlzaGluZyB0aGVtIHdvdWxkIG5lZWQgbmV0IG5hbWVzcGFjZSBzdXBwb3J0XFxuK1xcdCAqIGluIHRoZSBwb2xpY3kgbGFuZ3VhZ2UgYW5kIHRvb2xpbmcuXFxuK1xcdCAqL1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNm1hZF9hZ2VudF9saXN0X2xvY2spO1xcbiBcXHRyZXQgPSBzZWN1cml0eV9pYl9lbmRwb3J0X21hbmFnZV9zdWJuZXQoYWdlbnQtXFx1MDAzZXNlY3VyaXR5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRkZXZfbmFtZShcXHUwMDI2YWdlbnQtXFx1MDAzZWRldmljZS1cXHUwMDNlZGV2KSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jXFxuaW5kZXggN2Y3MjNhMmYzNzAwNTkuLmE0ZWFkODljY2JkMzQzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuY1xcbkBAIC0xMSw3ICsxMSw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwicnhlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJyeGVfbG9jLmhcXFwiXFxuLSNpbmNsdWRlIFxcXCJyeGVfcXVldWUuaFxcXCJcXG4gXFxuIHZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbiB7XFxuQEAgLTMwLDI5ICsyOSw2IEBAIHZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbiBcXHRrZnJlZShpcCk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIG9wZW4gYW5kIGNsb3NlIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgdGltZXMgdGhlIG1lbW9yeSByZWdpb24gaXMgbWFwcGVkLFxcbi0gKiB0byBhdm9pZCByZWxlYXNpbmcgaXQuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCByeGVfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLXtcXG4tXFx0c3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuLVxcbi1cXHRrcmVmX2dldChcXHUwMDI2aXAtXFx1MDAzZXJlZik7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHJ4ZV92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLXtcXG4tXFx0c3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuLVxcbi1cXHRrcmVmX3B1dChcXHUwMDI2aXAtXFx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcnhlX3ZtX29wcyA9IHtcXG4tXFx0Lm9wZW4gPSByeGVfdm1hX29wZW4sXFxuLVxcdC5jbG9zZSA9IHJ4ZV92bWFfY2xvc2UsXFxuLX07XFxuLVxcbiAvKipcXG4gICogcnhlX21tYXAgLSBjcmVhdGUgYSBuZXcgbW1hcCByZWdpb25cXG4gICogQGNvbnRleHQ6IHRoZSBJQiB1c2VyIGNvbnRleHQgb2YgdGhlIHByb2Nlc3MgbWFraW5nIHRoZSBtbWFwKCkgY2FsbFxcbkBAIC0xMDYsMTcgKzgyLDEwIEBAIGludCByeGVfbW1hcChzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZpcC1cXHUwMDNlcGVuZGluZ19tbWFwcyk7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZyeGUtXFx1MDAzZXBlbmRpbmdfbG9jayk7XFxuIFxcbi1cXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZyeGVfdm1fb3BzO1xcbi1cXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGlwO1xcbi1cXG4gXFx0cmV0ID0gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGlwLVxcdTAwM2VvYmosIDApO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gTlVMTDtcXG4tXFx0XFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBOVUxMO1xcbi1cXHRcXHRrcmVmX3B1dChcXHUwMDI2aXAtXFx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSk7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZpcC1cXHUwMDNlcmVmLCByeGVfbW1hcF9yZWxlYXNlKTtcXG4rXFx0aWYgKHJldClcXG4gXFx0XFx0cnhlX2RiZ19kZXYocnhlLCBcXFwiZXJyICVkIGZyb20gcmVtYXBfdm1hbGxvY19yYW5nZVxcXFxuXFxcIiwgcmV0KTtcXG4tXFx0XFx0Z290byBkb25lO1xcbi1cXHR9XFxuIFxcbiBkb25lOlxcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xcbmluZGV4IDFlYzEzMGZlZThlYTdhLi42ZWIxMGQyZjA2NTNiYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xcbkBAIC0yNDAsNiArMjQwLDEwIEBAIHN0YXRpYyB2b2lkIHJ4ZV9kZWFsbG9jX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1YylcXG4gXFx0XFx0cnhlX2Vycl91Yyh1YywgXFxcImNsZWFudXAgZmFpbGVkLCBlcnIgPSAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnhlX2Rpc2Fzc29jaWF0ZV91Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmlidWMpXFxuK3tcXG4rfVxcbitcXG4gLyogcGQgKi9cXG4gc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxcbiB7XFxuQEAgLTE0NzgsNiArMTQ4Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyByeGVfZGV2X29wcyA9IHtcXG4gXFx0LmRlc3Ryb3lfc3JxID0gcnhlX2Rlc3Ryb3lfc3JxLFxcbiBcXHQuZGV0YWNoX21jYXN0ID0gcnhlX2RldGFjaF9tY2FzdCxcXG4gXFx0LmRldmljZV9ncm91cCA9IFxcdTAwMjZyeGVfYXR0cl9ncm91cCxcXG4rXFx0LmRpc2Fzc29jaWF0ZV91Y29udGV4dCA9IHJ4ZV9kaXNhc3NvY2lhdGVfdWNvbnRleHQsXFxuIFxcdC5lbmFibGVfZHJpdmVyID0gcnhlX2VuYWJsZV9kcml2ZXIsXFxuIFxcdC5nZXRfZG1hX21yID0gcnhlX2dldF9kbWFfbXIsXFxuIFxcdC5nZXRfaHdfc3RhdHMgPSByeGVfaWJfZ2V0X2h3X3N0YXRzLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXFxuaW5kZXggMGNhZWJiYzI4MTBmZjMuLjJmYzhlMTMzYzcwZmM1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcXG5AQCAtMzE4OSwxMCArMzE4OSwyNCBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc3JwX2NsYXNzX2F0dHJzW107XFxuIFxcbiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XFxuIFxcbisvKlxcbisgKiBTUlAgaG9zdHMgYXJlIG5hbWVkIGFmdGVyIHRoZWlyIGliIGRldmljZSwgc28gdGFnIHRoZSBjbGFzcyBieSB0aGUgaWJcXG4rICogZGV2aWNlJ3MgbmV0IG5hbWVzcGFjZS5cXG4rICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHNycF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZG1hX2Rldl9uZXQoaG9zdC1cXHUwMDNlc3JwX2Rldi1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHJldHVybiBuZXQgPyB0b19uc19jb21tb24obmV0KSA6IE5VTEw7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgc3JwX2NsYXNzID0ge1xcbiBcXHQubmFtZSAgICA9IFxcXCJpbmZpbmliYW5kX3NycFxcXCIsXFxuIFxcdC5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3VwcyxcXG4tXFx0LmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2XFxuK1xcdC5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldixcXG4rXFx0Lm5zX3R5cGUgPSBcXHUwMDI2bmV0X25zX3R5cGVfb3BlcmF0aW9ucyxcXG4rXFx0Lm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLFxcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxcbmluZGV4IDQwNGU3NDY1NTJjYThmLi45YTVjOWVlNzI4ZTdkZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcXG5AQCAtMzQsNiArMzQsNyBAQCBzdHJ1Y3QgcmRtYWNnX2RldmljZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRkZXZfbm9kZTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHJwb29scztcXG4gXFx0Y2hhclxcdFxcdFxcdCpuYW1lO1xcbitcXHR1MzJcXHRcXHRcXHRpbmRleDtcXG4gfTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcXG5pbmRleCAzYWY5NDZlY2JhYzNlZC4uZWUxMWMzYmJiYWUyMmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaFxcbkBAIC01MTYsNyArNTE2LDEwIEBAIGVudW0gcmRtYV9ubGRldl9hdHRyIHtcXG4gXFx0UkRNQV9OTERFVl9BVFRSX0RFVl9QUk9UT0NPTCxcXHRcXHQvKiBzdHJpbmcgKi9cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEZpbGUgZGVzY3JpcHRvciBoYW5kbGUgb2YgdGhlIG5ldCBuYW1lc3BhY2Ugb2JqZWN0XFxuK1xcdCAqIEZpbGUgZGVzY3JpcHRvciBoYW5kbGUgb2YgdGhlIG5ldCBuYW1lc3BhY2Ugb2JqZWN0LiBNYXkgYmUgY29tYmluZWRcXG4rXFx0ICogd2l0aCBSRE1BX05MREVWX0FUVFJfREVWX05BTUUgKGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSkgdG8gYWxzbyByZW5hbWVcXG4rXFx0ICogdGhlIGRldmljZSBpbiB0aGUgZGVzdGluYXRpb24gbmFtZXNwYWNlOyB0aGUgbW92ZSBmYWlscyB3aXRoIC1FRVhJU1RcXG4rXFx0ICogaWYgdGhhdCBuYW1lIGlzIGFscmVhZHkgdGFrZW4gdGhlcmUuXFxuIFxcdCAqL1xcbiBcXHRSRE1BX05MREVWX05FVF9OU19GRCxcXHRcXHRcXHQvKiB1MzIgKi9cXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9yZG1hLmMgYi9rZXJuZWwvY2dyb3VwL3JkbWEuY1xcbmluZGV4IDVlODJhMDNiMzI3MGFkLi45NDg5ZjNkZjBiZjNmZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvY2dyb3VwL3JkbWEuY1xcbisrKyBiL2tlcm5lbC9jZ3JvdXAvcmRtYS5jXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gI2RlZmluZSBSRE1BQ0dfTUFYX1NUUiBcXFwibWF4XFxcIlxcbiBcXG4gZW51bSByZG1hY2dfbGltaXRfdG9rZW5zIHtcXG4rXFx0UkRNQUNHX0RFVklDRV9JTkRFWCxcXG4gXFx0UkRNQUNHX0hDQV9IQU5ETEVfVkFMLFxcbiBcXHRSRE1BQ0dfSENBX0hBTkRMRV9NQVgsXFxuIFxcdFJETUFDR19IQ0FfT0JKRUNUX1ZBTCxcXG5AQCAtMjcsNiArMjgsNyBAQCBlbnVtIHJkbWFjZ19saW1pdF90b2tlbnMge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgcmRtYWNnX2xpbWl0X3Rva2VucyA9IHtcXG4rXFx0eyBSRE1BQ0dfREVWSUNFX0lOREVYLFxcdFxcdFxcXCJpbmRleD0ldVxcXCJcXHR9LFxcbiBcXHR7IFJETUFDR19IQ0FfSEFORExFX1ZBTCxcXHRcXFwiaGNhX2hhbmRsZT0lZFxcXCJcXHR9LFxcbiBcXHR7IFJETUFDR19IQ0FfSEFORExFX01BWCxcXHRcXFwiaGNhX2hhbmRsZT1tYXhcXFwiXFx0fSxcXG4gXFx0eyBSRE1BQ0dfSENBX09CSkVDVF9WQUwsXFx0XFxcImhjYV9vYmplY3Q9JWRcXFwiXFx0fSxcXG5AQCAtNDY0LDE3ICs0NjYsNTMgQEAgdm9pZCByZG1hY2dfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHJkbWFjZ191bnJlZ2lzdGVyX2RldmljZSk7XFxuIFxcbi1zdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxcbitzdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKlxcbityZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBoYXNfaW5kZXgsIHUzMiBpbmRleClcXG4ge1xcbitcXHRzdHJ1Y3QgcmRtYWNnX2RldmljZSAqbWF0Y2ggPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cmRtYWNnX211dGV4KTtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKVxcbi1cXHRcXHRpZiAoIXN0cmNtcChuYW1lLCBkZXZpY2UtXFx1MDAzZW5hbWUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gZGV2aWNlO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xcbitcXHRcXHRpZiAoc3RyY21wKG5hbWUsIGRldmljZS1cXHUwMDNlbmFtZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdGlmIChoYXNfaW5kZXgpIHtcXG4rXFx0XFx0XFx0aWYgKGRldmljZS1cXHUwMDNlaW5kZXggPT0gaW5kZXgpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBkZXZpY2U7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobWF0Y2gpXFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9UVU5JUSk7XFxuK1xcdFxcdG1hdGNoID0gZGV2aWNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbWF0Y2ggPzogRVJSX1BUUigtRU5PREVWKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2xcXG4rcmRtYWNnX2RldmljZV9uYW1lX3VuaXF1ZV9sb2NrZWQoY29uc3Qgc3RydWN0IHJkbWFjZ19kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmRtYWNnX2RldmljZSAqb3RoZXI7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZyZG1hY2dfbXV0ZXgpO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSlcXG4rXFx0XFx0aWYgKG90aGVyICE9IGRldmljZSBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKG90aGVyLVxcdTAwM2VuYW1lLCBkZXZpY2UtXFx1MDAzZW5hbWUpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmRtYWNnX3ByaW50X2RldmljZV9rZXkoc3RydWN0IHNlcV9maWxlICpzZixcXG4rXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c2VxX3B1dHMoc2YsIGRldmljZS1cXHUwMDNlbmFtZSk7XFxuK1xcdGlmICghcmRtYWNnX2RldmljZV9uYW1lX3VuaXF1ZV9sb2NrZWQoZGV2aWNlKSlcXG4rXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiBpbmRleD0ldVxcXCIsIGRldmljZS1cXHUwMDNlaW5kZXgpO1xcbitcXHRzZXFfcHV0YyhzZiwgJyAnKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbkBAIC00ODgsNiArNTI2LDggQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHRjaGFyICpwO1xcbiBcXHRpbnQgKm5ld19saW1pdHM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5hYmxlcyA9IDA7XFxuK1xcdHUzMiBkZXZfaW5kZXggPSAwO1xcbitcXHRib29sIGhhc19pbmRleCA9IGZhbHNlO1xcbiBcXHRpbnQgaSA9IDAsIHJldCA9IDA7XFxuIFxcbiBcXHQvKiBleHRyYWN0IHRoZSBkZXZpY2UgbmFtZSBmaXJzdCAqL1xcbkBAIC01MDMsNyArNTQzLDcgQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0LyogcGFyc2UgcmVzb3VyY2UgbGltaXQgdG9rZW5zICovXFxuK1xcdC8qIHBhcnNlIHRoZSBvcHRpb25hbCBkZXZpY2UgaW5kZXggYW5kIHJlc291cmNlIGxpbWl0IHRva2VucyAqL1xcbiBcXHR3aGlsZSAoKHAgPSBzdHJzZXAoXFx1MDAyNm9wdGlvbnMsIFxcXCIgXFxcXHRcXFxcblxcXCIpKSkge1xcbiBcXHRcXHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XFxuIFxcdFxcdGludCB0b2ssIGludHZhbDtcXG5AQCAtNTEzLDYgKzU1MywxMyBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuIFxcbiBcXHRcXHR0b2sgPSBtYXRjaF90b2tlbihwLCByZG1hY2dfbGltaXRfdG9rZW5zLCBhcmdzKTtcXG4gXFx0XFx0c3dpdGNoICh0b2spIHtcXG4rXFx0XFx0Y2FzZSBSRE1BQ0dfREVWSUNFX0lOREVYOlxcbitcXHRcXHRcXHRpZiAoaGFzX2luZGV4IHx8IG1hdGNoX3VpbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZkZXZfaW5kZXgpKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gcGFyc2VfZXJyO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGhhc19pbmRleCA9IHRydWU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFJETUFDR19IQ0FfSEFORExFX1ZBTDpcXG4gXFx0XFx0XFx0aWYgKG1hdGNoX2ludChcXHUwMDI2YXJnc1swXSwgXFx1MDAyNmludHZhbCkgfHwgaW50dmFsIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbkBAIC01NDYsOSArNTkzLDkgQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHQvKiBhY3F1aXJlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBob3QgcGx1ZyBkZXZpY2VzICovXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnJkbWFjZ19tdXRleCk7XFxuIFxcbi1cXHRkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUpO1xcbi1cXHRpZiAoIWRldmljZSkge1xcbi1cXHRcXHRyZXQgPSAtRU5PREVWO1xcbitcXHRkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUsIGhhc19pbmRleCwgZGV2X2luZGV4KTtcXG4rXFx0aWYgKElTX0VSUihkZXZpY2UpKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIoZGV2aWNlKTtcXG4gXFx0XFx0Z290byBkZXZfZXJyO1xcbiBcXHR9XFxuIFxcbkBAIC02MjYsNyArNjczLDcgQEAgc3RhdGljIGludCByZG1hY2dfcmVzb3VyY2VfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZyZG1hY2dfbXV0ZXgpO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFxcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcXG4tXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIFxcXCIsIGRldmljZS1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpO1xcbiBcXG4gXFx0XFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcXG4gXFx0XFx0cHJpbnRfcnBvb2xfdmFsdWVzKHNmLCBycG9vbCk7XFxuQEAgLTY1MCw3ICs2OTcsNyBAQCBzdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xcbiBcXHRcXHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xcbiBcXG4tXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIFxcXCIsIGRldmljZS1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpO1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWDsgaSsrKSB7XFxuIFxcdFxcdFxcdHNlcV9wcmludGYoc2YsIFxcXCIlcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHVcXFwiLFxcbiBcXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxuQEAgLTY3OSw3ICs3MjYsNyBAQCBzdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xcbiBcXHRcXHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xcbiBcXG4tXFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVzIFxcXCIsIGRldmljZS1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpO1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWDsgaSsrKSB7XFxuIFxcdFxcdFxcdHNlcV9wcmludGYoc2YsIFxcXCIlcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHVcXFwiLFxcbiBcXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3BuZXQuYyBiL25ldC9zbWMvc21jX3BuZXQuY1xcbmluZGV4IDYzZTI4NmUyZGZhYThkLi5mZjljOWMzNWNjMmY1YiAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19wbmV0LmNcXG4rKysgYi9uZXQvc21jL3NtY19wbmV0LmNcXG5AQCAtMzA0LDEzICszMDQsMTggQEAgc3RhdGljIGJvb2wgc21jX3BuZXRpZF92YWxpZChjb25zdCBjaGFyICpwbmV0X25hbWUsIGNoYXIgKnBuZXRpZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLS8qIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC4gKi9cXG4tc3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKGNoYXIgKmliX25hbWUpXFxuKy8qXFxuKyAqIEZpbmQgYW4gaW5maW5pYmFuZCBkZXZpY2UgYnkgYSBnaXZlbiBuYW1lLCByZXN0cmljdGVkIHRvIHRoZSBkZXZpY2VzXFxuKyAqIGFjY2Vzc2libGUgZnJvbSBAbmV0LiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jX3BuZXRfZmluZF9pYihzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmliX25hbWUpXFxuIHtcXG4gXFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmliZGV2O1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2c21jX2liX2RldmljZXMubXV0ZXgpO1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGliZGV2LCBcXHUwMDI2c21jX2liX2RldmljZXMubGlzdCwgbGlzdCkge1xcbitcXHRcXHRpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhpYmRldi1cXHUwMDNlaWJkZXYsIG5ldCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXN0cm5jbXAoaWJkZXYtXFx1MDAzZWliZGV2LVxcdTAwM2VuYW1lLCBpYl9uYW1lLFxcbiBcXHRcXHRcXHQgICAgIHNpemVvZihpYmRldi1cXHUwMDNlaWJkZXYtXFx1MDAzZW5hbWUpKSB8fFxcbiBcXHRcXHQgICAgKGliZGV2LVxcdTAwM2VpYmRldi1cXHUwMDNlZGV2LnBhcmVudCBcXHUwMDI2XFx1MDAyNlxcbkBAIC00MDgsOCArNDEzLDggQEAgc3RhdGljIGludCBzbWNfcG5ldF9hZGRfZXRoKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxcbi1cXHRcXHRcXHQgICB1OCBpYl9wb3J0LCBjaGFyICpwbmV0X25hbWUpXFxuK3N0YXRpYyBpbnQgc21jX3BuZXRfYWRkX2liKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIHN0cnVjdCBuZXQgKm5ldCxcXG4rXFx0XFx0XFx0ICAgY2hhciAqaWJfbmFtZSwgdTggaWJfcG9ydCwgY2hhciAqcG5ldF9uYW1lKVxcbiB7XFxuIFxcdHN0cnVjdCBzbWNfcG5ldGVudHJ5ICp0bXBfcGUsICpuZXdfcGU7XFxuIFxcdHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYl9kZXY7XFxuQEAgLTQxOSw3ICs0MjQsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2FkZF9pYihzdHJ1Y3Qgc21jX3BuZXR0YWJsZSAqcG5ldHRhYmxlLCBjaGFyICppYl9uYW1lLFxcbiBcXHRib29sIG5ld19pYmRldjtcXG4gXFxuIFxcdC8qIHRyeSB0byBhcHBseSB0aGUgcG5ldGlkIHRvIGFjdGl2ZSBkZXZpY2VzICovXFxuLVxcdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIoaWJfbmFtZSk7XFxuK1xcdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIobmV0LCBpYl9uYW1lKTtcXG4gXFx0aWYgKGliX2Rldikge1xcbiBcXHRcXHRpYmRldl9hcHBsaWVkID0gc21jX3BuZXRfYXBwbHlfaWIoaWJfZGV2LCBpYl9wb3J0LCBwbmV0X25hbWUpO1xcbiBcXHRcXHRpZiAoaWJkZXZfYXBwbGllZClcXG5AQCAtNTE4LDcgKzUyMyw3IEBAIHN0YXRpYyBpbnQgc21jX3BuZXRfZW50ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdKVxcbiBcXHRcXHRcXHRpZiAoaWJwb3J0IFxcdTAwM2MgMSB8fCBpYnBvcnQgXFx1MDAzZSBTTUNfTUFYX1BPUlRTKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgc3RyaW5nLCBpYnBvcnQsIHBuZXRfbmFtZSk7XFxuK1xcdFxcdHJjID0gc21jX3BuZXRfYWRkX2liKHBuZXR0YWJsZSwgbmV0LCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTtcXG4gXFx0XFx0aWYgKCFyYylcXG4gXFx0XFx0XFx0bmV3X2liZGV2ID0gdHJ1ZTtcXG4gXFx0XFx0ZWxzZSBpZiAocmMgIT0gLUVFWElTVClcXG5AQCAtMTE3MCw2ICsxMTc1LDkgQEAgaW50IHNtY19wbmV0aWRfYnlfdGFibGVfaWIoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYl9wb3J0KVxcbiBcXHRzdHJ1Y3Qgc21jX25ldCAqc247XFxuIFxcdGludCByYyA9IC1FTk9FTlQ7XFxuIFxcbitcXHRpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhzbWNpYmRldi1cXHUwMDNlaWJkZXYsIFxcdTAwMjZpbml0X25ldCkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4gXFx0LyogZ2V0IHBuZXR0YWJsZSBmb3IgaW5pdCBuYW1lc3BhY2UgKi9cXG4gXFx0c24gPSBuZXRfZ2VuZXJpYyhcXHUwMDI2aW5pdF9uZXQsIHNtY19uZXRfaWQpO1xcbiBcXHRwbmV0dGFibGUgPSBcXHUwMDI2c24tXFx1MDAzZXBuZXR0YWJsZTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcXG5pbmRleCAwN2FmN2YxNWMxYmY3NC4uYTkxYzE0YzQ1MDA2ZTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGVcXG5AQCAtMyw2ICszLDcgQEAgVEVTVF9QUk9HUyA6PSByeGVfcnBpbmdfYmV0d2Vlbl9uZXRucy5zaCBcXFxcXFxuIFxcdFxcdHJ4ZV9pcHY2LnNoIFxcXFxcXG4gXFx0XFx0cnhlX3NvY2tldF93aXRoX25ldG5zLnNoIFxcXFxcXG4gXFx0XFx0cnhlX3Rlc3RfTkVUREVWX1VOUkVHSVNURVIuc2ggXFxcXFxcbi1cXHRcXHRyeGVfc2VudF9yY3ZkX2J5dGVzLnNoXFxuK1xcdFxcdHJ4ZV9zZW50X3JjdmRfYnl0ZXMuc2ggXFxcXFxcbitcXHRcXHRyeGVfbmV0bnNfbmFtZXMuc2hcXG4gXFxuIGluY2x1ZGUgLi4vbGliLm1rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcXG5pbmRleCA0ZmZiODE0ZTI1M2JiZC4uZTFmZjU0ZWMwZjU3OTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZ1xcbkBAIC0xLDMgKzEsNSBAQFxcbiBDT05GSUdfVFVOXFxuIENPTkZJR19WRVRIXFxuK0NPTkZJR19EVU1NWVxcbitDT05GSUdfTkVUX05TXFxuIENPTkZJR19SRE1BX1JYRVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvcnhlX25ldG5zX25hbWVzLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYTRmYWJmODZiZGY3OWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2hcXG5AQCAtMCwwICsxLDI4MiBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBFeGVyY2lzZSBSRE1BIGRldmljZSBuYW1lIGhhbmRsaW5nIGFjcm9zcyBuZXR3b3JrIG5hbWVzcGFjZXMuXFxuK1xcbitzb3VyY2UgXFxcIiQoZGlybmFtZSBcXFwiJDBcXFwiKS8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXFxcIlxcbitcXG4rTkFNRV9QUkVGSVg9XFxcInJ4ZV9uZXRuc19uYW1lc18kJFxcXCJcXG4rTkVUREVWX1BSRUZJWD1cXFwicnhuJCRcXFwiXFxuK05TMT1cXFwiJHtOQU1FX1BSRUZJWH1uczFcXFwiXFxuK05TMj1cXFwiJHtOQU1FX1BSRUZJWH1uczJcXFwiXFxuK1JYRV9BPVxcXCIke05BTUVfUFJFRklYfXJ4ZV9hXFxcIlxcbitSWEVfQj1cXFwiJHtOQU1FX1BSRUZJWH1yeGVfYlxcXCJcXG4rUlhFX1NBTUU9XFxcIiR7TkFNRV9QUkVGSVh9cnhlX3NhbWVcXFwiXFxuK1JYRV9ORVc9XFxcIiR7TkFNRV9QUkVGSVh9cnhlX25ld1xcXCJcXG4rRFVNTVlfQT1cXFwiJHtORVRERVZfUFJFRklYfWFcXFwiXFxuK0RVTU1ZX0I9XFxcIiR7TkVUREVWX1BSRUZJWH1iXFxcIlxcbitPTERfTU9ERT1cXFwiXFxcIlxcbitNT0RFX0NIQU5HRUQ9MFxcbitNT0RTPShcXFwiZHVtbXlcXFwiIFxcXCJyZG1hX3J4ZVxcXCIpXFxuK1RFU1RfU0FNRV9OQU1FUz1cXFwic2FtZSBSRE1BIGRldmljZSBuYW1lIGNhbiBleGlzdCBpbiB0d28gbmV0IG5hbWVzcGFjZXNcXFwiXFxuK1RFU1RfTU9WRV9DT05GTElDVD1cXFwibW92ZSB3aXRob3V0IHJlbmFtZSBmYWlscyBvbiBkZXN0aW5hdGlvbiBuYW1lIGNvbmZsaWN0XFxcIlxcbitURVNUX01PVkVfUkVOQU1FPVxcXCJtb3ZlIHRoZW4gcmVuYW1lIHN1Y2NlZWRzXFxcIlxcbitURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FPVxcXCJtb3ZlIHdpdGggcmVxdWVzdGVkIGRlc3RpbmF0aW9uIG5hbWUgc3VjY2VlZHNcXFwiXFxuK1RFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FPVxcXCJzYW1lLW5ldG5zIHJlbmFtZSByZWplY3RzIGR1cGxpY2F0ZSBuYW1lXFxcIlxcbitURVNUX1RFQVJET1dOX1JFVFVSTj1cXFwibmV0bnMgZGVsZXRlIHJldHVybnMgZGV2aWNlIHRvIGluaXRfbmV0IGFuZCByZW5hbWVzIG9uIGNvbmZsaWN0XFxcIlxcbitcXG4ra3NmdF9za2lwKClcXG4re1xcbitcXHRrdGFwX3NraXBfYWxsIFxcXCIkKlxcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rfVxcbitcXG4rZmFpbCgpXFxuK3tcXG4rXFx0a3RhcF9leGl0X2ZhaWxfbXNnIFxcXCIkKlxcXCJcXG4rfVxcbitcXG4rbmVlZF9jbWQoKVxcbit7XFxuK1xcdGNvbW1hbmQgLXYgXFxcIiQxXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgfHwga3NmdF9za2lwIFxcXCJtaXNzaW5nIGNvbW1hbmQ6ICQxXFxcIlxcbit9XFxuK1xcbityZG1hX25zKClcXG4re1xcbitcXHRsb2NhbCBucz0kMVxcbitcXG4rXFx0c2hpZnRcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zXFxcIiByZG1hIFxcXCIkQFxcXCJcXG4rfVxcbitcXG4rcmRtYV9kZXZfZXhpc3RzKClcXG4re1xcbitcXHRsb2NhbCBucz0kMVxcbitcXHRsb2NhbCBkZXY9JDJcXG4rXFxuK1xcdGlmIFsgLW4gXFxcIiRuc1xcXCIgXTsgdGhlblxcbitcXHRcXHRyZG1hX25zIFxcXCIkbnNcXFwiIGRldiBzaG93IFxcXCIkZGV2XFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZG1hIGRldiBzaG93IFxcXCIkZGV2XFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rYWRkX2R1bW15KClcXG4re1xcbitcXHRsb2NhbCBuZXRkZXY9JDFcXG4rXFxuK1xcdGlwIGxpbmsgYWRkIFxcXCIkbmV0ZGV2XFxcIiB0eXBlIGR1bW15IHx8IHJldHVybiAxXFxuK1xcdGlwIGxpbmsgc2V0IFxcXCIkbmV0ZGV2XFxcIiB1cCB8fCByZXR1cm4gMVxcbit9XFxuK1xcbithZGRfcnhlKClcXG4re1xcbitcXHRsb2NhbCBkZXY9JDFcXG4rXFx0bG9jYWwgbmV0ZGV2PSQyXFxuK1xcbitcXHRyZG1hIGxpbmsgYWRkIFxcXCIkZGV2XFxcIiB0eXBlIHJ4ZSBuZXRkZXYgXFxcIiRuZXRkZXZcXFwiXFxuK31cXG4rXFxuK3JkbWFfZGV2X29uX25ldGRldigpXFxuK3tcXG4rXFx0bG9jYWwgbmV0ZGV2PSQxXFxuK1xcbitcXHRyZG1hIGxpbmsgc2hvdyAyXFx1MDAzZS9kZXYvbnVsbCB8IGF3ayAtdiB3YW50PVxcXCIkbmV0ZGV2XFxcIiAnXFxuK1xcdFxcdHtcXG4rXFx0XFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIE5GOyBpKyspXFxuK1xcdFxcdFxcdFxcdGlmICgkaSA9PSBcXFwibmV0ZGV2XFxcIiBcXHUwMDI2XFx1MDAyNiAkKGkgKyAxKSA9PSB3YW50KSB7XFxuK1xcdFxcdFxcdFxcdFxcdGRldiA9ICQyXFxuK1xcdFxcdFxcdFxcdFxcdHN1YigvXFxcXC8uKi8sIFxcXCJcXFwiLCBkZXYpXFxuK1xcdFxcdFxcdFxcdFxcdHByaW50IGRldlxcbitcXHRcXHRcXHRcXHRcXHRleGl0XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0fSdcXG4rfVxcbitcXG4rd2FpdF9yZG1hX2Rldl9vbl9uZXRkZXYoKVxcbit7XFxuK1xcdGxvY2FsIG5ldGRldj0kMVxcbitcXHRsb2NhbCBkZXZcXG4rXFx0bG9jYWwgaVxcbitcXG4rXFx0Zm9yIGkgaW4gJChzZXEgMSA1MCk7IGRvXFxuK1xcdFxcdGRldj0kKHJkbWFfZGV2X29uX25ldGRldiBcXFwiJG5ldGRldlxcXCIpXFxuK1xcdFxcdGlmIFsgLW4gXFxcIiRkZXZcXFwiIF07IHRoZW5cXG4rXFx0XFx0XFx0ZWNobyBcXFwiJGRldlxcXCJcXG4rXFx0XFx0XFx0cmV0dXJuIDBcXG4rXFx0XFx0ZmlcXG4rXFx0XFx0c2xlZXAgMC4xXFxuK1xcdGRvbmVcXG4rXFxuK1xcdHJldHVybiAxXFxuK31cXG4rXFxuK3NldHVwX2RldnMoKVxcbit7XFxuK1xcdGNsZWFudXBfZGV2c1xcbitcXG4rXFx0YWRkX2R1bW15IFxcXCIkRFVNTVlfQVxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0YWRkX2R1bW15IFxcXCIkRFVNTVlfQlxcXCIgfHwgcmV0dXJuIDFcXG4rXFxuK1xcdGFkZF9yeGUgXFxcIiRSWEVfQVxcXCIgXFxcIiREVU1NWV9BXFxcIiB8fCByZXR1cm4gMVxcbitcXHRhZGRfcnhlIFxcXCIkUlhFX0JcXFwiIFxcXCIkRFVNTVlfQlxcXCIgfHwgcmV0dXJuIDFcXG4rfVxcbitcXG4rY2xlYW51cF9kZXZzKClcXG4re1xcbitcXHRpcCBsaW5rIGRlbCBcXFwiJERVTU1ZX0FcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGlwIGxpbmsgZGVsIFxcXCIkRFVNTVlfQlxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rfVxcbitcXG4rc2V0dXAoKVxcbit7XFxuK1xcdE9MRF9NT0RFPSQocmRtYSBzeXN0ZW0gc2hvdyAyXFx1MDAzZS9kZXYvbnVsbCB8XFxuK1xcdFxcdCAgIHNlZCAtbiAncy8uKm5ldG5zIFxcXFwoW14gXSpcXFxcKS4qL1xcXFwxL3AnKVxcbitcXHRbIC1uIFxcXCIkT0xEX01PREVcXFwiIF0gfHwga3NmdF9za2lwIFxcXCJmYWlsZWQgdG8gcmVhZCBSRE1BIG5ldG5zIG1vZGVcXFwiXFxuK1xcbitcXHRyZG1hIHN5c3RlbSBzZXQgbmV0bnMgZXhjbHVzaXZlIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSB8fFxcbitcXHRcXHRrc2Z0X3NraXAgXFxcInJkbWEgbmV0bnMgZXhjbHVzaXZlIG1vZGUgaXMgbm90IHN1cHBvcnRlZFxcXCJcXG4rXFx0TU9ERV9DSEFOR0VEPTFcXG4rXFxuK1xcdGlwIG5ldG5zIGFkZCBcXFwiJE5TMVxcXCIgfHwgcmV0dXJuIDFcXG4rXFx0aXAgbmV0bnMgYWRkIFxcXCIkTlMyXFxcIiB8fCByZXR1cm4gMVxcbit9XFxuK1xcbitjbGVhbnVwKClcXG4re1xcbitcXHRjbGVhbnVwX2RldnNcXG4rXFxuK1xcdGlwIG5ldG5zIGRlbCBcXFwiJE5TMVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0aXAgbmV0bnMgZGVsIFxcXCIkTlMyXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXG4rXFx0aWYgWyBcXFwiJE1PREVfQ0hBTkdFRFxcXCIgLWVxIDEgXTsgdGhlblxcbitcXHRcXHRyZG1hIHN5c3RlbSBzZXQgbmV0bnMgXFxcIiRPTERfTU9ERVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZmlcXG4rXFxuK1xcdGZvciBtIGluIFxcXCIke01PRFNbQF19XFxcIjsgZG9cXG4rXFx0XFx0bW9kcHJvYmUgLXIgXFxcIiRtXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRkb25lXFxuK31cXG4rXFxuK3JkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWUoKVxcbit7XFxuK1xcdHJkbWEgZGV2IGhlbHAgMlxcdTAwM2VcXHUwMDI2MSB8IGdyZXAgLUVxICduZXRucyAuKm5hbWV8bmFtZSAuKm5ldG5zJ1xcbit9XFxuK1xcbitbIFxcXCIkKGlkIC11KVxcXCIgLWVxIDAgXSB8fCBrc2Z0X3NraXAgXFxcIm11c3QgYmUgcnVuIGFzIHJvb3RcXFwiXFxuK25lZWRfY21kIGlwXFxuK25lZWRfY21kIHJkbWFcXG4rbmVlZF9jbWQgbW9kcHJvYmVcXG4rXFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK1xcbitmb3IgbSBpbiBcXFwiJHtNT0RTW0BdfVxcXCI7IGRvXFxuK1xcdG1vZGluZm8gXFxcIiRtXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgfHwga3NmdF9za2lwIFxcXCJtb2R1bGUgJG0gbm90IGZvdW5kXFxcIlxcbitcXHRtb2Rwcm9iZSBcXFwiJG1cXFwiIHx8IGZhaWwgXFxcImZhaWxlZCB0byBsb2FkICRtXFxcIlxcbitkb25lXFxuK1xcbitzZXR1cCB8fCBmYWlsIFxcXCJmYWlsZWQgdG8gY3JlYXRlIG5ldCBuYW1lc3BhY2VzXFxcIlxcbitcXG4ra3RhcF9wcmludF9oZWFkZXJcXG4ra3RhcF9zZXRfcGxhbiA2XFxuK1xcbitpZiBzZXR1cF9kZXZzIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9BXFxcIiBuZXRucyBcXFwiJE5TMVxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rICAgcmRtYV9ucyBcXFwiJE5TMVxcXCIgZGV2IHNldCBcXFwiJFJYRV9BXFxcIiBuYW1lIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9CXFxcIiBuZXRucyBcXFwiJE5TMlxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rICAgcmRtYV9ucyBcXFwiJE5TMlxcXCIgZGV2IHNldCBcXFwiJFJYRV9CXFxcIiBuYW1lIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgIHJkbWFfZGV2X2V4aXN0cyBcXFwiJE5TMVxcXCIgXFxcIiRSWEVfU0FNRVxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rICAgcmRtYV9kZXZfZXhpc3RzIFxcXCIkTlMyXFxcIiBcXFwiJFJYRV9TQU1FXFxcIjsgdGhlblxcbitcXHRrdGFwX3Rlc3RfcGFzcyBcXFwiJFRFU1RfU0FNRV9OQU1FU1xcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfU0FNRV9OQU1FU1xcXCJcXG4rZmlcXG4rY2xlYW51cF9kZXZzXFxuK1xcbitpZiAhIHNldHVwX2RldnMgfHxcXG4rICAgISByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmV0bnMgXFxcIiROUzFcXFwiIHx8XFxuKyAgICEgcmRtYV9ucyBcXFwiJE5TMVxcXCIgZGV2IHNldCBcXFwiJFJYRV9BXFxcIiBuYW1lIFxcXCIkUlhFX1NBTUVcXFwiIHx8XFxuKyAgICEgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0JcXFwiIG5ldG5zIFxcXCIkTlMyXFxcIiB8fFxcbisgICAhIHJkbWFfbnMgXFxcIiROUzJcXFwiIGRldiBzZXQgXFxcIiRSWEVfQlxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIjsgdGhlblxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfTU9WRV9DT05GTElDVFxcXCJcXG4rZWxpZiByZG1hX25zIFxcXCIkTlMxXFxcIiBkZXYgc2V0IFxcXCIkUlhFX1NBTUVcXFwiIG5ldG5zIFxcXCIkTlMyXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX01PVkVfQ09ORkxJQ1RcXFwiXFxuK2VsaWYgcmRtYV9kZXZfZXhpc3RzIFxcXCIkTlMxXFxcIiBcXFwiJFJYRV9TQU1FXFxcIiBcXHUwMDI2XFx1MDAyNlxcbisgICAgIHJkbWFfZGV2X2V4aXN0cyBcXFwiJE5TMlxcXCIgXFxcIiRSWEVfU0FNRVxcXCI7IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIiRURVNUX01PVkVfQ09ORkxJQ1RcXFwiXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX01PVkVfQ09ORkxJQ1RcXFwiXFxuK2ZpXFxuK2NsZWFudXBfZGV2c1xcbitcXG4raWYgISBzZXR1cF9kZXZzOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9NT1ZFX1JFTkFNRVxcXCJcXG4rZWxpZiByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmV0bnMgXFxcIiROUzJcXFwiIFxcdTAwMjZcXHUwMDI2XFxuKyAgICAgcmRtYV9ucyBcXFwiJE5TMlxcXCIgZGV2IHNldCBcXFwiJFJYRV9BXFxcIiBuYW1lIFxcXCIkUlhFX05FV1xcXCI7IHRoZW5cXG4rXFx0aWYgcmRtYV9kZXZfZXhpc3RzIFxcXCIkTlMyXFxcIiBcXFwiJFJYRV9ORVdcXFwiIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICEgcmRtYV9kZXZfZXhpc3RzIFxcXCJcXFwiIFxcXCIkUlhFX0FcXFwiOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9wYXNzIFxcXCIkVEVTVF9NT1ZFX1JFTkFNRVxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfTU9WRV9SRU5BTUVcXFwiXFxuK1xcdGZpXFxuK2Vsc2VcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIiRURVNUX01PVkVfUkVOQU1FXFxcIlxcbitmaVxcbitjbGVhbnVwX2RldnNcXG4rXFxuK2lmICEgcmRtYV9zdXBwb3J0c19jb21iaW5lZF9tb3ZlX3JlbmFtZTsgdGhlblxcbitcXHRrdGFwX3Rlc3Rfc2tpcCBcXFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcXFwiXFxuK2VsaWYgISBzZXR1cF9kZXZzOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVxcXCJcXG4rZWxpZiByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmV0bnMgXFxcIiROUzJcXFwiIG5hbWUgXFxcIiRSWEVfTkVXXFxcIjsgdGhlblxcbitcXHRpZiByZG1hX2Rldl9leGlzdHMgXFxcIiROUzJcXFwiIFxcXCIkUlhFX05FV1xcXCIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgISByZG1hX2Rldl9leGlzdHMgXFxcIlxcXCIgXFxcIiRSWEVfQVxcXCI7IHRoZW5cXG4rXFx0XFx0a3RhcF90ZXN0X3Bhc3MgXFxcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVxcXCJcXG4rXFx0ZmlcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcXFwiXFxuK2ZpXFxuK2NsZWFudXBfZGV2c1xcbitcXG4raWYgISBzZXR1cF9kZXZzOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcXFwiXFxuK2VsaWYgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0FcXFwiIG5hbWUgXFxcIiRSWEVfU0FNRVxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rICAgICByZG1hIGRldiBzZXQgXFxcIiRSWEVfQlxcXCIgbmFtZSBcXFwiJFJYRV9ORVdcXFwiOyB0aGVuXFxuK1xcdGlmIHJkbWEgZGV2IHNldCBcXFwiJFJYRV9TQU1FXFxcIiBuYW1lIFxcXCIkUlhFX05FV1xcXCIgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxOyB0aGVuXFxuK1xcdFxcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcXFwiXFxuK1xcdGVsaWYgcmRtYV9kZXZfZXhpc3RzIFxcXCJcXFwiIFxcXCIkUlhFX1NBTUVcXFwiIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgcmRtYV9kZXZfZXhpc3RzIFxcXCJcXFwiIFxcXCIkUlhFX05FV1xcXCI7IHRoZW5cXG4rXFx0XFx0a3RhcF90ZXN0X3Bhc3MgXFxcIiRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVxcXCJcXG4rXFx0ZWxzZVxcbitcXHRcXHRrdGFwX3Rlc3RfZmFpbCBcXFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXFxcIlxcbitcXHRmaVxcbitlbHNlXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcXFwiXFxuK2ZpXFxuK2NsZWFudXBfZGV2c1xcbitcXG4raWYgISBzZXR1cF9kZXZzOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9URUFSRE9XTl9SRVRVUk5cXFwiXFxuK2VsaWYgISByZG1hIGRldiBzZXQgXFxcIiRSWEVfQVxcXCIgbmFtZSBcXFwiJFJYRV9TQU1FXFxcIiB8fFxcbisgICAgICEgcmRtYSBkZXYgc2V0IFxcXCIkUlhFX0JcXFwiIG5ldG5zIFxcXCIkTlMyXFxcIiB8fFxcbisgICAgICEgcmRtYV9ucyBcXFwiJE5TMlxcXCIgZGV2IHNldCBcXFwiJFJYRV9CXFxcIiBuYW1lIFxcXCIkUlhFX1NBTUVcXFwiIHx8XFxuKyAgICAgISByZG1hX2Rldl9leGlzdHMgXFxcIiROUzJcXFwiIFxcXCIkUlhFX1NBTUVcXFwiOyB0aGVuXFxuK1xcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9URUFSRE9XTl9SRVRVUk5cXFwiXFxuK2Vsc2VcXG4rXFx0aXAgbmV0bnMgZGVsIFxcXCIkTlMyXFxcIlxcbitcXHRyZXR1cm5lZD0kKHdhaXRfcmRtYV9kZXZfb25fbmV0ZGV2IFxcXCIkRFVNTVlfQlxcXCIpXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCJkZXZpY2UgcmV0dXJuZWQgdG8gaW5pdF9uZXQgYXMgJyR7cmV0dXJuZWQ6LVxcdTAwM2NtaXNzaW5nXFx1MDAzZX0nXFxcIlxcbitcXHRpZiByZG1hX2Rldl9leGlzdHMgXFxcIlxcXCIgXFxcIiRSWEVfU0FNRVxcXCIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgWyAtbiBcXFwiJHJldHVybmVkXFxcIiBdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgIFsgXFxcIiRyZXR1cm5lZFxcXCIgIT0gXFxcIiRSWEVfU0FNRVxcXCIgXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICBbIFxcXCIke3JldHVybmVkI2liZGV2fVxcXCIgIT0gXFxcIiRyZXR1cm5lZFxcXCIgXTsgdGhlblxcbitcXHRcXHRrdGFwX3Rlc3RfcGFzcyBcXFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGt0YXBfdGVzdF9mYWlsIFxcXCIkVEVTVF9URUFSRE9XTl9SRVRVUk5cXFwiXFxuK1xcdGZpXFxuK2ZpXFxuK2NsZWFudXBfZGV2c1xcbitcXG4ra3RhcF9maW5pc2hlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MjoxNC4wMzM4OTE4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1NzY0OTUwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX1JETUFcIixcbiAgICBcIlJETUFfUlhFXCIsXG4gICAgXCJJTkZJTklCQU5EX1VTRVJfQUNDRVNTXCIsXG4gICAgXCJTTUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dFwiLFxuICAgIFwicmRtYV9kZXZfY2hhbmdlX25ldG5zXCIsXG4gICAgXCJyZG1hX2Rldl9waWNrX25ldG5zX25hbWVcIixcbiAgICBcIm5sZGV2X3NldF9kb2l0XCIsXG4gICAgXCJyZG1hY2dfcmVzb3VyY2Vfc2V0X21heFwiLFxuICAgIFwicmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkXCIsXG4gICAgXCJhbGxvY19uYW1lX2lkXCIsXG4gICAgXCJfX2FsbG9jX25hbWVfaWRcIixcbiAgICBcInJ4ZV9tbWFwXCIsXG4gICAgXCJzbWNfcG5ldF9maW5kX2liXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSRE1BIGRldmljZXMgdG8gaGF2ZSB0aGUgc2FtZSBuYW1lIGFjcm9zcyBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzLCBtb2RpZnlpbmcgdGhlIGNvcmUgUkRNQSBkZXZpY2UgbmFtaW5nLCBuZXRucyBjaGFuZ2UgbG9naWMsIGFuZCBjZ3JvdXAgcmVzb3VyY2UgdHJhY2tpbmcuIEl0IGFsc28gdG91Y2hlcyBTTUMgcG5ldCB0YWJsZSBsb29rdXBzIGFuZCBSWEUgbW1hcCBoYW5kbGluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBtb3ZpbmcgUkRNQSBkZXZpY2VzIGJldHdlZW4gbmFtZXNwYWNlcywgdGhlIFJETUEgY2dyb3VwIGludGVyZmFjZSwgYW5kIHRoZSBSWEUgbW1hcCBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRiMjIzMTc1NjFiYjQzNjdkYzVlNmVhZDBmMjk2ZTJkMDczNjFjMzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwMDo1MjoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvY29uZmlnZnMtcmRtYV9jbVxuaW5kZXggNzRmOTUwNmY0MmU3YWMuLjczOWY3YjZhMTI1OThiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9jb25maWdmcy1yZG1hX2NtXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2NvbmZpZ2ZzLXJkbWFfY21cbkBAIC0xMiw2ICsxMiwxMCBAQCBEZXNjcmlwdGlvbjogXHRJbnRlcmZhY2UgaXMgdXNlZCB0byBjb25maWd1cmUgUkRNQS1jYWJsZSBIQ0FzIGluIHJlc3BlY3QgdG9cbiBcdFx0Zm9yIHRoaXMgSENBIGhhcyB0byBiZSBjcmVhdGVkOlxuIFx0XHRta2RpciAtcCAvY29uZmlnL3JkbWFfY20vXHUwMDNjaGNhXHUwMDNlXG4gXG4rXHRcdE5vdGU6IGNvbmZpZ2ZzIGhhcyBubyBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0LCBzbyB0aGlzXG4rXHRcdGludGVyZmFjZSBjYW5ub3QgcmVwcmVzZW50IHR3byBkZXZpY2VzIHRoYXQgc2hhcmUgYSBuYW1lIGluXG4rXHRcdGRpZmZlcmVudCBuZXR3b3JrIG5hbWVzcGFjZXMgKHBvc3NpYmxlIGluIGV4Y2x1c2l2ZSBuZXRucyBtb2RlKS5cbitcbiBcbiBXaGF0OiBcdFx0L2NvbmZpZy9yZG1hX2NtL1x1MDAzY2hjYVx1MDAzZS9wb3J0cy9cdTAwM2Nwb3J0LW51bVx1MDAzZS9kZWZhdWx0X3JvY2VfbW9kZVxuIERhdGU6IFx0XHROb3ZlbWJlciAyOSwgMjAxNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvcmRtYS5yc3RcbmluZGV4IGU2OTM2OWI3MjUyZWEzLi44ZDBjM2E3OTZlZTNkNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL3JkbWEucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9yZG1hLnJzdFxuQEAgLTkwLDYgKzkwLDEzIEBAIEZvbGxvd2luZyByZXNvdXJjZXMgY2FuIGJlIGFjY291bnRlZCBieSByZG1hIGNvbnRyb2xsZXIuXG4gICBoY2Ffb2JqZWN0IFx0TWF4aW11bSBudW1iZXIgb2YgSENBIE9iamVjdHNcbiAgID09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbitSRE1BIGRldmljZXMgZnJvbSBhbGwgbmV0d29yayBuYW1lc3BhY2VzIGFyZSBsaXN0ZWQuIEVhY2ggbGluZSBzdGFydHMgd2l0aFxuK3RoZSBkZXZpY2UgbmFtZS4gSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaGFzIHRoZSBzYW1lIG5hbWUsIGBgaW5kZXg9TmBgXG4rZm9sbG93cyB0aGUgbmFtZSwgd2hlcmUgYGBOYGAgaXMgdGhlIHN5c3RlbS13aWRlIFJETUEgZGV2aWNlIGluZGV4LCB1bmlxdWVcbithbW9uZyByZWdpc3RlcmVkIGRldmljZXMuIFdoZW4gY29uZmlndXJpbmcgYSBsaW1pdCwgdGhlIGluZGV4IGlzIG9wdGlvbmFsXG4rZm9yIGEgZ2xvYmFsbHkgdW5pcXVlIG5hbWUgYW5kIHJlcXVpcmVkIGZvciBhIGR1cGxpY2F0ZSBuYW1lLiBBIHdyaXRlIHdpdGhvdXRcbit0aGUgcmVxdWlyZWQgaW5kZXggZmFpbHMgd2l0aCBgYC1FTk9UVU5JUWBgLlxuK1xuIDIuIFVzYWdlIEV4YW1wbGVzXG4gPT09PT09PT09PT09PT09PT1cbiBcbkBAIC05Nyw2ICsxMDQsNyBAQCBGb2xsb3dpbmcgcmVzb3VyY2VzIGNhbiBiZSBhY2NvdW50ZWQgYnkgcmRtYSBjb250cm9sbGVyLlxuIFxuIFx0ZWNobyBtbHg0XzAgaGNhX2hhbmRsZT0yIGhjYV9vYmplY3Q9MjAwMCBcdTAwM2UgL3N5cy9mcy9jZ3JvdXAvcmRtYS8xL3JkbWEubWF4XG4gXHRlY2hvIG9jcmRtYTEgaGNhX2hhbmRsZT0zIFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9yZG1hLzIvcmRtYS5tYXhcbitcdGVjaG8gXCJyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yXCIgXHUwMDNlIC9zeXMvZnMvY2dyb3VwL3JkbWEvMy9yZG1hLm1heFxuIFxuIChiKSBRdWVyeSByZXNvdXJjZSBsaW1pdDo6XG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5pbmRleCA5OTM0NDZhYjY2ZDBmYi4uZGY3NGQ1NTRkMmNkZmYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuQEAgLTI3NTIsNiArMjc1MiwxMSBAQCBSRE1BXG4gVGhlIFwicmRtYVwiIGNvbnRyb2xsZXIgcmVndWxhdGVzIHRoZSBkaXN0cmlidXRpb24gYW5kIGFjY291bnRpbmcgb2ZcbiBSRE1BIHJlc291cmNlcy5cbiBcbitSRE1BIGRldmljZXMgZnJvbSBhbGwgbmV0d29yayBuYW1lc3BhY2VzIGFyZSBsaXN0ZWQuIEVhY2ggbGluZSBzdGFydHMgd2l0aFxuK3RoZSBkZXZpY2UgbmFtZS4gSWYgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaGFzIHRoZSBzYW1lIG5hbWUsIGBgaW5kZXg9TmBgXG4rZm9sbG93cyB0aGUgbmFtZSwgd2hlcmUgYGBOYGAgaXMgdGhlIHN5c3RlbS13aWRlIFJETUEgZGV2aWNlIGluZGV4LCB1bmlxdWVcbithbW9uZyByZWdpc3RlcmVkIGRldmljZXMuXG4rXG4gUkRNQSBJbnRlcmZhY2UgRmlsZXNcbiB+fn5+fn5+fn5+fn5+fn5+fn5+flxuIFxuQEAgLTI3NjAsNyArMjc2NSwxMSBAQCBSRE1BIEludGVyZmFjZSBGaWxlc1xuIFx0ZXhjZXB0IHJvb3QgdGhhdCBkZXNjcmliZXMgY3VycmVudCBjb25maWd1cmVkIHJlc291cmNlIGxpbWl0XG4gXHRmb3IgYSBSRE1BL0lCIGRldmljZS5cbiBcbi1cdExpbmVzIGFyZSBrZXllZCBieSBkZXZpY2UgbmFtZSBhbmQgYXJlIG5vdCBvcmRlcmVkLlxuK1x0TGluZXMgYXJlIGtleWVkIGJ5IGRldmljZSBuYW1lIGFuZCBhcmUgbm90IG9yZGVyZWQuIEEgd3JpdGUgbWF5XG4rXHRpbmNsdWRlIGBgaW5kZXg9TmBgIGFmdGVyIHRoZSBkZXZpY2UgbmFtZS4gVGhlIGluZGV4IGlzIG9wdGlvbmFsXG4rXHR3aGVuIHRoZSBuYW1lIGlzIGdsb2JhbGx5IHVuaXF1ZS4gSWYgbXVsdGlwbGUgZGV2aWNlcyBoYXZlIHRoYXRcbitcdG5hbWUsIHRoZSBpbmRleCBpcyByZXF1aXJlZCBhbmQgYSB3cml0ZSB3aXRob3V0IGl0IGZhaWxzIHdpdGhcbitcdGBgLUVOT1RVTklRYGAuXG4gXHRFYWNoIGxpbmUgY29udGFpbnMgc3BhY2Ugc2VwYXJhdGVkIHJlc291cmNlIG5hbWUgYW5kIGl0cyBjb25maWd1cmVkXG4gXHRsaW1pdCB0aGF0IGNhbiBiZSBkaXN0cmlidXRlZC5cbiBcbkBAIC0yNzc2LDYgKzI3ODUsMTAgQEAgUkRNQSBJbnRlcmZhY2UgRmlsZXNcbiBcdCAgbWx4NF8wIGhjYV9oYW5kbGU9MiBoY2Ffb2JqZWN0PTIwMDBcbiBcdCAgb2NyZG1hMSBoY2FfaGFuZGxlPTMgaGNhX29iamVjdD1tYXhcbiBcbitcdEZvciBkZXZpY2VzIHdpdGggZHVwbGljYXRlIG5hbWVzLCBzZWxlY3QgdGhlIGRldmljZSBieSBpbmRleDo6XG4rXG4rXHQgIGVjaG8gXCJyeGUwIGluZGV4PTUgaGNhX2hhbmRsZT0yXCIgXHUwMDNlIHJkbWEubWF4XG4rXG4gICByZG1hLmN1cnJlbnRcbiBcdEEgcmVhZC1vbmx5IGZpbGUgdGhhdCBkZXNjcmliZXMgY3VycmVudCByZXNvdXJjZSB1c2FnZS5cbiBcdEl0IGV4aXN0cyBmb3IgYWxsIHRoZSBjZ3JvdXAgZXhjZXB0IHJvb3QuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jZ3JvdXAuY1xuaW5kZXggMWYwMzdmZTAxNDUwZWYuLjg2MTFiNGUzMmNmYjYyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2dyb3VwLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Nncm91cC5jXG5AQCAtMTcsNiArMTcsNyBAQFxuIHZvaWQgaWJfZGV2aWNlX3JlZ2lzdGVyX3JkbWFjZyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpXG4ge1xuIFx0ZGV2aWNlLVx1MDAzZWNnX2RldmljZS5uYW1lID0gZGV2aWNlLVx1MDAzZW5hbWU7XG4rXHRkZXZpY2UtXHUwMDNlY2dfZGV2aWNlLmluZGV4ID0gZGV2aWNlLVx1MDAzZWluZGV4O1xuIFx0cmRtYWNnX3JlZ2lzdGVyX2RldmljZShcdTAwMjZkZXZpY2UtXHUwMDNlY2dfZGV2aWNlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWFfY29uZmlnZnMuY1xuaW5kZXggODkxZTUyYWZiOGY0YmEuLmMzODlkNGUzN2I2YmNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hX2NvbmZpZ2ZzLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYV9jb25maWdmcy5jXG5AQCAtNjUsNiArNjUsMTAgQEAgc3RhdGljIHN0cnVjdCBjbWFfZGV2X3BvcnRfZ3JvdXAgKnRvX2Rldl9wb3J0X2dyb3VwKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbiBcdHJldHVybiBjb250YWluZXJfb2YoZ3JvdXAsIHN0cnVjdCBjbWFfZGV2X3BvcnRfZ3JvdXAsIGdyb3VwKTtcbiB9XG4gXG4rLypcbisgKiBjb25maWdmcyBpcyBub3QgbmV0IG5hbWVzcGFjZSBhd2FyZSwgc28gYSBuYW1lIHNoYXJlZCBieSBkZXZpY2VzIGluXG4rICogZGlmZmVyZW50IG5hbWVzcGFjZXMgcmVzb2x2ZXMgdG8gdGhlIGZpcnN0IG1hdGNoIGhlcmUuXG4rICovXG4gc3RhdGljIGJvb2wgZmlsdGVyX2J5X25hbWUoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LCB2b2lkICpjb29raWUpXG4ge1xuIFx0cmV0dXJuICFzdHJjbXAoZGV2X25hbWUoXHUwMDI2aWJfZGV2LVx1MDAzZWRldiksIGNvb2tpZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jb3JlX3ByaXYuaFxuaW5kZXggMTkxMDRjNTQyYjI3MGQuLmFhZjMzMGIwZDMzM2FlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY29yZV9wcml2LmhcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NvcmVfcHJpdi5oXG5AQCAtMzU2LDcgKzM1Niw4IEBAIHZvaWQgaWJfcG9ydF91bnJlZ2lzdGVyX2NsaWVudF9ncm91cHMoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0X251bSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmdyb3Vwcyk7XG4gXG4gaW50IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0ICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIG5zX2ZkKTtcbitcdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXG4gaW50IHJkbWFfbmxfbmV0X2luaXQoc3RydWN0IHJkbWFfZGV2X25ldCAqcm5ldCk7XG4gdm9pZCByZG1hX25sX25ldF9leGl0KHN0cnVjdCByZG1hX2Rldl9uZXQgKnJuZXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmNcbmluZGV4IGI4MTkzZTA3N2E3NDZmLi40Yzc1MDc4NDQ4YTMyNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuY1xuQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgREVDTEFSRV9SV1NFTShyZG1hX25ldHNfcndzZW0pO1xuIGJvb2wgaWJfZGV2aWNlc19zaGFyZWRfbmV0bnMgPSB0cnVlO1xuIG1vZHVsZV9wYXJhbV9uYW1lZChuZXRuc19tb2RlLCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucywgYm9vbCwgMDQ0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhuZXRuc19tb2RlLFxuLVx0XHQgXCJTaGFyZSBkZXZpY2UgYW1vbmcgbmV0IG5hbWVzcGFjZXM7IGRlZmF1bHQ9MSAoc2hhcmVkKVwiKTtcbitcdFx0IFwiU2hhcmUgZGV2aWNlIGFtb25nIG5ldCBuYW1lc3BhY2VzOyBkZWZhdWx0PTEgKHNoYXJlZCkuIEluIGV4Y2x1c2l2ZSBtb2RlIGRldmljZSBuYW1lcyBhcmUgdW5pcXVlIHBlciBuZXQgbmFtZXNwYWNlXCIpO1xuIC8qKlxuICAqIHJkbWFfZGV2X2FjY2Vzc19uZXRucygpIC0gUmV0dXJuIHdoZXRoZXIgYW4gcmRtYSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkXG4gICpcdFx0XHQgICAgIGZyb20gYSBzcGVjaWZpZWQgbmV0IG5hbWVzcGFjZSBvciBub3QuXG5AQCAtMjY4LDcgKzI2OCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWJkZXZfbHNtX25iID0ge1xuIH07XG4gXG4gc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuLVx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCk7XG4rXHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpyZXF1ZXN0ZWRfbmFtZSxcbitcdFx0XHRcdCBjb25zdCBjaGFyICpmYWxsYmFja19wYXR0ZXJuKTtcbiBcbiAvKiBQb2ludGVyIHRvIHRoZSBSQ1UgaGVhZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGliX3BvcnRfZGF0YSBhcnJheSAqL1xuIHN0cnVjdCBpYl9wb3J0X2RhdGFfcmN1IHtcbkBAIC0zNTEsMTMgKzM1MiwxNSBAQCB2b2lkIGliX2RldmljZV9wdXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIH1cbiBFWFBPUlRfU1lNQk9MKGliX2RldmljZV9wdXQpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBzdHJ1Y3QgaWJfZGV2aWNlICpfX2liX2RldmljZV9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lLFxuK1x0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2aWNlO1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcbiBcdHhhX2Zvcl9lYWNoIChcdTAwMjZkZXZpY2VzLCBpbmRleCwgZGV2aWNlKVxuLVx0XHRpZiAoIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpXG4rXHRcdGlmIChyZG1hX2Rldl9hY2Nlc3NfbmV0bnMoZGV2aWNlLCBuZXQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXN0cmNtcChuYW1lLCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpXG4gXHRcdFx0cmV0dXJuIGRldmljZTtcbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTM5NSw3ICszOTgsNyBAQCBpbnQgaWJfZGV2aWNlX3JlbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUobmFtZSkpIHtcbitcdGlmIChfX2liX2RldmljZV9nZXRfYnlfbmFtZShuYW1lLCByZG1hX2Rldl9uZXQoaWJkZXYpKSkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHR9XG5AQCAtNDM1LDcgKzQzOCwxMyBAQCBpbnQgaWJfZGV2aWNlX3NldF9kaW0oc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHVzZV9kaW0pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhbGxvY19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBjb25zdCBjaGFyICpuYW1lKVxuKy8qXG4rICogUGljayBhIGZyZWUgaW5kZXggZm9yIHRoZSAnJWQnIHN0eWxlIEBuYW1lIHBhdHRlcm4gd2l0aGluIG5ldCBuYW1lc3BhY2VcbisgKiBAbmV0LiBSZXR1cm5zIHRoZSBpbmRleCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJybm8uIFRoZSBjYWxsZXIgYnVpbGRzXG4rICogdGhlIGZpbmFsIHVuaXF1ZSBkZXZpY2UgbmFtZSBmcm9tIHRoZSByZXR1cm5lZCBpbmRleC5cbisgKi9cbitzdGF0aWMgaW50IF9fYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IGliX2RldmljZSAqc2tpcClcbiB7XG4gXHRzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2U7XG4gXHR1bnNpZ25lZCBsb25nIGluZGV4O1xuQEAgLTQ0OCw2ICs0NTcsOCBAQCBzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4gXHR4YV9mb3JfZWFjaCAoXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSkge1xuIFx0XHRjaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdO1xuIFxuK1x0XHRpZiAoZGV2aWNlID09IHNraXAgfHwgIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhkZXZpY2UsIG5ldCkpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChzc2NhbmYoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksIG5hbWUsIFx1MDAyNmkpICE9IDEpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChpIFx1MDAzYyAwIHx8IGkgXHUwMDNlPSBJTlRfTUFYKVxuQEAgLTQ2MiwxNSArNDczLDI3IEBAIHN0YXRpYyBpbnQgYWxsb2NfbmFtZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgY29uc3QgY2hhciAqbmFtZSlcbiBcdH1cbiBcbiBcdHJjID0gaWRhX2FsbG9jKFx1MDAyNmludXNlLCBHRlBfS0VSTkVMKTtcbi1cdGlmIChyYyBcdTAwM2MgMClcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRyYyA9IGRldl9zZXRfbmFtZShcdTAwMjZpYmRldi1cdTAwM2VkZXYsIG5hbWUsIHJjKTtcbiBvdXQ6XG4gXHRpZGFfZGVzdHJveShcdTAwMjZpbnVzZSk7XG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWxsb2NfbmFtZV9pZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0cmV0dXJuIF9fYWxsb2NfbmFtZV9pZChuZXQsIG5hbWUsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgaW50IGFsbG9jX25hbWUoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aW50IGlkO1xuK1xuK1x0aWQgPSBhbGxvY19uYW1lX2lkKHJkbWFfZGV2X25ldChpYmRldiksIG5hbWUpO1xuK1x0aWYgKGlkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gaWQ7XG4rXG4rXHRyZXR1cm4gZGV2X3NldF9uYW1lKFx1MDAyNmliZGV2LVx1MDAzZWRldiwgbmFtZSwgaWQpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBpYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4ge1xuIFx0c3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTtcbkBAIC0xMTUxLDggKzExNzQsMTcgQEAgc3RhdGljIHZvaWQgcmRtYV9kZXZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0XHQvKlxuIFx0XHQgKiBJZiB0aGUgcmVhbCBkZXZpY2UgaXMgaW4gdGhlIE5TIHRoZW4gbW92ZSBpdCBiYWNrIHRvIGluaXQuXG4rXHRcdCAqIFByb3ZpZGUgYSBmYWxsYmFjayBwYXR0ZXJuIHNvIGEgbmFtZSBjb25mbGljdCBpbiBpbml0X25ldFxuK1x0XHQgKiBjYW5ub3QgbWFrZSB0aGUgdGVhcmRvd24gbW92ZSBmYWlsLlxuIFx0XHQgKi9cbi1cdFx0cmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgbmV0LCBcdTAwMjZpbml0X25ldCk7XG4rXHRcdGlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoXHUwMDI2ZGV2LVx1MDAzZWNvcmVkZXYucmRtYV9uZXQpKSkge1xuK1x0XHRcdHJldCA9IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhkZXYsIG5ldCwgXHUwMDI2aW5pdF9uZXQsXG4rXHRcdFx0XHRcdFx0ICAgIE5VTEwsIFwiaWJkZXYlZFwiKTtcbitcdFx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbitcdFx0XHRcdFdBUk4oMSxcbitcdFx0XHRcdCAgICAgXCJGYWlsZWQgdG8gbW92ZSBSRE1BIGRldmljZSAlcyB0byBpbml0X25ldCBvbiBuZXRucyBleGl0OiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgICBkZXZfbmFtZShcdTAwMjZkZXYtXHUwMDNlZGV2KSwgcmV0KTtcbitcdFx0fVxuIFxuIFx0XHRwdXRfZGV2aWNlKFx1MDAyNmRldi1cdTAwM2VkZXYpO1xuIFx0XHRkb3duX3JlYWQoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG5AQCAtMTIwNiw3ICsxMjM4LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHJkbWFfZGV2X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiB9XG4gXG4gLypcbi0gKiBBc3NpZ24gdGhlIHVuaXF1ZSBzdHJpbmcgZGV2aWNlIG5hbWUgYW5kIHRoZSB1bmlxdWUgZGV2aWNlIGluZGV4LiBUaGlzIGlzXG4rICogQXNzaWduIHRoZSB1bmlxdWUgc3RyaW5nIGRldmljZSBuYW1lIGFuZCB0aGUgdW5pcXVlIGRldmljZSBpbmRleC4gVGhlIGRldmljZVxuKyAqIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgbmV0IG5hbWVzcGFjZSB0aGUgZGV2aWNlIGlzIGFzc2lnbmVkIHRvLiBUaGlzIGlzXG4gICogdW5kb25lIGJ5IGliX2RlYWxsb2NfZGV2aWNlLlxuICAqL1xuIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKVxuQEAgLTEyMjMsNyArMTI1Niw4IEBAIHN0YXRpYyBpbnQgYXNzaWduX25hbWUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKSB7XG4rXHRpZiAoX19pYl9kZXZpY2VfZ2V0X2J5X25hbWUoZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiksXG4rXHRcdFx0XHQgICAgcmRtYV9kZXZfbmV0KGRldmljZSkpKSB7XG4gXHRcdHJldCA9IC1FTkZJTEU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuQEAgLTEzODgsOCArMTQyMiw5IEBAIHN0YXRpYyB2b2lkIGliX2RldmljZV9ub3RpZnlfcmVnaXN0ZXIoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKVxuIC8qKlxuICAqIGliX3JlZ2lzdGVyX2RldmljZSAtIFJlZ2lzdGVyIGFuIElCIGRldmljZSB3aXRoIElCIGNvcmVcbiAgKiBAZGV2aWNlOiBEZXZpY2UgdG8gcmVnaXN0ZXJcbi0gKiBAbmFtZTogdW5pcXVlIHN0cmluZyBkZXZpY2UgbmFtZS4gVGhpcyBtYXkgaW5jbHVkZSBhICclJyB3aGljaCB3aWxsXG4tICogXHQgIGNhdXNlIGEgdW5pcXVlIGluZGV4IHRvIGJlIGFkZGVkIHRvIHRoZSBwYXNzZWQgZGV2aWNlIG5hbWUuXG4rICogQG5hbWU6IGRldmljZSBuYW1lLCB1bmlxdWUgd2l0aGluIHRoZSBkZXZpY2UncyBuZXQgbmFtZXNwYWNlLiBUaGlzIG1heVxuKyAqXHQgIGluY2x1ZGUgYSAnJScgd2hpY2ggd2lsbCBjYXVzZSBhIHVuaXF1ZSBpbmRleCB0byBiZSBhZGRlZCB0byB0aGVcbisgKlx0ICBwYXNzZWQgZGV2aWNlIG5hbWUuXG4gICogQGRtYV9kZXZpY2U6IHBvaW50ZXIgdG8gYSBETUEtY2FwYWJsZSBkZXZpY2UuIElmICVOVUxMLCB0aGVuIHRoZSBJQlxuICAqXHQgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuIEluIHRoaXMgY2FzZSB0aGUgY2FsbGVyIHNob3VsZCBmdWxseVxuICAqXHRcdHNldHVwIHRoZSBpYmRldiBmb3IgRE1BLiBUaGlzIHVzdWFsbHkgbWVhbnMgdXNpbmcgZG1hX3ZpcnRfb3BzLlxuQEAgLTE2NzAsMTQgKzE3MDUsODMgQEAgdm9pZCBpYl91bnJlZ2lzdGVyX2RldmljZV9xdWV1ZWQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKGliX3VucmVnaXN0ZXJfZGV2aWNlX3F1ZXVlZCk7XG4gXG4rc3RhdGljIGJvb2wgcmRtYV9kZXZfbmFtZV9pbl9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpza2lwLCBzdHJ1Y3QgbmV0ICpuZXQsXG4rXHRcdFx0XHQgICBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZTtcbitcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuK1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2ZGV2aWNlcywgaW5kZXgsIGRldmljZSlcbitcdFx0aWYgKGRldmljZSAhPSBza2lwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcmRtYV9kZXZfYWNjZXNzX25ldG5zKGRldmljZSwgbmV0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFzdHJjbXAobmFtZSwgZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldikpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisvKlxuKyAqIENob29zZSB0aGUgbmFtZSBAZGV2aWNlIHNob3VsZCB1c2UgaW4gbmV0IG5hbWVzcGFjZSBAbmV0LiBAcmVxdWVzdGVkX25hbWVcbisgKiBpcyB1c2VkIGFzIGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSB3aGVuIHNldC4gT3RoZXJ3aXNlIGtlZXAgdGhlIGN1cnJlbnQgbmFtZVxuKyAqIHdoZW4gaXQgaXMgZnJlZSwgb3IgdXNlIGEgdHJ1c3RlZCAnJWQnIEBmYWxsYmFja19wYXR0ZXJuIGZvciB0ZWFyZG93bi4gVGhlXG4rICogY2FsbGVyIG11c3QgaG9sZCB0aGUgd3JpdGUgc2lkZSBvZiBkZXZpY2VzX3J3c2VtLlxuKyAqL1xuK3N0YXRpYyBpbnQgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IG5ldCAqbmV0LFxuK1x0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF9uYW1lLFxuK1x0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKmZhbGxiYWNrX3BhdHRlcm4sXG4rXHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbixcbitcdFx0XHRcdCAgICBjb25zdCBjaGFyICoqbmV3X25hbWUpXG4re1xuK1x0aW50IGlkO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbitcbitcdGlmIChyZXF1ZXN0ZWRfbmFtZSkge1xuK1x0XHRpZiAoIXJkbWFfZGV2X25hbWVfaW5fbmV0bnMoZGV2aWNlLCBuZXQsIHJlcXVlc3RlZF9uYW1lKSkge1xuK1x0XHRcdCpuZXdfbmFtZSA9IHJlcXVlc3RlZF9uYW1lO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1x0fVxuK1xuK1x0aWYgKCFyZG1hX2Rldl9uYW1lX2luX25ldG5zKGRldmljZSwgbmV0LCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSkpIHtcbitcdFx0Km5ld19uYW1lID0gZGV2X25hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldik7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKCFmYWxsYmFja19wYXR0ZXJuKVxuK1x0XHRyZXR1cm4gLUVFWElTVDtcbitcbitcdHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgXCJpYmRldiV1XCIsIGRldmljZS1cdTAwM2VpbmRleCk7XG4rXHRpZiAoIXJkbWFfZGV2X25hbWVfaW5fbmV0bnMoZGV2aWNlLCBuZXQsIGJ1ZikpIHtcbitcdFx0Km5ld19uYW1lID0gYnVmO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlkID0gX19hbGxvY19uYW1lX2lkKG5ldCwgZmFsbGJhY2tfcGF0dGVybiwgZGV2aWNlKTtcbitcdGlmIChpZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGlkO1xuK1x0c25wcmludGYoYnVmLCBidWZfbGVuLCBmYWxsYmFja19wYXR0ZXJuLCBpZCk7XG4rXHQqbmV3X25hbWUgPSBidWY7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbiAgKiBUaGUgY2FsbGVyIG11c3QgcGFzcyBpbiBhIGRldmljZSB0aGF0IGhhcyB0aGUga3JlZiBoZWxkIGFuZCB0aGUgcmVmY291bnRcbiAgKiByZWxlYXNlZC4gSWYgdGhlIGRldmljZSBpcyBpbiBjdXJfbmV0IGFuZCBzdGlsbCByZWdpc3RlcmVkIHRoZW4gaXQgaXMgbW92ZWRcbiAgKiBpbnRvIG5ldC5cbisgKlxuKyAqIE5hbWluZyBydWxlcyBhcmUgaGFuZGxlZCBieSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoKS5cbiAgKi9cbiBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsXG4tXHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0KVxuK1x0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcmVxdWVzdGVkX25hbWUsXG4rXHRcdFx0XHQgY29uc3QgY2hhciAqZmFsbGJhY2tfcGF0dGVybilcbiB7XG4rXHRjaGFyIGJ1ZltJQl9ERVZJQ0VfTkFNRV9NQVhdO1xuK1x0Y29uc3QgY2hhciAqbmV3X25hbWU7XG4gXHRpbnQgcmV0MiA9IC1FSU5WQUw7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE2OTQsMzAgKzE3OTgsNjUgQEAgc3RhdGljIGludCByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgbmV0ICpjdXJfbmV0LFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGlmICghZmFsbGJhY2tfcGF0dGVybikge1xuK1x0XHQvKlxuK1x0XHQgKiBSZWplY3QgYSBwcmVkaWN0YWJsZSBuYW1lIGNvbmZsaWN0IGJlZm9yZSB0ZWFyaW5nIGFueXRoaW5nXG4rXHRcdCAqIGRvd24sIHNvIGEgZG9vbWVkIHVzZXIgbW92ZSBkb2VzIG5vdCBkaXNhYmxlIGEgbGl2ZSBkZXZpY2UuXG4rXHRcdCAqL1xuK1x0XHRkb3duX3dyaXRlKFx1MDAyNmRldmljZXNfcndzZW0pO1xuK1x0XHRyZXQgPSByZG1hX2Rldl9waWNrX25ldG5zX25hbWUoZGV2aWNlLCBuZXQsIHJlcXVlc3RlZF9uYW1lLFxuK1x0XHRcdFx0XHQgICAgICAgZmFsbGJhY2tfcGF0dGVybiwgYnVmLFxuK1x0XHRcdFx0XHQgICAgICAgc2l6ZW9mKGJ1ZiksIFx1MDAyNm5ld19uYW1lKTtcbitcdFx0dXBfd3JpdGUoXHUwMDI2ZGV2aWNlc19yd3NlbSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gXHRrb2JqZWN0X3VldmVudChcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LmtvYmosIEtPQkpfUkVNT1ZFKTtcbiBcdGRpc2FibGVfZGV2aWNlKGRldmljZSk7XG4gXG4gXHQvKlxuLVx0ICogQXQgdGhpcyBwb2ludCBubyBvbmUgY2FuIGJlIHVzaW5nIHRoZSBkZXZpY2UsIHNvIGl0IGlzIHNhZmUgdG9cbi1cdCAqIGNoYW5nZSB0aGUgbmFtZXNwYWNlLlxuK1x0ICogUmVjb21wdXRlIHRoZSBkZXN0aW5hdGlvbiBuYW1lIHVuZGVyIHRoZSB3cml0ZSBzaWRlIG9mIGRldmljZXNfcndzZW1cbitcdCAqIG5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQsIGNsb3NpbmcgcmFjZXMgd2l0aCBhIGNvbmN1cnJlbnRcbitcdCAqIHJlZ2lzdHJhdGlvbiBvciByZW5hbWUsIHRoZW4gcHVibGlzaCB0aGUgbmV3IG5hbWVzcGFjZSBhdCB0aGUgc3lzZnNcbitcdCAqIGxldmVsLlxuIFx0ICovXG4tXHR3cml0ZV9wbmV0KFx1MDAyNmRldmljZS1cdTAwM2Vjb3JlZGV2LnJkbWFfbmV0LCBuZXQpO1xuK1x0ZG93bl93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbitcdHJldCA9IHJkbWFfZGV2X3BpY2tfbmV0bnNfbmFtZShkZXZpY2UsIG5ldCwgcmVxdWVzdGVkX25hbWUsXG4rXHRcdFx0XHQgICAgICAgZmFsbGJhY2tfcGF0dGVybiwgYnVmLCBzaXplb2YoYnVmKSxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZuZXdfbmFtZSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGlmIChmYWxsYmFja19wYXR0ZXJuKSB7XG4rXHRcdFx0V0FSTigxLFxuK1x0XHRcdCAgICAgXCIlczogZmFpbGVkIHRvIHBpY2sgZGV2aWNlIG5hbWUgZHVyaW5nIG5hbWVzcGFjZSB0ZWFyZG93bjogJWRcXG5cIixcbitcdFx0XHQgICAgIF9fZnVuY19fLCByZXQpO1xuK1x0XHRcdHdyaXRlX3BuZXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNvcmVkZXYucmRtYV9uZXQsIG5ldCk7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fVxuK1x0XHRnb3RvIHJlbmFtZV9kb25lO1xuK1x0fVxuIFxuLVx0ZG93bl9yZWFkKFx1MDAyNmRldmljZXNfcndzZW0pO1xuLVx0Lypcbi1cdCAqIEN1cnJlbnRseSByZG1hIGRldmljZXMgYXJlIHN5c3RlbSB3aWRlIHVuaXF1ZS4gU28gdGhlIGRldmljZSBuYW1lXG4tXHQgKiBpcyBndWFyYW50ZWVkIGZyZWUgaW4gdGhlIG5ldyBuYW1lc3BhY2UuIFB1Ymxpc2ggdGhlIG5ldyBuYW1lc3BhY2Vcbi1cdCAqIGF0IHRoZSBzeXNmcyBsZXZlbC5cbi1cdCAqL1xuLVx0cmV0ID0gZGV2aWNlX3JlbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LCBkZXZfbmFtZShcdTAwMjZkZXZpY2UtXHUwMDNlZGV2KSk7XG4tXHR1cF9yZWFkKFx1MDAyNmRldmljZXNfcndzZW0pO1xuK1x0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgbmV0KTtcbitcdHJldCA9IGRldmljZV9yZW5hbWUoXHUwMDI2ZGV2aWNlLVx1MDAzZWRldiwgbmV3X25hbWUpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfd2FybihcdTAwMjZkZXZpY2UtXHUwMDNlZGV2LFxuLVx0XHRcdCBcIiVzOiBDb3VsZG4ndCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXG5cIixcbi1cdFx0XHQgX19mdW5jX18pO1xuLVx0XHQvKiBUcnkgYW5kIHB1dCB0aGluZ3MgYmFjayBhbmQgcmUtZW5hYmxlIHRoZSBkZXZpY2UgKi9cbi1cdFx0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgY3VyX25ldCk7XG4rXHRcdGlmIChmYWxsYmFja19wYXR0ZXJuKSB7XG4rXHRcdFx0V0FSTigxLFxuK1x0XHRcdCAgICAgXCIlczogZmFpbGVkIHRvIHJlbmFtZSBkZXZpY2UgZHVyaW5nIG5hbWVzcGFjZSB0ZWFyZG93bjogJWRcXG5cIixcbitcdFx0XHQgICAgIF9fZnVuY19fLCByZXQpO1xuK1x0XHRcdHJldCA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0ZGV2X3dhcm4oXHUwMDI2ZGV2aWNlLVx1MDAzZWRldixcbitcdFx0XHRcdCBcIiVzOiBDb3VsZG4ndCByZW5hbWUgZGV2aWNlIGFmdGVyIG5hbWVzcGFjZSBjaGFuZ2VcXG5cIixcbitcdFx0XHRcdCBfX2Z1bmNfXyk7XG4rXHRcdFx0LyogVHJ5IGFuZCBwdXQgdGhpbmdzIGJhY2sgYW5kIHJlLWVuYWJsZSB0aGUgZGV2aWNlICovXG4rXHRcdFx0d3JpdGVfcG5ldChcdTAwMjZkZXZpY2UtXHUwMDNlY29yZWRldi5yZG1hX25ldCwgY3VyX25ldCk7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHN0cnNjcHkoZGV2aWNlLVx1MDAzZW5hbWUsIGRldl9uYW1lKFx1MDAyNmRldmljZS1cdTAwM2VkZXYpLFxuK1x0XHRcdElCX0RFVklDRV9OQU1FX01BWCk7XG4gXHR9XG4rcmVuYW1lX2RvbmU6XG4rXHR1cF93cml0ZShcdTAwMjZkZXZpY2VzX3J3c2VtKTtcbiBcbiBcdHJldDIgPSBlbmFibGVfZGV2aWNlX2FuZF9nZXQoZGV2aWNlKTtcbiBcdGlmIChyZXQyKSB7XG5AQCAtMTc0MCwzNiArMTg3OSw3MiBAQCBzdGF0aWMgaW50IHJkbWFfZGV2X2NoYW5nZV9uZXRucyhzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBuZXQgKmN1cl9uZXQsXG4gfVxuIFxuIGludCBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdCAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBuc19mZClcbitcdFx0XHQgICAgc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgbnNfZmQsIGNvbnN0IGNoYXIgKm5hbWUsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gXHRpbnQgcmV0O1xuIFxuIFx0bmV0ID0gZ2V0X25ldF9uc19ieV9mZChuc19mZCk7XG4gXHRpZiAoSVNfRVJSKG5ldCkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkludmFsaWQgdGFyZ2V0IG5ldCBuYW1lc3BhY2UgZmRcIik7XG4gXHRcdHJldCA9IFBUUl9FUlIobmV0KTtcbiBcdFx0Z290byBuZXRfZXJyO1xuIFx0fVxuIFxuIFx0aWYgKCFuZXRsaW5rX25zX2NhcGFibGUoc2tiLCBuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIk1pc3NpbmcgQ0FQX05FVF9BRE1JTiBpbiB0aGUgdGFyZ2V0IG5ldCBuYW1lc3BhY2VcIik7XG4gXHRcdHJldCA9IC1FUEVSTTtcbiBcdFx0Z290byBuc19lcnI7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogTW92aW5nIGEgZGV2aWNlIHRvIHRoZSBuYW1lc3BhY2UgaXQgYWxyZWFkeSBsaXZlcyBpbiBpcyBhIG5vLW9wOyBhXG4rXHQgKiBzdXBwbGllZCBuYW1lIHN0aWxsIHJlbmFtZXMgaXQgaW4gcGxhY2UuXG4rXHQgKi9cbitcdGlmIChuZXRfZXEobmV0LCByZWFkX3BuZXQoXHUwMDI2ZGV2LVx1MDAzZWNvcmVkZXYucmRtYV9uZXQpKSkge1xuK1x0XHRyZXQgPSBuYW1lID8gaWJfZGV2aWNlX3JlbmFtZShkZXYsIG5hbWUpIDogMDtcbitcbitcdFx0aWYgKHJldCA9PSAtRUVYSVNUKVxuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkRldmljZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwiKTtcbitcdFx0ZWxzZSBpZiAocmV0ID09IC1FSU5WQUwgXHUwMDI2XHUwMDI2IG5hbWUpXG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiVW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCIpO1xuK1x0XHRnb3RvIG5zX2VycjtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBBbGwgdGhlIGliX2NsaWVudHMsIGluY2x1ZGluZyB1dmVyYnMsIGFyZSByZXNldCB3aGVuIHRoZSBuYW1lc3BhY2UgaXNcbiBcdCAqIGNoYW5nZWQgYW5kIHRoaXMgY2Fubm90IGJlIGJsb2NrZWQgd2FpdGluZyBmb3IgdXNlcnNwYWNlIHRvIGRvXG4gXHQgKiBzb21ldGhpbmcsIHNvIGRpc2Fzc29jaWF0aW9uIGlzIG1hbmRhdG9yeS5cbiBcdCAqL1xuLVx0aWYgKCFkZXYtXHUwMDNlb3BzLmRpc2Fzc29jaWF0ZV91Y29udGV4dCB8fCBpYl9kZXZpY2VzX3NoYXJlZF9uZXRucykge1xuK1x0aWYgKGliX2RldmljZXNfc2hhcmVkX25ldG5zKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJDYW5ub3QgY2hhbmdlIG5ldCBuYW1lc3BhY2Ugb2YgUkRNQSBkZXZpY2UgaW4gc2hhcmVkIG5ldG5zIG1vZGVcIik7XG4rXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuK1x0XHRnb3RvIG5zX2VycjtcbitcdH1cbitcbitcdGlmICghZGV2LVx1MDAzZW9wcy5kaXNhc3NvY2lhdGVfdWNvbnRleHQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkRldmljZSBkb2VzIG5vdCBzdXBwb3J0IG5hbWVzcGFjZSBjaGFuZ2VzIChubyBkaXNhc3NvY2lhdGUgc3VwcG9ydClcIik7XG4gXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuIFx0XHRnb3RvIG5zX2VycjtcbiBcdH1cbiBcbiBcdGdldF9kZXZpY2UoXHUwMDI2ZGV2LVx1MDAzZWRldik7XG4gXHRpYl9kZXZpY2VfcHV0KGRldik7XG4tXHRyZXQgPSByZG1hX2Rldl9jaGFuZ2VfbmV0bnMoZGV2LCBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zLCBuZXQpO1xuK1x0cmV0ID0gcmRtYV9kZXZfY2hhbmdlX25ldG5zKGRldiwgY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucywgbmV0LCBuYW1lLFxuK1x0XHRcdFx0ICAgIE5VTEwpO1xuIFx0cHV0X2RldmljZShcdTAwMjZkZXYtXHUwMDNlZGV2KTtcbitcdGlmIChyZXQgPT0gLUVFWElTVClcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkRldmljZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSB0YXJnZXQgbmV0IG5hbWVzcGFjZVwiKTtcbitcdGVsc2UgaWYgKHJldCA9PSAtRUlOVkFMIFx1MDAyNlx1MDAyNiBuYW1lKVxuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwiVW5hYmxlIHRvIHVzZSByZXF1ZXN0ZWQgZGV2aWNlIG5hbWUgaW4gdGhlIHRhcmdldCBuZXQgbmFtZXNwYWNlXCIpO1xuIFxuIFx0cHV0X25ldChuZXQpO1xuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY1xuaW5kZXggYWFlNGYzZjZiY2JhMTQuLjRlZmEzODdlYzFiZTE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuY1xuQEAgLTExNzgsNiArMTE3OCwyNCBAQCBzdGF0aWMgaW50IG5sZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0aWYgKCFkZXZpY2UpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0aWYgKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSkge1xuK1x0XHRjaGFyIG5hbWVbSUJfREVWSUNFX05BTUVfTUFYXSA9IHt9O1xuK1x0XHR1MzIgbnNfZmQ7XG4rXG4rXHRcdGlmICh0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdKSB7XG4rXHRcdFx0bmxhX3N0cnNjcHkobmFtZSwgdGJbUkRNQV9OTERFVl9BVFRSX0RFVl9OQU1FXSxcbitcdFx0XHRcdCAgICBJQl9ERVZJQ0VfTkFNRV9NQVgpO1xuK1x0XHRcdGlmIChzdHJsZW4obmFtZSkgPT0gMCkge1xuK1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gZG9uZTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0bnNfZmQgPSBubGFfZ2V0X3UzMih0YltSRE1BX05MREVWX05FVF9OU19GRF0pO1xuK1x0XHRlcnIgPSBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dChza2IsIGRldmljZSwgbnNfZmQsXG4rXHRcdFx0XHRcdCAgICAgIG5hbWVbMF0gPyBuYW1lIDogTlVMTCwgZXh0YWNrKTtcbitcdFx0Z290byBwdXRfZG9uZTtcbitcdH1cbitcbiBcdGlmICh0YltSRE1BX05MREVWX0FUVFJfREVWX05BTUVdKSB7XG4gXHRcdGNoYXIgbmFtZVtJQl9ERVZJQ0VfTkFNRV9NQVhdID0ge307XG4gXG5AQCAtMTE5MSwxNCArMTIwOSw2IEBAIHN0YXRpYyBpbnQgbmxkZXZfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmICh0YltSRE1BX05MREVWX05FVF9OU19GRF0pIHtcbi1cdFx0dTMyIG5zX2ZkO1xuLVxuLVx0XHRuc19mZCA9IG5sYV9nZXRfdTMyKHRiW1JETUFfTkxERVZfTkVUX05TX0ZEXSk7XG4tXHRcdGVyciA9IGliX2RldmljZV9zZXRfbmV0bnNfcHV0KHNrYiwgZGV2aWNlLCBuc19mZCk7XG4tXHRcdGdvdG8gcHV0X2RvbmU7XG4tXHR9XG4tXG4gXHRpZiAodGJbUkRNQV9OTERFVl9BVFRSX0RFVl9ESU1dKSB7XG4gXHRcdHU4IHVzZV9kaW07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbmluZGV4IDlhZjMxZDFkOWQ3MGM3Li5hODJjNDY5NjU0MTZhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NlY3VyaXR5LmNcbkBAIC03MDAsNiArNzAwLDEyIEBAIGludCBpYl9tYWRfYWdlbnRfc2VjdXJpdHlfc2V0dXAoc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnQsXG4gXHRpZiAocXBfdHlwZSAhPSBJQl9RUFRfU01JKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdC8qXG4rXHQgKiBTRUxpbnV4IGxhYmVscyBhbiBlbmRwb3J0IGJ5IChkZXZpY2UgbmFtZSwgcG9ydCkgZnJvbSBhIGdsb2JhbFxuK1x0ICogcG9saWN5LiBJZiBkZXZpY2VzIGluIGRpZmZlcmVudCBuZXQgbmFtZXNwYWNlcyBzaGFyZSBhIG5hbWUsIHRoZXkgZ2V0XG4rXHQgKiB0aGUgc2FtZSBsYWJlbDsgZGlzdGluZ3Vpc2hpbmcgdGhlbSB3b3VsZCBuZWVkIG5ldCBuYW1lc3BhY2Ugc3VwcG9ydFxuK1x0ICogaW4gdGhlIHBvbGljeSBsYW5ndWFnZSBhbmQgdG9vbGluZy5cbitcdCAqL1xuIFx0c3Bpbl9sb2NrKFx1MDAyNm1hZF9hZ2VudF9saXN0X2xvY2spO1xuIFx0cmV0ID0gc2VjdXJpdHlfaWJfZW5kcG9ydF9tYW5hZ2Vfc3VibmV0KGFnZW50LVx1MDAzZXNlY3VyaXR5LFxuIFx0XHRcdFx0XHRcdGRldl9uYW1lKFx1MDAyNmFnZW50LVx1MDAzZWRldmljZS1cdTAwM2VkZXYpLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuY1xuaW5kZXggN2Y3MjNhMmYzNzAwNTkuLmE0ZWFkODljY2JkMzQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmNcbkBAIC0xMSw3ICsxMSw2IEBAXG4gXG4gI2luY2x1ZGUgXCJyeGUuaFwiXG4gI2luY2x1ZGUgXCJyeGVfbG9jLmhcIlxuLSNpbmNsdWRlIFwicnhlX3F1ZXVlLmhcIlxuIFxuIHZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuIHtcbkBAIC0zMCwyOSArMjksNiBAQCB2b2lkIHJ4ZV9tbWFwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbiBcdGtmcmVlKGlwKTtcbiB9XG4gXG4tLypcbi0gKiBvcGVuIGFuZCBjbG9zZSBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IHRpbWVzIHRoZSBtZW1vcnkgcmVnaW9uIGlzIG1hcHBlZCxcbi0gKiB0byBhdm9pZCByZWxlYXNpbmcgaXQuXG4tICovXG4tc3RhdGljIHZvaWQgcnhlX3ZtYV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXG4tXHRrcmVmX2dldChcdTAwMjZpcC1cdTAwM2VyZWYpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCByeGVfdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXG4tXHRrcmVmX3B1dChcdTAwMjZpcC1cdTAwM2VyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHJ4ZV92bV9vcHMgPSB7XG4tXHQub3BlbiA9IHJ4ZV92bWFfb3Blbixcbi1cdC5jbG9zZSA9IHJ4ZV92bWFfY2xvc2UsXG4tfTtcbi1cbiAvKipcbiAgKiByeGVfbW1hcCAtIGNyZWF0ZSBhIG5ldyBtbWFwIHJlZ2lvblxuICAqIEBjb250ZXh0OiB0aGUgSUIgdXNlciBjb250ZXh0IG9mIHRoZSBwcm9jZXNzIG1ha2luZyB0aGUgbW1hcCgpIGNhbGxcbkBAIC0xMDYsMTcgKzgyLDEwIEBAIGludCByeGVfbW1hcChzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpcC1cdTAwM2VwZW5kaW5nX21tYXBzKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4ZS1cdTAwM2VwZW5kaW5nX2xvY2spO1xuIFxuLVx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnJ4ZV92bV9vcHM7XG4tXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gaXA7XG4tXG4gXHRyZXQgPSByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgaXAtXHUwMDNlb2JqLCAwKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IE5VTEw7XG4tXHRcdHZtYS1cdTAwM2V2bV9vcHMgPSBOVUxMO1xuLVx0XHRrcmVmX3B1dChcdTAwMjZpcC1cdTAwM2VyZWYsIHJ4ZV9tbWFwX3JlbGVhc2UpO1xuK1x0a3JlZl9wdXQoXHUwMDI2aXAtXHUwMDNlcmVmLCByeGVfbW1hcF9yZWxlYXNlKTtcbitcdGlmIChyZXQpXG4gXHRcdHJ4ZV9kYmdfZGV2KHJ4ZSwgXCJlcnIgJWQgZnJvbSByZW1hcF92bWFsbG9jX3JhbmdlXFxuXCIsIHJldCk7XG4tXHRcdGdvdG8gZG9uZTtcbi1cdH1cbiBcbiBkb25lOlxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuaW5kZXggMWVjMTMwZmVlOGVhN2EuLjZlYjEwZDJmMDY1M2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuY1xuQEAgLTI0MCw2ICsyNDAsMTAgQEAgc3RhdGljIHZvaWQgcnhlX2RlYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjKVxuIFx0XHRyeGVfZXJyX3VjKHVjLCBcImNsZWFudXAgZmFpbGVkLCBlcnIgPSAlZFxcblwiLCBlcnIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqaWJ1Yylcbit7XG4rfVxuK1xuIC8qIHBkICovXG4gc3RhdGljIGludCByeGVfYWxsb2NfcGQoc3RydWN0IGliX3BkICppYnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKVxuIHtcbkBAIC0xNDc4LDYgKzE0ODIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGliX2RldmljZV9vcHMgcnhlX2Rldl9vcHMgPSB7XG4gXHQuZGVzdHJveV9zcnEgPSByeGVfZGVzdHJveV9zcnEsXG4gXHQuZGV0YWNoX21jYXN0ID0gcnhlX2RldGFjaF9tY2FzdCxcbiBcdC5kZXZpY2VfZ3JvdXAgPSBcdTAwMjZyeGVfYXR0cl9ncm91cCxcbitcdC5kaXNhc3NvY2lhdGVfdWNvbnRleHQgPSByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0LFxuIFx0LmVuYWJsZV9kcml2ZXIgPSByeGVfZW5hYmxlX2RyaXZlcixcbiBcdC5nZXRfZG1hX21yID0gcnhlX2dldF9kbWFfbXIsXG4gXHQuZ2V0X2h3X3N0YXRzID0gcnhlX2liX2dldF9od19zdGF0cyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jXG5pbmRleCAwY2FlYmJjMjgxMGZmMy4uMmZjOGUxMzNjNzBmYzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmNcbkBAIC0zMTg5LDEwICszMTg5LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzcnBfY2xhc3NfYXR0cnNbXTtcbiBcbiBBVFRSSUJVVEVfR1JPVVBTKHNycF9jbGFzcyk7XG4gXG4rLypcbisgKiBTUlAgaG9zdHMgYXJlIG5hbWVkIGFmdGVyIHRoZWlyIGliIGRldmljZSwgc28gdGFnIHRoZSBjbGFzcyBieSB0aGUgaWJcbisgKiBkZXZpY2UncyBuZXQgbmFtZXNwYWNlLlxuKyAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnNfY29tbW9uICpzcnBfbmV0X25hbWVzcGFjZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IHNycF9ob3N0ICpob3N0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNycF9ob3N0LCBkZXYpO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gcmRtYV9kZXZfbmV0KGhvc3QtXHUwMDNlc3JwX2Rldi1cdTAwM2VkZXYpO1xuK1xuK1x0cmV0dXJuIG5ldCA/IHRvX25zX2NvbW1vbihuZXQpIDogTlVMTDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBjbGFzcyBzcnBfY2xhc3MgPSB7XG4gXHQubmFtZSAgICA9IFwiaW5maW5pYmFuZF9zcnBcIixcbiBcdC5kZXZfZ3JvdXBzID0gc3JwX2NsYXNzX2dyb3Vwcyxcbi1cdC5kZXZfcmVsZWFzZSA9IHNycF9yZWxlYXNlX2RldlxuK1x0LmRldl9yZWxlYXNlID0gc3JwX3JlbGVhc2VfZGV2LFxuK1x0Lm5zX3R5cGUgPSBcdTAwMjZuZXRfbnNfdHlwZV9vcGVyYXRpb25zLFxuK1x0Lm5hbWVzcGFjZSA9IHNycF9uZXRfbmFtZXNwYWNlLFxuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oXG5pbmRleCA0MDRlNzQ2NTUyY2E4Zi4uOWE1YzllZTcyOGU3ZGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaFxuQEAgLTM0LDYgKzM0LDcgQEAgc3RydWN0IHJkbWFjZ19kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0ZGV2X25vZGU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRycG9vbHM7XG4gXHRjaGFyXHRcdFx0Km5hbWU7XG4rXHR1MzJcdFx0XHRpbmRleDtcbiB9O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvcmRtYS9yZG1hX25ldGxpbmsuaFxuaW5kZXggM2FmOTQ2ZWNiYWMzZWQuLmVlMTFjM2JiYmFlMjJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL3JkbWEvcmRtYV9uZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9yZG1hL3JkbWFfbmV0bGluay5oXG5AQCAtNTE2LDcgKzUxNiwxMCBAQCBlbnVtIHJkbWFfbmxkZXZfYXR0ciB7XG4gXHRSRE1BX05MREVWX0FUVFJfREVWX1BST1RPQ09MLFx0XHQvKiBzdHJpbmcgKi9cbiBcbiBcdC8qXG4tXHQgKiBGaWxlIGRlc2NyaXB0b3IgaGFuZGxlIG9mIHRoZSBuZXQgbmFtZXNwYWNlIG9iamVjdFxuK1x0ICogRmlsZSBkZXNjcmlwdG9yIGhhbmRsZSBvZiB0aGUgbmV0IG5hbWVzcGFjZSBvYmplY3QuIE1heSBiZSBjb21iaW5lZFxuK1x0ICogd2l0aCBSRE1BX05MREVWX0FUVFJfREVWX05BTUUgKGEgbGl0ZXJhbCBkZXZpY2UgbmFtZSkgdG8gYWxzbyByZW5hbWVcbitcdCAqIHRoZSBkZXZpY2UgaW4gdGhlIGRlc3RpbmF0aW9uIG5hbWVzcGFjZTsgdGhlIG1vdmUgZmFpbHMgd2l0aCAtRUVYSVNUXG4rXHQgKiBpZiB0aGF0IG5hbWUgaXMgYWxyZWFkeSB0YWtlbiB0aGVyZS5cbiBcdCAqL1xuIFx0UkRNQV9OTERFVl9ORVRfTlNfRkQsXHRcdFx0LyogdTMyICovXG4gXHQvKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAvcmRtYS5jIGIva2VybmVsL2Nncm91cC9yZG1hLmNcbmluZGV4IDVlODJhMDNiMzI3MGFkLi45NDg5ZjNkZjBiZjNmZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9jZ3JvdXAvcmRtYS5jXG4rKysgYi9rZXJuZWwvY2dyb3VwL3JkbWEuY1xuQEAgLTE5LDYgKzE5LDcgQEBcbiAjZGVmaW5lIFJETUFDR19NQVhfU1RSIFwibWF4XCJcbiBcbiBlbnVtIHJkbWFjZ19saW1pdF90b2tlbnMge1xuK1x0UkRNQUNHX0RFVklDRV9JTkRFWCxcbiBcdFJETUFDR19IQ0FfSEFORExFX1ZBTCxcbiBcdFJETUFDR19IQ0FfSEFORExFX01BWCxcbiBcdFJETUFDR19IQ0FfT0JKRUNUX1ZBTCxcbkBAIC0yNyw2ICsyOCw3IEBAIGVudW0gcmRtYWNnX2xpbWl0X3Rva2VucyB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCByZG1hY2dfbGltaXRfdG9rZW5zID0ge1xuK1x0eyBSRE1BQ0dfREVWSUNFX0lOREVYLFx0XHRcImluZGV4PSV1XCJcdH0sXG4gXHR7IFJETUFDR19IQ0FfSEFORExFX1ZBTCxcdFwiaGNhX2hhbmRsZT0lZFwiXHR9LFxuIFx0eyBSRE1BQ0dfSENBX0hBTkRMRV9NQVgsXHRcImhjYV9oYW5kbGU9bWF4XCJcdH0sXG4gXHR7IFJETUFDR19IQ0FfT0JKRUNUX1ZBTCxcdFwiaGNhX29iamVjdD0lZFwiXHR9LFxuQEAgLTQ2NCwxNyArNDY2LDUzIEBAIHZvaWQgcmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXG4gfVxuIEVYUE9SVF9TWU1CT0wocmRtYWNnX3VucmVnaXN0ZXJfZGV2aWNlKTtcbiBcbi1zdGF0aWMgc3RydWN0IHJkbWFjZ19kZXZpY2UgKnJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZChjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqXG4rcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaGFzX2luZGV4LCB1MzIgaW5kZXgpXG4ge1xuK1x0c3RydWN0IHJkbWFjZ19kZXZpY2UgKm1hdGNoID0gTlVMTDtcbiBcdHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2U7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnJkbWFjZ19tdXRleCk7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKVxuLVx0XHRpZiAoIXN0cmNtcChuYW1lLCBkZXZpY2UtXHUwMDNlbmFtZSkpXG4tXHRcdFx0cmV0dXJuIGRldmljZTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbitcdFx0aWYgKHN0cmNtcChuYW1lLCBkZXZpY2UtXHUwMDNlbmFtZSkpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRyZXR1cm4gTlVMTDtcbitcdFx0aWYgKGhhc19pbmRleCkge1xuK1x0XHRcdGlmIChkZXZpY2UtXHUwMDNlaW5kZXggPT0gaW5kZXgpXG4rXHRcdFx0XHRyZXR1cm4gZGV2aWNlO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtYXRjaClcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PVFVOSVEpO1xuK1x0XHRtYXRjaCA9IGRldmljZTtcbitcdH1cbitcbitcdHJldHVybiBtYXRjaCA/OiBFUlJfUFRSKC1FTk9ERVYpO1xuK31cbitcbitzdGF0aWMgYm9vbFxuK3JkbWFjZ19kZXZpY2VfbmFtZV91bmlxdWVfbG9ja2VkKGNvbnN0IHN0cnVjdCByZG1hY2dfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IHJkbWFjZ19kZXZpY2UgKm90aGVyO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgXHUwMDI2cmRtYWNnX2RldmljZXMsIGRldl9ub2RlKVxuK1x0XHRpZiAob3RoZXIgIT0gZGV2aWNlIFx1MDAyNlx1MDAyNiAhc3RyY21wKG90aGVyLVx1MDAzZW5hbWUsIGRldmljZS1cdTAwM2VuYW1lKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmRtYWNnX3ByaW50X2RldmljZV9rZXkoc3RydWN0IHNlcV9maWxlICpzZixcbitcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcmRtYWNnX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHNlcV9wdXRzKHNmLCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4rXHRpZiAoIXJkbWFjZ19kZXZpY2VfbmFtZV91bmlxdWVfbG9ja2VkKGRldmljZSkpXG4rXHRcdHNlcV9wcmludGYoc2YsIFwiIGluZGV4PSV1XCIsIGRldmljZS1cdTAwM2VpbmRleCk7XG4rXHRzZXFfcHV0YyhzZiwgJyAnKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuQEAgLTQ4OCw2ICs1MjYsOCBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4gXHRjaGFyICpwO1xuIFx0aW50ICpuZXdfbGltaXRzO1xuIFx0dW5zaWduZWQgbG9uZyBlbmFibGVzID0gMDtcbitcdHUzMiBkZXZfaW5kZXggPSAwO1xuK1x0Ym9vbCBoYXNfaW5kZXggPSBmYWxzZTtcbiBcdGludCBpID0gMCwgcmV0ID0gMDtcbiBcbiBcdC8qIGV4dHJhY3QgdGhlIGRldmljZSBuYW1lIGZpcnN0ICovXG5AQCAtNTAzLDcgKzU0Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdFx0Z290byBlcnI7XG4gXHR9XG4gXG4tXHQvKiBwYXJzZSByZXNvdXJjZSBsaW1pdCB0b2tlbnMgKi9cbitcdC8qIHBhcnNlIHRoZSBvcHRpb25hbCBkZXZpY2UgaW5kZXggYW5kIHJlc291cmNlIGxpbWl0IHRva2VucyAqL1xuIFx0d2hpbGUgKChwID0gc3Ryc2VwKFx1MDAyNm9wdGlvbnMsIFwiIFxcdFxcblwiKSkpIHtcbiBcdFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xuIFx0XHRpbnQgdG9rLCBpbnR2YWw7XG5AQCAtNTEzLDYgKzU1MywxMyBAQCBzdGF0aWMgc3NpemVfdCByZG1hY2dfcmVzb3VyY2Vfc2V0X21heChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4gXG4gXHRcdHRvayA9IG1hdGNoX3Rva2VuKHAsIHJkbWFjZ19saW1pdF90b2tlbnMsIGFyZ3MpO1xuIFx0XHRzd2l0Y2ggKHRvaykge1xuK1x0XHRjYXNlIFJETUFDR19ERVZJQ0VfSU5ERVg6XG4rXHRcdFx0aWYgKGhhc19pbmRleCB8fCBtYXRjaF91aW50KFx1MDAyNmFyZ3NbMF0sIFx1MDAyNmRldl9pbmRleCkpIHtcbitcdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIHBhcnNlX2VycjtcbitcdFx0XHR9XG4rXHRcdFx0aGFzX2luZGV4ID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBSRE1BQ0dfSENBX0hBTkRMRV9WQUw6XG4gXHRcdFx0aWYgKG1hdGNoX2ludChcdTAwMjZhcmdzWzBdLCBcdTAwMjZpbnR2YWwpIHx8IGludHZhbCBcdTAwM2MgMCkge1xuIFx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbkBAIC01NDYsOSArNTkzLDkgQEAgc3RhdGljIHNzaXplX3QgcmRtYWNnX3Jlc291cmNlX3NldF9tYXgoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuIFx0LyogYWNxdWlyZSBsb2NrIHRvIHN5bmNocm9uaXplIHdpdGggaG90IHBsdWcgZGV2aWNlcyAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuLVx0ZGV2aWNlID0gcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkKGRldl9uYW1lKTtcbi1cdGlmICghZGV2aWNlKSB7XG4tXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRkZXZpY2UgPSByZG1hY2dfZ2V0X2RldmljZV9sb2NrZWQoZGV2X25hbWUsIGhhc19pbmRleCwgZGV2X2luZGV4KTtcbitcdGlmIChJU19FUlIoZGV2aWNlKSkge1xuK1x0XHRyZXQgPSBQVFJfRVJSKGRldmljZSk7XG4gXHRcdGdvdG8gZGV2X2VycjtcbiBcdH1cbiBcbkBAIC02MjYsNyArNjczLDcgQEAgc3RhdGljIGludCByZG1hY2dfcmVzb3VyY2VfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZyZG1hY2dfbXV0ZXgpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXZpY2UsIFx1MDAyNnJkbWFjZ19kZXZpY2VzLCBkZXZfbm9kZSkge1xuLVx0XHRzZXFfcHJpbnRmKHNmLCBcIiVzIFwiLCBkZXZpY2UtXHUwMDNlbmFtZSk7XG4rXHRcdHJkbWFjZ19wcmludF9kZXZpY2Vfa2V5KHNmLCBkZXZpY2UpO1xuIFxuIFx0XHRycG9vbCA9IGZpbmRfY2dfcnBvb2xfbG9ja2VkKGNnLCBkZXZpY2UpO1xuIFx0XHRwcmludF9ycG9vbF92YWx1ZXMoc2YsIHJwb29sKTtcbkBAIC02NTAsNyArNjk3LDcgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbiBcdFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcbiBcbi1cdFx0c2VxX3ByaW50ZihzZiwgXCIlcyBcIiwgZGV2aWNlLVx1MDAzZW5hbWUpO1xuK1x0XHRyZG1hY2dfcHJpbnRfZGV2aWNlX2tleShzZiwgZGV2aWNlKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWDsgaSsrKSB7XG4gXHRcdFx0c2VxX3ByaW50ZihzZiwgXCIlcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHVcIixcbiBcdFx0XHRcdCAgIHJkbWFjZ19yZXNvdXJjZV9uYW1lc1tpXSxcbkBAIC02NzksNyArNzI2LDcgQEAgc3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2aWNlLCBcdTAwMjZyZG1hY2dfZGV2aWNlcywgZGV2X25vZGUpIHtcbiBcdFx0cnBvb2wgPSBmaW5kX2NnX3Jwb29sX2xvY2tlZChjZywgZGV2aWNlKTtcbiBcbi1cdFx0c2VxX3ByaW50ZihzZiwgXCIlcyBcIiwgZGV2aWNlLVx1MDAzZW5hbWUpO1xuK1x0XHRyZG1hY2dfcHJpbnRfZGV2aWNlX2tleShzZiwgZGV2aWNlKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWDsgaSsrKSB7XG4gXHRcdFx0c2VxX3ByaW50ZihzZiwgXCIlcy5tYXg9JWxsdSAlcy5hbGxvY19mYWlsPSVsbHVcIixcbiBcdFx0XHRcdCAgIHJkbWFjZ19yZXNvdXJjZV9uYW1lc1tpXSxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19wbmV0LmMgYi9uZXQvc21jL3NtY19wbmV0LmNcbmluZGV4IDYzZTI4NmUyZGZhYThkLi5mZjljOWMzNWNjMmY1YiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX3BuZXQuY1xuKysrIGIvbmV0L3NtYy9zbWNfcG5ldC5jXG5AQCAtMzA0LDEzICszMDQsMTggQEAgc3RhdGljIGJvb2wgc21jX3BuZXRpZF92YWxpZChjb25zdCBjaGFyICpwbmV0X25hbWUsIGNoYXIgKnBuZXRpZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZS4gVGhlIGRldmljZSBtaWdodCBub3QgZXhpc3QuICovXG4tc3RhdGljIHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNfcG5ldF9maW5kX2liKGNoYXIgKmliX25hbWUpXG4rLypcbisgKiBGaW5kIGFuIGluZmluaWJhbmQgZGV2aWNlIGJ5IGEgZ2l2ZW4gbmFtZSwgcmVzdHJpY3RlZCB0byB0aGUgZGV2aWNlc1xuKyAqIGFjY2Vzc2libGUgZnJvbSBAbmV0LiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBleGlzdC5cbisgKi9cbitzdGF0aWMgc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY19wbmV0X2ZpbmRfaWIoc3RydWN0IG5ldCAqbmV0LCBjaGFyICppYl9uYW1lKVxuIHtcbiBcdHN0cnVjdCBzbWNfaWJfZGV2aWNlICppYmRldjtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2c21jX2liX2RldmljZXMubXV0ZXgpO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpYmRldiwgXHUwMDI2c21jX2liX2RldmljZXMubGlzdCwgbGlzdCkge1xuK1x0XHRpZiAoIXJkbWFfZGV2X2FjY2Vzc19uZXRucyhpYmRldi1cdTAwM2VpYmRldiwgbmV0KSlcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCFzdHJuY21wKGliZGV2LVx1MDAzZWliZGV2LVx1MDAzZW5hbWUsIGliX25hbWUsXG4gXHRcdFx0ICAgICBzaXplb2YoaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlbmFtZSkpIHx8XG4gXHRcdCAgICAoaWJkZXYtXHUwMDNlaWJkZXYtXHUwMDNlZGV2LnBhcmVudCBcdTAwMjZcdTAwMjZcbkBAIC00MDgsOCArNDEzLDggQEAgc3RhdGljIGludCBzbWNfcG5ldF9hZGRfZXRoKHN0cnVjdCBzbWNfcG5ldHRhYmxlICpwbmV0dGFibGUsIHN0cnVjdCBuZXQgKm5ldCxcbiBcdHJldHVybiByYztcbiB9XG4gXG4tc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSxcbi1cdFx0XHQgICB1OCBpYl9wb3J0LCBjaGFyICpwbmV0X25hbWUpXG4rc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgc3RydWN0IG5ldCAqbmV0LFxuK1x0XHRcdCAgIGNoYXIgKmliX25hbWUsIHU4IGliX3BvcnQsIGNoYXIgKnBuZXRfbmFtZSlcbiB7XG4gXHRzdHJ1Y3Qgc21jX3BuZXRlbnRyeSAqdG1wX3BlLCAqbmV3X3BlO1xuIFx0c3RydWN0IHNtY19pYl9kZXZpY2UgKmliX2RldjtcbkBAIC00MTksNyArNDI0LDcgQEAgc3RhdGljIGludCBzbWNfcG5ldF9hZGRfaWIoc3RydWN0IHNtY19wbmV0dGFibGUgKnBuZXR0YWJsZSwgY2hhciAqaWJfbmFtZSxcbiBcdGJvb2wgbmV3X2liZGV2O1xuIFxuIFx0LyogdHJ5IHRvIGFwcGx5IHRoZSBwbmV0aWQgdG8gYWN0aXZlIGRldmljZXMgKi9cbi1cdGliX2RldiA9IHNtY19wbmV0X2ZpbmRfaWIoaWJfbmFtZSk7XG4rXHRpYl9kZXYgPSBzbWNfcG5ldF9maW5kX2liKG5ldCwgaWJfbmFtZSk7XG4gXHRpZiAoaWJfZGV2KSB7XG4gXHRcdGliZGV2X2FwcGxpZWQgPSBzbWNfcG5ldF9hcHBseV9pYihpYl9kZXYsIGliX3BvcnQsIHBuZXRfbmFtZSk7XG4gXHRcdGlmIChpYmRldl9hcHBsaWVkKVxuQEAgLTUxOCw3ICs1MjMsNyBAQCBzdGF0aWMgaW50IHNtY19wbmV0X2VudGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSlcbiBcdFx0XHRpZiAoaWJwb3J0IFx1MDAzYyAxIHx8IGlicG9ydCBcdTAwM2UgU01DX01BWF9QT1JUUylcbiBcdFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbi1cdFx0cmMgPSBzbWNfcG5ldF9hZGRfaWIocG5ldHRhYmxlLCBzdHJpbmcsIGlicG9ydCwgcG5ldF9uYW1lKTtcbitcdFx0cmMgPSBzbWNfcG5ldF9hZGRfaWIocG5ldHRhYmxlLCBuZXQsIHN0cmluZywgaWJwb3J0LCBwbmV0X25hbWUpO1xuIFx0XHRpZiAoIXJjKVxuIFx0XHRcdG5ld19pYmRldiA9IHRydWU7XG4gXHRcdGVsc2UgaWYgKHJjICE9IC1FRVhJU1QpXG5AQCAtMTE3MCw2ICsxMTc1LDkgQEAgaW50IHNtY19wbmV0aWRfYnlfdGFibGVfaWIoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYl9wb3J0KVxuIFx0c3RydWN0IHNtY19uZXQgKnNuO1xuIFx0aW50IHJjID0gLUVOT0VOVDtcbiBcbitcdGlmICghcmRtYV9kZXZfYWNjZXNzX25ldG5zKHNtY2liZGV2LVx1MDAzZWliZGV2LCBcdTAwMjZpbml0X25ldCkpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuIFx0LyogZ2V0IHBuZXR0YWJsZSBmb3IgaW5pdCBuYW1lc3BhY2UgKi9cbiBcdHNuID0gbmV0X2dlbmVyaWMoXHUwMDI2aW5pdF9uZXQsIHNtY19uZXRfaWQpO1xuIFx0cG5ldHRhYmxlID0gXHUwMDI2c24tXHUwMDNlcG5ldHRhYmxlO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG5pbmRleCAwN2FmN2YxNWMxYmY3NC4uYTkxYzE0YzQ1MDA2ZTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL01ha2VmaWxlXG5AQCAtMyw2ICszLDcgQEAgVEVTVF9QUk9HUyA6PSByeGVfcnBpbmdfYmV0d2Vlbl9uZXRucy5zaCBcXFxuIFx0XHRyeGVfaXB2Ni5zaCBcXFxuIFx0XHRyeGVfc29ja2V0X3dpdGhfbmV0bnMuc2ggXFxcbiBcdFx0cnhlX3Rlc3RfTkVUREVWX1VOUkVHSVNURVIuc2ggXFxcbi1cdFx0cnhlX3NlbnRfcmN2ZF9ieXRlcy5zaFxuK1x0XHRyeGVfc2VudF9yY3ZkX2J5dGVzLnNoIFxcXG4rXHRcdHJ4ZV9uZXRuc19uYW1lcy5zaFxuIFxuIGluY2x1ZGUgLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL2NvbmZpZ1xuaW5kZXggNGZmYjgxNGUyNTNiYmQuLmUxZmY1NGVjMGY1NzkwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JkbWEvY29uZmlnXG5AQCAtMSwzICsxLDUgQEBcbiBDT05GSUdfVFVOXG4gQ09ORklHX1ZFVEhcbitDT05GSUdfRFVNTVlcbitDT05GSUdfTkVUX05TXG4gQ09ORklHX1JETUFfUlhFXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yZG1hL3J4ZV9uZXRuc19uYW1lcy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hNGZhYmY4NmJkZjc5ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmRtYS9yeGVfbmV0bnNfbmFtZXMuc2hcbkBAIC0wLDAgKzEsMjgyIEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI1xuKyMgRXhlcmNpc2UgUkRNQSBkZXZpY2UgbmFtZSBoYW5kbGluZyBhY3Jvc3MgbmV0d29yayBuYW1lc3BhY2VzLlxuK1xuK3NvdXJjZSBcIiQoZGlybmFtZSBcIiQwXCIpLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcIlxuK1xuK05BTUVfUFJFRklYPVwicnhlX25ldG5zX25hbWVzXyQkXCJcbitORVRERVZfUFJFRklYPVwicnhuJCRcIlxuK05TMT1cIiR7TkFNRV9QUkVGSVh9bnMxXCJcbitOUzI9XCIke05BTUVfUFJFRklYfW5zMlwiXG4rUlhFX0E9XCIke05BTUVfUFJFRklYfXJ4ZV9hXCJcbitSWEVfQj1cIiR7TkFNRV9QUkVGSVh9cnhlX2JcIlxuK1JYRV9TQU1FPVwiJHtOQU1FX1BSRUZJWH1yeGVfc2FtZVwiXG4rUlhFX05FVz1cIiR7TkFNRV9QUkVGSVh9cnhlX25ld1wiXG4rRFVNTVlfQT1cIiR7TkVUREVWX1BSRUZJWH1hXCJcbitEVU1NWV9CPVwiJHtORVRERVZfUFJFRklYfWJcIlxuK09MRF9NT0RFPVwiXCJcbitNT0RFX0NIQU5HRUQ9MFxuK01PRFM9KFwiZHVtbXlcIiBcInJkbWFfcnhlXCIpXG4rVEVTVF9TQU1FX05BTUVTPVwic2FtZSBSRE1BIGRldmljZSBuYW1lIGNhbiBleGlzdCBpbiB0d28gbmV0IG5hbWVzcGFjZXNcIlxuK1RFU1RfTU9WRV9DT05GTElDVD1cIm1vdmUgd2l0aG91dCByZW5hbWUgZmFpbHMgb24gZGVzdGluYXRpb24gbmFtZSBjb25mbGljdFwiXG4rVEVTVF9NT1ZFX1JFTkFNRT1cIm1vdmUgdGhlbiByZW5hbWUgc3VjY2VlZHNcIlxuK1RFU1RfQ09NQklORURfTU9WRV9SRU5BTUU9XCJtb3ZlIHdpdGggcmVxdWVzdGVkIGRlc3RpbmF0aW9uIG5hbWUgc3VjY2VlZHNcIlxuK1RFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FPVwic2FtZS1uZXRucyByZW5hbWUgcmVqZWN0cyBkdXBsaWNhdGUgbmFtZVwiXG4rVEVTVF9URUFSRE9XTl9SRVRVUk49XCJuZXRucyBkZWxldGUgcmV0dXJucyBkZXZpY2UgdG8gaW5pdF9uZXQgYW5kIHJlbmFtZXMgb24gY29uZmxpY3RcIlxuK1xuK2tzZnRfc2tpcCgpXG4re1xuK1x0a3RhcF9za2lwX2FsbCBcIiQqXCJcbitcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbit9XG4rXG4rZmFpbCgpXG4re1xuK1x0a3RhcF9leGl0X2ZhaWxfbXNnIFwiJCpcIlxuK31cbitcbituZWVkX2NtZCgpXG4re1xuK1x0Y29tbWFuZCAtdiBcIiQxXCIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIHx8IGtzZnRfc2tpcCBcIm1pc3NpbmcgY29tbWFuZDogJDFcIlxuK31cbitcbityZG1hX25zKClcbit7XG4rXHRsb2NhbCBucz0kMVxuK1xuK1x0c2hpZnRcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNcIiByZG1hIFwiJEBcIlxuK31cbitcbityZG1hX2Rldl9leGlzdHMoKVxuK3tcbitcdGxvY2FsIG5zPSQxXG4rXHRsb2NhbCBkZXY9JDJcbitcbitcdGlmIFsgLW4gXCIkbnNcIiBdOyB0aGVuXG4rXHRcdHJkbWFfbnMgXCIkbnNcIiBkZXYgc2hvdyBcIiRkZXZcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbitcdGVsc2VcbitcdFx0cmRtYSBkZXYgc2hvdyBcIiRkZXZcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcbitcdGZpXG4rfVxuK1xuK2FkZF9kdW1teSgpXG4re1xuK1x0bG9jYWwgbmV0ZGV2PSQxXG4rXG4rXHRpcCBsaW5rIGFkZCBcIiRuZXRkZXZcIiB0eXBlIGR1bW15IHx8IHJldHVybiAxXG4rXHRpcCBsaW5rIHNldCBcIiRuZXRkZXZcIiB1cCB8fCByZXR1cm4gMVxuK31cbitcbithZGRfcnhlKClcbit7XG4rXHRsb2NhbCBkZXY9JDFcbitcdGxvY2FsIG5ldGRldj0kMlxuK1xuK1x0cmRtYSBsaW5rIGFkZCBcIiRkZXZcIiB0eXBlIHJ4ZSBuZXRkZXYgXCIkbmV0ZGV2XCJcbit9XG4rXG4rcmRtYV9kZXZfb25fbmV0ZGV2KClcbit7XG4rXHRsb2NhbCBuZXRkZXY9JDFcbitcbitcdHJkbWEgbGluayBzaG93IDJcdTAwM2UvZGV2L251bGwgfCBhd2sgLXYgd2FudD1cIiRuZXRkZXZcIiAnXG4rXHRcdHtcbitcdFx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBORjsgaSsrKVxuK1x0XHRcdFx0aWYgKCRpID09IFwibmV0ZGV2XCIgXHUwMDI2XHUwMDI2ICQoaSArIDEpID09IHdhbnQpIHtcbitcdFx0XHRcdFx0ZGV2ID0gJDJcbitcdFx0XHRcdFx0c3ViKC9cXC8uKi8sIFwiXCIsIGRldilcbitcdFx0XHRcdFx0cHJpbnQgZGV2XG4rXHRcdFx0XHRcdGV4aXRcbitcdFx0XHRcdH1cbitcdFx0fSdcbit9XG4rXG4rd2FpdF9yZG1hX2Rldl9vbl9uZXRkZXYoKVxuK3tcbitcdGxvY2FsIG5ldGRldj0kMVxuK1x0bG9jYWwgZGV2XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSAxIDUwKTsgZG9cbitcdFx0ZGV2PSQocmRtYV9kZXZfb25fbmV0ZGV2IFwiJG5ldGRldlwiKVxuK1x0XHRpZiBbIC1uIFwiJGRldlwiIF07IHRoZW5cbitcdFx0XHRlY2hvIFwiJGRldlwiXG4rXHRcdFx0cmV0dXJuIDBcbitcdFx0ZmlcbitcdFx0c2xlZXAgMC4xXG4rXHRkb25lXG4rXG4rXHRyZXR1cm4gMVxuK31cbitcbitzZXR1cF9kZXZzKClcbit7XG4rXHRjbGVhbnVwX2RldnNcbitcbitcdGFkZF9kdW1teSBcIiREVU1NWV9BXCIgfHwgcmV0dXJuIDFcbitcdGFkZF9kdW1teSBcIiREVU1NWV9CXCIgfHwgcmV0dXJuIDFcbitcbitcdGFkZF9yeGUgXCIkUlhFX0FcIiBcIiREVU1NWV9BXCIgfHwgcmV0dXJuIDFcbitcdGFkZF9yeGUgXCIkUlhFX0JcIiBcIiREVU1NWV9CXCIgfHwgcmV0dXJuIDFcbit9XG4rXG4rY2xlYW51cF9kZXZzKClcbit7XG4rXHRpcCBsaW5rIGRlbCBcIiREVU1NWV9BXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0aXAgbGluayBkZWwgXCIkRFVNTVlfQlwiIDJcdTAwM2UvZGV2L251bGxcbit9XG4rXG4rc2V0dXAoKVxuK3tcbitcdE9MRF9NT0RFPSQocmRtYSBzeXN0ZW0gc2hvdyAyXHUwMDNlL2Rldi9udWxsIHxcbitcdFx0ICAgc2VkIC1uICdzLy4qbmV0bnMgXFwoW14gXSpcXCkuKi9cXDEvcCcpXG4rXHRbIC1uIFwiJE9MRF9NT0RFXCIgXSB8fCBrc2Z0X3NraXAgXCJmYWlsZWQgdG8gcmVhZCBSRE1BIG5ldG5zIG1vZGVcIlxuK1xuK1x0cmRtYSBzeXN0ZW0gc2V0IG5ldG5zIGV4Y2x1c2l2ZSBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHxcbitcdFx0a3NmdF9za2lwIFwicmRtYSBuZXRucyBleGNsdXNpdmUgbW9kZSBpcyBub3Qgc3VwcG9ydGVkXCJcbitcdE1PREVfQ0hBTkdFRD0xXG4rXG4rXHRpcCBuZXRucyBhZGQgXCIkTlMxXCIgfHwgcmV0dXJuIDFcbitcdGlwIG5ldG5zIGFkZCBcIiROUzJcIiB8fCByZXR1cm4gMVxuK31cbitcbitjbGVhbnVwKClcbit7XG4rXHRjbGVhbnVwX2RldnNcbitcbitcdGlwIG5ldG5zIGRlbCBcIiROUzFcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRpcCBuZXRucyBkZWwgXCIkTlMyXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1xuK1x0aWYgWyBcIiRNT0RFX0NIQU5HRURcIiAtZXEgMSBdOyB0aGVuXG4rXHRcdHJkbWEgc3lzdGVtIHNldCBuZXRucyBcIiRPTERfTU9ERVwiIDJcdTAwM2UvZGV2L251bGxcbitcdGZpXG4rXG4rXHRmb3IgbSBpbiBcIiR7TU9EU1tAXX1cIjsgZG9cbitcdFx0bW9kcHJvYmUgLXIgXCIkbVwiIDJcdTAwM2UvZGV2L251bGxcbitcdGRvbmVcbit9XG4rXG4rcmRtYV9zdXBwb3J0c19jb21iaW5lZF9tb3ZlX3JlbmFtZSgpXG4re1xuK1x0cmRtYSBkZXYgaGVscCAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLUVxICduZXRucyAuKm5hbWV8bmFtZSAuKm5ldG5zJ1xuK31cbitcbitbIFwiJChpZCAtdSlcIiAtZXEgMCBdIHx8IGtzZnRfc2tpcCBcIm11c3QgYmUgcnVuIGFzIHJvb3RcIlxuK25lZWRfY21kIGlwXG4rbmVlZF9jbWQgcmRtYVxuK25lZWRfY21kIG1vZHByb2JlXG4rXG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbitmb3IgbSBpbiBcIiR7TU9EU1tAXX1cIjsgZG9cbitcdG1vZGluZm8gXCIkbVwiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fCBrc2Z0X3NraXAgXCJtb2R1bGUgJG0gbm90IGZvdW5kXCJcbitcdG1vZHByb2JlIFwiJG1cIiB8fCBmYWlsIFwiZmFpbGVkIHRvIGxvYWQgJG1cIlxuK2RvbmVcbitcbitzZXR1cCB8fCBmYWlsIFwiZmFpbGVkIHRvIGNyZWF0ZSBuZXQgbmFtZXNwYWNlc1wiXG4rXG4ra3RhcF9wcmludF9oZWFkZXJcbitrdGFwX3NldF9wbGFuIDZcbitcbitpZiBzZXR1cF9kZXZzIFx1MDAyNlx1MDAyNlxuKyAgIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5ldG5zIFwiJE5TMVwiIFx1MDAyNlx1MDAyNlxuKyAgIHJkbWFfbnMgXCIkTlMxXCIgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX1NBTUVcIiBcdTAwMjZcdTAwMjZcbisgICByZG1hIGRldiBzZXQgXCIkUlhFX0JcIiBuZXRucyBcIiROUzJcIiBcdTAwMjZcdTAwMjZcbisgICByZG1hX25zIFwiJE5TMlwiIGRldiBzZXQgXCIkUlhFX0JcIiBuYW1lIFwiJFJYRV9TQU1FXCIgXHUwMDI2XHUwMDI2XG4rICAgcmRtYV9kZXZfZXhpc3RzIFwiJE5TMVwiIFwiJFJYRV9TQU1FXCIgXHUwMDI2XHUwMDI2XG4rICAgcmRtYV9kZXZfZXhpc3RzIFwiJE5TMlwiIFwiJFJYRV9TQU1FXCI7IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwiJFRFU1RfU0FNRV9OQU1FU1wiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9TQU1FX05BTUVTXCJcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2lmICEgc2V0dXBfZGV2cyB8fFxuKyAgICEgcmRtYSBkZXYgc2V0IFwiJFJYRV9BXCIgbmV0bnMgXCIkTlMxXCIgfHxcbisgICAhIHJkbWFfbnMgXCIkTlMxXCIgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX1NBTUVcIiB8fFxuKyAgICEgcmRtYSBkZXYgc2V0IFwiJFJYRV9CXCIgbmV0bnMgXCIkTlMyXCIgfHxcbisgICAhIHJkbWFfbnMgXCIkTlMyXCIgZGV2IHNldCBcIiRSWEVfQlwiIG5hbWUgXCIkUlhFX1NBTUVcIjsgdGhlblxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXCJcbitlbGlmIHJkbWFfbnMgXCIkTlMxXCIgZGV2IHNldCBcIiRSWEVfU0FNRVwiIG5ldG5zIFwiJE5TMlwiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXCJcbitlbGlmIHJkbWFfZGV2X2V4aXN0cyBcIiROUzFcIiBcIiRSWEVfU0FNRVwiIFx1MDAyNlx1MDAyNlxuKyAgICAgcmRtYV9kZXZfZXhpc3RzIFwiJE5TMlwiIFwiJFJYRV9TQU1FXCI7IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwiJFRFU1RfTU9WRV9DT05GTElDVFwiXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9NT1ZFX0NPTkZMSUNUXCJcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2lmICEgc2V0dXBfZGV2czsgdGhlblxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9NT1ZFX1JFTkFNRVwiXG4rZWxpZiByZG1hIGRldiBzZXQgXCIkUlhFX0FcIiBuZXRucyBcIiROUzJcIiBcdTAwMjZcdTAwMjZcbisgICAgIHJkbWFfbnMgXCIkTlMyXCIgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX05FV1wiOyB0aGVuXG4rXHRpZiByZG1hX2Rldl9leGlzdHMgXCIkTlMyXCIgXCIkUlhFX05FV1wiIFx1MDAyNlx1MDAyNlxuK1x0ICAgISByZG1hX2Rldl9leGlzdHMgXCJcIiBcIiRSWEVfQVwiOyB0aGVuXG4rXHRcdGt0YXBfdGVzdF9wYXNzIFwiJFRFU1RfTU9WRV9SRU5BTUVcIlxuK1x0ZWxzZVxuK1x0XHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX01PVkVfUkVOQU1FXCJcbitcdGZpXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9NT1ZFX1JFTkFNRVwiXG4rZmlcbitjbGVhbnVwX2RldnNcbitcbitpZiAhIHJkbWFfc3VwcG9ydHNfY29tYmluZWRfbW92ZV9yZW5hbWU7IHRoZW5cbitcdGt0YXBfdGVzdF9za2lwIFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcIlxuK2VsaWYgISBzZXR1cF9kZXZzOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCJcbitlbGlmIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5ldG5zIFwiJE5TMlwiIG5hbWUgXCIkUlhFX05FV1wiOyB0aGVuXG4rXHRpZiByZG1hX2Rldl9leGlzdHMgXCIkTlMyXCIgXCIkUlhFX05FV1wiIFx1MDAyNlx1MDAyNlxuK1x0ICAgISByZG1hX2Rldl9leGlzdHMgXCJcIiBcIiRSWEVfQVwiOyB0aGVuXG4rXHRcdGt0YXBfdGVzdF9wYXNzIFwiJFRFU1RfQ09NQklORURfTU9WRV9SRU5BTUVcIlxuK1x0ZWxzZVxuK1x0XHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX0NPTUJJTkVEX01PVkVfUkVOQU1FXCJcbitcdGZpXG4rZWxzZVxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9DT01CSU5FRF9NT1ZFX1JFTkFNRVwiXG4rZmlcbitjbGVhbnVwX2RldnNcbitcbitpZiAhIHNldHVwX2RldnM7IHRoZW5cbitcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCJcbitlbGlmIHJkbWEgZGV2IHNldCBcIiRSWEVfQVwiIG5hbWUgXCIkUlhFX1NBTUVcIiBcdTAwMjZcdTAwMjZcbisgICAgIHJkbWEgZGV2IHNldCBcIiRSWEVfQlwiIG5hbWUgXCIkUlhFX05FV1wiOyB0aGVuXG4rXHRpZiByZG1hIGRldiBzZXQgXCIkUlhFX1NBTUVcIiBuYW1lIFwiJFJYRV9ORVdcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcIlxuK1x0ZWxpZiByZG1hX2Rldl9leGlzdHMgXCJcIiBcIiRSWEVfU0FNRVwiIFx1MDAyNlx1MDAyNlxuK1x0ICAgICByZG1hX2Rldl9leGlzdHMgXCJcIiBcIiRSWEVfTkVXXCI7IHRoZW5cbitcdFx0a3RhcF90ZXN0X3Bhc3MgXCIkVEVTVF9TQU1FX05FVE5TX0RVUF9SRU5BTUVcIlxuK1x0ZWxzZVxuK1x0XHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX1NBTUVfTkVUTlNfRFVQX1JFTkFNRVwiXG4rXHRmaVxuK2Vsc2VcbitcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfU0FNRV9ORVROU19EVVBfUkVOQU1FXCJcbitmaVxuK2NsZWFudXBfZGV2c1xuK1xuK2lmICEgc2V0dXBfZGV2czsgdGhlblxuK1x0a3RhcF90ZXN0X2ZhaWwgXCIkVEVTVF9URUFSRE9XTl9SRVRVUk5cIlxuK2VsaWYgISByZG1hIGRldiBzZXQgXCIkUlhFX0FcIiBuYW1lIFwiJFJYRV9TQU1FXCIgfHxcbisgICAgICEgcmRtYSBkZXYgc2V0IFwiJFJYRV9CXCIgbmV0bnMgXCIkTlMyXCIgfHxcbisgICAgICEgcmRtYV9ucyBcIiROUzJcIiBkZXYgc2V0IFwiJFJYRV9CXCIgbmFtZSBcIiRSWEVfU0FNRVwiIHx8XG4rICAgICAhIHJkbWFfZGV2X2V4aXN0cyBcIiROUzJcIiBcIiRSWEVfU0FNRVwiOyB0aGVuXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIiRURVNUX1RFQVJET1dOX1JFVFVSTlwiXG4rZWxzZVxuK1x0aXAgbmV0bnMgZGVsIFwiJE5TMlwiXG4rXHRyZXR1cm5lZD0kKHdhaXRfcmRtYV9kZXZfb25fbmV0ZGV2IFwiJERVTU1ZX0JcIilcbitcdGt0YXBfcHJpbnRfbXNnIFwiZGV2aWNlIHJldHVybmVkIHRvIGluaXRfbmV0IGFzICcke3JldHVybmVkOi1cdTAwM2NtaXNzaW5nXHUwMDNlfSdcIlxuK1x0aWYgcmRtYV9kZXZfZXhpc3RzIFwiXCIgXCIkUlhFX1NBTUVcIiBcdTAwMjZcdTAwMjZcbitcdCAgIFsgLW4gXCIkcmV0dXJuZWRcIiBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgWyBcIiRyZXR1cm5lZFwiICE9IFwiJFJYRV9TQU1FXCIgXSBcdTAwMjZcdTAwMjZcbitcdCAgIFsgXCIke3JldHVybmVkI2liZGV2fVwiICE9IFwiJHJldHVybmVkXCIgXTsgdGhlblxuK1x0XHRrdGFwX3Rlc3RfcGFzcyBcIiRURVNUX1RFQVJET1dOX1JFVFVSTlwiXG4rXHRlbHNlXG4rXHRcdGt0YXBfdGVzdF9mYWlsIFwiJFRFU1RfVEVBUkRPV05fUkVUVVJOXCJcbitcdGZpXG4rZmlcbitjbGVhbnVwX2RldnNcbitcbitrdGFwX2ZpbmlzaGVkXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MjoxNC4wMzM4OTQwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzODk0ODU2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJETUEgRGV2aWNlIE5hbWVzcGFjZSBJc29sYXRpb246IEluaXRpYWwgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHRhcmdldGluZyB0aGUgUkRNQSBzdWJzeXN0ZW0uIFRoZSBwcmltYXJ5IGdvYWwgc2VlbXMgdG8gYmUgbmV0d29yayBuYW1lc3BhY2UgaXNvbGF0aW9uIGZvciBSRE1BIGRldmljZSBuYW1lcyDigJMgYSBjcnVjaWFsIGNoYW5nZSBpZiB3ZSB3YW50IHRvIHZpcnR1YWxpemUgdGhlc2UgcmVzb3VyY2VzIHByb3Blcmx5LiBUaGUgZGlmZiB0b3VjaGVzIGEgcHJldHR5IHdpZGUgcmFuZ2Ugb2YgZmlsZXM6IGBkZXZpY2UuY2AsIGBjZ3JvdXAuY2AsIGBubGRldi5jYCwgYHJkbWEuY2Ag4oCTIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIGZlYXR1cmUuIEJ1dCBob2xkIG9uLCBpdCBhbHNvIGRpZ3MgaW50byBgcnhlX21tYXAuY2AgYW5kIGByeGVfdmVyYnMuY2AsIHdoaWNoIG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLlxuXG5MZXQncyB6b29tIGluIG9uIGByeGVfbW1hcC5jYC4gSG1tLCBpdCdzIG1lc3Npbmcgd2l0aCB0aGUgYHZtX29wZXJhdGlvbnNfc3RydWN0YCAoYHJ4ZV92bV9vcHNgKS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHJlbW92aW5nIHRoZSBgb3BlbmAgYW5kIGBjbG9zZWAgY2FsbGJhY2tzIChgcnhlX3ZtYV9vcGVuYCwgYHJ4ZV92bWFfY2xvc2VgKSBhbmQgZGlyZWN0bHkgdXNpbmcgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgLiBUaGF0J3MuLi4gYSBsaXR0bGUgY29uY2VybmluZy4gYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGRvZXNuJ3QgaW5oZXJlbnRseSBtYW5hZ2UgcmVmY291bnRzLCBzbyB3aGF0J3MgZ29pbmcgb24gaGVyZT8gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGByeGVfdm1hX29wZW5gIGFuZCBgcnhlX3ZtYV9jbG9zZWAgaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgdGhlIHJlZmNvdW50LiBOb3csIGl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIGp1c3QgaW1tZWRpYXRlbHkgcmVsZWFzZXMgdGhlIGBrcmVmYCBhZnRlciB0aGUgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGNhbGwuIElzIHRoaXMgYSBidWcgZml4PyBBIHJlZmFjdG9yaW5nP1xuXG5Pa2F5LCB0aGUgY29kZSBub3cgZG9lcyB0aGlzOiBjYWxsIGByZW1hcF92bWFsbG9jX3JhbmdlYCwgdGhlbiBpbW1lZGlhdGVseSBga3JlZl9wdXRgLiBXaHkgaXMgdGhlIGByeGVfdm1fb3BzYCBzdHJ1Y3R1cmUgYmVpbmcgcmVtb3ZlZD8gVGhhdCBoYXMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIFZNQSBjaGFuZ2VzIGFuZCB0aGUgbmV0d29yayBuYW1lc3BhY2Ugd29yay4gVGhlIGNvbW1pdCBtZXNzYWdlIGRvZXNuJ3QgaGVscC5cblxuTm93LCBsZXQncyBsb29rIGF0IGByeGVfdmVyYnMuY2AuIEFoYSEgSXQncyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGByeGVfZGlzYXNzb2NpYXRlX3Vjb250ZXh0YC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgYWRkZWQgdG8gYHJ4ZV9kZXZfb3BzYC4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCBjaGVja3MgZm9yIHRoaXMgY2FsbGJhY2sgdG8gYmUgcHJlc2VudCBiZWZvcmUgbW92aW5nIGEgZGV2aWNlIGJldHdlZW4gbmV0IG5hbWVzcGFjZXMuIFNvLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBkaXNhc3NvY2lhdGVfdWNvbnRleHRgIG1lYW5zIFJYRSBkZXZpY2VzIGNhbiBub3cgYmUgbW92ZWQgYmV0d2VlbiBuZXR3b3JrIG5hbWVzcGFjZXMuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCdzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGBkaXNhc3NvY2lhdGVfdWNvbnRleHRgIGFkZGl0aW9uIGFuZCB0aGUgY2hhbmdlcyBpbiBgcnhlX21tYXBgPyBUaGUgbmV3IGBkaXNhc3NvY2lhdGVfdWNvbnRleHRgIGZ1bmN0aW9uIGlzIGVtcHR5LiBJZiBpdCdzIGNhbGxlZCwgaXQncyBzdXBwb3NlZCB0byBoYW5kbGUgdW5tYXBwaW5nIG9yIG90aGVyd2lzZSBoYW5kbGluZyB0aGUgdWNvbnRleHQuIEJ1dCBpbiB0aGlzIGNhc2UgaXQgZG9lc24ndC5cblxuQmFjayB0byB0aGUgYHJ4ZV9tbWFwYCBjaGFuZ2VzOiBpZiB0aGV5J3JlIHJlbW92aW5nIGByeGVfdm1fb3BzYCwgdGhlbiB0aGUgVk1BIGlzICpubyBsb25nZXIqIHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBgaXBgIGRhdGEuIFRoYXQncyBhIGJpZyBkZWFsLiBJbnN0ZWFkLCB0aGUgcGF0Y2ggaW1tZWRpYXRlbHkgcmVsZWFzZXMgYGlwYCBhZnRlciB0aGUgY2FsbCB0byBgcmVtYXBfdm1hbGxvY19yYW5nZWAuIFdoYXQga2VlcHMgYGlwYCBhbGl2ZSBhZnRlciB0aGF0PyBTb21ldGhpbmcgKm11c3QqIHN0aWxsIGhvbGQgYSByZWZlcmVuY2UuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUga2VybmVsIHNvdXJjZSBmb3IgYHJ4ZV9tbWFwLmNgIGluIGRldGFpbCB0byB0cmFjayBkb3duIHdoYXQgZG9lcyB0aGF0IG5vdy4gVGhpcyByZWZjb3VudGluZyBjaGFuZ2UgaGFzIG1lIHdvcnJpZWQgYWJvdXQgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODYzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjI3LjkyODc1MjU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjQ2NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4ZV9tbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGU9ND1yZG1hX3J4ZS15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGUtMTktXFx0cnhlX29wY29kZS5vIFxcXFxcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL01ha2VmaWxlOjIwOlxcdHJ4ZV9tbWFwLm8gXFxcXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvTWFrZWZpbGUtMjEtXFx0cnhlX2ljcmMubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaD0zNz12b2lkIHJ4ZV9jbGVhbnVwX21jZyhzdHJ1Y3Qga3JlZiAqa3JlZik7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtMzgtXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmg6Mzk6LyogcnhlX21tYXAuYyAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX2xvYy5oOjQwOnN0cnVjdCByeGVfbW1hcF9pbmZvIHtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC00MS1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0cGVuZGluZ19tbWFwcztcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX2xvYy5oLTQ4LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX2xvYy5oOjQ5OnZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC01MC1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDo1MTpzdHJ1Y3QgcnhlX21tYXBfaW5mbyAqcnhlX2NyZWF0ZV9tbWFwX2luZm8oc3RydWN0IHJ4ZV9kZXYgKmRldiwgdTMyIHNpemUsXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtNTItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSwgdm9pZCAqb2JqKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaC01My1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9sb2MuaDo1NDppbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbG9jLmgtNTUtXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMTQtXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjE1OnZvaWQgcnhlX21tYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0xNi17XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjE3OlxcdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IGNvbnRhaW5lcl9vZihyZWYsXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jOjE4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCByeGVfbW1hcF9pbmZvLCByZWYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0xOS1cXHRzdHJ1Y3QgcnhlX2RldiAqcnhlID0gdG9fcmRldihpcC1cXHUwMDNlY29udGV4dC1cXHUwMDNlZGV2aWNlKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0zMi0vKipcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmM6MzM6ICogcnhlX21tYXAgLSBjcmVhdGUgYSBuZXcgbW1hcCByZWdpb25cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMzQtICogQGNvbnRleHQ6IHRoZSBJQiB1c2VyIGNvbnRleHQgb2YgdGhlIHByb2Nlc3MgbWFraW5nIHRoZSBtbWFwKCkgY2FsbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTM3LSAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzozODppbnQgcnhlX21tYXAoc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtMzkte1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTQyLVxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmM6NDM6XFx0c3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwLCAqcHA7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTQ0LVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtODUtXFx0cmV0ID0gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGlwLVxcdTAwM2VvYmosIDApO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzo4NjpcXHRrcmVmX3B1dChcXHUwMDI2aXAtXFx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTg3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtOTQtLypcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmM6OTU6ICogQWxsb2NhdGUgaW5mb3JtYXRpb24gZm9yIHJ4ZV9tbWFwXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTk2LSAqL1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzo5NzpzdHJ1Y3QgcnhlX21tYXBfaW5mbyAqcnhlX2NyZWF0ZV9tbWFwX2luZm8oc3RydWN0IHJ4ZV9kZXYgKnJ4ZSwgdTMyIHNpemUsXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbW1hcC5jLTk4LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsIHZvaWQgKm9iailcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9tbWFwLmMtOTkte1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYzoxMDA6XFx0c3RydWN0IHJ4ZV9tbWFwX2luZm8gKmlwO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX21tYXAuYy0xMDEtXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jPTEyPWludCBkb19tbWFwX2luZm8oc3RydWN0IHJ4ZV9kZXYgKnJ4ZSwgc3RydWN0IG1taW5mbyBfX3VzZXIgKm91dGJ1ZixcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jLTEzLVxcdFxcdCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhLCBzdHJ1Y3QgcnhlX3F1ZXVlX2J1ZiAqYnVmLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmM6MTQ6XFx0XFx0IHNpemVfdCBidWZfc2l6ZSwgc3RydWN0IHJ4ZV9tbWFwX2luZm8gKippcF9wKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmMtMTUte1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmMtMTYtXFx0aW50IGVycjtcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jOjE3OlxcdHN0cnVjdCByeGVfbW1hcF9pbmZvICppcCA9IE5VTEw7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuYy0xOC1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmM9MTkzPXZvaWQgcnhlX3F1ZXVlX2NsZWFudXAoc3RydWN0IHJ4ZV9xdWV1ZSAqcSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmMtMTk1LVxcdGlmIChxLVxcdTAwM2VpcClcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9xdWV1ZS5jOjE5NjpcXHRcXHRrcmVmX3B1dChcXHUwMDI2cS1cXHUwMDNlaXAtXFx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuYy0xOTctXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaD02Mj1zdHJ1Y3QgcnhlX3F1ZXVlIHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmgtNjQtXFx0c3RydWN0IHJ4ZV9xdWV1ZV9idWZcXHQqYnVmO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmg6NjU6XFx0c3RydWN0IHJ4ZV9tbWFwX2luZm9cXHQqaXA7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaC02Ni1cXHRzaXplX3RcXHRcXHRcXHRidWZfc2l6ZTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmg9Nzk9aW50IGRvX21tYXBfaW5mbyhzdHJ1Y3QgcnhlX2RldiAqcnhlLCBzdHJ1Y3QgbW1pbmZvIF9fdXNlciAqb3V0YnVmLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmgtODAtXFx0XFx0IHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEsIHN0cnVjdCByeGVfcXVldWVfYnVmICpidWYsXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfcXVldWUuaDo4MTpcXHRcXHQgc2l6ZV90IGJ1Zl9zaXplLCBzdHJ1Y3QgcnhlX21tYXBfaW5mbyAqKmlwX3ApO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3F1ZXVlLmgtODItXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jPTE0NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2Vfb3BzIHJ4ZV9kZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYy0xNDkxLVxcdC5tYXBfbXJfc2cgPSByeGVfbWFwX21yX3NnLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmM6MTQ5MjpcXHQubW1hcCA9IHJ4ZV9tbWFwLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMtMTQ5My1cXHQubW9kaWZ5X2FoID0gcnhlX21vZGlmeV9haCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6MjcuOTk2MDEwNzE1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMDgwOTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGByeGVfbW1hcC5jYCBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyBpbiBgcnhlX21tYXAuY2AuIFRoZXkndmUgZ290IHRoaXMgY29kZSBibG9jazpcblxuYGBgY1xuXHRyZXQgPSByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgaXAtXHUwMDNlb2JqLCAwKTtcblx0a3JlZl9wdXQoXHUwMDI2aXAtXHUwMDNlcmVmLCByeGVfbW1hcF9yZWxlYXNlKTtcblx0aWYgKHJldClcblx0XHRyeGVfZGJnX2RldihyeGUsIFwiZXJyICVkIGZyb20gcmVtYXBfdm1hbGxvY19yYW5nZVxcblwiLCByZXQpO1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgXCJIbW0sIGBrcmVmX3B1dGAgaXMgaGFwcGVuaW5nIHVuY29uZGl0aW9uYWxseSB0aGVyZS5cIiBUaGF0J3MgYSBiaXQgb2RkLiBJIGltbWVkaWF0ZWx5IHdvbmRlciwgaXMgYGlwYCBiZWluZyBrZXB0IGFsaXZlIGVsc2V3aGVyZT8gSXQgbG9va3MgbGlrZSB0aGVyZSBzaG91bGQgYmUgYW5vdGhlciByZWZlcmVuY2UgaG9sZGluZyBpdC4gTGV0IG1lIHRoaW5rLi4uIEFoLCByaWdodCwgYHEtXHUwMDNlaXBgIGhvbGRzIGEgcmVmZXJlbmNlISBBbmQsIHllcCwgYHJ4ZV9xdWV1ZV9jbGVhbnVwYCBhbHNvIGNhbGxzIGBrcmVmX3B1dChcdTAwMjZxLVx1MDAzZWlwLVx1MDAzZXJlZiwgcnhlX21tYXBfcmVsZWFzZSlgLiBTbywgdGhlIFZNQSAqZG9lc24ndCogbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUsIEknbSB0cnlpbmcgdG8gcmVjYWxsIHdoeSB0aGUgcGF0Y2ggcmVtb3ZlZCBgcnhlX3ZtYV9vcGVuYCBhbmQgYHJ4ZV92bWFfY2xvc2VgIGFsdG9nZXRoZXIuIFRoZXkgd2VyZW4ndCBqdXN0IHNpbXBsaWZ5aW5nOyB0aGVyZSdzIGdvdCB0byBiZSBhIHJlYXNvbi4gQWgsIG9mIGNvdXJzZSEgSXQncyBiZWNhdXNlIGByZW1hcF92bWFsbG9jX3JhbmdlYCBzZXRzIGB2bWEtXHUwMDNldm1fb3BzYCB0byBgdm1hbGxvY192bV9vcHNgISBSaWdodCEgVGhhdCBtZWFucy4uLiB0aGUgY29kZSB0aGF0IHVzZWQgdG8gc2V0IGB2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2cnhlX3ZtX29wc2AgKndhcyogYmVpbmcgb3ZlcndyaXR0ZW4gYW55d2F5IVxuXG5Pa2F5LCBJIHRoaW5rIEkndmUgZ290IGl0LiBJJ20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGByZW1hcF92bWFsbG9jX3JhbmdlYCBpbiB0aGUga2VybmVsIHNvdXJjZSwganVzdCB0byBtYWtlIHN1cmUgbXkgbG9naWMgaXMgc29saWQuIFRoaXMgbG9va3MgbGlrZSBhIHJlYXNvbmFibGUgc2ltcGxpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDIyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjMzLjgwNjgyMTk3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIwNzAwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVtYXBfdm1hbGxvY19yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbm9tbXUuYz0yODY9RVhQT1JUX1NZTUJPTCh2bWFsbG9jXzMyX25vcHJvZik7XFxuLS1cXG5tbS9ub21tdS5jLTI5NS0gKiBWTV9VU0VSTUFQIGlzIHNldCBvbiB0aGUgY29ycmVzcG9uZGluZyBWTUEgc28gdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvXFxubW0vbm9tbXUuYzoyOTY6ICogcmVtYXBfdm1hbGxvY19yYW5nZSgpIGFyZSBwZXJtaXNzaWJsZS5cXG5tbS9ub21tdS5jLTI5Ny0gKi9cXG4tLVxcbm1tL25vbW11LmM9MTYwOT1FWFBPUlRfU1lNQk9MKHZtX2lvbWFwX21lbW9yeSk7XFxubW0vbm9tbXUuYy0xNjEwLVxcbm1tL25vbW11LmM6MTYxMTppbnQgcmVtYXBfdm1hbGxvY19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYWRkcixcXG5tbS9ub21tdS5jLTE2MTItXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZ29mZilcXG4tLVxcbm1tL25vbW11LmMtMTYyMy19XFxubW0vbm9tbXUuYzoxNjI0OkVYUE9SVF9TWU1CT0wocmVtYXBfdm1hbGxvY19yYW5nZSk7XFxubW0vbm9tbXUuYy0xNjI1LVxcbi0tXFxubW0vdm1hbGxvYy5jPTQzMTU9dm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxuLS1cXG5tbS92bWFsbG9jLmMtNDM2OS1cXHRcXHQgKlxcbm1tL3ZtYWxsb2MuYzo0MzcwOlxcdFxcdCAqIFNraXAgVk1fVVNFUk1BUCwgYXMgcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKCkgdmFsaWRhdGVzXFxubW0vdm1hbGxvYy5jLTQzNzEtXFx0XFx0ICogbWFwcGluZyByZXF1ZXN0cyBhZ2FpbnN0IHRoZSB1bmNoYW5nZWQgdm0tXFx1MDAzZXNpemU7IGZyZWVpbmdcXG4tLVxcbm1tL3ZtYWxsb2MuYz00NjY4PWxvbmcgdnJlYWRfaXRlcihzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGNvbnN0IGNoYXIgKmFkZHIsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL3ZtYWxsb2MuYy00NzgwLS8qKlxcbm1tL3ZtYWxsb2MuYzo0NzgxOiAqIHJlbWFwX3ZtYWxsb2NfcmFuZ2VfcGFydGlhbCAtIG1hcCB2bWFsbG9jIHBhZ2VzIHRvIHVzZXJzcGFjZVxcbm1tL3ZtYWxsb2MuYy00NzgyLSAqIEB2bWE6XFx0XFx0dm1hIHRvIGNvdmVyXFxuLS1cXG5tbS92bWFsbG9jLmMtNDc5Ni0gKi9cXG5tbS92bWFsbG9jLmM6NDc5NzppbnQgcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHVhZGRyLFxcbm1tL3ZtYWxsb2MuYy00Nzk4LVxcdFxcdFxcdFxcdHZvaWQgKmthZGRyLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQ4NDMtLyoqXFxubW0vdm1hbGxvYy5jOjQ4NDQ6ICogcmVtYXBfdm1hbGxvY19yYW5nZSAtIG1hcCB2bWFsbG9jIHBhZ2VzIHRvIHVzZXJzcGFjZVxcbm1tL3ZtYWxsb2MuYy00ODQ1LSAqIEB2bWE6XFx0XFx0dm1hIHRvIGNvdmVyIChtYXAgZnVsbCByYW5nZSBvZiB2bWEpXFxuLS1cXG5tbS92bWFsbG9jLmMtNDg1Ni0gKi9cXG5tbS92bWFsbG9jLmM6NDg1NzppbnQgcmVtYXBfdm1hbGxvY19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYWRkcixcXG5tbS92bWFsbG9jLmMtNDg1OC1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBnb2ZmKVxcbm1tL3ZtYWxsb2MuYy00ODU5LXtcXG5tbS92bWFsbG9jLmM6NDg2MDpcXHRyZXR1cm4gcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCxcXG5tbS92bWFsbG9jLmMtNDg2MS1cXHRcXHRcXHRcXHRcXHQgICBhZGRyLCBwZ29mZixcXG4tLVxcbm1tL3ZtYWxsb2MuYy00ODYzLX1cXG5tbS92bWFsbG9jLmM6NDg2NDpFWFBPUlRfU1lNQk9MKHJlbWFwX3ZtYWxsb2NfcmFuZ2UpO1xcbm1tL3ZtYWxsb2MuYy00ODY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MjozMy45MDg4OTg0NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ5NTg3MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWxgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaW50ZXJuYWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhhdCBwYXJ0aWFsIHJlbWFwcGluZyBmdW5jdGlvbiBmb3IgYHZtYWxsb2NgIHJhbmdlcy4gTGV0J3Mgc3RhcnQgd2l0aCBgcmVtYXBfdm1hbGxvY19yYW5nZV9wYXJ0aWFsYCBpbiBgbW0vdm1hbGxvYy5jYC4gSSBleHBlY3QgaXQgdG8gaGFuZGxlIHRoZSBudWFuY2VkIG1lY2hhbmljcyBvZiByZW1hcHBpbmcgb25seSBhIHNlY3Rpb24gb2YgYSBgdm1hbGxvY2AgcmVnaW9uLCB3aGljaCwgYXMgd2Uga25vdywgcmVxdWlyZXMgY2FyZWZ1bCBtYW5hZ2VtZW50IG9mIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgKFBURXMpIGludm9sdmVkLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGJhbGFuY2VzIHRoZSBuZWVkIGZvciBjb250aWd1b3VzIHZpcnR1YWwgYWRkcmVzc2VzIHdpdGggdGhlIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIG9mIHBoeXNpY2FsIG1lbW9yeSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIFRMQiBpbnZhbGlkYXRpb24gc3RyYXRlZ2llcy4gSSBob3BlIHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBpbnRlcnBsYXkgYmV0d2VlbiBgcHRlX29mZnNldF9tYXBgLCBgc2V0X3B0ZWAsIGFuZCB0aGUgc3Vycm91bmRpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBsb2NraW5nIGlzIGNvcnJlY3QsIGdpdmVuIHRoYXQgbXVsdGlwbGUgcHJvY2Vzc2VzIG1pZ2h0IGJlIHRvdWNoaW5nIHRoaXMgY29kZSBjb25jdXJyZW50bHkuIEkgYWxzbyB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYHBncHJvdGAgZmxhZ3MsIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGRpZmZlcmVudCBtZW1vcnkgYXR0cmlidXRlcyBsaWtlIGNhY2hpbmcgYW5kIHdyaXRlIGNvbWJpbmluZy4gVGltZSB0byBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTk4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6MzcuMTU4NDg4Njg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0Nzk3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0Nzk3OlxcdGludCByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWwoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdWFkZHIsXFxuNDc5ODpcXHRcXHRcXHRcXHRcXHR2b2lkICprYWRkciwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG40Nzk5OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG40ODAwOlxcdHtcXG40ODAxOlxcdFxcdHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7XFxuNDgwMjpcXHRcXHR1bnNpZ25lZCBsb25nIG9mZjtcXG40ODAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kX2luZGV4O1xcbjQ4MDQ6XFx0XFxuNDgwNTpcXHRcXHRpZiAoY2hlY2tfc2hsX292ZXJmbG93KHBnb2ZmLCBQQUdFX1NISUZULCBcXHUwMDI2b2ZmKSlcXG40ODA2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ4MDc6XFx0XFxuNDgwODpcXHRcXHRzaXplID0gUEFHRV9BTElHTihzaXplKTtcXG40ODA5OlxcdFxcbjQ4MTA6XFx0XFx0aWYgKCFQQUdFX0FMSUdORUQodWFkZHIpIHx8ICFQQUdFX0FMSUdORUQoa2FkZHIpKVxcbjQ4MTE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDgxMjpcXHRcXG40ODEzOlxcdFxcdGFyZWEgPSBmaW5kX3ZtX2FyZWEoa2FkZHIpO1xcbjQ4MTQ6XFx0XFx0aWYgKCFhcmVhKVxcbjQ4MTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDgxNjpcXHRcXG40ODE3OlxcdFxcdGlmICghKGFyZWEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKFZNX1VTRVJNQVAgfCBWTV9ETUFfQ09IRVJFTlQpKSlcXG40ODE4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQ4MTk6XFx0XFxuNDgyMDpcXHRcXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUsIG9mZiwgXFx1MDAyNmVuZF9pbmRleCkgfHxcXG40ODIxOlxcdFxcdCAgICBlbmRfaW5kZXggXFx1MDAzZSBnZXRfdm1fYXJlYV9zaXplKGFyZWEpKVxcbjQ4MjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDgyMzpcXHRcXHRrYWRkciArPSBvZmY7XFxuNDgyNDpcXHRcXG40ODI1OlxcdFxcdGRvIHtcXG40ODI2OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gdm1hbGxvY190b19wYWdlKGthZGRyKTtcXG40ODI3OlxcdFxcdFxcdGludCByZXQ7XFxuNDgyODpcXHRcXG40ODI5OlxcdFxcdFxcdHJldCA9IHZtX2luc2VydF9wYWdlKHZtYSwgdWFkZHIsIHBhZ2UpO1xcbjQ4MzA6XFx0XFx0XFx0aWYgKHJldClcXG40ODMxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuNDgzMjpcXHRcXG40ODMzOlxcdFxcdFxcdHVhZGRyICs9IFBBR0VfU0laRTtcXG40ODM0OlxcdFxcdFxcdGthZGRyICs9IFBBR0VfU0laRTtcXG40ODM1OlxcdFxcdFxcdHNpemUgLT0gUEFHRV9TSVpFO1xcbjQ4MzY6XFx0XFx0fSB3aGlsZSAoc2l6ZSBcXHUwMDNlIDApO1xcbjQ4Mzc6XFx0XFxuNDgzODpcXHRcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbjQ4Mzk6XFx0XFxuNDg0MDpcXHRcXHRyZXR1cm4gMDtcXG40ODQxOlxcdH1cXG40ODQyOlxcdFxcbjQ4NDM6XFx0LyoqXFxuNDg0NDpcXHQgKiByZW1hcF92bWFsbG9jX3JhbmdlIC0gbWFwIHZtYWxsb2MgcGFnZXMgdG8gdXNlcnNwYWNlXFxuNDg0NTpcXHQgKiBAdm1hOlxcdFxcdHZtYSB0byBjb3ZlciAobWFwIGZ1bGwgcmFuZ2Ugb2Ygdm1hKVxcbjQ4NDY6XFx0ICogQGFkZHI6XFx0XFx0dm1hbGxvYyBtZW1vcnlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6MzcuMTU4Nzc1MDc0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ1Nzk3MjcwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5vdGljZWQgc29tZSBzZWVtaW5nbHkgdW5yZWxhdGVkIGNoYW5nZXMgd2l0aGluIGByeGVfbW1hcC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgcmVtb3ZhbCBvZiBgcnhlX3ZtX29wc2AgYW5kIHRoZSB1c2Ugb2YgYHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBpcGAuIEkgaW5pdGlhbGx5IHRob3VnaHQgdGhpcyBoYWQgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGByZW1hcF92bWFsbG9jX3JhbmdlX3BhcnRpYWxgIGZ1bmN0aW9uIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gQnV0IHRoZW4gSSByZWFsaXplZCB0aGlzIGlzIGp1c3QgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgcmVsYXRlZCB0byBSRE1BIGRldmljZSBuYW1lcyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzLlxuXG5UaGUgcHJpbWFyeSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgdG8gZW5hYmxlIFJETUEgZGV2aWNlcyB0byBjb2V4aXN0IHdpdGggdGhlIHNhbWUgbmFtZSBhY3Jvc3MgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhpcyBpbnZvbHZlcyBtb2RpZnlpbmcgY29yZSBmdW5jdGlvbnMgaW4gdGhlIFJETUEgYW5kIG5ldCBuYW1lc3BhY2UgbG9naWMsIGluY2x1ZGluZyBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgLCBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYCwgYW5kIGBhbGxvY19uYW1lX2lkYCwgYW5kIGhvdyB0aGVzZSBuYW1lcyBhcmUgbWFuYWdlZC4gVGhlIHBhdGNoIGFsc28gdXBkYXRlcyBgY2dyb3VwL3JkbWEuY2AgdG8gaGFuZGxlIHBvdGVudGlhbGx5IGR1cGxpY2F0ZSBuYW1lcywgbGlrZWx5IGFwcGVuZGluZyBhbiBpbmRleCBsaWtlIFwiaW5kZXg9TlwiLlxuXG5UaGlzIGlzIHdoZXJlIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBsaWVzLiBUaGUgbWFpbiBhcmVhcyB0aGF0IGFyZSB2dWxuZXJhYmxlIGFyZTpcblxuMS4gICoqTmV0bGluayBJbnRlcmZhY2U6KiogVGhlIHBhdGNoIG1vZGlmaWVzIGBubGRldl9zZXRfZG9pdGAgdG8gaGFuZGxlIHRoZSBgUkRNQV9OTERFVl9ORVRfTlNfRkRgIGF0dHJpYnV0ZSB2aWEgbmV0bGluay4gVGhpcyBpcyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgbWVhbmluZyB3ZSBjYW4gdHJpZ2dlciBpdCBhbmQgc2VuZCBwb3RlbnRpYWxseSBjcmFmdGVkIG5ldGxpbmsgbWVzc2FnZXMuXG4yLiAgKipDZ3JvdXAgSW50ZXJmYWNlOioqIEl0IGFsc28gdG91Y2hlcyBgcmRtYWNnX3Jlc291cmNlX3NldF9tYXhgIHdpdGhpbiBga2VybmVsL2Nncm91cC9yZG1hLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNncm91cGZzLiBNb2RpZnlpbmcgY2dyb3VwIGNvbmZpZ3VyYXRpb25zIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgaW50ZXJlc3RpbmcgYmVoYXZpb3IuXG5cblRoZXJlZm9yZSwgZnV6emluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBuZXRsaW5rIGFuZCB0aGUgY2dyb3VwIGludGVyZmFjZSByZWxhdGVkIHRvIFJETUEgZGV2aWNlIG5hbWluZyB3aXRoaW4gbmV0d29yayBuYW1lc3BhY2VzIHNlZW1zIGxpa2UgYSBnb29kIHRhcmdldC5cblxuRm9jdXMgU3ltYm9scyBmb3IgRnV6emluZzpcblxuKiAgIGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGBcbiogICBgcmRtYV9kZXZfY2hhbmdlX25ldG5zYFxuKiAgIGByZG1hX2Rldl9waWNrX25ldG5zX25hbWVgXG4qICAgYG5sZGV2X3NldF9kb2l0YFxuKiAgIGByZG1hY2dfcmVzb3VyY2Vfc2V0X21heGBcbiogICBgcmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkYFxuKiAgIGBhbGxvY19uYW1lX2lkYFxuKiAgIGBfX2FsbG9jX25hbWVfaWRgXG4qICAgYHJ4ZV9tbWFwYCAod2hpbGUgdG91Y2hlZCwgdGhpcyBpcyBqdXN0IGEgbWlub3IgcGFydC4gRnV6emluZyBmb2N1c2VkIG9uIHRoaXMgaXMgbGVzcyBsaWtlbHkgdG8gcHJvZHVjZSByZXN1bHRzKVxuXG5UbyBlbnN1cmUgdGhpcyBpcyBhY3R1YWxseSB0ZXN0YWJsZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9uczpcblxuKiAgIGBDT05GSUdfQ0dST1VQX1JETUFgIChjcml0aWNhbCBmb3IgY2dyb3VwIGludGVyZmFjZSlcbiogICBgQ09ORklHX1JETUFfUlhFYFxuKiAgIGBDT05GSUdfTkVUX05TYCAoZXNzZW50aWFsIGZvciBuZXRucylcbiogICBgQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1NgIChuZWVkZWQgZm9yIGBpYl91dmVyYnNfbW1hcGAsIHdoaWNoIGxlYWRzIHRvIHRoZSBgcnhlX21tYXBgKVxuKiAgIGBDT05GSUdfSU5GSU5JQkFORGAgKGNvcmUgUkRNQSBzdXBwb3J0KVxuXG5JIG5lZWQgdG8gY29uZmlybSBgQ09ORklHX0NHUk9VUF9SRE1BYCBpbiBga2VybmVsL2Nncm91cC9LY29uZmlnYCB0byBiZSBzdXJlLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIGZvciBmdW5jdGlvbmFsIGZ1enppbmcuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgaGVyZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBleHBsb3Jpbmcgd2l0aCBhIGZ1enplci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6NTEuNzM4NTA1ODc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk5MzAyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX1JETUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEyMzQ9Y29uZmlnIENHUk9VUF9QSURTXFxuLS1cXG5pbml0L0tjb25maWctMTI0OS1cXG5pbml0L0tjb25maWc6MTI1MDpjb25maWcgQ0dST1VQX1JETUFcXG5pbml0L0tjb25maWctMTI1MS1cXHRib29sIFxcXCJSRE1BIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjUxLjgxOTUwMjE4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTgxOTkxNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyB0aGUgUlhFIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIG1ha2Ugc3VyZSB0aGUgUlhFIGNvbmZpZ3VyYXRpb24gaXMgc2V0IGNvcnJlY3RseS5cIiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19SRE1BX1JYRWAgaXMgcHJvcGVybHkgZGVmaW5lZC4gTmF0dXJhbGx5LCBJIGtub3cgdGhhdCdzIHRoZSBrZXkgZmxhZyBmb3IgZW5hYmxpbmcgdGhlIFJYRSAoUmVsaWFibGUgZVhwcmVzcykgc29mdHdhcmUgUkRNQSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIEluZmluaUJhbmQgZHJpdmVycy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgYGRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvYCBkaXJlY3RvcnkuIFRoYXQncyB3aGVyZSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFJYRSBtb2R1bGUgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGRldGVybWluaW5nIHdoZXRoZXIgYENPTkZJR19SRE1BX1JYRWAgaXMgZXhwb3NlZCBvciBub3QsIGJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFyY2hpdGVjdHVyYWwgY2FwYWJpbGl0aWVzIG9mIHRoZSBzeXN0ZW0uIEknbGwgYmUgbG9va2luZyBmb3IgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZSwgYW5kIGhlbHAgdGV4dCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpcyBzZXQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgaXQgaXMgc2V0IGRpcmVjdGx5IGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWcsIG9yIGlmIGl0IGlzIHB1bGxlZCBpbiBhcyBhIGRlZmF1bHQsIG9yIGlmIGl0IGhhcyBzb21lIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBpbXBvcnRhbnQgYmVmb3JlIGRpZ2dpbmcgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY3NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjU1LjQwMTUwNDIyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxOTM1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJETUFfUlhFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZzoyOmNvbmZpZyBSRE1BX1JYRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6NTUuNDY2NzAzMzgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTAwNDEyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBJbmZpbmliYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSW5maW5pYmFuZC4gTXkgaW50dWl0aW9uIHNheXMgdGhhdCB0aGUgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvaW5maW5pYmFuZGAgZGlyZWN0b3J5LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgdG9wLWxldmVsIGRlZmluaXRpb25zIGZvciBhIGRyaXZlcidzIGNvbmZpZ3VyYXRpb24gYXJlIGxvY2F0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19JTkZJTklCQU5EYCBpcyBjb3JyZWN0bHkgZGVmaW5lZCBhbmQgZW5hYmxlZCwgb3IgYXQgbGVhc3QgdW5kZXJzdGFuZCBpdHMgc3RhdGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZWxpbmUgZm9yIHdoYXRldmVyIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBwZXJmb3JtIHJlZ2FyZGluZyBJbmZpbmliYW5kLiBMZXQncyBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzEwMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDAwOjUyOjU4LjI3Njc0ODU3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzNDE1ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORklOSUJBTkRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI6bWVudWNvbmZpZyBJTkZJTklCQU5EXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9MTY9aWYgSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjE4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUFEXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTktXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMjctXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6Mjg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCB1c2Vyc3BhY2UgYWNjZXNzICh2ZXJicyBhbmQgQ00pXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMzktXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQxLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTQzLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjQ0OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfTUVNXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTE6Y29uZmlnIElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIkluZmluaUJhbmQgb24tZGVtYW5kIHBhZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjMtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NjQ6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIlJETUEvQ01cXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctODAtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6ODE6Y29uZmlnIElORklOSUJBTkRfVklSVF9ETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cXHRkZWZfYm9vbCAhSElHSE1FTVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQk5HX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JuZ19yZS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIE5leHQgZ2VuZXJhdGlvbiBSb0NFIEhDQSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9CTlhUX1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXR4dHJlbWUgSENBIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfQ1hHQjRcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDaGVsc2lvIFQ0L1Q1IFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTYtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnOjc6Y29uZmlnIElORklOSUJBTkRfRUZBXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VmYS9LY29uZmlnLTgtXFx0dHJpc3RhdGUgXFxcIkFtYXpvbiBFbGFzdGljIEZhYnJpYyBBZGFwdGVyIChFRkEpIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfRVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBbGliYWJhIEVsYXN0aWMgUkRNQSBBZGFwdGVyIChFUkRNQSkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSEZJMVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29ybmVsaXMgT1BYIEdlbjEgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX0hOU19ISVAwOFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJIaXNpbGljb24gSGlwMDggRmFtaWx5IFJvQ0Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTMtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL0tjb25maWc6NDpjb25maWcgSU5GSU5JQkFORF9JT05JQ1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkFNRCBQZW5zYW5kbyBEU0MgUkRNQS9Sb0NFIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfSVJETUFcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBQcm90b2NvbCBEcml2ZXIgZm9yIFJETUFcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnLTktXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL0tjb25maWc6MTA6Y29uZmlnIElORklOSUJBTkRfTVRIQ0FfREVCVUdcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBvdXRwdXRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfT0NSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkVtdWxleCBPbmUgQ29ubmVjdCBIQ0Egc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvcWVkci9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUUVEUlxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9xZWRyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUUxvZ2ljIFJvQ0UgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1VTTklDXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVmVyYnMgc3VwcG9ydCBmb3IgQ2lzY28gVklDXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody92bXdfcHZyZG1hL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9WTVdBUkVfUFZSRE1BXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3Ztd19wdnJkbWEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgUGFyYXZpcnR1YWxpemVkIFJETUEgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnOjI6Y29uZmlnIElORklOSUJBTkRfUkRNQVZUXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3JkbWF2dC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlJETUEgdmVyYnMgdHJhbnNwb3J0IGxpYnJhcnlcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JUE9JQlxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUC1vdmVyLUluZmluaUJhbmRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWctMTEtXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnOjEyOmNvbmZpZyBJTkZJTklCQU5EX0lQT0lCX0NNXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIklQLW92ZXItSW5maW5pQmFuZCBDb25uZWN0ZWQgTW9kZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnLTI2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZzoyNzpjb25maWcgSU5GSU5JQkFORF9JUE9JQl9ERUJVR1xcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGVidWdnaW5nXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00MS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWc6NDI6Y29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZy00My1cXHRib29sIFxcXCJJUC1vdmVyLUluZmluaUJhbmQgZGF0YSBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiaVNDU0kgRXh0ZW5zaW9ucyBmb3IgUkRNQSAoaVNFUilcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9JU0VSVFxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJpU0NTSSBFeHRlbnNpb25zIGZvciBSRE1BIChpU0VSKSB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9LY29uZmlnLTItXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6Mzpjb25maWcgSU5GSU5JQkFORF9SVFJTXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctNi1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZzo3OmNvbmZpZyBJTkZJTklCQU5EX1JUUlNfQ0xJRU5UXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctOC1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBjbGllbnQgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWctMTctXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfUlRSU19TRVJWRVJcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiUlRSUyBzZXJ2ZXIgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL0tjb25maWc6Mjpjb25maWcgSU5GSU5JQkFORF9TUlBcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkluZmluaUJhbmQgU0NTSSBSRE1BIFByb3RvY29sXFxcIlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnB0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZzoyOmNvbmZpZyBJTkZJTklCQU5EX1NSUFRcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycHQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIFNDU0kgUkRNQSBQcm90b2NvbCB0YXJnZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDA6NTI6NTguMzQ1MDk1MjIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1ODU4NDAzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJETUEgYW5kIE5ldCBOYW1lc3BhY2UgSW50ZWdyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ6IGBDR1JPVVBfUkRNQWAsIGBSRE1BX1JYRWAsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX1VTRVJfQUNDRVNTYC4gSSdtIGdvaW5nIHRvIHNraXAgY2hlY2tpbmcgYE5FVF9OU2Agc2luY2UgaXQncyBwcmFjdGljYWxseSBhIGdpdmVuLiBJJ2xsIGZvY3VzIG9uIHRoZSBsaXN0ZWQgb25lcyBpbnN0ZWFkLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJ20gc2VlaW5nOlxuXG4qICAgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCBpcyBhIGNlbnRyYWwgcGllY2UgZm9yIG5ldG5zIGNoYW5nZXMuXG4qICAgYHJkbWFfZGV2X2NoYW5nZV9uZXRuc2AgaXMgdGhlIGludGVybmFsIGhlbHBlciBmb3IgdGhlIGFib3ZlLlxuKiAgIGByZG1hX2Rldl9waWNrX25ldG5zX25hbWVgIHNlZW1zIHJlbGF0ZWQgdG8gbmFtZSByZXNvbHV0aW9uIHdpdGhpbiB0aGUgbmFtZXNwYWNlIGNvbnRleHQuXG4qICAgYG5sZGV2X3NldF9kb2l0YCAtIEFoLCBhIE5ldGxpbmsgaGFuZGxlci4gVGhhdCdzIGRlZmluaXRlbHkgd29ydGggZGlnZ2luZyBpbnRvOyBpdCdzIHRoZSBpbnRlcmZhY2UuXG4qICAgYHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4YCBpcyB0aGUgY2dyb3VwIGhhbmRsZXIuXG4qICAgYHJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZGAgY291bGQgYmUgaW52b2x2ZWQgYXMgd2VsbC5cbiogICBgYWxsb2NfbmFtZV9pZGAsIGBfX2FsbG9jX25hbWVfaWRgIHNlZW0gdG8gcmVsYXRlIHRvIG5hbWUgYWxsb2NhdGlvbiwgd2hpY2ggaXMgbGlrZWx5IGNyaXRpY2FsLlxuKiAgIGByeGVfbW1hcGAgLSBUaGlzIGlzIHRoZSBtbWFwIGZ1bmN0aW9uLCB3aGljaCBoYXMgYmVlbiBtb2RpZmllZC5cblxuU28sIGBubGRldl9zZXRfZG9pdGAgaXMgb3VyIHByaW1hcnkgbmV0bGluayBoYW5kbGVyLiBgcmRtYWNnX3Jlc291cmNlX3NldF9tYXhgIGlzIHRoZSBjZ3JvdXAgaW50ZXJmYWNlLiBgaWJfZGV2aWNlX3NldF9uZXRuc19wdXRgIGlzIHRoZSBrZXJuZWwgZnVuY3Rpb24gaGFuZGxpbmcgbmV0bnMgY2hhbmdlcy4gQW5kIG9mIGNvdXJzZSwgdGhlIG1vZGlmaWVkIGByeGVfbW1hcGAgaXMgdGhlcmUuXG5cbk9rYXksIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBPaCwgYHNtY19wbmV0X2ZpbmRfaWJgLCBgc21jX3BuZXRfYWRkX2liYCwgYHNtY19wbmV0X2VudGVyYCwgYHNtY19wbmV0aWRfYnlfdGFibGVfaWJgIGluIGBuZXQvc21jL3NtY19wbmV0LmNgIGhhdmUgYmVlbiBtb2RpZmllZCwgdG9vLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBDT05GSUdfU01DYCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDI2NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MzowNC45MzA5Mzc5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxMDAwNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MzowNS4xOTE5NDQwODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzMzM3MDg3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkRNQSBEZXZpY2UgTmFtZXMgYW5kIE5ldG5zIEltcGxpY2F0aW9uczogRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIHBhdGNoLCBhbmQgdGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IGBTTUNgIHN1cHBvcnQgaXMgZ29pbmcgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUuLi4gd2hhdCBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkPyBgQ0dST1VQX1JETUFgLCBgUkRNQV9SWEVgLCBgSU5GSU5JQkFORF9VU0VSX0FDQ0VTU2AsIGFuZCBub3cgYFNNQ2AuIEdvdCBpdC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIEkndmUgZ290IGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGluIG1pbmQ6IGBpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dGAsIGByZG1hX2Rldl9jaGFuZ2VfbmV0bnNgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYG5sZGV2X3NldF9kb2l0YCwgYHJkbWFjZ19yZXNvdXJjZV9zZXRfbWF4YCwgYHJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZGAsIGBhbGxvY19uYW1lX2lkYCwgYHJ4ZV9tbWFwYCwgYW5kIGBzbWNfcG5ldF9maW5kX2liYC5cblxuTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiB0aGUgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIFllcCwgYGFsbG9jX25hbWVfaWRgLCBgcmRtYV9kZXZfcGlja19uZXRuc19uYW1lYCwgYHJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZGAsIGByZG1hY2dfcmVzb3VyY2Vfc2V0X21heGAsIGFuZCBgbmxkZXZfc2V0X2RvaXRgIGFyZSBhbGwgc3RhdGljLiBUaGUgYGliX2RldmljZV9zZXRfbmV0bnNfcHV0YCBpcyBkZWZpbmVkIGluIGBjb3JlX3ByaXYuaGAuIGByeGVfbW1hcGAgaXMgaW4gYHJ4ZV9tbWFwLmNgLCBhbmQgYHNtY19wbmV0X2ZpbmRfaWJgIGlzIHN0YXRpYyBpbiBgc21jX3BuZXQuY2AuXG5cbk9rYXksIEkndmUgZ290IG15IGxpc3QuXG5cbk9oLCB3YWl0LCB0aGVyZSdzIGByZG1hY2dfcHJpbnRfZGV2aWNlX2tleWAsIGByZG1hY2dfZGV2aWNlX25hbWVfdW5pcXVlX2xvY2tlZGAsIGByZG1hX2Rldl9uYW1lX2luX25ldG5zYCwgYGFzc2lnbl9uYW1lYCBhbmQgYGFsbG9jX25hbWVgIHRvby4gTGV0J3MgaW5jbHVkZSBgcmRtYV9kZXZfbmFtZV9pbl9uZXRuc2AgYW5kIGByZG1hY2dfZGV2aWNlX25hbWVfdW5pcXVlX2xvY2tlZGAgdG9vLlxuXG5TbywgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZTogYENHUk9VUF9SRE1BYCwgYFJETUFfUlhFYCwgYElORklOSUJBTkRfVVNFUl9BQ0NFU1NgLCBgU01DYC5cblxuTm93IGZvciB0aGUgKndoeSo6IFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGFsbG93aW5nIFJETUEgZGV2aWNlcyB0byBzaGFyZSBuYW1lcyBhY3Jvc3MgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcy4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIGRldmljZSBuYW1pbmcsIGhvdyBkZXZpY2VzIGFyZSBtb3ZlZCBiZXR3ZWVuIG5hbWVzcGFjZXMsIGFuZCBob3cgY2dyb3VwIHJlc291cmNlcyBhcmUgdHJhY2tlZC4gSXQgYWxzbyB0b3VjaGVzIFNNQyBwbmV0IGxvb2t1cHMgYW5kIFJYRSBtbWFwIGhhbmRsaW5nLlxuXG5UaGVyZWZvcmUsIGZ1enppbmcgc2hvdWxkIGNvbmNlbnRyYXRlIG9uIHRoZSBuZXRsaW5rIGludGVyZmFjZSB1c2VkIHRvIG1vdmUgUkRNQSBkZXZpY2VzIGJldHdlZW4gbmFtZXNwYWNlcywgdGhlIFJETUEgY2dyb3VwIGludGVyZmFjZSwgYW5kIHRoZSBSWEUgbW1hcCBwYXRoLlxuXG5PbmUgbGFzdCB0aGluZywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgcnhlX21tYXBgIGNoYW5nZXMuIEFoLCB0aGUgcGF0Y2ggcmVtb3ZlcyBgcnhlX3ZtX29wc2AgYW5kIHVzZXMgYHJlbWFwX3ZtYWxsb2NfcmFuZ2VgIGRpcmVjdGx5LCBlZmZlY3RpdmVseSBkcm9wcGluZyBhIHJlZmVyZW5jZSBpbW1lZGlhdGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB0aGUgVk1BIGhvbGRzIHJlZmVyZW5jZXMuIERlZmluaXRlbHkgZnV6ei13b3J0aHkuXG5cbkFscmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzcyLCJPdXRwdXRUb2tlbnMiOjI1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwMDo1MzoxNi41MjU2NTUxOTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDcyMjk1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX1JETUFcIixcbiAgICBcIlJETUFfUlhFXCIsXG4gICAgXCJJTkZJTklCQU5EX1VTRVJfQUNDRVNTXCIsXG4gICAgXCJTTUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9kZXZpY2Vfc2V0X25ldG5zX3B1dFwiLFxuICAgIFwicmRtYV9kZXZfY2hhbmdlX25ldG5zXCIsXG4gICAgXCJyZG1hX2Rldl9waWNrX25ldG5zX25hbWVcIixcbiAgICBcIm5sZGV2X3NldF9kb2l0XCIsXG4gICAgXCJyZG1hY2dfcmVzb3VyY2Vfc2V0X21heFwiLFxuICAgIFwicmRtYWNnX2dldF9kZXZpY2VfbG9ja2VkXCIsXG4gICAgXCJhbGxvY19uYW1lX2lkXCIsXG4gICAgXCJfX2FsbG9jX25hbWVfaWRcIixcbiAgICBcInJ4ZV9tbWFwXCIsXG4gICAgXCJzbWNfcG5ldF9maW5kX2liXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBSRE1BIGRldmljZXMgdG8gaGF2ZSB0aGUgc2FtZSBuYW1lIGFjcm9zcyBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzLCBtb2RpZnlpbmcgdGhlIGNvcmUgUkRNQSBkZXZpY2UgbmFtaW5nLCBuZXRucyBjaGFuZ2UgbG9naWMsIGFuZCBjZ3JvdXAgcmVzb3VyY2UgdHJhY2tpbmcuIEl0IGFsc28gdG91Y2hlcyBTTUMgcG5ldCB0YWJsZSBsb29rdXBzIGFuZCBSWEUgbW1hcCBoYW5kbGluZy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBtb3ZpbmcgUkRNQSBkZXZpY2VzIGJldHdlZW4gbmFtZXNwYWNlcywgdGhlIFJETUEgY2dyb3VwIGludGVyZmFjZSwgYW5kIHRoZSBSWEUgbW1hcCBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9SRE1BXCIsXG4gICAgXCJSRE1BX1JYRVwiLFxuICAgIFwiSU5GSU5JQkFORF9VU0VSX0FDQ0VTU1wiLFxuICAgIFwiU01DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWJfZGV2aWNlX3NldF9uZXRuc19wdXRcIixcbiAgICBcInJkbWFfZGV2X2NoYW5nZV9uZXRuc1wiLFxuICAgIFwicmRtYV9kZXZfcGlja19uZXRuc19uYW1lXCIsXG4gICAgXCJubGRldl9zZXRfZG9pdFwiLFxuICAgIFwicmRtYWNnX3Jlc291cmNlX3NldF9tYXhcIixcbiAgICBcInJkbWFjZ19nZXRfZGV2aWNlX2xvY2tlZFwiLFxuICAgIFwiYWxsb2NfbmFtZV9pZFwiLFxuICAgIFwiX19hbGxvY19uYW1lX2lkXCIsXG4gICAgXCJyeGVfbW1hcFwiLFxuICAgIFwic21jX3BuZXRfZmluZF9pYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUkRNQSBkZXZpY2VzIHRvIGhhdmUgdGhlIHNhbWUgbmFtZSBhY3Jvc3MgZGlmZmVyZW50IG5ldHdvcmsgbmFtZXNwYWNlcywgbW9kaWZ5aW5nIHRoZSBjb3JlIFJETUEgZGV2aWNlIG5hbWluZywgbmV0bnMgY2hhbmdlIGxvZ2ljLCBhbmQgY2dyb3VwIHJlc291cmNlIHRyYWNraW5nLiBJdCBhbHNvIHRvdWNoZXMgU01DIHBuZXQgdGFibGUgbG9va3VwcyBhbmQgUlhFIG1tYXAgaGFuZGxpbmcuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGludGVyZmFjZSBmb3IgbW92aW5nIFJETUEgZGV2aWNlcyBiZXR3ZWVuIG5hbWVzcGFjZXMsIHRoZSBSRE1BIGNncm91cCBpbnRlcmZhY2UsIGFuZCB0aGUgUlhFIG1tYXAgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[1] Phase: Succeeded StartedAt: 2026-07-15 00:53:28 +0000 UTC FinishedAt: 2026-07-15 00:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-15 00:53:28 +0000 UTC FinishedAt: 2026-07-15 00:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2] Phase: Succeeded StartedAt: 2026-07-15 00:53:28 +0000 UTC FinishedAt: 2026-07-15 05:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-15 00:53:28 +0000 UTC FinishedAt: 2026-07-15 05:18:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-15 00:53:28 +0000 UTC FinishedAt: 2026-07-15 00:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-15 00:53:29 +0000 UTC FinishedAt: 2026-07-15 00:53:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowflrq8/series-workflowflrq8-convert-artifact-138742190/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-15 00:53:39 +0000 UTC FinishedAt: 2026-07-15 01:30:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-15 00:53:39 +0000 UTC FinishedAt: 2026-07-15 01:30:26 +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:*23cb869c-aec1-42b3-a0c6-3052fb31104b,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-workflowflrq8/series-workflowflrq8-convert-artifact-138742190/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": "dea5507c-fc74-445e-94f3-8e674813b385", "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-workflowflrq8/series-workflowflrq8-build-action-1767058708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-15 00:53:39 +0000 UTC FinishedAt: 2026-07-15 01:30:13 +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:*23cb869c-aec1-42b3-a0c6-3052fb31104b,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-workflowflrq8/series-workflowflrq8-convert-artifact-138742190/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": "dea5507c-fc74-445e-94f3-8e674813b385", "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-workflowflrq8/series-workflowflrq8-build-action-1767058708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-15 01:30:26 +0000 UTC FinishedAt: 2026-07-15 01:30:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-15 01:30:26 +0000 UTC FinishedAt: 2026-07-15 01:30:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-15 01:30:26 +0000 UTC FinishedAt: 2026-07-15 01:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-15 01:30:26 +0000 UTC FinishedAt: 2026-07-15 01:30:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowflrq8/series-workflowflrq8-convert-artifact-329836705/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-15 01:31:09 +0000 UTC FinishedAt: 2026-07-15 01:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-15 01:31:09 +0000 UTC FinishedAt: 2026-07-15 01:33:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dea5507c-fc74-445e-94f3-8e674813b385,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-workflowflrq8/series-workflowflrq8-build-action-1767058708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-15 01:33:40 +0000 UTC FinishedAt: 2026-07-15 01:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-15 01:33:40 +0000 UTC FinishedAt: 2026-07-15 01:33:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-15 01:33:40 +0000 UTC FinishedAt: 2026-07-15 02:12:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-15 01:33:40 +0000 UTC FinishedAt: 2026-07-15 02:12:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*23cb869c-aec1-42b3-a0c6-3052fb31104b,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-workflowflrq8/series-workflowflrq8-convert-artifact-329836705/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": "3996a385-b00c-41f3-9bcd-b16ddf2635da", "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-workflowflrq8/series-workflowflrq8-build-action-2317554605/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-15 01:33:40 +0000 UTC FinishedAt: 2026-07-15 02:11:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*23cb869c-aec1-42b3-a0c6-3052fb31104b,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-workflowflrq8/series-workflowflrq8-convert-artifact-329836705/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": "3996a385-b00c-41f3-9bcd-b16ddf2635da", "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-workflowflrq8/series-workflowflrq8-build-action-2317554605/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-15 02:12:38 +0000 UTC FinishedAt: 2026-07-15 02:12:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-15 02:12:38 +0000 UTC FinishedAt: 2026-07-15 02:12:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-15 02:12:38 +0000 UTC FinishedAt: 2026-07-15 02:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-15 02:12:38 +0000 UTC FinishedAt: 2026-07-15 02:14:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3996a385-b00c-41f3-9bcd-b16ddf2635da,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowflrq8/series-workflowflrq8-build-action-2317554605/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-15 02:14:50 +0000 UTC FinishedAt: 2026-07-15 05:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-15 02:14:50 +0000 UTC FinishedAt: 2026-07-15 05:18:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*dea5507c-fc74-445e-94f3-8e674813b385,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3996a385-b00c-41f3-9bcd-b16ddf2635da,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowflrq8/series-workflowflrq8-build-action-1767058708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowflrq8/series-workflowflrq8-build-action-2317554605/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-15 02:14:50 +0000 UTC FinishedAt: 2026-07-15 02:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-15 02:14:50 +0000 UTC FinishedAt: 2026-07-15 02:15:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowflrq8/series-workflowflrq8-convert-artifact-3304692022/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-15 02:14:50 +0000 UTC FinishedAt: 2026-07-15 02:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-15 02:14:50 +0000 UTC FinishedAt: 2026-07-15 02:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-15 02:14:50 +0000 UTC FinishedAt: 2026-07-15 02:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-15 02:15:37 +0000 UTC FinishedAt: 2026-07-15 05:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowflrq8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_device_set_netns_put","rdma_dev_change_netns","rdma_dev_pick_netns_name","nldev_set_doit","rdmacg_resource_set_max","rdmacg_get_device_locked","alloc_name_id","__alloc_name_id","rxe_mmap","smc_pnet_find_ib"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e26c48cf23a4940208c5d82fcb37d20df234092b","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_RDMA","RDMA_RXE","INFINIBAND_USER_ACCESS","SMC"],"series_id":"79a36670-9eb2-4d83-91db-cafcd06760c3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-15 02:15:37 +0000 UTC FinishedAt: 2026-07-15 05:18:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dea5507c-fc74-445e-94f3-8e674813b385,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3996a385-b00c-41f3-9bcd-b16ddf2635da,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowflrq8/series-workflowflrq8-build-action-1767058708/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowflrq8/series-workflowflrq8-build-action-2317554605/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowflrq8/series-workflowflrq8-convert-artifact-3304692022/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}