Name: series-workflowrfzz2 Phase: Succeeded StartedAt: 2026-07-21 04:12:34 +0000 UTC FinishedAt: 2026-07-21 08:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[0] Phase: Succeeded StartedAt: 2026-07-21 04:12:34 +0000 UTC FinishedAt: 2026-07-21 04:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 04:12:34 +0000 UTC FinishedAt: 2026-07-21 04:44:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8173f7e2ce67e6ca1d4763f3da14e5b01ce77456", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP", "FS_IOMAP", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8173f7e2ce67e6ca1d4763f3da14e5b01ce77456", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP", "FS_IOMAP", "BLOCK" ], "series_id": "aada9eae-745c-466b-8566-034bff742b41" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bio_iov_iter_get_pages", "iov_iter_extract_bvecs", "loop_set_dio", "loop_update_dio_alignment", "loop_set_dma_limit", "zloop_get_block_size", "zloop_ctl_add", "iomap_dio_bio_iter_one", "__blkdev_direct_IO", "bio_map_user_iov" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfYnZlY3MmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZGlvJiMzNDssCiAgICAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZG1hX2xpbWl0JiMzNDssCiAgICAmIzM0O3psb29wX2dldF9ibG9ja19zaXplJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF9hZGQmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX2Jpb19pdGVyX29uZSYjMzQ7LAogICAgJiMzNDtfX2Jsa2Rldl9kaXJlY3RfSU8mIzM0OywKICAgICYjMzQ7YmlvX21hcF91c2VyX2lvdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGJpbyBoYW5kbGluZyBhbmQgZGlyZWN0IEkvTyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJdCBhZGRzIGBtZW1fYWxpZ25fbWFza2AgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgdG8gZW5mb3JjZSBETUEgYWxpZ25tZW50IGZvciBkaXJlY3QgSS9PLiBJdCBhbHNvIHVwZGF0ZXMgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gcHJvcGVybHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PLCBhbmQgdXBkYXRlcyBgaW9tYXBgIGFuZCBgYmxrZGV2YCBkaXJlY3QgSS9PIHBhdGhzIHRvIHBhc3MgdGhlIGNvcnJlY3QgYWxpZ25tZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFlOTlkYzU3NjY1MjBmMjc4OWZmOWJlNzYyNDQ3NmUyMjM2MDA2ZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAwNDo0Mjo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCBmMmE1ZjRkMGE5NjcyYi4uZmFhZDQxYTcyYWM3N2YgMTAwNjQ0XG4tLS0gYS9ibG9jay9iaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmlvLmNcbkBAIC0xMjIwLDEwICYjNDM7MTIyMCw0NSBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX0tFUk5FTFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnZlY19pdGVyIGl0ZXI7XG4mIzQzO1x0c3RydWN0IGJpb192ZWMgYnY7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ29ycmVjdCBjYWxsZXJzIG5ldmVyIGJyZWFrIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBzbyB0aGlzXG4mIzQzO1x0ICogZXhoYXVzdGl2ZSBjaGVjayBpcyBvbmx5IHBhaWQgZm9yIGluIGRlYnVnIGJ1aWxkcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9tcF9idmVjKGJ2LCBiaW8tXHUwMDNlYmlfaW9fdmVjLCBpdGVyLCBiaW8tXHUwMDNlYmlfaXRlcilcbiYjNDM7XHRcdGlmICgoYnYuYnZfb2Zmc2V0IHwgYnYuYnZfbGVuKSBcdTAwMjYgbWVtX2FsaWduX21hc2spXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGZvcndhcmQgdGhlIGJpb192ZWMgYXMtaXMsIHNvIElURVJfQlZFQyBjYWxsZXJzIG11c3QgcHJvdmlkZVxuJiM0MztcdCAqIHNlZ21lbnRzIGFscmVhZHkgYWxpZ25lZCB0byB0aGUgZGV2aWNlJiMzOTtzIERNQSBhbGlnbm1lbnQuIFRoZSBvbmx5XG4mIzQzO1x0ICogdW5jaGVja2VkIHVzZXItY29udHJvbGxhYmxlIG9mZnNldCB0aGF0IHJlYWNoZXMgaGVyZSBpcyBhbiBpb191cmluZ1xuJiM0MztcdCAqIHJlZ2lzdGVyZWQgYnVmZmVyIHdoZXJlIGp1c3QgdGhlIGZpcnN0IHNlZ21lbnQgY2FuIGJlIHVuYWxpZ25lZFxuJiM0MztcdCAqICh0aGUgcmVzdCBpcyB2aXJ0dWFsbHkgY29udGlndW91cyksIHNvIGNoZWNraW5nIG9ubHkgdGhhdCBvbmUgaXNcbiYjNDM7XHQgKiBzdWZmaWNpZW50IHRvIGtub3cgaWYgdGhlIGVudGlyZSB2ZWN0b3IgaXMgdmFsaWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuICEobXBfYnZlY19pdGVyX29mZnNldChiaW8tXHUwMDNlYmlfaW9fdmVjLCBiaW8tXHUwMDNlYmlfaXRlcikgXHUwMDI2XG4mIzQzO1x0XHRcdFx0XHRcdFx0bWVtX2FsaWduX21hc2spO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKipcbiAgKiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzIC0gYWRkIHVzZXIgb3Iga2VybmVsIHBhZ2VzIHRvIGEgYmlvXG4gICogQGJpbzogYmlvIHRvIGFkZCBwYWdlcyB0b1xuICAqIEBpdGVyOiBpb3YgaXRlcmF0b3IgZGVzY3JpYmluZyB0aGUgcmVnaW9uIHRvIGJlIGFkZGVkXG4mIzQzOyAqIEBtZW1fYWxpZ25fbWFzazogdGhlIG1hc2sgdGhlIHNvdXJjZSBhZGRyZXNzIGFuZCBsZW5ndGggbXVzdCBiZSBhbGlnbmVkIHRvLFxuJiM0MzsgKlx0MCBmb3Igbm8gcmVxdWlyZW1lbnRcbiAgKiBAbGVuX2FsaWduX21hc2s6IHRoZSBtYXNrIHRvIGFsaWduIHRoZSB0b3RhbCBzaXplIHRvLCAwIGZvciBhbnkgbGVuZ3RoXG4gICpcbiAgKiBUaGlzIHRha2VzIGVpdGhlciBhbiBpdGVyYXRvciBwb2ludGluZyB0byB1c2VyIG1lbW9yeSwgb3Igb25lIHBvaW50aW5nIHRvXG5AQCAtMTI0Miw3ICYjNDM7MTI3Nyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gICogaXMgcmV0dXJuZWQgb25seSBpZiAwIHBhZ2VzIGNvdWxkIGJlIHBpbm5lZC5cbiAgKi9cbiBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi1cdFx0XHQgICB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxuIHtcbiBcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBmbGFncyA9IDA7XG4gXG5AQCAtMTI1MSw2ICYjNDM7MTI4NiwxMCBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKSB7XG4gXHRcdGJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuQEAgLTEyNjUsOCAmIzQzOzEzMDQsMTkgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRcdHJldCA9IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoaXRlciwgYmlvLVx1MDAzZWJpX2lvX3ZlYyxcbiBcdFx0XHRcdEJJT19NQVhfU0laRSAtIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsXG4tXHRcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfdmNudCwgYmlvLVx1MDAzZWJpX21heF92ZWNzLCBmbGFncyk7XG4mIzQzO1x0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyxcbiYjNDM7XHRcdFx0XHRtZW1fYWxpZ25fbWFzaywgZmxhZ3MpO1xuIFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBIG1pc2FsaWduZWQgdmVjdG9yIGZhaWxzIHRoZSB3aG9sZSBJL08uICBSZWxlYXNlIGFueVxuJiM0MztcdFx0XHQgKiBwYWdlcyBwaW5uZWQgYnkgZWFybGllciBpdGVyYXRpb25zIGJlZm9yZSByZXR1cm5pbmdcbiYjNDM7XHRcdFx0ICogc2luY2UgdGhpcyBiaW8gd29uJiMzOTt0IGJlIHN1Ym1pdHRlZCB0byByZWxlYXNlIHRoZW0uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAocmV0ID09IC1FSU5WQUwpIHtcbiYjNDM7XHRcdFx0XHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRiaW9fY2xlYXJfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7XG4mIzQzO1x0XHRcdFx0YmlvLVx1MDAzZWJpX3ZjbnQgPSAwO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTM3Nyw3ICYjNDM7MTQyNyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRzc2l6ZV90IHJldDtcbiBcbiBcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXHUwMDNlYmlfaW9fdmVjICYjNDM7IDEsIGxlbixcbi1cdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MgLSAxLCAwKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfdmNudCwgYmlvLVx1MDAzZWJpX21heF92ZWNzIC0gMSwgMCwgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4gXHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudCkge1xuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWFwLmMgYi9ibG9jay9ibGstbWFwLmNcbmluZGV4IDc2ODU0OWYxOWY5N2VjLi5jOTUzNWVmZTFhOTEzYyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLW1hcC5jXG5AQCAtMjc0LDcgJiM0MzsyNzQsNyBAQCBzdGF0aWMgaW50IGJpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHQgKiBObyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9uIG91ciBwYXJ0IHRvIHN1cHBvcnQgYXJiaXRyYXJ5XG4gXHQgKiBwYXNzdGhyb3VnaCBjb21tYW5kcy5cbiBcdCAqL1xuLVx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIDApO1xuJiM0MztcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCAwLCAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcdHJldCA9IGJsa19ycV9hcHBlbmRfYmlvKHJxLCBiaW8pO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2ZvcHMuYyBiL2Jsb2NrL2ZvcHMuY1xuaW5kZXggMTU3ODNhNjE4MGRlYzEuLmU1MTlkN2Y0M2IzMTA2IDEwMDY0NFxuLS0tIGEvYmxvY2svZm9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9mb3BzLmNcbkBAIC00Niw3ICYjNDM7NDYsNyBAQCBzdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLFxuIHN0YXRpYyBpbmxpbmUgaW50IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLFxuIFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4ge1xuLVx0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLFxuJiM0MztcdHJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpLFxuIFx0XHRcdGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpIC0gMSk7XG4gfVxuIFxuQEAgLTIxOCw3ICYjNDM7MjE4LDcgQEAgc3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFxuIFx0XHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldik7XG4gXHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG4tXHRcdFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIEJMS19TVFNfSU9FUlIpO1xuJiM0MztcdFx0XHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgZXJybm9fdG9fYmxrX3N0YXR1cyhyZXQpKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpIHtcbkBAIC0yMzgsOCAmIzQzOzIzOCwxMCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdH1cbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfSEFTX01FVEFEQVRBKSB7XG4gXHRcdFx0cmV0ID0gYmlvX2ludGVncml0eV9tYXBfaXRlcihiaW8sIGlvY2ItXHUwMDNlcHJpdmF0ZSk7XG4tXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4tXHRcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0XHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG4mIzQzO1x0XHRcdFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHRpZiAoaXNfcmVhZCkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDMxMGRlMDQ2M2JlYjE0Li41ZmU2MWQ1NDJmOGI3NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTU0LDYgJiM0Mzs1NCw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXG4gXHRzdHJ1Y3QgZmlsZVx0KmxvX2JhY2tpbmdfZmlsZTtcbiBcdHVuc2lnbmVkIGludFx0bG9fbWluX2Rpb19zaXplO1xuJiM0MztcdHVuc2lnbmVkIGludFx0bG9fZGlvX21lbV9hbGlnbjtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKmxvX2RldmljZTtcbiBcbiBcdGdmcF90XHRcdG9sZF9nZnBfbWFzaztcbkBAIC00NDcsMjYgJiM0Mzs0NDgsMzcgQEAgc3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0XHRcdF9fZnVuY19fLCBsby1cdTAwM2Vsb19udW1iZXIsIGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgcmMpO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4mIzQzO3N0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKnNiX2JkZXYgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2O1xuIFx0c3RydWN0IGtzdGF0IHN0O1xuIFxuIFx0Lypcbi1cdCAqIFVzZSB0aGUgbWluaW1hbCBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC5cbiYjNDM7XHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZ1xuJiM0MztcdCAqIHJlcXVlc3QmIzM5O3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xuJiM0MztcdCAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJiMzOTtzIGRtYV9hbGlnbm1lbnQgd2hlblxuJiM0MztcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbiBcdCAqL1xuIFx0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZmaWxlLVx1MDAzZWZfcGF0aCwgXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSlcbi1cdFx0cmV0dXJuIHN0LmRpb19vZmZzZXRfYWxpZ247XG4mIzQzO1x0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4mIzQzO1x0XHRsby1cdTAwM2Vsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduO1xuJiM0MztcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyB3b3VsZG4mIzM5O3QgYmUgbmVlZGVkLCBidXQgYXMgb2YgTGludXggNi4xMyBvbmx5XG4gXHQgKiBhIGhhbmRmdWwgb2YgZmlsZSBzeXN0ZW1zIHN1cHBvcnQgdGhlIFNUQVRYX0RJT0FMSUdOIGZsYWcuXG4gXHQgKi9cbi1cdGlmIChzYl9iZGV2KVxuLVx0XHRyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4tXHRyZXR1cm4gU0VDVE9SX1NJWkU7XG4mIzQzO1x0aWYgKHNiX2JkZXYpIHtcbiYjNDM7XHRcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHNiX2JkZXYpO1xuJiM0MztcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuJiM0MztcdGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBTRUNUT1JfU0laRSAtIDE7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGlzX2xvb3BfZGV2aWNlKHN0cnVjdCBmaWxlICpmaWxlKVxuQEAgLTUwOSw3ICYjNDM7NTIxLDcgQEAgc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0XHRcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayBcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XG4gXHRpZiAobG8tXHUwMDNlbG9fYmFja2luZ19maWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fRElSRUNUKVxuIFx0XHRsby1cdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XG4tXHRsby1cdTAwM2Vsb19taW5fZGlvX3NpemUgPSBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShsbyk7XG4mIzQzO1x0bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG5AQCAtOTQwLDYgJiM0Mzs5NTIsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRyZXR1cm4gU0VDVE9SX1NJWkU7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBsb29wX3NldF9kbWFfbGltaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSB1c2VyIHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzb1xuJiM0MztcdCAqIHRyYWNrIHRoZSBiYWNraW5nJiMzOTtzIERNQSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYXMgdGhlIG1vZGUgaXMgdG9nZ2xlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX0RJUkVDVF9JTylcbiYjNDM7XHRcdGxpbS1cdTAwM2VkbWFfYWxpZ25tZW50ID0gbWF4X3QodW5zaWduZWQgaW50LCBsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduLFxuJiM0MztcdFx0XHRcdFx0ICAgU0VDVE9SX1NJWkUgLSAxKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsaW0tXHUwMDNlZG1hX2FsaWdubWVudCA9IFNFQ1RPUl9TSVpFIC0gMTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHR1bnNpZ25lZCBpbnQgYnNpemUpXG4ge1xuQEAgLTk2MSw2ICYjNDM7OTg2LDcgQEAgc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbiBcdGxpbS1cdTAwM2Vsb2dpY2FsX2Jsb2NrX3NpemUgPSBic2l6ZTtcbiBcdGxpbS1cdTAwM2VwaHlzaWNhbF9ibG9ja19zaXplID0gYnNpemU7XG4gXHRsaW0tXHUwMDNlaW9fbWluID0gYnNpemU7XG4mIzQzO1x0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBsaW0pO1xuIFx0bGltLVx1MDAzZWZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX1JPVEFUSU9OQUwpO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vmc3luYyBcdTAwMjZcdTAwMjYgIShsby1cdTAwM2Vsb19mbGFncyBcdTAwMjYgTE9fRkxBR1NfUkVBRF9PTkxZKSlcbiBcdFx0bGltLVx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xuQEAgLTE0MTYsNiAmIzQzOzE0NDIsNyBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRib29sIHVzZV9kaW8gPSAhIWFyZztcbiBcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiYjNDM7XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcbiBcdGlmIChsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZClcbiBcdFx0cmV0dXJuIC1FTlhJTztcbkBAIC0xNDM0LDYgJiM0MzsxNDYxLDkgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbiBcdGVsc2VcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2PSB+TE9fRkxBR1NfRElSRUNUX0lPO1xuJiM0MztcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuJiM0MztcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgXHUwMDI2bGltKTtcbiYjNDM7XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNTVlZWI2YWFjMGVhM2IuLmY5N2EyMGNmZGI3Y2U2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbkBAIC0xNDQsNiAmIzQzOzE0NCw3IEBAIHN0cnVjdCB6bG9vcF9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50XHRcdG5yX2NvbnZfem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bWF4X29wZW5fem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdFx0YmxvY2tfc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0ZGlvX21lbV9hbGlnbjtcbiBcbiBcdHNwaW5sb2NrX3RcdFx0b3Blbl96b25lc19sb2NrO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0b3Blbl96b25lc19scnVfbGlzdDtcbkBAIC0xMDM3LDIwICYjNDM7MTAzOCwzMCBAQCBzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbiBcdHN0cnVjdCBrc3RhdCBzdDtcbiBcbiBcdC8qXG4tXHQgKiBJZiB0aGUgRlMgYmxvY2sgc2l6ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIDRLLCB1c2UgdGhhdCBhcyB0aGVcbi1cdCAqIGRldmljZSBibG9jayBzaXplLiBPdGhlcndpc2UsIGZhbGxiYWNrIHRvIHRoZSBGUyBkaXJlY3QgSU8gYWxpZ25tZW50XG4tXHQgKiBjb25zdHJhaW50IGlmIHRoYXQgaXMgcHJvdmlkZWQsIGFuZCB0byB0aGUgRlMgdW5kZXJseWluZyBkZXZpY2Vcbi1cdCAqIHBoeXNpY2FsIGJsb2NrIHNpemUgaWYgdGhlIGRpcmVjdCBJTyBhbGlnbm1lbnQgaXMgdW5rbm93bi5cbiYjNDM7XHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nXG4mIzQzO1x0ICogcmVxdWVzdCYjMzk7cyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4mIzQzO1x0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UmIzM5O3MgZG1hX2FsaWdubWVudCB3aGVuXG4mIzQzO1x0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxuIFx0ICovXG4tXHRpZiAoZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgXHUwMDNjPSBTWl80Sylcbi1cdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBmaWxlX2lub2RlKHpvbmUtXHUwMDNlZmlsZSktXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbi1cdGVsc2UgaWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0XHQgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpXG4mIzQzO1x0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4tXHRlbHNlIGlmIChzYl9iZGV2KVxuJiM0MztcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTtcbiYjNDM7XHR9IGVsc2UgaWYgKHNiX2JkZXYpIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4tXHRlbHNlXG4mIzQzO1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTtcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuJiM0MztcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBTRUNUT1JfU0laRSAtIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZWZlciB0aGUgRlMgYmxvY2sgc2l6ZSBmb3IgdGhlIGRldmljZSBibG9jayBzaXplIHdoZW4gaXQgaXMgbm9cbiYjNDM7XHQgKiBsYXJnZXIgdGhhbiA0Szsgb3RoZXJ3aXNlIGtlZXAgdGhlIGRpcmVjdCBJL08gLyBwaHlzaWNhbCBibG9jayBzaXplXG4mIzQzO1x0ICogc2VsZWN0ZWQgYWJvdmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIFx1MDAzYz0gU1pfNEspXG4mIzQzO1x0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuIFxuIFx0aWYgKHpsby1cdTAwM2V6b25lX2NhcGFjaXR5IFx1MDAyNiAoKHpsby1cdTAwM2VibG9ja19zaXplIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQpIC0gMSkpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O1pvbmUgY2FwYWNpdHkgaXMgbm90IGFsaWduZWQgdG8gYmxvY2sgc2l6ZSAldVxcblwmIzM0OyxcbkBAIC0xMjc5LDYgJiM0MzsxMjkwLDEwIEBAIHN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcbiBcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gemxvLVx1MDAzZWJsb2NrX3NpemU7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gemxvLVx1MDAzZWJsb2NrX3NpemU7XG4mIzQzO1x0LyogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgcmVxdWVzdCBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlcyBhcy1pcy4gKi9cbiYjNDM7XHRpZiAoIW9wdHMtXHUwMDNlYnVmZmVyZWRfaW8pXG4mIzQzO1x0XHRsaW0uZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgemxvLVx1MDAzZWRpb19tZW1fYWxpZ24sXG4mIzQzO1x0XHRcdFx0XHQgIFNFQ1RPUl9TSVpFIC0gMSk7XG4gXHRpZiAoemxvLVx1MDAzZXpvbmVfYXBwZW5kKVxuIFx0XHRsaW0ubWF4X2h3X3pvbmVfYXBwZW5kX3NlY3RvcnMgPSBsaW0ubWF4X2h3X3NlY3RvcnM7XG4gXHRsaW0ubWF4X29wZW5fem9uZXMgPSB6bG8tXHUwMDNlbWF4X29wZW5fem9uZXM7XG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmZmNDU4YWExMmFlMjk4IDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5AQCAtMzU4LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIFx0XHRcdFx0aW9tYXBfbWF4X2Jpb19zaXplKFx1MDAyNml0ZXItXHUwMDNlaW9tYXApLCBhbGlnbm1lbnQpO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgZGlvLVx1MDAzZXN1Ym1pdC5pdGVyLFxuJiM0MztcdFx0XHRcdFx0ICAgICBiZGV2X2RtYV9hbGlnbm1lbnQoYmlvLVx1MDAzZWJpX2JkZXYpLFxuIFx0XHRcdFx0XHQgICAgIGFsaWdubWVudCAtIDEpO1xuIFx0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdGdvdG8gb3V0X3B1dF9iaW87XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmhcbmluZGV4IDhmMzNmNzE3YjE0ZjViLi5jZTM0ZWE0OWVmMzU4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmlvLmhcbkBAIC00NzcsNyAmIzQzOzQ3Nyw3IEBAIGludCBiZGV2X3J3X3ZpcnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCB2b2lkICpkYXRhLFxuIFx0XHRzaXplX3QgbGVuLCBlbnVtIHJlcV9vcCBvcCk7XG4gXG4gaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tXHRcdHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKTtcbiYjNDM7XHRcdHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XG4gXG4gdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbiB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oXG5pbmRleCBhOWJjNWIzMDY3ZTMyMC4uZmUyZTk4NWQ3NGQyNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Vpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Vpby5oXG5AQCAtMzg5LDkgJiM0MzszODksMTcgQEAgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IHBhZ2UgKioqcGFnZXMsXG4gXHRcdFx0ICAgICAgIHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBpbnQgbWF4cGFnZXMsXG4gXHRcdFx0ICAgICAgIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzLFxuIFx0XHRcdCAgICAgICBzaXplX3QgKm9mZnNldDApO1xuJiM0MzsvKlxuJiM0MzsgKiBCbG9jay1sYXllciBjb25zdW1lcnMgKGUuZy4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpKSByZXF1aXJlIHRoYXQgdGhlXG4mIzQzOyAqIHNlZ21lbnRzIG9mIGFuIElURVJfQlZFQyBpdGVyYXRvciBhcmUgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSB0YXJnZXQgZGV2aWNlJiMzOTtzXG4mIzQzOyAqIERNQSBhbGlnbm1lbnQsIGFuZCBmb3J3YXJkIHRoZW0gYXMtaXMuICBJbi1rZXJuZWwgdXNlcnMgdGhhdCBidWlsZCB0aGVpciBvd25cbiYjNDM7ICogYnZlY3MgbXVzdCBub3QgY3JlYXRlIHN1Yi1hbGlnbmVkIHNlZ21lbnRzOyBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKCkgZW5mb3JjZXNcbiYjNDM7ICogdGhlIHNhbWUgZm9yIHRoZSBzZWdtZW50cyBpdCBleHRyYWN0cyB2aWEgQG1lbV9hbGlnbl9tYXNrLlxuJiM0MzsgKi9cbiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRcdHNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsXG4tXHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7XG4mIzQzO1x0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssXG4mIzQzO1x0XHRpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7XG4gXG4gLyoqXG4gICogaW92X2l0ZXJfZXh0cmFjdF93aWxsX3BpbiAtIEluZGljYXRlIGhvdyBwYWdlcyBmcm9tIHRoZSBpdGVyYXRvciB3aWxsIGJlIHJldGFpbmVkXG5kaWZmIC0tZ2l0IGEvbGliL2lvdl9pdGVyLmMgYi9saWIvaW92X2l0ZXIuY1xuaW5kZXggMjczOTE5YjE2MTYxNzYuLmMzNDMwNzU5NTFkZWQwIDEwMDY0NFxuLS0tIGEvbGliL2lvdl9pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pb3ZfaXRlci5jXG5AQCAtMTg4Niw2ICYjNDM7MTg4Niw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NvbnRpZ19mb2xpb19sZW4oc3RydWN0IHBhZ2UgKipwYWdlcyxcbiAgKiBAbWF4X3NpemU6XHRtYXhpbXVtIHNpemUgdG8gZXh0cmFjdCBmcm9tIEBpdGVyXG4gICogQG5yX3ZlY3M6XHRudW1iZXIgb2YgdmVjdG9ycyBpbiBAYnYgKG9uIGluIGFuZCBvdXRwdXQpXG4gICogQG1heF92ZWNzOlx0bWF4aW11bSB2ZWN0b3JzIGluIEBidiwgaW5jbHVkaW5nIHRob3NlIGZpbGxlZCBiZWZvcmUgY2FsbGluZ1xuJiM0MzsgKiBAbWVtX2FsaWduX21hc2s6XHRyZWplY3Qgd2l0aCAtRUlOVkFMIGlmIHRoZSBzb3VyY2UgYWRkcmVzcyBvclxuJiM0MzsgKlx0XHRsZW5ndGggaXMgbm90IGFsaWduZWQgdG8gdGhpcyBtYXNrXG4gICogQGV4dHJhY3Rpb25fZmxhZ3M6IGZsYWdzIHRvIHF1YWxpZnkgcmVxdWVzdFxuICAqXG4gICogTGlrZSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKCksIGJ1dCByZXR1cm5zIHBoeXNpY2FsbHkgY29udGlndW91cyByYW5nZXNcbkBAIC0xODk3LDE0ICYjNDM7MTg5OSwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gICovXG4gc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0XHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxuLVx0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpXG4mIzQzO1x0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssXG4mIzQzO1x0XHRpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncylcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKWl0ZXJfaW92X2FkZHIoaXRlcik7XG4gXHR1bnNpZ25lZCBzaG9ydCBlbnRyaWVzX2xlZnQgPSBtYXhfdmVjcyAtICpucl92ZWNzO1xuIFx0dW5zaWduZWQgc2hvcnQgbnJfcGFnZXMsIGkgPSAwO1xuIFx0c2l6ZV90IGxlZnQsIG9mZnNldCwgbGVuO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcztcbiBcdHNzaXplX3Qgc2l6ZTtcbiBcbiYjNDM7XHRpZiAoKHN0YXJ0IHwgaXRlcl9pb3ZfbGVuKGl0ZXIpKSBcdTAwMjYgbWVtX2FsaWduX21hc2spXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHQvKlxuIFx0ICogTW92ZSBwYWdlIGFycmF5IHVwIGluIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgYmlvIHZlY3MgYXMgZmFyIGFzXG4gXHQgKiBwb3NzaWJsZSBzbyB0aGF0IHdlIGNhbiBzdGFydCBmaWxsaW5nIGJpb3ZlY3MgZnJvbSB0aGUgYmVnaW5uaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfYnZlY3MmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZGlvJiMzNDssCiAgICAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZG1hX2xpbWl0JiMzNDssCiAgICAmIzM0O3psb29wX2dldF9ibG9ja19zaXplJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF9hZGQmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX2Jpb19pdGVyX29uZSYjMzQ7LAogICAgJiMzNDtfX2Jsa2Rldl9kaXJlY3RfSU8mIzM0OywKICAgICYjMzQ7YmlvX21hcF91c2VyX2lvdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGJpbyBoYW5kbGluZyBhbmQgZGlyZWN0IEkvTyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJdCBhZGRzIGBtZW1fYWxpZ25fbWFza2AgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgdG8gZW5mb3JjZSBETUEgYWxpZ25tZW50IGZvciBkaXJlY3QgSS9PLiBJdCBhbHNvIHVwZGF0ZXMgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gcHJvcGVybHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PLCBhbmQgdXBkYXRlcyBgaW9tYXBgIGFuZCBgYmxrZGV2YCBkaXJlY3QgSS9PIHBhdGhzIHRvIHBhc3MgdGhlIGNvcnJlY3QgYWxpZ25tZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWU5OWRjNTc2NjUyMGYyNzg5ZmY5YmU3NjI0NDc2ZTIyMzYwMDZlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDIxIDA0OjQyOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uYwppbmRleCBmMmE1ZjRkMGE5NjcyYi4uZmFhZDQxYTcyYWM3N2YgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jpby5jCkBAIC0xMjIwLDEwICYjNDM7MTIyMCw0NSBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCXJldHVybiAwOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19LRVJORUwKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJCQkJdW5zaWduZWQgbWVtX2FsaWduX21hc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnZlY19pdGVyIGl0ZXI7CiYjNDM7CXN0cnVjdCBiaW9fdmVjIGJ2OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDb3JyZWN0IGNhbGxlcnMgbmV2ZXIgYnJlYWsgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHMsIHNvIHRoaXMKJiM0MzsJICogZXhoYXVzdGl2ZSBjaGVjayBpcyBvbmx5IHBhaWQgZm9yIGluIGRlYnVnIGJ1aWxkcy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX21wX2J2ZWMoYnYsIGJpby0mZ3Q7YmlfaW9fdmVjLCBpdGVyLCBiaW8tJmd0O2JpX2l0ZXIpCiYjNDM7CQlpZiAoKGJ2LmJ2X29mZnNldCB8IGJ2LmJ2X2xlbikgJmFtcDsgbWVtX2FsaWduX21hc2spCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJCQkJdW5zaWduZWQgbWVtX2FsaWduX21hc2spCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBXZSBmb3J3YXJkIHRoZSBiaW9fdmVjIGFzLWlzLCBzbyBJVEVSX0JWRUMgY2FsbGVycyBtdXN0IHByb3ZpZGUKJiM0MzsJICogc2VnbWVudHMgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgRE1BIGFsaWdubWVudC4gVGhlIG9ubHkKJiM0MzsJICogdW5jaGVja2VkIHVzZXItY29udHJvbGxhYmxlIG9mZnNldCB0aGF0IHJlYWNoZXMgaGVyZSBpcyBhbiBpb191cmluZwomIzQzOwkgKiByZWdpc3RlcmVkIGJ1ZmZlciB3aGVyZSBqdXN0IHRoZSBmaXJzdCBzZWdtZW50IGNhbiBiZSB1bmFsaWduZWQKJiM0MzsJICogKHRoZSByZXN0IGlzIHZpcnR1YWxseSBjb250aWd1b3VzKSwgc28gY2hlY2tpbmcgb25seSB0aGF0IG9uZSBpcwomIzQzOwkgKiBzdWZmaWNpZW50IHRvIGtub3cgaWYgdGhlIGVudGlyZSB2ZWN0b3IgaXMgdmFsaWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIShtcF9idmVjX2l0ZXJfb2Zmc2V0KGJpby0mZ3Q7YmlfaW9fdmVjLCBiaW8tJmd0O2JpX2l0ZXIpICZhbXA7CiYjNDM7CQkJCQkJCW1lbV9hbGlnbl9tYXNrKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW8KICAqIEBiaW86IGJpbyB0byBhZGQgcGFnZXMgdG8KICAqIEBpdGVyOiBpb3YgaXRlcmF0b3IgZGVzY3JpYmluZyB0aGUgcmVnaW9uIHRvIGJlIGFkZGVkCiYjNDM7ICogQG1lbV9hbGlnbl9tYXNrOiB0aGUgbWFzayB0aGUgc291cmNlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgdG8sCiYjNDM7ICoJMCBmb3Igbm8gcmVxdWlyZW1lbnQKICAqIEBsZW5fYWxpZ25fbWFzazogdGhlIG1hc2sgdG8gYWxpZ24gdGhlIHRvdGFsIHNpemUgdG8sIDAgZm9yIGFueSBsZW5ndGgKICAqCiAgKiBUaGlzIHRha2VzIGVpdGhlciBhbiBpdGVyYXRvciBwb2ludGluZyB0byB1c2VyIG1lbW9yeSwgb3Igb25lIHBvaW50aW5nIHRvCkBAIC0xMjQyLDcgJiM0MzsxMjc3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKICAqIGlzIHJldHVybmVkIG9ubHkgaWYgMCBwYWdlcyBjb3VsZCBiZSBwaW5uZWQuCiAgKi8KIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAotCQkJICAgdW5zaWduZWQgbGVuX2FsaWduX21hc2spCiYjNDM7CQkJICAgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKQogewogCWlvdl9pdGVyX2V4dHJhY3Rpb25fdCBmbGFncyA9IDA7CiAKQEAgLTEyNTEsNiAmIzQzOzEyODYsMTAgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAKIAlpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkgewogCQliaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7CiYjNDM7CiYjNDM7CQlpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCQlpb3ZfaXRlcl9hZHZhbmNlKGl0ZXIsIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTI2NSw4ICYjNDM7MTMwNCwxOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAogCQlyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby0mZ3Q7YmlfaW9fdmVjLAogCQkJCUJJT19NQVhfU0laRSAtIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplLAotCQkJCSZhbXA7YmlvLSZndDtiaV92Y250LCBiaW8tJmd0O2JpX21heF92ZWNzLCBmbGFncyk7CiYjNDM7CQkJCSZhbXA7YmlvLSZndDtiaV92Y250LCBiaW8tJmd0O2JpX21heF92ZWNzLAomIzQzOwkJCQltZW1fYWxpZ25fbWFzaywgZmxhZ3MpOwogCQlpZiAocmV0ICZsdDs9IDApIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgbWlzYWxpZ25lZCB2ZWN0b3IgZmFpbHMgdGhlIHdob2xlIEkvTy4gIFJlbGVhc2UgYW55CiYjNDM7CQkJICogcGFnZXMgcGlubmVkIGJ5IGVhcmxpZXIgaXRlcmF0aW9ucyBiZWZvcmUgcmV0dXJuaW5nCiYjNDM7CQkJICogc2luY2UgdGhpcyBiaW8gd29uJiMzOTt0IGJlIHN1Ym1pdHRlZCB0byByZWxlYXNlIHRoZW0uCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHJldCA9PSAtRUlOVkFMKSB7CiYjNDM7CQkJCWJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpOwomIzQzOwkJCQliaW9fY2xlYXJfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7CiYjNDM7CQkJCWJpby0mZ3Q7YmlfdmNudCA9IDA7CiYjNDM7CQkJfQogCQkJaWYgKCFiaW8tJmd0O2JpX3ZjbnQpCiAJCQkJcmV0dXJuIHJldDsKIAkJCWJyZWFrOwpAQCAtMTM3Nyw3ICYjNDM7MTQyNyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQlzc2l6ZV90IHJldDsKIAogCQlyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby0mZ3Q7YmlfaW9fdmVjICYjNDM7IDEsIGxlbiwKLQkJCQkmYW1wO2Jpby0mZ3Q7YmlfdmNudCwgYmlvLSZndDtiaV9tYXhfdmVjcyAtIDEsIDApOwomIzQzOwkJCQkmYW1wO2Jpby0mZ3Q7YmlfdmNudCwgYmlvLSZndDtiaV9tYXhfdmVjcyAtIDEsIDAsIDApOwogCQlpZiAocmV0ICZsdDs9IDApIHsKIAkJCWlmICghYmlvLSZndDtiaV92Y250KSB7CiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tYXAuYyBiL2Jsb2NrL2Jsay1tYXAuYwppbmRleCA3Njg1NDlmMTlmOTdlYy4uYzk1MzVlZmUxYTkxM2MgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbWFwLmMKQEAgLTI3NCw3ICYjNDM7Mjc0LDcgQEAgc3RhdGljIGludCBiaW9fbWFwX3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCSAqIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gb3VyIHBhcnQgdG8gc3VwcG9ydCBhcmJpdHJhcnkKIAkgKiBwYXNzdGhyb3VnaCBjb21tYW5kcy4KIAkgKi8KLQlyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCk7CiYjNDM7CXJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCAwLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wdXQ7CiAJcmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocnEsIGJpbyk7CmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmMKaW5kZXggMTU3ODNhNjE4MGRlYzEuLmU1MTlkN2Y0M2IzMTA2IDEwMDY0NAotLS0gYS9ibG9jay9mb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZm9wcy5jCkBAIC00Niw3ICYjNDM7NDYsNyBAQCBzdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLAogc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sCiAJCXN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlyZXR1cm4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsCiYjNDM7CXJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpLAogCQkJYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikgLSAxKTsKIH0KIApAQCAtMjE4LDcgJiM0MzsyMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAKIAkJcmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpOwogCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJYmlvX2VuZGlvX3N0YXR1cyhiaW8sIEJMS19TVFNfSU9FUlIpOwomIzQzOwkJCWJpb19lbmRpb19zdGF0dXMoYmlvLCBlcnJub190b19ibGtfc3RhdHVzKHJldCkpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKSB7CkBAIC0yMzgsOCAmIzQzOzIzOCwxMCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCX0KIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfSEFTX01FVEFEQVRBKSB7CiAJCQlyZXQgPSBiaW9faW50ZWdyaXR5X21hcF9pdGVyKGJpbywgaW9jYi0mZ3Q7cHJpdmF0ZSk7Ci0JCQlpZiAodW5saWtlbHkocmV0KSkKLQkJCQlnb3RvIGZhaWw7CiYjNDM7CQkJaWYgKHVubGlrZWx5KHJldCkpIHsKJiM0MzsJCQkJYmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJfQogCiAJCWlmIChpc19yZWFkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDMxMGRlMDQ2M2JlYjE0Li41ZmU2MWQ1NDJmOGI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTU0LDYgJiM0Mzs1NCw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7CiAKIAlzdHJ1Y3QgZmlsZQkqbG9fYmFja2luZ19maWxlOwogCXVuc2lnbmVkIGludAlsb19taW5fZGlvX3NpemU7CiYjNDM7CXVuc2lnbmVkIGludAlsb19kaW9fbWVtX2FsaWduOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmxvX2RldmljZTsKIAogCWdmcF90CQlvbGRfZ2ZwX21hc2s7CkBAIC00NDcsMjYgJiM0Mzs0NDgsMzcgQEAgc3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCQkJX19mdW5jX18sIGxvLSZndDtsb19udW1iZXIsIGxvLSZndDtsb19maWxlX25hbWUsIHJjKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQomIzQzO3N0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLSZndDtsb19iYWNraW5nX2ZpbGU7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqc2JfYmRldiA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdC0mZ3Q7aV9zYi0mZ3Q7c19iZGV2OwogCXN0cnVjdCBrc3RhdCBzdDsKIAogCS8qCi0JICogVXNlIHRoZSBtaW5pbWFsIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLgomIzQzOwkgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZwomIzQzOwkgKiByZXF1ZXN0JiMzOTtzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHMKJiM0MzsJICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UmIzM5O3MgZG1hX2FsaWdubWVudCB3aGVuCiYjNDM7CSAqIHVzZWQgZm9yIGRpcmVjdC1pby4KIAkgKi8KIAlpZiAoIXZmc19nZXRhdHRyKCZhbXA7ZmlsZS0mZ3Q7Zl9wYXRoLCAmYW1wO3N0LCBTVEFUWF9ESU9BTElHTiwgMCkgJmFtcDsmYW1wOwotCSAgICAoc3QucmVzdWx0X21hc2sgJmFtcDsgU1RBVFhfRElPQUxJR04pKQotCQlyZXR1cm4gc3QuZGlvX29mZnNldF9hbGlnbjsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKJiM0MzsJCWxvLSZndDtsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJLyoKIAkgKiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyB3b3VsZG4mIzM5O3QgYmUgbmVlZGVkLCBidXQgYXMgb2YgTGludXggNi4xMyBvbmx5CiAJICogYSBoYW5kZnVsIG9mIGZpbGUgc3lzdGVtcyBzdXBwb3J0IHRoZSBTVEFUWF9ESU9BTElHTiBmbGFnLgogCSAqLwotCWlmIChzYl9iZGV2KQotCQlyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7Ci0JcmV0dXJuIFNFQ1RPUl9TSVpFOwomIzQzOwlpZiAoc2JfYmRldikgewomIzQzOwkJbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHNiX2JkZXYpOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IFNFQ1RPUl9TSVpFOwomIzQzOwlsby0mZ3Q7bG9fZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC01MDksNyAmIzQzOzUyMSw3IEBAIHN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJCWxvLSZndDtvbGRfZ2ZwX21hc2sgJmFtcDsgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7CiAJaWYgKGxvLSZndDtsb19iYWNraW5nX2ZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19ESVJFQ1QpCiAJCWxvLSZndDtsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87Ci0JbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKGxvKTsKJiM0MzsJbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7CiB9CiAKIHN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC05NDAsNiAmIzQzOzk1MiwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlyZXR1cm4gU0VDVE9SX1NJWkU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBsb29wX3NldF9kbWFfbGltaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgdXNlciBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28KJiM0MzsJICogdHJhY2sgdGhlIGJhY2tpbmcmIzM5O3MgRE1BIGFsaWdubWVudCByZXF1aXJlbWVudCBhcyB0aGUgbW9kZSBpcyB0b2dnbGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxvLSZndDtsb19mbGFncyAmYW1wOyBMT19GTEFHU19ESVJFQ1RfSU8pCiYjNDM7CQlsaW0tJmd0O2RtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxvLSZndDtsb19kaW9fbWVtX2FsaWduLAomIzQzOwkJCQkJICAgU0VDVE9SX1NJWkUgLSAxKTsKJiM0MzsJZWxzZQomIzQzOwkJbGltLSZndDtkbWFfYWxpZ25tZW50ID0gU0VDVE9SX1NJWkUgLSAxOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sCiAJCXVuc2lnbmVkIGludCBic2l6ZSkKIHsKQEAgLTk2MSw2ICYjNDM7OTg2LDcgQEAgc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwKIAlsaW0tJmd0O2xvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplOwogCWxpbS0mZ3Q7cGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplOwogCWxpbS0mZ3Q7aW9fbWluID0gYnNpemU7CiYjNDM7CWxvb3Bfc2V0X2RtYV9saW1pdChsbywgbGltKTsKIAlsaW0tJmd0O2ZlYXR1cmVzICZhbXA7PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7CiAJaWYgKGZpbGUtJmd0O2Zfb3AtJmd0O2ZzeW5jICZhbXA7JmFtcDsgIShsby0mZ3Q7bG9fZmxhZ3MgJmFtcDsgTE9fRkxBR1NfUkVBRF9PTkxZKSkKIAkJbGltLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTsKQEAgLTE0MTYsNiAmIzQzOzE0NDIsNyBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlib29sIHVzZV9kaW8gPSAhIWFyZzsKIAl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCiAJaWYgKGxvLSZndDtsb19zdGF0ZSAhPSBMb19ib3VuZCkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTE0MzQsNiAmIzQzOzE0NjEsOSBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJbG8tJmd0O2xvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTzsKIAllbHNlCiAJCWxvLSZndDtsb19mbGFncyAmYW1wOz0gfkxPX0ZMQUdTX0RJUkVDVF9JTzsKJiM0MzsJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwomIzQzOwlsb29wX3NldF9kbWFfbGltaXQobG8sICZhbXA7bGltKTsKJiM0MzsJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlLCAmYW1wO2xpbSk7CiAJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgbWVtZmxhZ3MpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jCmluZGV4IDU1ZWViNmFhYzBlYTNiLi5mOTdhMjBjZmRiN2NlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwpAQCAtMTQ0LDYgJiM0MzsxNDQsNyBAQCBzdHJ1Y3Qgemxvb3BfZGV2aWNlIHsKIAl1bnNpZ25lZCBpbnQJCW5yX2NvbnZfem9uZXM7CiAJdW5zaWduZWQgaW50CQltYXhfb3Blbl96b25lczsKIAl1bnNpZ25lZCBpbnQJCWJsb2NrX3NpemU7CiYjNDM7CXVuc2lnbmVkIGludAkJZGlvX21lbV9hbGlnbjsKIAogCXNwaW5sb2NrX3QJCW9wZW5fem9uZXNfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW9wZW5fem9uZXNfbHJ1X2xpc3Q7CkBAIC0xMDM3LDIwICYjNDM7MTAzOCwzMCBAQCBzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywKIAlzdHJ1Y3Qga3N0YXQgc3Q7CiAKIAkvKgotCSAqIElmIHRoZSBGUyBibG9jayBzaXplIGlzIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gNEssIHVzZSB0aGF0IGFzIHRoZQotCSAqIGRldmljZSBibG9jayBzaXplLiBPdGhlcndpc2UsIGZhbGxiYWNrIHRvIHRoZSBGUyBkaXJlY3QgSU8gYWxpZ25tZW50Ci0JICogY29uc3RyYWludCBpZiB0aGF0IGlzIHByb3ZpZGVkLCBhbmQgdG8gdGhlIEZTIHVuZGVybHlpbmcgZGV2aWNlCi0JICogcGh5c2ljYWwgYmxvY2sgc2l6ZSBpZiB0aGUgZGlyZWN0IElPIGFsaWdubWVudCBpcyB1bmtub3duLgomIzQzOwkgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nCiYjNDM7CSAqIHJlcXVlc3QmIzM5O3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0cwomIzQzOwkgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW4KJiM0MzsJICogdXNlZCBmb3IgZGlyZWN0LWlvLgogCSAqLwotCWlmIChmaWxlX2lub2RlKHpvbmUtJmd0O2ZpbGUpLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSAmbHQ7PSBTWl80SykKLQkJemxvLSZndDtibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLSZndDtmaWxlKS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0JZWxzZSBpZiAoIXZmc19nZXRhdHRyKCZhbXA7em9uZS0mZ3Q7ZmlsZS0mZ3Q7Zl9wYXRoLCAmYW1wO3N0LCBTVEFUWF9ESU9BTElHTiwgMCkgJmFtcDsmYW1wOwotCQkgKHN0LnJlc3VsdF9tYXNrICZhbXA7IFNUQVRYX0RJT0FMSUdOKSkKJiM0MzsJaWYgKCF2ZnNfZ2V0YXR0cigmYW1wO3pvbmUtJmd0O2ZpbGUtJmd0O2ZfcGF0aCwgJmFtcDtzdCwgU1RBVFhfRElPQUxJR04sIDApICZhbXA7JmFtcDsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKIAkJemxvLSZndDtibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjsKLQllbHNlIGlmIChzYl9iZGV2KQomIzQzOwkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7CiYjNDM7CX0gZWxzZSBpZiAoc2JfYmRldikgewogCQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7Ci0JZWxzZQomIzQzOwkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpOwomIzQzOwl9IGVsc2UgewogCQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTsKJiM0MzsJCXpsby0mZ3Q7ZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcmVmZXIgdGhlIEZTIGJsb2NrIHNpemUgZm9yIHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSB3aGVuIGl0IGlzIG5vCiYjNDM7CSAqIGxhcmdlciB0aGFuIDRLOyBvdGhlcndpc2Uga2VlcCB0aGUgZGlyZWN0IEkvTyAvIHBoeXNpY2FsIGJsb2NrIHNpemUKJiM0MzsJICogc2VsZWN0ZWQgYWJvdmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoZmlsZV9pbm9kZSh6b25lLSZndDtmaWxlKS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUgJmx0Oz0gU1pfNEspCiYjNDM7CQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBmaWxlX2lub2RlKHpvbmUtJmd0O2ZpbGUpLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKIAogCWlmICh6bG8tJmd0O3pvbmVfY2FwYWNpdHkgJmFtcDsgKCh6bG8tJmd0O2Jsb2NrX3NpemUgJmd0OyZndDsgU0VDVE9SX1NISUZUKSAtIDEpKSB7CiAJCXByX2VycigmIzM0O1pvbmUgY2FwYWNpdHkgaXMgbm90IGFsaWduZWQgdG8gYmxvY2sgc2l6ZSAldVxuJiMzNDssCkBAIC0xMjc5LDYgJiM0MzsxMjkwLDEwIEBAIHN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cykKIAogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gemxvLSZndDtibG9ja19zaXplOwogCWxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSB6bG8tJmd0O2Jsb2NrX3NpemU7CiYjNDM7CS8qIERpcmVjdCBJL08gZm9yd2FyZHMgdGhlIHJlcXVlc3QgcGFnZXMgdG8gdGhlIGJhY2tpbmcgZmlsZXMgYXMtaXMuICovCiYjNDM7CWlmICghb3B0cy0mZ3Q7YnVmZmVyZWRfaW8pCiYjNDM7CQlsaW0uZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgemxvLSZndDtkaW9fbWVtX2FsaWduLAomIzQzOwkJCQkJICBTRUNUT1JfU0laRSAtIDEpOwogCWlmICh6bG8tJmd0O3pvbmVfYXBwZW5kKQogCQlsaW0ubWF4X2h3X3pvbmVfYXBwZW5kX3NlY3RvcnMgPSBsaW0ubWF4X2h3X3NlY3RvcnM7CiAJbGltLm1heF9vcGVuX3pvbmVzID0gemxvLSZndDttYXhfb3Blbl96b25lczsKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmZmNDU4YWExMmFlMjk4IDEwMDY0NAotLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uYwpAQCAtMzU4LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLAogCQkJCWlvbWFwX21heF9iaW9fc2l6ZSgmYW1wO2l0ZXItJmd0O2lvbWFwKSwgYWxpZ25tZW50KTsKIAllbHNlCiAJCXJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBkaW8tJmd0O3N1Ym1pdC5pdGVyLAomIzQzOwkJCQkJICAgICBiZGV2X2RtYV9hbGlnbm1lbnQoYmlvLSZndDtiaV9iZGV2KSwKIAkJCQkJICAgICBhbGlnbm1lbnQgLSAxKTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXRfcHV0X2JpbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IDhmMzNmNzE3YjE0ZjViLi5jZTM0ZWE0OWVmMzU4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC00NzcsNyAmIzQzOzQ3Nyw3IEBAIGludCBiZGV2X3J3X3ZpcnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCB2b2lkICpkYXRhLAogCQlzaXplX3QgbGVuLCBlbnVtIHJlcV9vcCBvcCk7CiAKIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAotCQl1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7CiYjNDM7CQl1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spOwogCiB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpOwogdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oCmluZGV4IGE5YmM1YjMwNjdlMzIwLi5mZTJlOTg1ZDc0ZDI0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Vpby5oCkBAIC0zODksOSAmIzQzOzM4OSwxNyBAQCBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcywKIAkJCSAgICAgICBzaXplX3QgbWF4c2l6ZSwgdW5zaWduZWQgaW50IG1heHBhZ2VzLAogCQkJICAgICAgIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzLAogCQkJICAgICAgIHNpemVfdCAqb2Zmc2V0MCk7CiYjNDM7LyoKJiM0MzsgKiBCbG9jay1sYXllciBjb25zdW1lcnMgKGUuZy4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpKSByZXF1aXJlIHRoYXQgdGhlCiYjNDM7ICogc2VnbWVudHMgb2YgYW4gSVRFUl9CVkVDIGl0ZXJhdG9yIGFyZSBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIHRhcmdldCBkZXZpY2UmIzM5O3MKJiM0MzsgKiBETUEgYWxpZ25tZW50LCBhbmQgZm9yd2FyZCB0aGVtIGFzLWlzLiAgSW4ta2VybmVsIHVzZXJzIHRoYXQgYnVpbGQgdGhlaXIgb3duCiYjNDM7ICogYnZlY3MgbXVzdCBub3QgY3JlYXRlIHN1Yi1hbGlnbmVkIHNlZ21lbnRzOyBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKCkgZW5mb3JjZXMKJiM0MzsgKiB0aGUgc2FtZSBmb3IgdGhlIHNlZ21lbnRzIGl0IGV4dHJhY3RzIHZpYSBAbWVtX2FsaWduX21hc2suCiYjNDM7ICovCiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsCiAJCXNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsCi0JCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7CiYjNDM7CQl1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssCiYjNDM7CQlpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7CiAKIC8qKgogICogaW92X2l0ZXJfZXh0cmFjdF93aWxsX3BpbiAtIEluZGljYXRlIGhvdyBwYWdlcyBmcm9tIHRoZSBpdGVyYXRvciB3aWxsIGJlIHJldGFpbmVkCmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jCmluZGV4IDI3MzkxOWIxNjE2MTc2Li5jMzQzMDc1OTUxZGVkMCAxMDA2NDQKLS0tIGEvbGliL2lvdl9pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL2lvdl9pdGVyLmMKQEAgLTE4ODYsNiAmIzQzOzE4ODYsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsCiAgKiBAbWF4X3NpemU6CW1heGltdW0gc2l6ZSB0byBleHRyYWN0IGZyb20gQGl0ZXIKICAqIEBucl92ZWNzOgludW1iZXIgb2YgdmVjdG9ycyBpbiBAYnYgKG9uIGluIGFuZCBvdXRwdXQpCiAgKiBAbWF4X3ZlY3M6CW1heGltdW0gdmVjdG9ycyBpbiBAYnYsIGluY2x1ZGluZyB0aG9zZSBmaWxsZWQgYmVmb3JlIGNhbGxpbmcKJiM0MzsgKiBAbWVtX2FsaWduX21hc2s6CXJlamVjdCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIG9yCiYjNDM7ICoJCWxlbmd0aCBpcyBub3QgYWxpZ25lZCB0byB0aGlzIG1hc2sKICAqIEBleHRyYWN0aW9uX2ZsYWdzOiBmbGFncyB0byBxdWFsaWZ5IHJlcXVlc3QKICAqCiAgKiBMaWtlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSwgYnV0IHJldHVybnMgcGh5c2ljYWxseSBjb250aWd1b3VzIHJhbmdlcwpAQCAtMTg5NywxNCAmIzQzOzE4OTksMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogICovCiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsCiAJCXNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsCi0JCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncykKJiM0MzsJCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywKJiM0MzsJCWlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKQogewomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaXRlcl9pb3ZfYWRkcihpdGVyKTsKIAl1bnNpZ25lZCBzaG9ydCBlbnRyaWVzX2xlZnQgPSBtYXhfdmVjcyAtICpucl92ZWNzOwogCXVuc2lnbmVkIHNob3J0IG5yX3BhZ2VzLCBpID0gMDsKIAlzaXplX3QgbGVmdCwgb2Zmc2V0LCBsZW47CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKIAlzc2l6ZV90IHNpemU7CiAKJiM0MzsJaWYgKChzdGFydCB8IGl0ZXJfaW92X2xlbihpdGVyKSkgJmFtcDsgbWVtX2FsaWduX21hc2spCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkvKgogCSAqIE1vdmUgcGFnZSBhcnJheSB1cCBpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGJpbyB2ZWNzIGFzIGZhciBhcwogCSAqIHBvc3NpYmxlIHNvIHRoYXQgd2UgY2FuIHN0YXJ0IGZpbGxpbmcgYmlvdmVjcyBmcm9tIHRoZSBiZWdpbm5pbmcKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBwcmV0dHkgY29yZSBzdHVmZiDigJMgYmxvY2sgbGF5ZXIgYmlvIGhhbmRsaW5nIGFuZCBkaXJlY3QgSS9PIGFsaWdubWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgaW50cm9kdWN0aW9uIG9mIGBtZW1fYWxpZ25fbWFza2AgaW50byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpcyBpbW1lZGlhdGVseSBncmFiYmluZyBteSBhdHRlbnRpb24uIEFuZCB0aGUgdXBkYXRlcyB0byB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gY29ycmVjdGx5IHNldCBETUEgYWxpZ25tZW50IGxpbWl0cyBmb3IgZGlyZWN0IEkvTyBhcmUgZGVmaW5pdGVseSBpbnRlcmVzdGluZy4gVGhlbiB0aGVyZSBpcyB0aGUgbW9kaWZpY2F0aW9uIG9mIGBpb21hcGAgYW5kIGBibGtkZXZgIHRvIHBhc3MgYGJkZXZfZG1hX2FsaWdubWVudChiZGV2KWAgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLiBJdCBzZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYXQgdGhlIHZlcnkgY29yZSBvZiB0aGUgYmxvY2sgbGF5ZXIgYW5kIHRoZSBkaXJlY3QgSS9PIGxvZ2ljLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIHRoaXMgc2NyZWFtcyBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGtleSBzeW1ib2xzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBhIG1lbnRhbCBjaGVja2xpc3Q6CiogICBgQ09ORklHX0JMS19ERVZfTE9PUGAgZm9yIHRoZSBsb29wIGRldmljZS4KKiAgIGBDT05GSUdfQkxLX0RFVl9aT05FRGAgZm9yIHRoZSB6bG9vcCBkZXZpY2UuLi4gaG1tLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQmIzM5O3MgbG9vayBpbnRvIHRoZSBjb2RlLCBpdCYjMzk7cyBgZHJpdmVycy9ibG9jay96bG9vcC5jYC4gSSYjMzk7bGwgdXNlIHRvb2xzIHRvIHZlcmlmeSBpdHMgY29uZmlnLgoqICAgYENPTkZJR19GU19JT01BUGAgZm9yIGlvbWFwLCBvYnZpb3VzbHkuCiogICBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CTE9DS2AgZm9yIHRoZSBibG9jayBsYXllciBpdHNlbGYuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZnVsbHkgYXdhcmUgb2YgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIHRhcmdldCBzeXN0ZW1zLiBUaGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIG15IGZ1enppbmcgcGxhbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG9vbHMgSSBuZWVkIHRvIGhlbHAgbWUgdW5kZXJzdGFuZCBgZHJpdmVycy9ibG9jay96bG9vcC5jYCBhbmQgaXRzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTM1Nj1jb25maWcgQkxLX0RFVl9aT05FRF9MT09QXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM2Ny1cdCAgZWNobyBcJiMzNDthZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcJiMzNDsgXHUwMDNlIFxcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzY4Olx0XHQvZGV2L3psb29wLWNvbnRyb2xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Kipab25lZCBMb29wIENvbmZpZ3VyYXRpb24gRGl2ZSoqCgpPa2F5LCBzbyBgQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhlIHpvbmVkIGxvb3AgZGV2aWNlLCB6bG9vcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIGRpcmVjdCBJL08gcGF0aC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlLgoKTXkgZm9jdXMgaXMgb24gdGhlIGRhdGEgcGF0aC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpbiBgYmxvY2svYmlvLmNgIGFuZCBgbGliL2lvdl9pdGVyLmNgLiBUaGVzZSB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBJL08gdmVjdG9ycyBhcmUgaGFuZGxlZC4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgem9uZWQgYXdhcmUgaGFuZGxpbmcgd2l0aGluIHRoZSBsb29wIGNvZGUuCgpJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGxvb3Bfc2V0X2Rpb2AsIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYHpsb29wX2N0bF9hZGRgLCBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAsIGFuZCBvZiBjb3Vyc2UsIGBfX2Jsa2Rldl9kaXJlY3RfSU9gLgoKQmVmb3JlIGRpZ2dpbmcgaW4gZnVydGhlciwgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHRoYXQgYHpsb29wX2dldF9ibG9ja19zaXplYCBhY3R1YWxseSAqZXhpc3RzKi4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7bSBsb29raW5nIGF0IG91dGRhdGVkIGNvZGUgb3IgYSBkaWZmZXJlbnQgdmVyc2lvbiwgYW5kIEkgbmVlZCB0byBzdGFydCBoZXJlIHRvIGJlIGNlcnRhaW4gSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfZ2V0X2Jsb2NrX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMTY9c3RhdGljIHN0cnVjdCBmaWxlICp6bG9vcF9maWxwX29wZW5fZm10KGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzMy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM0OnN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMzUtXHRcdFx0XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTA3NT1zdGF0aWMgaW50IHpsb29wX2luaXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEwLVx0XHRpZiAoIXpsby1cdTAwM2VibG9ja19zaXplKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTExMTpcdFx0XHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTItXHRcdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1MC1cdGlmICghemxvLVx1MDAzZWJsb2NrX3NpemUpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTUxOlx0XHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTItXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTUtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1NjpcdHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQ0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBsb29wLmMgZm9yIERNQSBhbmQgQWxpZ25tZW50IFVwZGF0ZXMqKgoKUmlnaHQsIHRpbWUgdG8gZm9jdXMgb24gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb29wIGRldmljZSBoYW5kbGVzIERNQSB0cmFuc2ZlcnMgYW5kIGFsaWdubWVudC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgZnVuY3Rpb25zIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCBhbmQgYGxvb3Bfc2V0X2RtYV9saW1pdGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlc2UgYXJlIGNyaXRpY2FsIGZvciBlbnN1cmluZyBlZmZpY2llbnQgSS9PIGFuZCBwcmV2ZW50aW5nIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciwgZXZlbiB3b3JzZSwgZGF0YSBjb3JydXB0aW9uLCB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlJiMzOTtzIHNldHVwIGFuZCBvcGVyYXRpb24sIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gRE1BIGNvbnN0cmFpbnRzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGFsZ29yaXRobXMgdXNlZCBmb3IgYWxpZ25tZW50LCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBhcmlzZSB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGxpa2VseSB3aGVyZSBhbnkgc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byBsb29wIGRldmljZSBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlIGhpZGluZy4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTQzOT1zdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NDUxOnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1Mi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NTE2PXN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjMtXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUyNDpcdGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQobG8pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtNTI1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAzMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBsb29wX3NldF9kbWFfbGltaXRgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbG9vcF9zZXRfZG1hX2xpbWl0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24g4oCTIGlzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybSBvciBhIG1vcmUgZ2VuZXJpYyBETUEgKERpcmVjdCBNZW1vcnkgQWNjZXNzKSBpbXBsZW1lbnRhdGlvbj8gVGhlIG5hbWluZyBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNldHRpbmcgc29tZSBzb3J0IG9mIHVwcGVyIGJvdW5kLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBzaXplIG9yIG51bWJlciBvZiBETUEgdHJhbnNmZXJzIHdpdGhpbiBhIGxvb3AuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCYjMzk7cyB0aGUgdHlwaWNhbCB1c2UgY2FzZT8gSXMgdGhpcyBmb3IgcHJldmVudGluZyBvdmVyZmxvdyBpbiBhIHNwZWNpZmljIHJlZ2lzdGVyLCBtYW5hZ2luZyBtZW1vcnkgYmFuZHdpZHRoLCBvciBpbXBvc2luZyBhIGxpbWl0YXRpb24gZm9yIHNhZmV0eSByZWFzb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBsb29wIHJlcHJlc2VudHMuIElzIGl0IGFuIGlubmVyIGxvb3Agd2l0aGluIGEgbW9yZSBjb21wbGV4IGFsZ29yaXRobSwgb3IgdGhlIHByaW1hcnkgbG9vcD8KCkkmIzM5O2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgZnVuY3Rpb24mIzM5O3MgZGVjbGFyYXRpb24gdG8gc2VlIHRoZSBhcmd1bWVudHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGludGVnZXIgbGltaXQsIG9yIGlzIHRoZXJlIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggaW52b2x2ZWQsIGxpa2UgYSBzdHJ1Y3R1cmUgd2l0aCB1cHBlciBhbmQgbG93ZXIgYm91bmQgZGVmaW5pdGlvbnM/IEFsc28sIGFyZSB3ZSBwb3RlbnRpYWxseSBzZXR0aW5nIGJvdW5kcyBvbiBpbmRpdmlkdWFsIGNoYW5uZWwgbG9vcHMsIG9yIHRoZSB3aG9sZSBvcGVyYXRpb24uIEkmIzM5O20ga2VlbiB0byBleGFtaW5lIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgdGhhdCBtaWdodCBuZWVkIGF0dGVudGlvbi4KCkkgbmVlZCB0byBzZWUgaG93IHRoZSBsaW1pdCBpcyAqdXNlZCouIFdoZXJlIGlzIHRoaXMgdmFyaWFibGUgYWNjZXNzZWQgd2l0aGluIHRoZSBsb29wPyBJcyBpdCBjaGVja2VkIHdpdGhpbiB0aGUgRE1BIHRyYW5zZmVyIGl0c2VsZj8gSXMgaXQgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9yIHRoZSBzaXplIG9mIGEgYnVmZmVyPyBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gdGhpcyBsaW1pdCwgd2hhdCBoYXBwZW5zIGlmIHRoZSBsb29wIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIGRtYSBsaW1pdD8KCkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGxvb3Bfc2V0X2RtYV9saW1pdGAgZml0cyBpbnRvIHRoZSBsYXJnZXIgRE1BIHBpY3R1cmUgdG8gY29uZmlybSB0aGF0IGl0JiMzOTtzIGNvcnJlY3RseSBwcmV2ZW50aW5nIHByb2JsZW1zLCBub3QgY3JlYXRpbmcgdGhlbS4gSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBib3R0bGVuZWNrcywgb3IgZXZlbiBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyByZWxhdGVkIHRvIERNQSBwZXJmb3JtYW5jZSBvciBkYXRhIGludGVncml0eS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3Bfc2V0X2RtYV9saW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTk0Nz1zdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NTQtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NTU6c3RhdGljIHZvaWQgbG9vcF9zZXRfZG1hX2xpbWl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1Ni17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9OTY4PXN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTg4LVx0bGltLVx1MDAzZWlvX21pbiA9IGJzaXplO1xuZHJpdmVycy9ibG9jay9sb29wLmM6OTg5Olx0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBsaW0pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtOTkwLVx0bGltLVx1MDAzZWZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX1JPVEFUSU9OQUwpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0NDE9c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2NC1cdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ2NTpcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgXHUwMDI2bGltKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjYtXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTG9vcCBEZXZpY2UgUGF0Y2gqKgoKT2theSwgdGhpcyBwYXRjaCBsb29rcyBzb2xpZCwgZGVmaW5pdGVseSB3b3J0aCBkZWRpY2F0aW5nIHNvbWUgZnV6emluZyB0aW1lIHRvLiBMZXQmIzM5O3MgZ2V0IGEgcGxhbiB0b2dldGhlci4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSB0aGlua2luZyB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUgbW9zdCByZWxldmFudDogYEJMS19ERVZfTE9PUGAsIGBCTEtfREVWX1pPTkVEX0xPT1BgLCBhbmQgYEZTX0lPTUFQYC4gV2hpbGUgYEZTX0lPTUFQYCBtaWdodCBiZSBpbXBsaWNpdGx5IGVuYWJsZWQgd2l0aCBYRlMgb3IgZXh0NCwgaXQmIzM5O3MgZ29vZCB0byBiZSBleHBsaWNpdCBhYm91dCBpdC4KCk5vdywgZm9yIGZvY3VzIHN5bWJvbHMsIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIHRoZSBmb2xsb3dpbmc6IGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLCBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAsIGBsb29wX3NldF9kbWFfbGltaXRgLCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgLCBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAsIGFuZCBgX19ibGtkZXZfZGlyZWN0X0lPYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBwcmltZSBzcG90cyB3aGVyZSB0aGUgcGF0Y2jigJlzIGxvZ2ljIGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBjb2RlLCBpbmNyZWFzaW5nIHRoZSByaXNrIHN1cmZhY2UuCgpKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBJIG5lZWQgdG8gY29uZmlybSBgRlNfSU9NQVBgIGlzIGFjdHVhbGx5IGEgY29uZmlndXJhYmxlIGl0ZW0uIEl0IGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipJbnRlcm5hbCBBdWRpdCBvZiBgRlNfSU9NQVBgIGFuZCBEaXJlY3QgSS9PIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBgRlNfSU9NQVBgLi4uIHllYWgsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIGNvbmZpZyBvcHRpb24uIEdvdHRhIGtlZXAgdGhhdCBzdHJhaWdodCBpbiBteSBoZWFkLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCB0aGUgaW52ZXN0aWdhdGlvbiwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBfX2Jsa2Rldl9kaXJlY3RfSU9gIGlzIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGUgZnVuY3Rpb24gSSYjMzk7bSBsb29raW5nIGF0LiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhhdCB0byBhdm9pZCB3YXN0aW5nIHRpbWUgb24gYSByZWQgaGVycmluZy4gTmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBkZWFscyB3aXRoIGRpcmVjdCBJL08gZm9yIGJsb2NrIGRldmljZXMuIE15IG1lbW9yeSBpcyBnb29kLCBidXQgYSBxdWljayBjb25maXJtYXRpb24gbmV2ZXIgaHVydHMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCB0YXJnZXQgYmVmb3JlIEkgZGlnIGluIGFueSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYmxrZGV2X2RpcmVjdF9JTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2ZvcHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9mb3BzLmM9NDY9c3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svZm9wcy5jLTU0LVxuYmxvY2svZm9wcy5jOjU1OnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxuYmxvY2svZm9wcy5jLTU2LVx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4tLVxuYmxvY2svZm9wcy5jPTEzMT1zdGF0aWMgdm9pZCBibGtkZXZfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svZm9wcy5jLTE3NC1cbmJsb2NrL2ZvcHMuYzoxNzU6c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuYmxvY2svZm9wcy5jLTE3Ni1cdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbmJsb2NrL2ZvcHMuYz0yOTQ9c3RhdGljIHZvaWQgYmxrZGV2X2Jpb19lbmRfaW9fYXN5bmMoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2ZvcHMuYy0zMjEtXG5ibG9jay9mb3BzLmM6MzIyOnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5ibG9jay9mb3BzLmMtMzIzLVx0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuYmxvY2svZm9wcy5jPTM5Nj1zdGF0aWMgc3NpemVfdCBibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmJsb2NrL2ZvcHMuYy00MzAtXHRcdGlmIChpc19zeW5jX2tpb2NiKGlvY2IpKVxuYmxvY2svZm9wcy5jOjQzMTpcdFx0XHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShpb2NiLCBpdGVyLCBiZGV2LFxuYmxvY2svZm9wcy5jLTQzMi1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzKTtcbmJsb2NrL2ZvcHMuYzo0MzM6XHRcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoaW9jYiwgaXRlciwgYmRldiwgbnJfcGFnZXMpO1xuYmxvY2svZm9wcy5jLTQzNC1cdH0gZWxzZSBpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9BVE9NSUMpIHtcbi0tXG5ibG9jay9mb3BzLmMtNDM2LVx0fVxuYmxvY2svZm9wcy5jOjQzNzpcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU8oaW9jYiwgaXRlciwgYmRldiwgYmlvX21heF9zZWdzKG5yX3BhZ2VzKSk7XG5ibG9jay9mb3BzLmMtNDM4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxOTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbmZpcm1pbmcgRGlyZWN0IEkvTyBhbmQgRGlnZ2luZyBEZWVwZXIqKgoKWWVzLCBgX19ibGtkZXZfZGlyZWN0X0lPYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyB1c2VkIGhlcmUuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGJsb2NrIGxheWVyJiMzOTtzIGRpcmVjdCBJL08gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBgYmlvYCBzdHJ1Y3R1cmUgYW5kIHRoZSBJL08gdmVjdG9yIChgaW92YCkuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBiaW9faW92X2J2ZWNfYWxpZ25lZGAgaW4gYGJsb2NrL2Jpby5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWxpZ25tZW50IGxvZ2ljIGlzIGxpa2VseSB0byByZXNpZGUsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyBpdCByZWxhdGVzIHRvIGBidmVjYCBhbGlnbm1lbnQgd2lsbCBiZSBrZXkgdG8gbWFraW5nIHRoZSByZWxldmFudCBkZXRlcm1pbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW9faW92X2J2ZWNfYWxpZ25lZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jpby5jPTExOTM9c3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5ibG9jay9iaW8uYy0xMjIzLSNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMXG5ibG9jay9iaW8uYzoxMjI0OnN0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW92X2J2ZWNfYWxpZ25lZChjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9iaW8uYy0xMjI1LVx0XHRcdFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcbi0tXG5ibG9jay9iaW8uYy0xMjM5LSNlbHNlXG5ibG9jay9iaW8uYzoxMjQwOnN0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW92X2J2ZWNfYWxpZ25lZChjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9iaW8uYy0xMjQxLVx0XHRcdFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcbi0tXG5ibG9jay9iaW8uYz0xMjc5PWludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmJsb2NrL2Jpby5jLTEyODktXG5ibG9jay9iaW8uYzoxMjkwOlx0XHRpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKVxuYmxvY2svYmlvLmMtMTI5MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERldmljZSBJL08gTWFwcGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBkaWcgaW50byB0aGlzIEkvTyBtYXBwaW5nIHByb2Nlc3MuIFdoaWxlIGBiaW9faW92X2J2ZWNfYWxpZ25lZGAgKmlzKiBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIG1ha2luZyBpdCBhIHBvdGVudGlhbGx5IGxlc3MtdGhhbi1pZGVhbCBmb2N1cyBmb3IgZGVlcC1kaXZlIGFuYWx5c2lzLCB0aGUgZnVuY3Rpb24gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGxvb2tzIGxpa2UgYSBtb3JlIHByb21pc2luZyBlbnRyeSBwb2ludC4gSXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBwcm92aWRlIGEgZ29vZCB2aWV3IGludG8gaG93IHRoZSBJL08gdmVjdG9ycyBnZXQgdHJhbnNsYXRlZCBpbnRvIHBhZ2Ugc3RydWN0dXJlcyBmb3IgYSBiaW8uCgpUaGVyZWZvcmUsIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYGJpb19tYXBfdXNlcl9pb3ZgIHdpdGhpbiBgYmxvY2svYmxrLW1hcC5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIGFyZWEgb2YgZm9jdXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB1c2VyLXNwYWNlIEkvTyB2ZWN0b3JzIGFyZSBoYW5kbGVkIGluIHRoaXMgbWFwcGluZyBmdW5jdGlvbi4gSXQgaXMgbGlrZWx5IHRoYXQgdGhpcyBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdHJhbnNsYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX21hcF91c2VyX2lvdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbWFwLmM9MTUwPXN0YXRpYyBpbnQgYmlvX2NvcHlfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgcnFfbWFwX2RhdGEgKm1hcF9kYXRhLFxuLS1cbmJsb2NrL2Jsay1tYXAuYy0yNTktXG5ibG9jay9ibGstbWFwLmM6MjYwOnN0YXRpYyBpbnQgYmlvX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmJsb2NrL2Jsay1tYXAuYy0yNjEtXHRcdGdmcF90IGdmcF9tYXNrKVxuLS1cbmJsb2NrL2Jsay1tYXAuYz00OTk9aW50IGJsa19ycV9tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5ibG9jay9ibGstbWFwLmMtNTM0LVx0XHRlbHNlXG5ibG9jay9ibGstbWFwLmM6NTM1Olx0XHRcdHJldCA9IGJpb19tYXBfdXNlcl9pb3YocnEsIFx1MDAyNmksIGdmcF9tYXNrKTtcbmJsb2NrL2Jsay1tYXAuYy01MzYtXHRcdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSU8gVmVjdG9yIEluc3BlY3Rpb24qKgoKQWxyaWdodCwgYGJpb19tYXBfdXNlcl9pb3ZgLi4uIHllYWgsIHRoYXQmIzM5O3MgYSBzb2xpZCBmdW5jdGlvbi4gSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGF0LiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY3J1Y2lhbCBjb25uZWN0aW9ucyBpbiB0aGUgSU8gcGF0aCwgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlc2AuIFRoYXQmIzM5O3MgaW4gYGJsb2NrL2ZvcHMuY2AsIHJpZ2h0PyBHb29kLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBJTyB2ZWN0b3JzIGFyZSBiZWluZyBwcm9wZXJseSBoYW5kbGVkIHRocm91Z2ggdG8gdGhlIGJsb2NrIGRldmljZSBsYXllci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSB0cmFuc2ZlciBpcyBjb2hlcmVudCBhbmQgZWZmaWNpZW50IGFuZCB0aGF0IGFueSBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgaW4gdGhpcyBhcmVhIGFyZW4mIzM5O3QgYmVjb21pbmcgYSBib3R0bGVuZWNrLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2ZvcHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9mb3BzLmM9Mzk9c3RhdGljIGJvb2wgYmxrZGV2X2Rpb19pbnZhbGlkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBraW9jYiAqaW9jYixcbi0tXG5ibG9jay9mb3BzLmMtNDUtXG5ibG9jay9mb3BzLmM6NDY6c3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9mb3BzLmMtNDctXHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5ibG9jay9mb3BzLmM9NTU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuYmxvY2svZm9wcy5jLTg2LVxuYmxvY2svZm9wcy5jOjg3Olx0cmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhcdTAwMjZiaW8sIGl0ZXIsIGJkZXYpO1xuYmxvY2svZm9wcy5jLTg4LVx0aWYgKHVubGlrZWx5KHJldCkpXG4tLVxuYmxvY2svZm9wcy5jPTE3NT1zdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuYmxvY2svZm9wcy5jLTIxOC1cbmJsb2NrL2ZvcHMuYzoyMTk6XHRcdHJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTtcbmJsb2NrL2ZvcHMuYy0yMjAtXHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG4tLVxuYmxvY2svZm9wcy5jPTMyMj1zdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmJsb2NrL2ZvcHMuYy0zNTMtXHR9IGVsc2Uge1xuYmxvY2svZm9wcy5jOjM1NDpcdFx0cmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpO1xuYmxvY2svZm9wcy5jLTM1NS1cdFx0aWYgKHVubGlrZWx5KHJldCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEJsb2NrIERldmljZSBJL08gQWxpZ25tZW50KioKCkFscmlnaHQsIHNvIGBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzYCBpcyBhICpzdGF0aWMgaW5saW5lKiBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZCwgYXMgaXQgbWVhbnMgdGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IG9wdGltaXplIGl0IGhlYXZpbHksIHBvdGVudGlhbGx5IGlubGluaW5nIGl0cyBsb2dpYyBkaXJlY3RseS4gTWFrZXMgZGVidWdnaW5nIGEgYml0IGhhcmRlciBpZiB5b3UmIzM5O3JlIG5vdCBjYXJlZnVsLCBidXQgdXN1YWxseSBpdCYjMzk7cyBhIG5ldCB3aW4gZm9yIHBlcmZvcm1hbmNlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYWxpZ25tZW50IGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxvb3AgZGV2aWNlLiBHaXZlbiB0aGF0IGNvbnRleHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgbG9vcCBkcml2ZXIgbWFuYWdlcyBhbGlnbm1lbnQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBxdWlya3Mgd2hlbiBkZWFsaW5nIHdpdGggZGlyZWN0IEkvTyBhbmQsIG1vcmUgYnJvYWRseSwgYmxvY2sgZGV2aWNlIGludGVyYWN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSB3aXRoIHRob3NlIGRpcmVjdCBJTyBhbGlnbm1lbnQgY29uc2lkZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz00Mzk9c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1MC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ1MTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTIte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTUxNj1zdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTIzLVx0XHRsby1cdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MjQ6XHRsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KGxvKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDMyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gRGlyZWN0IEkvTyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGRpcmVjdCBJL08gaXMgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAsIGBsb29wX3NldF9kbWFfbGltaXRgLCBhbmQgYGxvb3Bfc2V0X2Rpb2AgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCBzdWdnZXN0cyB0aGV5IGFyZSBsb2NhbCB0byB0aGUgbW9kdWxlIG9yIGNvbXBpbGF0aW9uIHVuaXQgYW5kIGFyZW4mIzM5O3QgbWVhbnQgdG8gYmUgdXNlZCBleHRlcm5hbGx5LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkYXRhIHRyYW5zZmVyIGFjdHVhbGx5IGhhcHBlbnMgaW4gdGhlIGNvbnRleHQgb2YgYGlvbWFwYCwgSSBuZWVkIHRvIGRpdmUgaW50byBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIGlzIGRvaW5nOyB0aGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWluIHdvcmsgaGFwcGVucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJL08gb3BlcmF0aW9ucyBhcmUgYnJva2VuIGRvd24sIG1hcHBlZCB0byB1bmRlcmx5aW5nIGJsb2NrIGRldmljZXMsIGFuZCBob3cgZGF0YSB0cmFuc2ZlciBpcyBpbml0aWF0ZWQsIGFuZCB0aGVzZSBmdW5jdGlvbnMgc2VlbSBsaWtlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBrZXkgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fYmlvX2l0ZXJfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9Mjk4PXN0YXRpYyBpbnQgaW9tYXBfZGlvX3plcm8oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zMzMtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzozMzQ6c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTMzNS1cdFx0c3RydWN0IGlvbWFwX2RpbyAqZGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgYWxpZ25tZW50LFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQwMj1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0Ni1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU0NzpcdFx0cmV0ID0gaW9tYXBfZGlvX2Jpb19pdGVyX29uZShpdGVyLCBkaW8sIHBvcywgYWxpZ25tZW50LCBiaW9fb3BmKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0OC1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBEZWVwIEVuZDogYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgLiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGFuIGludGVybmFsIHV0aWxpdHksIHNjb3BlZCB0byBhIHNwZWNpZmljIGNvbnRleHQsIHByb2JhYmx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgSS9PIG1hcHBpbmcgbGF5ZXIuIE15IGd1dCB0ZWxscyBtZSBpdCYjMzk7cyBoYW5kbGluZyBhIGNydWNpYWwgcGllY2Ugb2YgRGlyZWN0IEkvTyAoRElPKSBhbmQgcG90ZW50aWFsbHkgYmxvY2sgSS9PIGl0ZXJhdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9ucyB1c2VkIGluIHRoZSBrZXJuZWwsIEkmIzM5O2QgZ3Vlc3MgdGhhdCBpdCBoYW5kbGVzIGEgc2luZ2xlIEkvTyBvcGVyYXRpb24gaXRlcmF0aW9uLiBUaGUgYF9iaW9fYCBwYXJ0IG9mIHRoZSBmdW5jdGlvbiBuYW1lIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbiBpcyB0aWdodGx5IGNvdXBsZWQgdG8gYmlvIG9yIGJpbyBpdGVyYXRvcnMuCgpMZXQmIzM5O3Mgc2Vl4oCmIEnigJlsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIGZ1bmN0aW9uLiBUaGUgbmFtaW5nIG9mIHRoZSBmdW5jdGlvbiBzb3VuZHMgbGlrZSBhbiBpb3ZlYyBpdGVyYXRvciBhbmQgYnVmZmVyIHZlY3RvciBleHRyYWN0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZC4gVGhpcyBpcyBsaWtlbHkgaG93IHdlJiMzOTtyZSBleHRyYWN0aW5nIGRhdGEsIHBvc3NpYmx5IGZyb20gYW4gaW92ZWMgc3RydWN0dXJlLCB0byBjcmVhdGUgYSBidWZmZXIgdmVjdG9yIGZvciBJL08gb3BlcmF0aW9ucy4gU2luY2UgdGhlIGZ1bmN0aW9uIGlzIGxvY2F0ZWQgaW4gYGxpYi9pb3ZfaXRlci5jYCwgaXQgY29uZmlybXMgdGhlIGl0ZXJhdG9yIGRlc2lnbi4gSSBleHBlY3QgdGhhdCBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbCB5aWVsZCBkZWVwZXIgaW5zaWdodHMgaW50byBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIERJTyBhbmQgZGF0YSB0cmFuc2ZlciB3aXRoaW4gdGhlIEkvTyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL2lvdl9pdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL2lvdl9pdGVyLmM9MTg0OT1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubGliL2lvdl9pdGVyLmMtMTg4Mi0vKipcbmxpYi9pb3ZfaXRlci5jOjE4ODM6ICogaW92X2l0ZXJfZXh0cmFjdF9idmVjcyAtIEV4dHJhY3QgYnZlY3MgZnJvbSBhbiBpdGVyYXRvclxubGliL2lvdl9pdGVyLmMtMTg4NC0gKiBAaXRlcjpcdHRoZSBpdGVyYXRvciB0byBleHRyYWN0IGZyb21cbi0tXG5saWIvaW92X2l0ZXIuYy0xODk5LSAqL1xubGliL2lvdl9pdGVyLmM6MTkwMDpzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG5saWIvaW92X2l0ZXIuYy0xOTAxLVx0XHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxuLS1cbmxpYi9pb3ZfaXRlci5jLTE5NTEtfVxubGliL2lvdl9pdGVyLmM6MTk1MjpFWFBPUlRfU1lNQk9MX0dQTChpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2OTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBUaGlua2luZyBvbiBLZXkgU3ltYm9scyoqCgpPa2F5LCBzbyBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgaXMgbWFya2VkIHdpdGggYEVYUE9SVF9TWU1CT0xfR1BMYC4gVGhhdOKAmXMgZ29vZCBpbmZvcm1hdGlvbiBmb3IgbWUgdG8gc3RhcnQgd2l0aC4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIGluIHRoZSBrZXJuZWw6IGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIChvYnZpb3VzbHkpLCBgbG9vcF9zZXRfZGlvYCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgLCBhbmQgZmluYWxseSwgYF9fYmxrZGV2X2RpcmVjdF9JT2AuCgpOb3csIGJlZm9yZSBJIGRpZyBpbiB0b28gZGVlcGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBsb29wX3NldF9kaW9gIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gSXQmIzM5O3MgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBhIGRlYWQgZW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX3NldF9kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDI4PXN0YXRpYyBpbnQgbG9vcF9zZXRfY2FwYWNpdHkoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDQwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ0MTpzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NDIte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1MTk9c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTMxLVx0Y2FzZSBMT09QX1NFVF9ESVJFQ1RfSU86XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTMyOlx0XHRlcnIgPSBsb29wX3NldF9kaW8obG8sIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTMzLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgSU9DVEwgQWNjZXNzaWJpbGl0eSBhbmQgQmxvY2sgU2l6ZSoqCgpSaWdodCwgc28gYGxvb3Bfc2V0X2Rpb2AgaXMgZGVmaW5pdGVseSBleHBvc2VkIHRocm91Z2ggYW4gaW9jdGwsIHdoaWNoIEkgc3VzcGVjdGVkLiBUaGF0JiMzOTtzIGdvb2QgdG8gY29uZmlybS4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgIGZ1bmN0aW9uIGFnYWluLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkmIzM5O2xsIG1lbnRhbGx5IHJ1biB0aHJvdWdoIGl0cyBsb2dpYyBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLi4uIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBnb3RjaGFzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcGF0aHMgdGhhdCBJJiMzOTttIG92ZXJsb29raW5nLiBHb3R0YSBrZWVwIHRoZSBkZXRhaWxzIHN0cmFpZ2h0LiBJdCYjMzk7cyB0aGUgZnVuZGFtZW50YWxzIHRoYXQgc29tZXRpbWVzIGNhdGNoIHlvdSBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wX2dldF9ibG9ja19zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz0xMDE2PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqemxvb3BfZmlscF9vcGVuX2ZtdChpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMzMtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzNDpzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDM1LVx0XHRcdFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTEwNzU9c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMC1cdFx0aWYgKCF6bG8tXHUwMDNlYmxvY2tfc2l6ZSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMTE6XHRcdFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEyLVx0XHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTAtXHRpZiAoIXpsby1cdTAwM2VibG9ja19zaXplKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MTpcdFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUyLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTY6XHR6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmVhY2hpbmcgZm9yIHRoZSBCbG9jayBTaXplKioKCkFscmlnaHQsIHNvIGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgaXMgaW5kZWVkIHJlYWNoYWJsZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYF9fYmxrZGV2X2RpcmVjdF9JT2AuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYmxvY2sgc2l6ZSB3ZSYjMzk7dmUganVzdCBjb25maXJtZWQuIEtub3dpbmcgaG93IGRpcmVjdCBJL08gaXMgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGUgYmxvY2sgc2l6ZSBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGJlaGF2aW91ci4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgdGhhdCB3ZSBjYW4gZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYmxrZGV2X2RpcmVjdF9JTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2ZvcHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9mb3BzLmM9NDY9c3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svZm9wcy5jLTU0LVxuYmxvY2svZm9wcy5jOjU1OnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxuYmxvY2svZm9wcy5jLTU2LVx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4tLVxuYmxvY2svZm9wcy5jPTEzMT1zdGF0aWMgdm9pZCBibGtkZXZfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svZm9wcy5jLTE3NC1cbmJsb2NrL2ZvcHMuYzoxNzU6c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuYmxvY2svZm9wcy5jLTE3Ni1cdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbmJsb2NrL2ZvcHMuYz0yOTQ9c3RhdGljIHZvaWQgYmxrZGV2X2Jpb19lbmRfaW9fYXN5bmMoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2ZvcHMuYy0zMjEtXG5ibG9jay9mb3BzLmM6MzIyOnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5ibG9jay9mb3BzLmMtMzIzLVx0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuYmxvY2svZm9wcy5jPTM5Nj1zdGF0aWMgc3NpemVfdCBibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmJsb2NrL2ZvcHMuYy00MzAtXHRcdGlmIChpc19zeW5jX2tpb2NiKGlvY2IpKVxuYmxvY2svZm9wcy5jOjQzMTpcdFx0XHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShpb2NiLCBpdGVyLCBiZGV2LFxuYmxvY2svZm9wcy5jLTQzMi1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzKTtcbmJsb2NrL2ZvcHMuYzo0MzM6XHRcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoaW9jYiwgaXRlciwgYmRldiwgbnJfcGFnZXMpO1xuYmxvY2svZm9wcy5jLTQzNC1cdH0gZWxzZSBpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9BVE9NSUMpIHtcbi0tXG5ibG9jay9mb3BzLmMtNDM2LVx0fVxuYmxvY2svZm9wcy5jOjQzNzpcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU8oaW9jYiwgaXRlciwgYmRldiwgYmlvX21heF9zZWdzKG5yX3BhZ2VzKSk7XG5ibG9jay9mb3BzLmMtNDM4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUmVhY2hpbmcgYSBCbG9jayBEZXZpY2UqKgoKQWxyaWdodCwgc28gYF9fYmxrZGV2X2RpcmVjdF9JT2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEdvb2QsIGdvb2QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwYXRoLCBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0IG9mIHdoYXRldmVyIHRyaWdnZXJzIHRoaXMuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBkaXZlIGludG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbiYjMzk7dCBpdD8gTGV0JiMzOTtzIHRyYWNlIGhvdyB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdHMgYXJlIGJlaW5nIHBvcHVsYXRlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHBhZ2UgcGlubmluZyBzdHJhdGVneSBhbmQgcG90ZW50aWFsIGRhdGEgY29weWluZyBvciBtYXBwaW5nIGdvaW5nIG9uLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGludGVyYWN0aW9uIG9mIHRoZSBpdGVyYXRvcnMgaGVyZTsgaG93IG11Y2ggZGF0YSBjYW4gYmUgcHJvY2Vzc2VkIHBlciBpdGVyYXRpb24gYW5kIHdoYXQgaGFwcGVucyBpbiBlZGdlIGNhc2VzLiBXaGF0IEkmIzM5O20gcmVhbGx5IGxvb2tpbmcgZm9yIGlzIGhvdyB0aGlzIGltcGFjdHMgbWVtb3J5IHV0aWxpemF0aW9uLCBob3cgbXVjaCBkYXRhIGlzIGdldHRpbmcgcHVsbGVkIGZyb20gdXNlciBzcGFjZSAoaWYgYXQgYWxsKS4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSB3YXRjaGluZyBmb3IgYW55IG9idmlvdXMgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBpc3N1ZXMsIGxpa2UgaG93IHRoZSBwYWdlcyBhcmUgYmVpbmcgaGFuZGxlZCBpbiByZWxhdGlvbiB0byBETUEuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIHN5c3RlbSBjYW4gcHJvcGVybHkgaGFuZGxlIHRoZSBzaXR1YXRpb24gd2hlbiBJL08gc2l6ZXMgYXJlIGxhcmdlciB0aGFuIHRoZSBwaHlzaWNhbCBtZW1vcnkgYWxsb2NhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MTE3Nz12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuYmxvY2svYmlvLmMtMTE4OS0gKiBBbGlnbnMgdGhlIGJpbyBzaXplIHRvIHRoZSBsZW5fYWxpZ25fbWFzaywgcmVsZWFzaW5nIGV4Y2Vzc2l2ZSBiaW8gdmVjcyB0aGF0XG5ibG9jay9iaW8uYzoxMTkwOiAqIF9fYmlvX2lvdl9pdGVyX2dldF9wYWdlcyBtYXkgaGF2ZSBpbnNlcnRlZCwgYW5kIHJldmVydHMgdGhlIHRyaW1tZWQgbGVuZ3RoXG5ibG9jay9iaW8uYy0xMTkxLSAqIGZvciB0aGUgbmV4dCBpdGVyYXRpb24uXG4tLVxuYmxvY2svYmlvLmM9MTI0MD1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuLS1cbmJsb2NrL2Jpby5jLTEyNTYtLyoqXG5ibG9jay9iaW8uYzoxMjU3OiAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW9cbmJsb2NrL2Jpby5jLTEyNTgtICogQGJpbzogYmlvIHRvIGFkZCBwYWdlcyB0b1xuLS1cbmJsb2NrL2Jpby5jLTEyNjYtICogbWFwIHRoZW0gaW50byB0aGUga2VybmVsLiBPbiBJTyBjb21wbGV0aW9uLCB0aGUgY2FsbGVyIHNob3VsZCBwdXQgdGhvc2VcbmJsb2NrL2Jpby5jOjEyNjc6ICogcGFnZXMuIEZvciBidmVjIGJhc2VkIGl0ZXJhdG9ycyBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkgdXNlcyB0aGUgcHJvdmlkZWRcbmJsb2NrL2Jpby5jLTEyNjgtICogYnZlY3MgcmF0aGVyIHRoYW4gY29weWluZyB0aGVtLiBIZW5jZSBhbnlvbmUgaXNzdWluZyBraW9jYiBiYXNlZCBJTyBuZWVkc1xuLS1cbmJsb2NrL2Jpby5jLTEyNzgtICovXG5ibG9jay9iaW8uYzoxMjc5OmludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuYmxvY2svYmlvLmMtMTI4MC1cdFx0XHQgICB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzQ1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSS9PIEl0ZXJhdGlvbioqCgpPa2F5LCBzbyBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgSS9PIGZsb3cuIExldCYjMzk7cyB0cmFjZSB0aGlzIGJhY2suIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBob3cgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIGludGVyYWN0cyB3aXRoIGl0LiBUaGlzIHByb2JhYmx5IGdpdmVzIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgbW92ZW1lbnQgcHJvY2VzcyB3aXRoaW4gdGhlIERpcmVjdCBJL08gY29udGV4dCBhbmQgd2hlcmUgdGhlIHBhZ2UgaW5mb3JtYXRpb24gaXMgYmVpbmcgZXh0cmFjdGVkIG9yIHV0aWxpemVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fYmlvX2l0ZXJfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9Mjk4PXN0YXRpYyBpbnQgaW9tYXBfZGlvX3plcm8oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zMzMtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzozMzQ6c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTMzNS1cdFx0c3RydWN0IGlvbWFwX2RpbyAqZGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgYWxpZ25tZW50LFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQwMj1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0Ni1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU0NzpcdFx0cmV0ID0gaW9tYXBfZGlvX2Jpb19pdGVyX29uZShpdGVyLCBkaW8sIHBvcywgYWxpZ25tZW50LCBiaW9fb3BmKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0OC1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGFuZCBEYXRhIE1hcHBpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRoYXTigJlzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBhbmQgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBiaW9fbWFwX3VzZXJfaW92YC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gbWFwcGluZyB1c2VyLXNwYWNlIEkvTyB2ZWN0b3JzIChpb3ZzKSB0byB0aGUgdW5kZXJseWluZyBibG9jayBJL08gKGJpbykgc3RydWN0dXJlLCBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbWFwcGluZyBhbmQgZGF0YSBtb3ZlbWVudCBsb2dpYyB3aWxsIHJlc2lkZSwgYW5kIHdoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyByZWxhdGVkIHRvIGRpcmVjdCBJL08gKERJTykgbWlnaHQgYmUgZm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jpb19tYXBfdXNlcl9pb3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1hcC5jPTE1MD1zdGF0aWMgaW50IGJpb19jb3B5X3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHJxX21hcF9kYXRhICptYXBfZGF0YSxcbi0tXG5ibG9jay9ibGstbWFwLmMtMjU5LVxuYmxvY2svYmxrLW1hcC5jOjI2MDpzdGF0aWMgaW50IGJpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5ibG9jay9ibGstbWFwLmMtMjYxLVx0XHRnZnBfdCBnZnBfbWFzaylcbi0tXG5ibG9jay9ibGstbWFwLmM9NDk5PWludCBibGtfcnFfbWFwX3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuYmxvY2svYmxrLW1hcC5jLTUzNC1cdFx0ZWxzZVxuYmxvY2svYmxrLW1hcC5jOjUzNTpcdFx0XHRyZXQgPSBiaW9fbWFwX3VzZXJfaW92KHJxLCBcdTAwMjZpLCBnZnBfbWFzayk7XG5ibG9jay9ibGstbWFwLmMtNTM2LVx0XHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeTogRGlyZWN0IElPIHdpdGggQmxvY2sgRGV2aWNlcyoqCgpPa2F5LCBpdCBzZWVtcyB0aGF0IGBiaW9fbWFwX3VzZXJfaW92YCBpcyBkZWZpbml0aXZlbHkgcmVhY2hhYmxlLCB3aGljaCBnaXZlcyB1cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBkaXJlY3QgSS9PIHBhdGguIE15IGZvY3VzIGlzIG5vdyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLCBgbG9vcF9zZXRfZGlvYCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgLCBgX19ibGtkZXZfZGlyZWN0X0lPYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludCwgYGJpb19tYXBfdXNlcl9pb3ZgLiBUaGlzIHN1aXRlIG9mIGZ1bmN0aW9ucyBsaWtlbHkgaWxsdXN0cmF0ZXMgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gdXNlciBzcGFjZSBJL08gdmVjdG9ycyB0byB0aGUgYmxvY2sgZGV2aWNlIGxldmVsLCBzbyB0aGF0IHNob3VsZCBiZSB0aGUgaGVhcnQgb2YgbXkgYW5hbHlzaXMuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBlbnZpcm9ubWVudCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBHaXZlbiB0aGlzIGlzIGxpa2VseSBhIHpvbmVkIGJsb2NrIGRldmljZSwgSSB3aWxsIGFzc3VtZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGluY2x1ZGUgYEJMS19ERVZfTE9PUGAsIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBgRlNfSU9NQVBgLiBTcGVjaWZpY2FsbHksIEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgYEJMS19ERVZfWk9ORURfTE9PUGAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBmb3IgdGhpcyBzcGVjaWZpYyBzZXR1cCBhbmQgSSB3aWxsIHdvcmsgdGhyb3VnaCB0aGF0IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1NS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cdHRyaXN0YXRlIFwmIzM0O1pvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIERldmljZSBUeXBlIENvbnN0YW50cyoqCgpBbHJpZ2h0LCBjb25maXJtZWQsIGBCTEtfREVWX1pPTkVEX0xPT1BgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25zdGFudCB3ZSYjMzk7cmUgdXNpbmcuIEdvb2QuIExldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aG91Z2gsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEJMS19ERVZfTE9PUGAgaXMgYWxzbyBhY2N1cmF0ZS4gR290dGEgbWFpbnRhaW4gdGhhdCByaWdvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTE9PUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cdGludCBcJiMzNDtOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTg2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIEtlcm5lbCBNb2R1bGUgSWRlbnRpZmljYXRpb24qKgoKUmlnaHQsIGBCTEtfREVWX0xPT1BgICpkb2VzKiBzZWVtIHRvIGJlIHRoZSByZWxldmFudCBtb2R1bGUgZm9yIHRoaXMuIEkmIzM5O3ZlIHNlZW4gdGhhdCBjb25maWd1cmF0aW9uIGJlZm9yZSBpbiBzaW1pbGFyIGNvbnRleHRzLCBhbmQgaXQgYWxpZ25zIHdpdGggd2hhdCBJJiMzOTttIGV4cGVjdGluZy4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgY2hvaWNlIGhlcmUuCgpOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgdmVyaWZ5IHNvbWV0aGluZyBlbHNlLCBhcyBhIG1hdHRlciBvZiBkdWUgZGlsaWdlbmNlLiBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4uIEkgbmVlZCB0byBjb25maXJtIGlmIGBGU19JT01BUGAgYWxzbyBwbGF5cyBhIHJvbGUgaW4gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGl0ICptaWdodCogYmUgcmVsZXZhbnQsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCBpdHMgcHJvcGVydGllcyBpbiB0aGlzIHNpdHVhdGlvbiB0byBjb25maXJtIHdoZXRoZXIgaXQgbmVlZHMgdG8gYmUgaW5jbHVkZWQuIEp1c3QgYSBxdWljayBjaGVjayB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0ODEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEZpbGUgU3lzdGVtIE1hcHBpbmcqKgoKUmlnaHQsIGBGU19JT01BUGAgaXMgZGVmaW5pdGVseSB0aGUgY29ycmVjdCBhcHByb2FjaCBoZXJlLiBNYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBlbHNlIHRoYXQmIzM5O3MgY3JpdGljYWwgaW4gcmVsYXRpb24gdG8gaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJMT0NLYCBpcyB1bmRlcnN0b29kIGNvcnJlY3RseSBpbiB0aGlzIHdob2xlIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWctNC0jXG5ibG9jay9LY29uZmlnOjU6bWVudWNvbmZpZyBCTE9DS1xuYmxvY2svS2NvbmZpZy02LSAgICAgICBib29sIFwmIzM0O0VuYWJsZSB0aGUgYmxvY2sgbGF5ZXJcJiMzNDsgaWYgRVhQRVJUXG4tLVxuYmxvY2svS2NvbmZpZz0yNz1pZiBCTE9DS1xuYmxvY2svS2NvbmZpZy0yOC1cbmJsb2NrL0tjb25maWc6Mjk6Y29uZmlnIEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxuYmxvY2svS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTIxND1jb25maWcgQkxLX1BNXG4tLVxuYmxvY2svS2NvbmZpZy0yMTctIyBkbyBub3QgdXNlIGluIG5ldyBjb2RlXG5ibG9jay9LY29uZmlnOjIxODpjb25maWcgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcbmJsb2NrL0tjb25maWctMjE5LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc5NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgdGhpbmtlcjoKCioqUmVhY2hpbmcgYSBDb25jbHVzaW9uIGFuZCBQbGFubmluZyB0aGUgTmV4dCBTdGVwKioKClllcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgQkxPQ0tgIGlzIHRoZSBjb3JyZWN0IGFuc3dlci4gVGhlIGluaXRpYWwgYW5hbHlzaXMgaG9sZHMuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSBhIGNydWNpYWwgZGV0YWlsLCBzcGVjaWZpY2FsbHkgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGB6bG9vcF9jdGxfYWRkYC4gVGhpcyB3aWxsIGJlIG15IG5leHQgYXJlYSBvZiBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfY3RsX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTE2NT1zdGF0aWMgYm9vbCB6bG9vcF9kZXZfZXhpc3RzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE4My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTg0OnN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTg1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY1OD1zdGF0aWMgc3NpemVfdCB6bG9vcF9jdGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjk2LVx0Y2FzZSBaTE9PUF9DVExfQUREOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE2OTc6XHRcdHJldCA9IHpsb29wX2N0bF9hZGQoXHUwMDI2b3B0cyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY5OC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIFJlYWNoYWJpbGl0eSoqCgpSaWdodCwgc28gYHpsb29wX2N0bF9hZGRgICppcyogZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCB0aGF0IGAvZGV2L3psb29wLWNvbnRyb2xgIHdyaXRlLiBNYWtlcyBzZW5zZTsgdGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZ2V0IGF0IGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjYWxsIGNoYWluLCB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBhbmQgdmVyaWZ5IGlmIGl0JiMzOTtzIGV4cG9zZWQsIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0aHJvdWdoIGFueSBvZiB0aGUgZXhpc3RpbmcgaW50ZXJmYWNlcy4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhlIERpcmVjdCBJL08gKERJTykgYWxpZ25tZW50IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBsb29wIGRyaXZlciBhbmQgd2hldGhlciB0aGVyZSYjMzk7cyBhbiBleGlzdGluZyBtZWNoYW5pc20gdG8gbW9kaWZ5IHRob3NlIHBhcmFtZXRlcnMuIFBlcmhhcHMgaXQmIzM5O3MgY2FsbGVkIGludGVybmFsbHkgYnkgc29tZSBvdGhlciBjb250cm9sIG9wZXJhdGlvbiwgb3IgZXhwb3NlZCBieSBhbm90aGVyIElPQ1RMLiBJIG5lZWQgdG8gZ2V0IHRoaXMgbmFpbGVkIGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz00Mzk9c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1MC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ1MTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTIte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTUxNj1zdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTIzLVx0XHRsby1cdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MjQ6XHRsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KGxvKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWFjaGluZyBLZXkgRnVuY3Rpb25hbGl0eSoqCgpBbHJpZ2h0LCBzbyBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCAqaXMqIHJlYWNoYWJsZSwgdGhhdCYjMzk7cyBnb29kIG5ld3MuIFRoYXQgY29uZmlybXMgdGhlIGluaXRpYWwgc2V0dXAgaXMgd29ya2luZyBhcyBleHBlY3RlZC4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcml0aWNhbDogaXMgYGxvb3Bfc2V0X2RtYV9saW1pdGAgYWN0dWFsbHkgcmVhY2hhYmxlIGZyb20gdGhpcyBwb2ludD8gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28gSSYjMzk7bSBmb2N1c2luZyBteSBtZW50YWwgZW5lcmd5IG9uIGRldGVybWluaW5nICp0aGF0KiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX3NldF9kbWFfbGltaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz05NDc9c3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTU0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6OTU1OnN0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NTYte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTk2OD1zdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk4OC1cdGxpbS1cdTAwM2Vpb19taW4gPSBic2l6ZTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk4OTpcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgbGltKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk5MC1cdGxpbS1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDQxPXN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjQtXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NjU6XHRsb29wX3NldF9kbWFfbGltaXQobG8sIFx1MDAyNmxpbSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDY2LVx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTgxCgkJCQkJCQlvdXRwdXQ6IDI5NAoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTG9vcCBEcml2ZXImIzM5O3MgRE1BIExpbWl0KioKCk9rYXksIGl0JiMzOTtzIGNsZWFyOiBgbG9vcF9zZXRfZG1hX2xpbWl0YCBpcyBpbmRlZWQgYSByZWFjaGFibGUgZnVuY3Rpb24gd2l0aGluIHRoaXMgc3Vic3lzdGVtLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgaW50ZXJhY3Rpb25zIHN1cnJvdW5kaW5nIGl0LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaDoKCiogICBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2Ag4oCTIFRoaXMgb25lIGlzIHByb2JhYmx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBiaW8gaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2VzLgoqICAgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIOKAkyBJIHN1c3BlY3QgdGhpcyBwbGF5cyBhIHJvbGUgaW4gZXh0cmFjdGluZyBkYXRhIGZyb20gaW92ZWNzIGludG8gYmxvY2sgdmVjdG9ycy4KKiAgIGBsb29wX3NldF9kaW9gIOKAkyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIGluIGRpcmVjdGx5IGludGVyYWN0aW5nIHdpdGggdGhlIGJsb2NrIGRldmljZS4KKiAgIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCAtIEVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBvZiBkaXJlY3QgSU8uCiogICBgbG9vcF9zZXRfZG1hX2xpbWl0YCDigJMgT2YgY291cnNlLCB0aGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uLgoqICAgYHpsb29wX2dldF9ibG9ja19zaXplYCDigJMgSSB3aWxsIGhhdmUgdG8gbG9vayBhdCBob3cgdGhlIHpvbmVkIGxvb3AmIzM5O3MgYmxvY2sgc2l6ZSBhZmZlY3RzIHRoZSBhbmFseXNpcy4KKiAgIGB6bG9vcF9jdGxfYWRkYCDigJMgSXMgdGhlIGNvbnRyb2wgZnVuY3Rpb24uCiogICBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAg4oCTIEFub3RoZXIgY3JpdGljYWwgZnVuY3Rpb24gd2l0aGluIHRoZSBkaXJlY3QgSU8gcGF0aC4KKiAgIGBfX2Jsa2Rldl9kaXJlY3RfSU9gIOKAkyBUaGlzIGlzIHRoZSBjb3JlIGRpcmVjdCBJL08gZW50cnkgcG9pbnQgYXQgdGhlIGJsb2NrIGxheWVyLgoqICAgYGJpb19tYXBfdXNlcl9pb3ZgIOKAkyBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gdGhpcyBmb3IgdW5kZXJzdGFuZGluZyBtYXBwaW5nIHVzZXIgZGF0YSBpbnRvIGJpby4KCkFsc28sIEkgaGF2ZSB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZToKCiogICBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAgLSBUaGVzZSBhcmUgY2xlYXJseSBuZWNlc3NhcnkgZm9yIHRoZSBsb29wIGRldmljZSBpdHNlbGYsIGFzIHdlbGwgYXMgdGhlIHpvbmVkIHZhcmlhbnQsIG9idmlvdXNseS4KKiAgIGBGU19JT01BUGAg4oCTIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHNlZW1zIHRvIHRpZSBpbiB0aGUgSS9PIG1hcHBpbmcuCiogICBgQkxPQ0tgIC0gVGhpcyBpcyB0aGUgcGFyZW50IGJsb2NrIGRyaXZlci4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gYmVnaW4gc2V0dGluZyB1cCBhbmQgY2hlY2tpbmcgdGhlIGFuYWx5c2lzIHJlc3VsdHMgYmFzZWQgb24gdGhlIHBhdGhmaW5kaW5nLiBMZXQmIzM5O3MgbW92ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfYnZlY3MmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZGlvJiMzNDssCiAgICAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZG1hX2xpbWl0JiMzNDssCiAgICAmIzM0O3psb29wX2dldF9ibG9ja19zaXplJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF9hZGQmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX2Jpb19pdGVyX29uZSYjMzQ7LAogICAgJiMzNDtfX2Jsa2Rldl9kaXJlY3RfSU8mIzM0OywKICAgICYjMzQ7YmlvX21hcF91c2VyX2lvdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGJpbyBoYW5kbGluZyBhbmQgZGlyZWN0IEkvTyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJdCBhZGRzIGBtZW1fYWxpZ25fbWFza2AgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgdG8gZW5mb3JjZSBETUEgYWxpZ25tZW50IGZvciBkaXJlY3QgSS9PLiBJdCBhbHNvIHVwZGF0ZXMgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gcHJvcGVybHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PLCBhbmQgdXBkYXRlcyBgaW9tYXBgIGFuZCBgYmxrZGV2YCBkaXJlY3QgSS9PIHBhdGhzIHRvIHBhc3MgdGhlIGNvcnJlY3QgYWxpZ25tZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICAgJiMzNDtGU19JT01BUCYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aW92X2l0ZXJfZXh0cmFjdF9idmVjcyYjMzQ7LAogICAgJiMzNDtsb29wX3NldF9kaW8mIzM0OywKICAgICYjMzQ7bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudCYjMzQ7LAogICAgJiMzNDtsb29wX3NldF9kbWFfbGltaXQmIzM0OywKICAgICYjMzQ7emxvb3BfZ2V0X2Jsb2NrX3NpemUmIzM0OywKICAgICYjMzQ7emxvb3BfY3RsX2FkZCYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fYmlvX2l0ZXJfb25lJiMzNDssCiAgICAmIzM0O19fYmxrZGV2X2RpcmVjdF9JTyYjMzQ7LAogICAgJiMzNDtiaW9fbWFwX3VzZXJfaW92JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgYmlvIGhhbmRsaW5nIGFuZCBkaXJlY3QgSS9PIGFsaWdubWVudCByZXF1aXJlbWVudHMuIEl0IGFkZHMgYG1lbV9hbGlnbl9tYXNrYCB0byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCB0byBlbmZvcmNlIERNQSBhbGlnbm1lbnQgZm9yIGRpcmVjdCBJL08uIEl0IGFsc28gdXBkYXRlcyBgbG9vcGAgYW5kIGB6bG9vcGAgZHJpdmVycyB0byBwcm9wZXJseSBzZXQgRE1BIGFsaWdubWVudCBsaW1pdHMgZm9yIGRpcmVjdCBJL08sIGFuZCB1cGRhdGVzIGBpb21hcGAgYW5kIGBibGtkZXZgIGRpcmVjdCBJL08gcGF0aHMgdG8gcGFzcyB0aGUgY29ycmVjdCBhbGlnbm1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDI6NDQuMjczMTQ4OTY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM4OTk4ODU1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgICBcIkZTX0lPTUFQXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgICBcImlvdl9pdGVyX2V4dHJhY3RfYnZlY3NcIixcbiAgICBcImxvb3Bfc2V0X2Rpb1wiLFxuICAgIFwibG9vcF91cGRhdGVfZGlvX2FsaWdubWVudFwiLFxuICAgIFwibG9vcF9zZXRfZG1hX2xpbWl0XCIsXG4gICAgXCJ6bG9vcF9nZXRfYmxvY2tfc2l6ZVwiLFxuICAgIFwiemxvb3BfY3RsX2FkZFwiLFxuICAgIFwiaW9tYXBfZGlvX2Jpb19pdGVyX29uZVwiLFxuICAgIFwiX19ibGtkZXZfZGlyZWN0X0lPXCIsXG4gICAgXCJiaW9fbWFwX3VzZXJfaW92XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBiaW8gaGFuZGxpbmcgYW5kIGRpcmVjdCBJL08gYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gSXQgYWRkcyBgbWVtX2FsaWduX21hc2tgIHRvIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIHRvIGVuZm9yY2UgRE1BIGFsaWdubWVudCBmb3IgZGlyZWN0IEkvTy4gSXQgYWxzbyB1cGRhdGVzIGBsb29wYCBhbmQgYHpsb29wYCBkcml2ZXJzIHRvIHByb3Blcmx5IHNldCBETUEgYWxpZ25tZW50IGxpbWl0cyBmb3IgZGlyZWN0IEkvTywgYW5kIHVwZGF0ZXMgYGlvbWFwYCBhbmQgYGJsa2RldmAgZGlyZWN0IEkvTyBwYXRocyB0byBwYXNzIHRoZSBjb3JyZWN0IGFsaWdubWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQyOjQ0LjI3MzE1OTI5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NjQ5Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWU5OWRjNTc2NjUyMGYyNzg5ZmY5YmU3NjI0NDc2ZTIyMzYwMDZlYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAwNDo0Mjo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXFxuaW5kZXggZjJhNWY0ZDBhOTY3MmIuLmZhYWQ0MWE3MmFjNzdmIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jpby5jXFxuKysrIGIvYmxvY2svYmlvLmNcXG5AQCAtMTIyMCwxMCArMTIyMCw0NSBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19ERUJVR19LRVJORUxcXG4rc3RhdGljIGlubGluZSBib29sIGJpb19pb3ZfYnZlY19hbGlnbmVkKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXFxuK3tcXG4rXFx0c3RydWN0IGJ2ZWNfaXRlciBpdGVyO1xcbitcXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENvcnJlY3QgY2FsbGVycyBuZXZlciBicmVhayB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cywgc28gdGhpc1xcbitcXHQgKiBleGhhdXN0aXZlIGNoZWNrIGlzIG9ubHkgcGFpZCBmb3IgaW4gZGVidWcgYnVpbGRzLlxcbitcXHQgKi9cXG4rXFx0Zm9yX2VhY2hfbXBfYnZlYyhidiwgYmlvLVxcdTAwM2ViaV9pb192ZWMsIGl0ZXIsIGJpby1cXHUwMDNlYmlfaXRlcilcXG4rXFx0XFx0aWYgKChidi5idl9vZmZzZXQgfCBidi5idl9sZW4pIFxcdTAwMjYgbWVtX2FsaWduX21hc2spXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIGJpb19pb3ZfYnZlY19hbGlnbmVkKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogV2UgZm9yd2FyZCB0aGUgYmlvX3ZlYyBhcy1pcywgc28gSVRFUl9CVkVDIGNhbGxlcnMgbXVzdCBwcm92aWRlXFxuK1xcdCAqIHNlZ21lbnRzIGFscmVhZHkgYWxpZ25lZCB0byB0aGUgZGV2aWNlJ3MgRE1BIGFsaWdubWVudC4gVGhlIG9ubHlcXG4rXFx0ICogdW5jaGVja2VkIHVzZXItY29udHJvbGxhYmxlIG9mZnNldCB0aGF0IHJlYWNoZXMgaGVyZSBpcyBhbiBpb191cmluZ1xcbitcXHQgKiByZWdpc3RlcmVkIGJ1ZmZlciB3aGVyZSBqdXN0IHRoZSBmaXJzdCBzZWdtZW50IGNhbiBiZSB1bmFsaWduZWRcXG4rXFx0ICogKHRoZSByZXN0IGlzIHZpcnR1YWxseSBjb250aWd1b3VzKSwgc28gY2hlY2tpbmcgb25seSB0aGF0IG9uZSBpc1xcbitcXHQgKiBzdWZmaWNpZW50IHRvIGtub3cgaWYgdGhlIGVudGlyZSB2ZWN0b3IgaXMgdmFsaWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gIShtcF9idmVjX2l0ZXJfb2Zmc2V0KGJpby1cXHUwMDNlYmlfaW9fdmVjLCBiaW8tXFx1MDAzZWJpX2l0ZXIpIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0bWVtX2FsaWduX21hc2spO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gLyoqXFxuICAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW9cXG4gICogQGJpbzogYmlvIHRvIGFkZCBwYWdlcyB0b1xcbiAgKiBAaXRlcjogaW92IGl0ZXJhdG9yIGRlc2NyaWJpbmcgdGhlIHJlZ2lvbiB0byBiZSBhZGRlZFxcbisgKiBAbWVtX2FsaWduX21hc2s6IHRoZSBtYXNrIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgbGVuZ3RoIG11c3QgYmUgYWxpZ25lZCB0byxcXG4rICpcXHQwIGZvciBubyByZXF1aXJlbWVudFxcbiAgKiBAbGVuX2FsaWduX21hc2s6IHRoZSBtYXNrIHRvIGFsaWduIHRoZSB0b3RhbCBzaXplIHRvLCAwIGZvciBhbnkgbGVuZ3RoXFxuICAqXFxuICAqIFRoaXMgdGFrZXMgZWl0aGVyIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHVzZXIgbWVtb3J5LCBvciBvbmUgcG9pbnRpbmcgdG9cXG5AQCAtMTI0Miw3ICsxMjc3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gICogaXMgcmV0dXJuZWQgb25seSBpZiAwIHBhZ2VzIGNvdWxkIGJlIHBpbm5lZC5cXG4gICovXFxuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi1cXHRcXHRcXHQgICB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcXG4rXFx0XFx0XFx0ICAgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxcbiB7XFxuIFxcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBmbGFncyA9IDA7XFxuIFxcbkBAIC0xMjUxLDYgKzEyODYsMTAgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcbiBcXHRpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkge1xcbiBcXHRcXHRiaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7XFxuK1xcbitcXHRcXHRpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbkBAIC0xMjY1LDggKzEzMDQsMTkgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcbiBcXHRcXHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby1cXHUwMDNlYmlfaW9fdmVjLFxcbiBcXHRcXHRcXHRcXHRCSU9fTUFYX1NJWkUgLSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfdmNudCwgYmlvLVxcdTAwM2ViaV9tYXhfdmVjcywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHUwMDI2YmlvLVxcdTAwM2ViaV92Y250LCBiaW8tXFx1MDAzZWJpX21heF92ZWNzLFxcbitcXHRcXHRcXHRcXHRtZW1fYWxpZ25fbWFzaywgZmxhZ3MpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQSBtaXNhbGlnbmVkIHZlY3RvciBmYWlscyB0aGUgd2hvbGUgSS9PLiAgUmVsZWFzZSBhbnlcXG4rXFx0XFx0XFx0ICogcGFnZXMgcGlubmVkIGJ5IGVhcmxpZXIgaXRlcmF0aW9ucyBiZWZvcmUgcmV0dXJuaW5nXFxuK1xcdFxcdFxcdCAqIHNpbmNlIHRoaXMgYmlvIHdvbid0IGJlIHN1Ym1pdHRlZCB0byByZWxlYXNlIHRoZW0uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAocmV0ID09IC1FSU5WQUwpIHtcXG4rXFx0XFx0XFx0XFx0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdGJpb19jbGVhcl9mbGFnKGJpbywgQklPX1BBR0VfUElOTkVEKTtcXG4rXFx0XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV92Y250ID0gMDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoIWJpby1cXHUwMDNlYmlfdmNudClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTEzNzcsNyArMTQyNyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRzc2l6ZV90IHJldDtcXG4gXFxuIFxcdFxcdHJldCA9IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoaXRlciwgYmlvLVxcdTAwM2ViaV9pb192ZWMgKyAxLCBsZW4sXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZiaW8tXFx1MDAzZWJpX3ZjbnQsIGJpby1cXHUwMDNlYmlfbWF4X3ZlY3MgLSAxLCAwKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfdmNudCwgYmlvLVxcdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDAsIDApO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG4gXFx0XFx0XFx0aWYgKCFiaW8tXFx1MDAzZWJpX3ZjbnQpIHtcXG4gXFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1hcC5jIGIvYmxvY2svYmxrLW1hcC5jXFxuaW5kZXggNzY4NTQ5ZjE5Zjk3ZWMuLmM5NTM1ZWZlMWE5MTNjIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay1tYXAuY1xcbisrKyBiL2Jsb2NrL2Jsay1tYXAuY1xcbkBAIC0yNzQsNyArMjc0LDcgQEAgc3RhdGljIGludCBiaW9fbWFwX3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHQgKiBObyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9uIG91ciBwYXJ0IHRvIHN1cHBvcnQgYXJiaXRyYXJ5XFxuIFxcdCAqIHBhc3N0aHJvdWdoIGNvbW1hbmRzLlxcbiBcXHQgKi9cXG4tXFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIDApO1xcbitcXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCwgMCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gXFx0cmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocnEsIGJpbyk7XFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2ZvcHMuYyBiL2Jsb2NrL2ZvcHMuY1xcbmluZGV4IDE1NzgzYTYxODBkZWMxLi5lNTE5ZDdmNDNiMzEwNiAxMDA2NDRcXG4tLS0gYS9ibG9jay9mb3BzLmNcXG4rKysgYi9ibG9jay9mb3BzLmNcXG5AQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLFxcbiBzdGF0aWMgaW5saW5lIGludCBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbyxcXG4gXFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiB7XFxuLVxcdHJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlcixcXG4rXFx0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldiksXFxuIFxcdFxcdFxcdGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpIC0gMSk7XFxuIH1cXG4gXFxuQEAgLTIxOCw3ICsyMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcbiBcXHRcXHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldik7XFxuIFxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLVxcdFxcdFxcdGJpb19lbmRpb19zdGF0dXMoYmlvLCBCTEtfU1RTX0lPRVJSKTtcXG4rXFx0XFx0XFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKSB7XFxuQEAgLTIzOCw4ICsyMzgsMTAgQEAgc3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfSEFTX01FVEFEQVRBKSB7XFxuIFxcdFxcdFxcdHJldCA9IGJpb19pbnRlZ3JpdHlfbWFwX2l0ZXIoYmlvLCBpb2NiLVxcdTAwM2Vwcml2YXRlKTtcXG4tXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuLVxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4rXFx0XFx0XFx0XFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChpc19yZWFkKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcXG5pbmRleCAzMTBkZTA0NjNiZWIxNC4uNWZlNjFkNTQyZjhiNzUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbkBAIC01NCw2ICs1NCw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XFxuIFxcbiBcXHRzdHJ1Y3QgZmlsZVxcdCpsb19iYWNraW5nX2ZpbGU7XFxuIFxcdHVuc2lnbmVkIGludFxcdGxvX21pbl9kaW9fc2l6ZTtcXG4rXFx0dW5zaWduZWQgaW50XFx0bG9fZGlvX21lbV9hbGlnbjtcXG4gXFx0c3RydWN0IGJsb2NrX2RldmljZSAqbG9fZGV2aWNlO1xcbiBcXG4gXFx0Z2ZwX3RcXHRcXHRvbGRfZ2ZwX21hc2s7XFxuQEAgLTQ0NywyNiArNDQ4LDM3IEBAIHN0YXRpYyB2b2lkIGxvb3BfcmVyZWFkX3BhcnRpdGlvbnMoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0XFx0XFx0X19mdW5jX18sIGxvLVxcdTAwM2Vsb19udW1iZXIsIGxvLVxcdTAwM2Vsb19maWxlX25hbWUsIHJjKTtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGludCBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbitzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIHtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBsby1cXHUwMDNlbG9fYmFja2luZ19maWxlO1xcbiBcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpzYl9iZGV2ID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXY7XFxuIFxcdHN0cnVjdCBrc3RhdCBzdDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFVzZSB0aGUgbWluaW1hbCBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC5cXG4rXFx0ICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbW9pbmdcXG4rXFx0ICogcmVxdWVzdCdzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHNcXG4rXFx0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UncyBkbWFfYWxpZ25tZW50IHdoZW5cXG4rXFx0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxcbiBcXHQgKi9cXG4gXFx0aWYgKCF2ZnNfZ2V0YXR0cihcXHUwMDI2ZmlsZS1cXHUwMDNlZl9wYXRoLCBcXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pKVxcbi1cXHRcXHRyZXR1cm4gc3QuZGlvX29mZnNldF9hbGlnbjtcXG4rXFx0ICAgIChzdC5yZXN1bHRfbWFzayBcXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xcbitcXHRcXHRsby1cXHUwMDNlbG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcXG4rXFx0XFx0bG8tXFx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyB3b3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCBhcyBvZiBMaW51eCA2LjEzIG9ubHlcXG4gXFx0ICogYSBoYW5kZnVsIG9mIGZpbGUgc3lzdGVtcyBzdXBwb3J0IHRoZSBTVEFUWF9ESU9BTElHTiBmbGFnLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHNiX2JkZXYpXFxuLVxcdFxcdHJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcXG4tXFx0cmV0dXJuIFNFQ1RPUl9TSVpFO1xcbitcXHRpZiAoc2JfYmRldikge1xcbitcXHRcXHRsby1cXHUwMDNlbG9fbWluX2Rpb19zaXplID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XFxuK1xcdFxcdGxvLVxcdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGxvLVxcdTAwM2Vsb19taW5fZGlvX3NpemUgPSBTRUNUT1JfU0laRTtcXG4rXFx0bG8tXFx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBTRUNUT1JfU0laRSAtIDE7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGlzX2xvb3BfZGV2aWNlKHN0cnVjdCBmaWxlICpmaWxlKVxcbkBAIC01MDksNyArNTIxLDcgQEAgc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRcXHRcXHRsby1cXHUwMDNlb2xkX2dmcF9tYXNrIFxcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XFxuIFxcdGlmIChsby1cXHUwMDNlbG9fYmFja2luZ19maWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19ESVJFQ1QpXFxuIFxcdFxcdGxvLVxcdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XFxuLVxcdGxvLVxcdTAwM2Vsb19taW5fZGlvX3NpemUgPSBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShsbyk7XFxuK1xcdGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQobG8pO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGxvb3BfY2hlY2tfYmFja2luZ19maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbkBAIC05NDAsNiArOTUyLDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcF9kZWZhdWx0X2Jsb2Nrc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbiBcXHRyZXR1cm4gU0VDVE9SX1NJWkU7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgdXNlciBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc29cXG4rXFx0ICogdHJhY2sgdGhlIGJhY2tpbmcncyBETUEgYWxpZ25tZW50IHJlcXVpcmVtZW50IGFzIHRoZSBtb2RlIGlzIHRvZ2dsZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAobG8tXFx1MDAzZWxvX2ZsYWdzIFxcdTAwMjYgTE9fRkxBR1NfRElSRUNUX0lPKVxcbitcXHRcXHRsaW0tXFx1MDAzZWRtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxvLVxcdTAwM2Vsb19kaW9fbWVtX2FsaWduLFxcbitcXHRcXHRcXHRcXHRcXHQgICBTRUNUT1JfU0laRSAtIDEpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGxpbS1cXHUwMDNlZG1hX2FsaWdubWVudCA9IFNFQ1RPUl9TSVpFIC0gMTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcXG4gXFx0XFx0dW5zaWduZWQgaW50IGJzaXplKVxcbiB7XFxuQEAgLTk2MSw2ICs5ODYsNyBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbiBcXHRsaW0tXFx1MDAzZWxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplO1xcbiBcXHRsaW0tXFx1MDAzZXBoeXNpY2FsX2Jsb2NrX3NpemUgPSBic2l6ZTtcXG4gXFx0bGltLVxcdTAwM2Vpb19taW4gPSBic2l6ZTtcXG4rXFx0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBsaW0pO1xcbiBcXHRsaW0tXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcXG4gXFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWZzeW5jIFxcdTAwMjZcXHUwMDI2ICEobG8tXFx1MDAzZWxvX2ZsYWdzIFxcdTAwMjYgTE9fRkxBR1NfUkVBRF9PTkxZKSlcXG4gXFx0XFx0bGltLVxcdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcXG5AQCAtMTQxNiw2ICsxNDQyLDcgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXFxuIHtcXG4gXFx0Ym9vbCB1c2VfZGlvID0gISFhcmc7XFxuIFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4rXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XFxuIFxcbiBcXHRpZiAobG8tXFx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKVxcbiBcXHRcXHRyZXR1cm4gLUVOWElPO1xcbkBAIC0xNDM0LDYgKzE0NjEsOSBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcXG4gXFx0ZWxzZVxcbiBcXHRcXHRsby1cXHUwMDNlbG9fZmxhZ3MgXFx1MDAyNj0gfkxPX0ZMQUdTX0RJUkVDVF9JTztcXG4rXFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbitcXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFxcdTAwMjZsaW0pO1xcbitcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUsIFxcdTAwMjZsaW0pO1xcbiBcXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlLCBtZW1mbGFncyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbmluZGV4IDU1ZWViNmFhYzBlYTNiLi5mOTdhMjBjZmRiN2NlNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG5AQCAtMTQ0LDYgKzE0NCw3IEBAIHN0cnVjdCB6bG9vcF9kZXZpY2Uge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRucl9jb252X3pvbmVzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRtYXhfb3Blbl96b25lcztcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0YmxvY2tfc2l6ZTtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0ZGlvX21lbV9hbGlnbjtcXG4gXFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRvcGVuX3pvbmVzX2xvY2s7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRvcGVuX3pvbmVzX2xydV9saXN0O1xcbkBAIC0xMDM3LDIwICsxMDM4LDMwIEBAIHN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbiBcXHRzdHJ1Y3Qga3N0YXQgc3Q7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBJZiB0aGUgRlMgYmxvY2sgc2l6ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIDRLLCB1c2UgdGhhdCBhcyB0aGVcXG4tXFx0ICogZGV2aWNlIGJsb2NrIHNpemUuIE90aGVyd2lzZSwgZmFsbGJhY2sgdG8gdGhlIEZTIGRpcmVjdCBJTyBhbGlnbm1lbnRcXG4tXFx0ICogY29uc3RyYWludCBpZiB0aGF0IGlzIHByb3ZpZGVkLCBhbmQgdG8gdGhlIEZTIHVuZGVybHlpbmcgZGV2aWNlXFxuLVxcdCAqIHBoeXNpY2FsIGJsb2NrIHNpemUgaWYgdGhlIGRpcmVjdCBJTyBhbGlnbm1lbnQgaXMgdW5rbm93bi5cXG4rXFx0ICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbWluZ1xcbitcXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xcbitcXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSdzIGRtYV9hbGlnbm1lbnQgd2hlblxcbitcXHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uXFxuIFxcdCAqL1xcbi1cXHRpZiAoZmlsZV9pbm9kZSh6b25lLVxcdTAwM2VmaWxlKS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgXFx1MDAzYz0gU1pfNEspXFxuLVxcdFxcdHpsby1cXHUwMDNlYmxvY2tfc2l6ZSA9IGZpbGVfaW5vZGUoem9uZS1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbi1cXHRlbHNlIGlmICghdmZzX2dldGF0dHIoXFx1MDAyNnpvbmUtXFx1MDAzZWZpbGUtXFx1MDAzZWZfcGF0aCwgXFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0IChzdC5yZXN1bHRfbWFzayBcXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSlcXG4rXFx0aWYgKCF2ZnNfZ2V0YXR0cihcXHUwMDI2em9uZS1cXHUwMDNlZmlsZS1cXHUwMDNlZl9wYXRoLCBcXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XFxuIFxcdFxcdHpsby1cXHUwMDNlYmxvY2tfc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XFxuLVxcdGVsc2UgaWYgKHNiX2JkZXYpXFxuK1xcdFxcdHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xcbitcXHR9IGVsc2UgaWYgKHNiX2JkZXYpIHtcXG4gXFx0XFx0emxvLVxcdTAwM2VibG9ja19zaXplID0gYmRldl9waHlzaWNhbF9ibG9ja19zaXplKHNiX2JkZXYpO1xcbi1cXHRlbHNlXFxuK1xcdFxcdHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0emxvLVxcdTAwM2VibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XFxuK1xcdFxcdHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogUHJlZmVyIHRoZSBGUyBibG9jayBzaXplIGZvciB0aGUgZGV2aWNlIGJsb2NrIHNpemUgd2hlbiBpdCBpcyBub1xcbitcXHQgKiBsYXJnZXIgdGhhbiA0Szsgb3RoZXJ3aXNlIGtlZXAgdGhlIGRpcmVjdCBJL08gLyBwaHlzaWNhbCBibG9jayBzaXplXFxuK1xcdCAqIHNlbGVjdGVkIGFib3ZlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGZpbGVfaW5vZGUoem9uZS1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplIFxcdTAwM2M9IFNaXzRLKVxcbitcXHRcXHR6bG8tXFx1MDAzZWJsb2NrX3NpemUgPSBmaWxlX2lub2RlKHpvbmUtXFx1MDAzZWZpbGUpLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4gXFxuIFxcdGlmICh6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHkgXFx1MDAyNiAoKHpsby1cXHUwMDNlYmxvY2tfc2l6ZSBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQpIC0gMSkpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJab25lIGNhcGFjaXR5IGlzIG5vdCBhbGlnbmVkIHRvIGJsb2NrIHNpemUgJXVcXFxcblxcXCIsXFxuQEAgLTEyNzksNiArMTI5MCwxMCBAQCBzdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXFxuIFxcbiBcXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IHpsby1cXHUwMDNlYmxvY2tfc2l6ZTtcXG4gXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IHpsby1cXHUwMDNlYmxvY2tfc2l6ZTtcXG4rXFx0LyogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgcmVxdWVzdCBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlcyBhcy1pcy4gKi9cXG4rXFx0aWYgKCFvcHRzLVxcdTAwM2VidWZmZXJlZF9pbylcXG4rXFx0XFx0bGltLmRtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbixcXG4rXFx0XFx0XFx0XFx0XFx0ICBTRUNUT1JfU0laRSAtIDEpO1xcbiBcXHRpZiAoemxvLVxcdTAwM2V6b25lX2FwcGVuZClcXG4gXFx0XFx0bGltLm1heF9od196b25lX2FwcGVuZF9zZWN0b3JzID0gbGltLm1heF9od19zZWN0b3JzO1xcbiBcXHRsaW0ubWF4X29wZW5fem9uZXMgPSB6bG8tXFx1MDAzZW1heF9vcGVuX3pvbmVzO1xcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmZmNDU4YWExMmFlMjk4IDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG5AQCAtMzU4LDYgKzM1OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuIFxcdFxcdFxcdFxcdGlvbWFwX21heF9iaW9fc2l6ZShcXHUwMDI2aXRlci1cXHUwMDNlaW9tYXApLCBhbGlnbm1lbnQpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBkaW8tXFx1MDAzZXN1Ym1pdC5pdGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJkZXZfZG1hX2FsaWdubWVudChiaW8tXFx1MDAzZWJpX2JkZXYpLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGFsaWdubWVudCAtIDEpO1xcbiBcXHRpZiAodW5saWtlbHkocmV0KSlcXG4gXFx0XFx0Z290byBvdXRfcHV0X2JpbztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmhcXG5pbmRleCA4ZjMzZjcxN2IxNGY1Yi4uY2UzNGVhNDllZjM1ODIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmhcXG5AQCAtNDc3LDcgKzQ3Nyw3IEBAIGludCBiZGV2X3J3X3ZpcnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCB2b2lkICpkYXRhLFxcbiBcXHRcXHRzaXplX3QgbGVuLCBlbnVtIHJlcV9vcCBvcCk7XFxuIFxcbiBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tXFx0XFx0dW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xcbitcXHRcXHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xcbiBcXG4gdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG4gdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW8uaCBiL2luY2x1ZGUvbGludXgvdWlvLmhcXG5pbmRleCBhOWJjNWIzMDY3ZTMyMC4uZmUyZTk4NWQ3NGQyNGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdWlvLmhcXG5AQCAtMzg5LDkgKzM4OSwxNyBAQCBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcXG4gXFx0XFx0XFx0ICAgICAgIHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBpbnQgbWF4cGFnZXMsXFxuIFxcdFxcdFxcdCAgICAgICBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyxcXG4gXFx0XFx0XFx0ICAgICAgIHNpemVfdCAqb2Zmc2V0MCk7XFxuKy8qXFxuKyAqIEJsb2NrLWxheWVyIGNvbnN1bWVycyAoZS5nLiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkpIHJlcXVpcmUgdGhhdCB0aGVcXG4rICogc2VnbWVudHMgb2YgYW4gSVRFUl9CVkVDIGl0ZXJhdG9yIGFyZSBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIHRhcmdldCBkZXZpY2Unc1xcbisgKiBETUEgYWxpZ25tZW50LCBhbmQgZm9yd2FyZCB0aGVtIGFzLWlzLiAgSW4ta2VybmVsIHVzZXJzIHRoYXQgYnVpbGQgdGhlaXIgb3duXFxuKyAqIGJ2ZWNzIG11c3Qgbm90IGNyZWF0ZSBzdWItYWxpZ25lZCBzZWdtZW50czsgaW92X2l0ZXJfZXh0cmFjdF9idmVjcygpIGVuZm9yY2VzXFxuKyAqIHRoZSBzYW1lIGZvciB0aGUgc2VnbWVudHMgaXQgZXh0cmFjdHMgdmlhIEBtZW1fYWxpZ25fbWFzay5cXG4rICovXFxuIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBiaW9fdmVjICpidixcXG4gXFx0XFx0c2l6ZV90IG1heF9zaXplLCB1bnNpZ25lZCBzaG9ydCAqbnJfdmVjcyxcXG4tXFx0XFx0dW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKTtcXG4rXFx0XFx0dW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLFxcbitcXHRcXHRpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7XFxuIFxcbiAvKipcXG4gICogaW92X2l0ZXJfZXh0cmFjdF93aWxsX3BpbiAtIEluZGljYXRlIGhvdyBwYWdlcyBmcm9tIHRoZSBpdGVyYXRvciB3aWxsIGJlIHJldGFpbmVkXFxuZGlmZiAtLWdpdCBhL2xpYi9pb3ZfaXRlci5jIGIvbGliL2lvdl9pdGVyLmNcXG5pbmRleCAyNzM5MTliMTYxNjE3Ni4uYzM0MzA3NTk1MWRlZDAgMTAwNjQ0XFxuLS0tIGEvbGliL2lvdl9pdGVyLmNcXG4rKysgYi9saWIvaW92X2l0ZXIuY1xcbkBAIC0xODg2LDYgKzE4ODYsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuICAqIEBtYXhfc2l6ZTpcXHRtYXhpbXVtIHNpemUgdG8gZXh0cmFjdCBmcm9tIEBpdGVyXFxuICAqIEBucl92ZWNzOlxcdG51bWJlciBvZiB2ZWN0b3JzIGluIEBidiAob24gaW4gYW5kIG91dHB1dClcXG4gICogQG1heF92ZWNzOlxcdG1heGltdW0gdmVjdG9ycyBpbiBAYnYsIGluY2x1ZGluZyB0aG9zZSBmaWxsZWQgYmVmb3JlIGNhbGxpbmdcXG4rICogQG1lbV9hbGlnbl9tYXNrOlxcdHJlamVjdCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIG9yXFxuKyAqXFx0XFx0bGVuZ3RoIGlzIG5vdCBhbGlnbmVkIHRvIHRoaXMgbWFza1xcbiAgKiBAZXh0cmFjdGlvbl9mbGFnczogZmxhZ3MgdG8gcXVhbGlmeSByZXF1ZXN0XFxuICAqXFxuICAqIExpa2UgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcygpLCBidXQgcmV0dXJucyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcmFuZ2VzXFxuQEAgLTE4OTcsMTQgKzE4OTksMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbiAgKi9cXG4gc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxcbiBcXHRcXHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxcbi1cXHRcXHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpXFxuK1xcdFxcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzayxcXG4rXFx0XFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKWl0ZXJfaW92X2FkZHIoaXRlcik7XFxuIFxcdHVuc2lnbmVkIHNob3J0IGVudHJpZXNfbGVmdCA9IG1heF92ZWNzIC0gKm5yX3ZlY3M7XFxuIFxcdHVuc2lnbmVkIHNob3J0IG5yX3BhZ2VzLCBpID0gMDtcXG4gXFx0c2l6ZV90IGxlZnQsIG9mZnNldCwgbGVuO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xcbiBcXHRzc2l6ZV90IHNpemU7XFxuIFxcbitcXHRpZiAoKHN0YXJ0IHwgaXRlcl9pb3ZfbGVuKGl0ZXIpKSBcXHUwMDI2IG1lbV9hbGlnbl9tYXNrKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIE1vdmUgcGFnZSBhcnJheSB1cCBpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGJpbyB2ZWNzIGFzIGZhciBhc1xcbiBcXHQgKiBwb3NzaWJsZSBzbyB0aGF0IHdlIGNhbiBzdGFydCBmaWxsaW5nIGJpb3ZlY3MgZnJvbSB0aGUgYmVnaW5uaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQyOjQ0LjkxOTYwNTkwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzMjUzNDE1ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzXCIsXG4gICAgXCJpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzXCIsXG4gICAgXCJsb29wX3NldF9kaW9cIixcbiAgICBcImxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRcIixcbiAgICBcImxvb3Bfc2V0X2RtYV9saW1pdFwiLFxuICAgIFwiemxvb3BfZ2V0X2Jsb2NrX3NpemVcIixcbiAgICBcInpsb29wX2N0bF9hZGRcIixcbiAgICBcImlvbWFwX2Rpb19iaW9faXRlcl9vbmVcIixcbiAgICBcIl9fYmxrZGV2X2RpcmVjdF9JT1wiLFxuICAgIFwiYmlvX21hcF91c2VyX2lvdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgYmlvIGhhbmRsaW5nIGFuZCBkaXJlY3QgSS9PIGFsaWdubWVudCByZXF1aXJlbWVudHMuIEl0IGFkZHMgYG1lbV9hbGlnbl9tYXNrYCB0byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCB0byBlbmZvcmNlIERNQSBhbGlnbm1lbnQgZm9yIGRpcmVjdCBJL08uIEl0IGFsc28gdXBkYXRlcyBgbG9vcGAgYW5kIGB6bG9vcGAgZHJpdmVycyB0byBwcm9wZXJseSBzZXQgRE1BIGFsaWdubWVudCBsaW1pdHMgZm9yIGRpcmVjdCBJL08sIGFuZCB1cGRhdGVzIGBpb21hcGAgYW5kIGBibGtkZXZgIGRpcmVjdCBJL08gcGF0aHMgdG8gcGFzcyB0aGUgY29ycmVjdCBhbGlnbm1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFlOTlkYzU3NjY1MjBmMjc4OWZmOWJlNzYyNDQ3NmUyMjM2MDA2ZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAwNDo0Mjo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmNcbmluZGV4IGYyYTVmNGQwYTk2NzJiLi5mYWFkNDFhNzJhYzc3ZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jpby5jXG4rKysgYi9ibG9jay9iaW8uY1xuQEAgLTEyMjAsMTAgKzEyMjAsNDUgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0RFQlVHX0tFUk5FTFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW92X2J2ZWNfYWxpZ25lZChjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdFx0XHRcdHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrKVxuK3tcbitcdHN0cnVjdCBidmVjX2l0ZXIgaXRlcjtcbitcdHN0cnVjdCBiaW9fdmVjIGJ2O1xuK1xuK1x0LypcbitcdCAqIENvcnJlY3QgY2FsbGVycyBuZXZlciBicmVhayB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cywgc28gdGhpc1xuK1x0ICogZXhoYXVzdGl2ZSBjaGVjayBpcyBvbmx5IHBhaWQgZm9yIGluIGRlYnVnIGJ1aWxkcy5cbitcdCAqL1xuK1x0Zm9yX2VhY2hfbXBfYnZlYyhidiwgYmlvLVx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIpXG4rXHRcdGlmICgoYnYuYnZfb2Zmc2V0IHwgYnYuYnZfbGVuKSBcdTAwMjYgbWVtX2FsaWduX21hc2spXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBib29sIGJpb19pb3ZfYnZlY19hbGlnbmVkKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcbitcdFx0XHRcdFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXG4re1xuK1x0LypcbitcdCAqIFdlIGZvcndhcmQgdGhlIGJpb192ZWMgYXMtaXMsIHNvIElURVJfQlZFQyBjYWxsZXJzIG11c3QgcHJvdmlkZVxuK1x0ICogc2VnbWVudHMgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSBkZXZpY2UncyBETUEgYWxpZ25tZW50LiBUaGUgb25seVxuK1x0ICogdW5jaGVja2VkIHVzZXItY29udHJvbGxhYmxlIG9mZnNldCB0aGF0IHJlYWNoZXMgaGVyZSBpcyBhbiBpb191cmluZ1xuK1x0ICogcmVnaXN0ZXJlZCBidWZmZXIgd2hlcmUganVzdCB0aGUgZmlyc3Qgc2VnbWVudCBjYW4gYmUgdW5hbGlnbmVkXG4rXHQgKiAodGhlIHJlc3QgaXMgdmlydHVhbGx5IGNvbnRpZ3VvdXMpLCBzbyBjaGVja2luZyBvbmx5IHRoYXQgb25lIGlzXG4rXHQgKiBzdWZmaWNpZW50IHRvIGtub3cgaWYgdGhlIGVudGlyZSB2ZWN0b3IgaXMgdmFsaWQuXG4rXHQgKi9cbitcdHJldHVybiAhKG1wX2J2ZWNfaXRlcl9vZmZzZXQoYmlvLVx1MDAzZWJpX2lvX3ZlYywgYmlvLVx1MDAzZWJpX2l0ZXIpIFx1MDAyNlxuK1x0XHRcdFx0XHRcdFx0bWVtX2FsaWduX21hc2spO1xuK31cbisjZW5kaWZcbitcbiAvKipcbiAgKiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzIC0gYWRkIHVzZXIgb3Iga2VybmVsIHBhZ2VzIHRvIGEgYmlvXG4gICogQGJpbzogYmlvIHRvIGFkZCBwYWdlcyB0b1xuICAqIEBpdGVyOiBpb3YgaXRlcmF0b3IgZGVzY3JpYmluZyB0aGUgcmVnaW9uIHRvIGJlIGFkZGVkXG4rICogQG1lbV9hbGlnbl9tYXNrOiB0aGUgbWFzayB0aGUgc291cmNlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgdG8sXG4rICpcdDAgZm9yIG5vIHJlcXVpcmVtZW50XG4gICogQGxlbl9hbGlnbl9tYXNrOiB0aGUgbWFzayB0byBhbGlnbiB0aGUgdG90YWwgc2l6ZSB0bywgMCBmb3IgYW55IGxlbmd0aFxuICAqXG4gICogVGhpcyB0YWtlcyBlaXRoZXIgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdXNlciBtZW1vcnksIG9yIG9uZSBwb2ludGluZyB0b1xuQEAgLTEyNDIsNyArMTI3Nyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gICogaXMgcmV0dXJuZWQgb25seSBpZiAwIHBhZ2VzIGNvdWxkIGJlIHBpbm5lZC5cbiAgKi9cbiBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi1cdFx0XHQgICB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcbitcdFx0XHQgICB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4ge1xuIFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGZsYWdzID0gMDtcbiBcbkBAIC0xMjUxLDYgKzEyODYsMTAgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkge1xuIFx0XHRiaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7XG4rXG4rXHRcdGlmICghYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuQEAgLTEyNjUsOCArMTMwNCwxOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXHUwMDNlYmlfaW9fdmVjLFxuIFx0XHRcdFx0QklPX01BWF9TSVpFIC0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSxcbi1cdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MsIGZsYWdzKTtcbitcdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MsXG4rXHRcdFx0XHRtZW1fYWxpZ25fbWFzaywgZmxhZ3MpO1xuIFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQSBtaXNhbGlnbmVkIHZlY3RvciBmYWlscyB0aGUgd2hvbGUgSS9PLiAgUmVsZWFzZSBhbnlcbitcdFx0XHQgKiBwYWdlcyBwaW5uZWQgYnkgZWFybGllciBpdGVyYXRpb25zIGJlZm9yZSByZXR1cm5pbmdcbitcdFx0XHQgKiBzaW5jZSB0aGlzIGJpbyB3b24ndCBiZSBzdWJtaXR0ZWQgdG8gcmVsZWFzZSB0aGVtLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChyZXQgPT0gLUVJTlZBTCkge1xuK1x0XHRcdFx0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XG4rXHRcdFx0XHRiaW9fY2xlYXJfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7XG4rXHRcdFx0XHRiaW8tXHUwMDNlYmlfdmNudCA9IDA7XG4rXHRcdFx0fVxuIFx0XHRcdGlmICghYmlvLVx1MDAzZWJpX3ZjbnQpXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdGJyZWFrO1xuQEAgLTEzNzcsNyArMTQyNyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRzc2l6ZV90IHJldDtcbiBcbiBcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXHUwMDNlYmlfaW9fdmVjICsgMSwgbGVuLFxuLVx0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDApO1xuK1x0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDAsIDApO1xuIFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuIFx0XHRcdGlmICghYmlvLVx1MDAzZWJpX3ZjbnQpIHtcbiBcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1hcC5jIGIvYmxvY2svYmxrLW1hcC5jXG5pbmRleCA3Njg1NDlmMTlmOTdlYy4uYzk1MzVlZmUxYTkxM2MgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstbWFwLmNcbisrKyBiL2Jsb2NrL2Jsay1tYXAuY1xuQEAgLTI3NCw3ICsyNzQsNyBAQCBzdGF0aWMgaW50IGJpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHQgKiBObyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9uIG91ciBwYXJ0IHRvIHN1cHBvcnQgYXJiaXRyYXJ5XG4gXHQgKiBwYXNzdGhyb3VnaCBjb21tYW5kcy5cbiBcdCAqL1xuLVx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIDApO1xuK1x0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIDAsIDApO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0O1xuIFx0cmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocnEsIGJpbyk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jXG5pbmRleCAxNTc4M2E2MTgwZGVjMS4uZTUxOWQ3ZjQzYjMxMDYgMTAwNjQ0XG4tLS0gYS9ibG9jay9mb3BzLmNcbisrKyBiL2Jsb2NrL2ZvcHMuY1xuQEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIGJvb2wgYmxrZGV2X2Rpb19pbnZhbGlkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBraW9jYiAqaW9jYixcbiBzdGF0aWMgaW5saW5lIGludCBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbyxcbiBcdFx0c3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHtcbi1cdHJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlcixcbitcdHJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpLFxuIFx0XHRcdGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpIC0gMSk7XG4gfVxuIFxuQEAgLTIxOCw3ICsyMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRcdHJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTtcbiBcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbi1cdFx0XHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgQkxLX1NUU19JT0VSUik7XG4rXHRcdFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKSB7XG5AQCAtMjM4LDggKzIzOCwxMCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdH1cbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfSEFTX01FVEFEQVRBKSB7XG4gXHRcdFx0cmV0ID0gYmlvX2ludGVncml0eV9tYXBfaXRlcihiaW8sIGlvY2ItXHUwMDNlcHJpdmF0ZSk7XG4tXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4tXHRcdFx0XHRnb3RvIGZhaWw7XG4rXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbitcdFx0XHRcdGJpb19lbmRpb19zdGF0dXMoYmlvLCBlcnJub190b19ibGtfc3RhdHVzKHJldCkpO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChpc19yZWFkKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggMzEwZGUwNDYzYmViMTQuLjVmZTYxZDU0MmY4Yjc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNTQsNiArNTQsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFxuIFx0c3RydWN0IGZpbGVcdCpsb19iYWNraW5nX2ZpbGU7XG4gXHR1bnNpZ25lZCBpbnRcdGxvX21pbl9kaW9fc2l6ZTtcbitcdHVuc2lnbmVkIGludFx0bG9fZGlvX21lbV9hbGlnbjtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKmxvX2RldmljZTtcbiBcbiBcdGdmcF90XHRcdG9sZF9nZnBfbWFzaztcbkBAIC00NDcsMjYgKzQ0OCwzNyBAQCBzdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRcdFx0X19mdW5jX18sIGxvLVx1MDAzZWxvX251bWJlciwgbG8tXHUwMDNlbG9fZmlsZV9uYW1lLCByYyk7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcF9xdWVyeV9taW5fZGlvX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbitzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuIFx0c3RydWN0IGZpbGUgKmZpbGUgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpzYl9iZGV2ID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdC1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldjtcbiBcdHN0cnVjdCBrc3RhdCBzdDtcbiBcbiBcdC8qXG4tXHQgKiBVc2UgdGhlIG1pbmltYWwgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuXG4rXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZ1xuK1x0ICogcmVxdWVzdCdzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHNcbitcdCAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJ3MgZG1hX2FsaWdubWVudCB3aGVuXG4rXHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uXG4gXHQgKi9cbiBcdGlmICghdmZzX2dldGF0dHIoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpXG4tXHRcdHJldHVybiBzdC5kaW9fb2Zmc2V0X2FsaWduO1xuK1x0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4rXHRcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4rXHRcdGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0LypcbiBcdCAqIEluIGEgcGVyZmVjdCB3b3JsZCB0aGlzIHdvdWxkbid0IGJlIG5lZWRlZCwgYnV0IGFzIG9mIExpbnV4IDYuMTMgb25seVxuIFx0ICogYSBoYW5kZnVsIG9mIGZpbGUgc3lzdGVtcyBzdXBwb3J0IHRoZSBTVEFUWF9ESU9BTElHTiBmbGFnLlxuIFx0ICovXG4tXHRpZiAoc2JfYmRldilcbi1cdFx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHNiX2JkZXYpO1xuLVx0cmV0dXJuIFNFQ1RPUl9TSVpFO1xuK1x0aWYgKHNiX2JkZXYpIHtcbitcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4rXHRcdGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuK1x0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpXG5AQCAtNTA5LDcgKzUyMSw3IEBAIHN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0XHRsby1cdTAwM2VvbGRfZ2ZwX21hc2sgXHUwMDI2IH4oX19HRlBfSU8gfCBfX0dGUF9GUykpO1xuIFx0aWYgKGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0RJUkVDVClcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPO1xuLVx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gbG9vcF9xdWVyeV9taW5fZGlvX3NpemUobG8pO1xuK1x0bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG5AQCAtOTQwLDYgKzk1MiwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdHJldHVybiBTRUNUT1JfU0laRTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbG9vcF9zZXRfZG1hX2xpbWl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbit7XG4rXHQvKlxuK1x0ICogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgdXNlciBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc29cbitcdCAqIHRyYWNrIHRoZSBiYWNraW5nJ3MgRE1BIGFsaWdubWVudCByZXF1aXJlbWVudCBhcyB0aGUgbW9kZSBpcyB0b2dnbGVkLlxuK1x0ICovXG4rXHRpZiAobG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX0RJUkVDVF9JTylcbitcdFx0bGltLVx1MDAzZWRtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24sXG4rXHRcdFx0XHRcdCAgIFNFQ1RPUl9TSVpFIC0gMSk7XG4rXHRlbHNlXG4rXHRcdGxpbS1cdTAwM2VkbWFfYWxpZ25tZW50ID0gU0VDVE9SX1NJWkUgLSAxO1xuK31cbitcbiBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHR1bnNpZ25lZCBpbnQgYnNpemUpXG4ge1xuQEAgLTk2MSw2ICs5ODYsNyBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0bGltLVx1MDAzZWxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplO1xuIFx0bGltLVx1MDAzZXBoeXNpY2FsX2Jsb2NrX3NpemUgPSBic2l6ZTtcbiBcdGxpbS1cdTAwM2Vpb19taW4gPSBic2l6ZTtcbitcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgbGltKTtcbiBcdGxpbS1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcbiBcdGlmIChmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZnN5bmMgXHUwMDI2XHUwMDI2ICEobG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX1JFQURfT05MWSkpXG4gXHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbkBAIC0xNDE2LDYgKzE0NDIsNyBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRib29sIHVzZV9kaW8gPSAhIWFyZztcbiBcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFxuIFx0aWYgKGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKVxuIFx0XHRyZXR1cm4gLUVOWElPO1xuQEAgLTE0MzQsNiArMTQ2MSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRsby1cdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XG4gXHRlbHNlXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIFx1MDAyNj0gfkxPX0ZMQUdTX0RJUkVDVF9JTztcbitcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuK1x0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBcdTAwMjZsaW0pO1xuK1x0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUsIG1lbWZsYWdzKTtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbmluZGV4IDU1ZWViNmFhYzBlYTNiLi5mOTdhMjBjZmRiN2NlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtMTQ0LDYgKzE0NCw3IEBAIHN0cnVjdCB6bG9vcF9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50XHRcdG5yX2NvbnZfem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bWF4X29wZW5fem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdFx0YmxvY2tfc2l6ZTtcbitcdHVuc2lnbmVkIGludFx0XHRkaW9fbWVtX2FsaWduO1xuIFxuIFx0c3BpbmxvY2tfdFx0XHRvcGVuX3pvbmVzX2xvY2s7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRvcGVuX3pvbmVzX2xydV9saXN0O1xuQEAgLTEwMzcsMjAgKzEwMzgsMzAgQEAgc3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG4gXHRzdHJ1Y3Qga3N0YXQgc3Q7XG4gXG4gXHQvKlxuLVx0ICogSWYgdGhlIEZTIGJsb2NrIHNpemUgaXMgbG93ZXIgdGhhbiBvciBlcXVhbCB0byA0SywgdXNlIHRoYXQgYXMgdGhlXG4tXHQgKiBkZXZpY2UgYmxvY2sgc2l6ZS4gT3RoZXJ3aXNlLCBmYWxsYmFjayB0byB0aGUgRlMgZGlyZWN0IElPIGFsaWdubWVudFxuLVx0ICogY29uc3RyYWludCBpZiB0aGF0IGlzIHByb3ZpZGVkLCBhbmQgdG8gdGhlIEZTIHVuZGVybHlpbmcgZGV2aWNlXG4tXHQgKiBwaHlzaWNhbCBibG9jayBzaXplIGlmIHRoZSBkaXJlY3QgSU8gYWxpZ25tZW50IGlzIHVua25vd24uXG4rXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nXG4rXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xuK1x0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UncyBkbWFfYWxpZ25tZW50IHdoZW5cbitcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbiBcdCAqL1xuLVx0aWYgKGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIFx1MDAzYz0gU1pfNEspXG4tXHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXHRlbHNlIGlmICghdmZzX2dldGF0dHIoXHUwMDI2em9uZS1cdTAwM2VmaWxlLVx1MDAzZWZfcGF0aCwgXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcdTAwMjZcdTAwMjZcbi1cdFx0IChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKVxuK1x0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4gXHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbi1cdGVsc2UgaWYgKHNiX2JkZXYpXG4rXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XG4rXHR9IGVsc2UgaWYgKHNiX2JkZXYpIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4tXHRlbHNlXG4rXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xuK1x0fSBlbHNlIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbitcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBTRUNUT1JfU0laRSAtIDE7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogUHJlZmVyIHRoZSBGUyBibG9jayBzaXplIGZvciB0aGUgZGV2aWNlIGJsb2NrIHNpemUgd2hlbiBpdCBpcyBub1xuK1x0ICogbGFyZ2VyIHRoYW4gNEs7IG90aGVyd2lzZSBrZWVwIHRoZSBkaXJlY3QgSS9PIC8gcGh5c2ljYWwgYmxvY2sgc2l6ZVxuK1x0ICogc2VsZWN0ZWQgYWJvdmUuXG4rXHQgKi9cbitcdGlmIChmaWxlX2lub2RlKHpvbmUtXHUwMDNlZmlsZSktXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSBcdTAwM2M9IFNaXzRLKVxuK1x0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuIFxuIFx0aWYgKHpsby1cdTAwM2V6b25lX2NhcGFjaXR5IFx1MDAyNiAoKHpsby1cdTAwM2VibG9ja19zaXplIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQpIC0gMSkpIHtcbiBcdFx0cHJfZXJyKFwiWm9uZSBjYXBhY2l0eSBpcyBub3QgYWxpZ25lZCB0byBibG9jayBzaXplICV1XFxuXCIsXG5AQCAtMTI3OSw2ICsxMjkwLDEwIEBAIHN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcbiBcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gemxvLVx1MDAzZWJsb2NrX3NpemU7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gemxvLVx1MDAzZWJsb2NrX3NpemU7XG4rXHQvKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSByZXF1ZXN0IHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGVzIGFzLWlzLiAqL1xuK1x0aWYgKCFvcHRzLVx1MDAzZWJ1ZmZlcmVkX2lvKVxuK1x0XHRsaW0uZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgemxvLVx1MDAzZWRpb19tZW1fYWxpZ24sXG4rXHRcdFx0XHRcdCAgU0VDVE9SX1NJWkUgLSAxKTtcbiBcdGlmICh6bG8tXHUwMDNlem9uZV9hcHBlbmQpXG4gXHRcdGxpbS5tYXhfaHdfem9uZV9hcHBlbmRfc2VjdG9ycyA9IGxpbS5tYXhfaHdfc2VjdG9ycztcbiBcdGxpbS5tYXhfb3Blbl96b25lcyA9IHpsby1cdTAwM2VtYXhfb3Blbl96b25lcztcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5pbmRleCBiNDg1ZTNiMTkxZGFmYS4uZmY0NThhYTEyYWUyOTggMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbkBAIC0zNTgsNiArMzU4LDcgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdFx0XHRcdGlvbWFwX21heF9iaW9fc2l6ZShcdTAwMjZpdGVyLVx1MDAzZWlvbWFwKSwgYWxpZ25tZW50KTtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGRpby1cdTAwM2VzdWJtaXQuaXRlcixcbitcdFx0XHRcdFx0ICAgICBiZGV2X2RtYV9hbGlnbm1lbnQoYmlvLVx1MDAzZWJpX2JkZXYpLFxuIFx0XHRcdFx0XHQgICAgIGFsaWdubWVudCAtIDEpO1xuIFx0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdGdvdG8gb3V0X3B1dF9iaW87XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmhcbmluZGV4IDhmMzNmNzE3YjE0ZjViLi5jZTM0ZWE0OWVmMzU4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmhcbkBAIC00NzcsNyArNDc3LDcgQEAgaW50IGJkZXZfcndfdmlydChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsIHZvaWQgKmRhdGEsXG4gXHRcdHNpemVfdCBsZW4sIGVudW0gcmVxX29wIG9wKTtcbiBcbiBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi1cdFx0dW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xuK1x0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xuIFxuIHZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XG4gdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaFxuaW5kZXggYTliYzViMzA2N2UzMjAuLmZlMmU5ODVkNzRkMjRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaFxuKysrIGIvaW5jbHVkZS9saW51eC91aW8uaFxuQEAgLTM4OSw5ICszODksMTcgQEAgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IHBhZ2UgKioqcGFnZXMsXG4gXHRcdFx0ICAgICAgIHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBpbnQgbWF4cGFnZXMsXG4gXHRcdFx0ICAgICAgIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzLFxuIFx0XHRcdCAgICAgICBzaXplX3QgKm9mZnNldDApO1xuKy8qXG4rICogQmxvY2stbGF5ZXIgY29uc3VtZXJzIChlLmcuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoKSkgcmVxdWlyZSB0aGF0IHRoZVxuKyAqIHNlZ21lbnRzIG9mIGFuIElURVJfQlZFQyBpdGVyYXRvciBhcmUgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSB0YXJnZXQgZGV2aWNlJ3NcbisgKiBETUEgYWxpZ25tZW50LCBhbmQgZm9yd2FyZCB0aGVtIGFzLWlzLiAgSW4ta2VybmVsIHVzZXJzIHRoYXQgYnVpbGQgdGhlaXIgb3duXG4rICogYnZlY3MgbXVzdCBub3QgY3JlYXRlIHN1Yi1hbGlnbmVkIHNlZ21lbnRzOyBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKCkgZW5mb3JjZXNcbisgKiB0aGUgc2FtZSBmb3IgdGhlIHNlZ21lbnRzIGl0IGV4dHJhY3RzIHZpYSBAbWVtX2FsaWduX21hc2suXG4rICovXG4gc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0XHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxuLVx0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpO1xuK1x0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssXG4rXHRcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKTtcbiBcbiAvKipcbiAgKiBpb3ZfaXRlcl9leHRyYWN0X3dpbGxfcGluIC0gSW5kaWNhdGUgaG93IHBhZ2VzIGZyb20gdGhlIGl0ZXJhdG9yIHdpbGwgYmUgcmV0YWluZWRcbmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jXG5pbmRleCAyNzM5MTliMTYxNjE3Ni4uYzM0MzA3NTk1MWRlZDAgMTAwNjQ0XG4tLS0gYS9saWIvaW92X2l0ZXIuY1xuKysrIGIvbGliL2lvdl9pdGVyLmNcbkBAIC0xODg2LDYgKzE4ODYsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gICogQG1heF9zaXplOlx0bWF4aW11bSBzaXplIHRvIGV4dHJhY3QgZnJvbSBAaXRlclxuICAqIEBucl92ZWNzOlx0bnVtYmVyIG9mIHZlY3RvcnMgaW4gQGJ2IChvbiBpbiBhbmQgb3V0cHV0KVxuICAqIEBtYXhfdmVjczpcdG1heGltdW0gdmVjdG9ycyBpbiBAYnYsIGluY2x1ZGluZyB0aG9zZSBmaWxsZWQgYmVmb3JlIGNhbGxpbmdcbisgKiBAbWVtX2FsaWduX21hc2s6XHRyZWplY3Qgd2l0aCAtRUlOVkFMIGlmIHRoZSBzb3VyY2UgYWRkcmVzcyBvclxuKyAqXHRcdGxlbmd0aCBpcyBub3QgYWxpZ25lZCB0byB0aGlzIG1hc2tcbiAgKiBAZXh0cmFjdGlvbl9mbGFnczogZmxhZ3MgdG8gcXVhbGlmeSByZXF1ZXN0XG4gICpcbiAgKiBMaWtlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSwgYnV0IHJldHVybnMgcGh5c2ljYWxseSBjb250aWd1b3VzIHJhbmdlc1xuQEAgLTE4OTcsMTQgKzE4OTksMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuICAqL1xuIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBiaW9fdmVjICpidixcbiBcdFx0c2l6ZV90IG1heF9zaXplLCB1bnNpZ25lZCBzaG9ydCAqbnJfdmVjcyxcbi1cdFx0dW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKVxuK1x0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssXG4rXHRcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZylpdGVyX2lvdl9hZGRyKGl0ZXIpO1xuIFx0dW5zaWduZWQgc2hvcnQgZW50cmllc19sZWZ0ID0gbWF4X3ZlY3MgLSAqbnJfdmVjcztcbiBcdHVuc2lnbmVkIHNob3J0IG5yX3BhZ2VzLCBpID0gMDtcbiBcdHNpemVfdCBsZWZ0LCBvZmZzZXQsIGxlbjtcbiBcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4gXHRzc2l6ZV90IHNpemU7XG4gXG4rXHRpZiAoKHN0YXJ0IHwgaXRlcl9pb3ZfbGVuKGl0ZXIpKSBcdTAwMjYgbWVtX2FsaWduX21hc2spXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0LypcbiBcdCAqIE1vdmUgcGFnZSBhcnJheSB1cCBpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGJpbyB2ZWNzIGFzIGZhciBhc1xuIFx0ICogcG9zc2libGUgc28gdGhhdCB3ZSBjYW4gc3RhcnQgZmlsbGluZyBiaW92ZWNzIGZyb20gdGhlIGJlZ2lubmluZ1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDI6NDQuOTE5NjA4MTcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwNjU3NzE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIHByZXR0eSBjb3JlIHN0dWZmIOKAkyBibG9jayBsYXllciBiaW8gaGFuZGxpbmcgYW5kIGRpcmVjdCBJL08gYWxpZ25tZW50LiBTcGVjaWZpY2FsbHksIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1lbV9hbGlnbl9tYXNrYCBpbnRvIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIGlzIGltbWVkaWF0ZWx5IGdyYWJiaW5nIG15IGF0dGVudGlvbi4gQW5kIHRoZSB1cGRhdGVzIHRvIHRoZSBgbG9vcGAgYW5kIGB6bG9vcGAgZHJpdmVycyB0byBjb3JyZWN0bHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PIGFyZSBkZWZpbml0ZWx5IGludGVyZXN0aW5nLiBUaGVuIHRoZXJlIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgYGlvbWFwYCBhbmQgYGJsa2RldmAgdG8gcGFzcyBgYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpYCB0byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AuIEl0IHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUgdmVyeSBjb3JlIG9mIHRoZSBibG9jayBsYXllciBhbmQgdGhlIGRpcmVjdCBJL08gbG9naWMuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCB0aGlzIHNjcmVhbXMgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBmb2N1cyBteSBhdHRlbnRpb24gb24ga2V5IHN5bWJvbHMuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBhIG1lbnRhbCBjaGVja2xpc3Q6XG4qICAgYENPTkZJR19CTEtfREVWX0xPT1BgIGZvciB0aGUgbG9vcCBkZXZpY2UuXG4qICAgYENPTkZJR19CTEtfREVWX1pPTkVEYCBmb3IgdGhlIHpsb29wIGRldmljZS4uLiBobW0sIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0J3MgbG9vayBpbnRvIHRoZSBjb2RlLCBpdCdzIGBkcml2ZXJzL2Jsb2NrL3psb29wLmNgLiBJJ2xsIHVzZSB0b29scyB0byB2ZXJpZnkgaXRzIGNvbmZpZy5cbiogICBgQ09ORklHX0ZTX0lPTUFQYCBmb3IgaW9tYXAsIG9idmlvdXNseS5cbiogICBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CTE9DS2AgZm9yIHRoZSBibG9jayBsYXllciBpdHNlbGYuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZ1bGx5IGF3YXJlIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBjb25maWd1cmVkIGluIHRoZSB0YXJnZXQgc3lzdGVtcy4gVGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBteSBmdXp6aW5nIHBsYW4uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG9vbHMgSSBuZWVkIHRvIGhlbHAgbWUgdW5kZXJzdGFuZCBgZHJpdmVycy9ibG9jay96bG9vcC5jYCBhbmQgaXRzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mjo1MC42MjYxODk1ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzNTI4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTY9Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM2Ny1cXHQgIGVjaG8gXFxcImFkZCBpZD0wLHpvbmVfc2l6ZV9tYj0yNTYsY2FwYWNpdHlfbWI9MTYzODQsY29udl96b25lcz0xMVxcXCIgXFx1MDAzZSBcXFxcXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM2ODpcXHRcXHQvZGV2L3psb29wLWNvbnRyb2xcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mjo1MC42ODk1NDk1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDY0MDMzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWm9uZWQgTG9vcCBDb25maWd1cmF0aW9uIERpdmUqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhlIHpvbmVkIGxvb3AgZGV2aWNlLCB6bG9vcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGlyZWN0IEkvTyBwYXRoLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUuXG5cbk15IGZvY3VzIGlzIG9uIHRoZSBkYXRhIHBhdGguIEknbGwgc3RhcnQgd2l0aCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpbiBgYmxvY2svYmlvLmNgIGFuZCBgbGliL2lvdl9pdGVyLmNgLiBUaGVzZSB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBJL08gdmVjdG9ycyBhcmUgaGFuZGxlZC4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgem9uZWQgYXdhcmUgaGFuZGxpbmcgd2l0aGluIHRoZSBsb29wIGNvZGUuXG5cbkkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgbG9vcF9zZXRfZGlvYCwgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgLCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgLCBgemxvb3BfY3RsX2FkZGAsIGBpb21hcF9kaW9fYmlvX2l0ZXJfb25lYCwgYW5kIG9mIGNvdXJzZSwgYF9fYmxrZGV2X2RpcmVjdF9JT2AuXG5cbkJlZm9yZSBkaWdnaW5nIGluIGZ1cnRoZXIsIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGF0IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgYWN0dWFsbHkgKmV4aXN0cyouIEl0J3MgcG9zc2libGUgSSdtIGxvb2tpbmcgYXQgb3V0ZGF0ZWQgY29kZSBvciBhIGRpZmZlcmVudCB2ZXJzaW9uLCBhbmQgSSBuZWVkIHRvIHN0YXJ0IGhlcmUgdG8gYmUgY2VydGFpbiBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjU0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQyOjU0Ljc5NTk1NjczM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDMyODEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9nZXRfYmxvY2tfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMTY9c3RhdGljIHN0cnVjdCBmaWxlICp6bG9vcF9maWxwX29wZW5fZm10KGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDMzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM0OnN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDM1LVxcdFxcdFxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTEwNzU9c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEwLVxcdFxcdGlmICghemxvLVxcdTAwM2VibG9ja19zaXplKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMTE6XFx0XFx0XFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMi1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTAtXFx0aWYgKCF6bG8tXFx1MDAzZWJsb2NrX3NpemUpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MTpcXHRcXHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1NjpcXHR6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mjo1NC44NzAyOTI4NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY4MTk4NzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBsb29wLmMgZm9yIERNQSBhbmQgQWxpZ25tZW50IFVwZGF0ZXMqKlxuXG5SaWdodCwgdGltZSB0byBmb2N1cyBvbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvb3AgZGV2aWNlIGhhbmRsZXMgRE1BIHRyYW5zZmVycyBhbmQgYWxpZ25tZW50LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIHRoZSBmdW5jdGlvbnMgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIGFuZCBgbG9vcF9zZXRfZG1hX2xpbWl0YC4gSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZWZmaWNpZW50IEkvTyBhbmQgcHJldmVudGluZyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IsIGV2ZW4gd29yc2UsIGRhdGEgY29ycnVwdGlvbiwgd2hlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGRldmljZSdzIHNldHVwIGFuZCBvcGVyYXRpb24sIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gRE1BIGNvbnN0cmFpbnRzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgYWxnb3JpdGhtcyB1c2VkIGZvciBhbGlnbm1lbnQsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGFyaXNlIHdpdGggY29uY3VycmVudCBhY2Nlc3MuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIGFueSBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIGxvb3AgZGV2aWNlIGZ1bmN0aW9uYWxpdHkgd291bGQgYmUgaGlkaW5nLiBMZXQncyBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDI6NTguMTM4NDk1NDk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDM1NTI1NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF91cGRhdGVfZGlvX2FsaWdubWVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz00Mzk9c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ1MTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTUxNj1zdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjMtXFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MjQ6XFx0bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTI1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDI6NTkuNjgyMDU1ODY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwMTEwODgwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGxvb3Bfc2V0X2RtYV9saW1pdGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbG9vcF9zZXRfZG1hX2xpbWl0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24g4oCTIGlzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybSBvciBhIG1vcmUgZ2VuZXJpYyBETUEgKERpcmVjdCBNZW1vcnkgQWNjZXNzKSBpbXBsZW1lbnRhdGlvbj8gVGhlIG5hbWluZyBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggc2V0dGluZyBzb21lIHNvcnQgb2YgdXBwZXIgYm91bmQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHNpemUgb3IgbnVtYmVyIG9mIERNQSB0cmFuc2ZlcnMgd2l0aGluIGEgbG9vcC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQncyB0aGUgdHlwaWNhbCB1c2UgY2FzZT8gSXMgdGhpcyBmb3IgcHJldmVudGluZyBvdmVyZmxvdyBpbiBhIHNwZWNpZmljIHJlZ2lzdGVyLCBtYW5hZ2luZyBtZW1vcnkgYmFuZHdpZHRoLCBvciBpbXBvc2luZyBhIGxpbWl0YXRpb24gZm9yIHNhZmV0eSByZWFzb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBsb29wIHJlcHJlc2VudHMuIElzIGl0IGFuIGlubmVyIGxvb3Agd2l0aGluIGEgbW9yZSBjb21wbGV4IGFsZ29yaXRobSwgb3IgdGhlIHByaW1hcnkgbG9vcD9cblxuSSdsbCBxdWlja2x5IGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgZGVjbGFyYXRpb24gdG8gc2VlIHRoZSBhcmd1bWVudHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGludGVnZXIgbGltaXQsIG9yIGlzIHRoZXJlIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggaW52b2x2ZWQsIGxpa2UgYSBzdHJ1Y3R1cmUgd2l0aCB1cHBlciBhbmQgbG93ZXIgYm91bmQgZGVmaW5pdGlvbnM/IEFsc28sIGFyZSB3ZSBwb3RlbnRpYWxseSBzZXR0aW5nIGJvdW5kcyBvbiBpbmRpdmlkdWFsIGNoYW5uZWwgbG9vcHMsIG9yIHRoZSB3aG9sZSBvcGVyYXRpb24uIEknbSBrZWVuIHRvIGV4YW1pbmUgdGhlIGNvZGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IG5lZWQgYXR0ZW50aW9uLlxuXG5JIG5lZWQgdG8gc2VlIGhvdyB0aGUgbGltaXQgaXMgKnVzZWQqLiBXaGVyZSBpcyB0aGlzIHZhcmlhYmxlIGFjY2Vzc2VkIHdpdGhpbiB0aGUgbG9vcD8gSXMgaXQgY2hlY2tlZCB3aXRoaW4gdGhlIERNQSB0cmFuc2ZlciBpdHNlbGY/IElzIGl0IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvciB0aGUgc2l6ZSBvZiBhIGJ1ZmZlcj8gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIHRoaXMgbGltaXQsIHdoYXQgaGFwcGVucyBpZiB0aGUgbG9vcCBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBkbWEgbGltaXQ/XG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGxvb3Bfc2V0X2RtYV9saW1pdGAgZml0cyBpbnRvIHRoZSBsYXJnZXIgRE1BIHBpY3R1cmUgdG8gY29uZmlybSB0aGF0IGl0J3MgY29ycmVjdGx5IHByZXZlbnRpbmcgcHJvYmxlbXMsIG5vdCBjcmVhdGluZyB0aGVtLiBJJ20gbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYm90dGxlbmVja3MsIG9yIGV2ZW4gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgcmVsYXRlZCB0byBETUEgcGVyZm9ybWFuY2Ugb3IgZGF0YSBpbnRlZ3JpdHkuIExldCdzIHN0YXJ0IHdpdGggdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MDMuNzgzMTY4NTczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc2NDczMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9zZXRfZG1hX2xpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTk0Nz1zdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1NC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NTU6c3RhdGljIHZvaWQgbG9vcF9zZXRfZG1hX2xpbWl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NTYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9OTY4PXN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05ODgtXFx0bGltLVxcdTAwM2Vpb19taW4gPSBic2l6ZTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5ODk6XFx0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBsaW0pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk5MC1cXHRsaW0tXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0NDE9c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDY0LVxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDY1OlxcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2Ni1cXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUsIFxcdTAwMjZsaW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzowNC4yMTA4NDY1MTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4NzQ5MjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBMb29wIERldmljZSBQYXRjaCoqXG5cbk9rYXksIHRoaXMgcGF0Y2ggbG9va3Mgc29saWQsIGRlZmluaXRlbHkgd29ydGggZGVkaWNhdGluZyBzb21lIGZ1enppbmcgdGltZSB0by4gTGV0J3MgZ2V0IGEgcGxhbiB0b2dldGhlci4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSdtIHRoaW5raW5nIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIHRoZSBtb3N0IHJlbGV2YW50OiBgQkxLX0RFVl9MT09QYCwgYEJMS19ERVZfWk9ORURfTE9PUGAsIGFuZCBgRlNfSU9NQVBgLiBXaGlsZSBgRlNfSU9NQVBgIG1pZ2h0IGJlIGltcGxpY2l0bHkgZW5hYmxlZCB3aXRoIFhGUyBvciBleHQ0LCBpdCdzIGdvb2QgdG8gYmUgZXhwbGljaXQgYWJvdXQgaXQuXG5cbk5vdywgZm9yIGZvY3VzIHN5bWJvbHMsIEknbSBsZWFuaW5nIHRvd2FyZHMgdGhlIGZvbGxvd2luZzogYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AsIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCwgYGxvb3Bfc2V0X2RtYV9saW1pdGAsIGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAsIGBpb21hcF9kaW9fYmlvX2l0ZXJfb25lYCwgYW5kIGBfX2Jsa2Rldl9kaXJlY3RfSU9gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1lIHNwb3RzIHdoZXJlIHRoZSBwYXRjaOKAmXMgbG9naWMgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIGNvZGUsIGluY3JlYXNpbmcgdGhlIHJpc2sgc3VyZmFjZS5cblxuSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjaywgSSBuZWVkIHRvIGNvbmZpcm0gYEZTX0lPTUFQYCBpcyBhY3R1YWxseSBhIGNvbmZpZ3VyYWJsZSBpdGVtLiBJdCBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MDguMjk4MzQyNTE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMzNjkzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXFxuLS1cXG5mcy9LY29uZmlnLTE3LVxcbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXFxuZnMvS2NvbmZpZy0xOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjA4LjQxMTcyMDI4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjY4OTE5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludGVybmFsIEF1ZGl0IG9mIGBGU19JT01BUGAgYW5kIERpcmVjdCBJL08gSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgYEZTX0lPTUFQYC4uLiB5ZWFoLCB0aGF0J3MgZGVmaW5pdGVseSBhIGNvbmZpZyBvcHRpb24uIEdvdHRhIGtlZXAgdGhhdCBzdHJhaWdodCBpbiBteSBoZWFkLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCB0aGUgaW52ZXN0aWdhdGlvbiwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBfX2Jsa2Rldl9kaXJlY3RfSU9gIGlzIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGUgZnVuY3Rpb24gSSdtIGxvb2tpbmcgYXQuIEknbGwgZG91YmxlLWNoZWNrIHRoYXQgdG8gYXZvaWQgd2FzdGluZyB0aW1lIG9uIGEgcmVkIGhlcnJpbmcuIE5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCBkaXJlY3QgSS9PIGZvciBibG9jayBkZXZpY2VzLiBNeSBtZW1vcnkgaXMgZ29vZCwgYnV0IGEgcXVpY2sgY29uZmlybWF0aW9uIG5ldmVyIGh1cnRzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggZnVuZGFtZW50YWwgYXNwZWN0cyBvZiB0aGUgc3lzdGVtLiBMZXQncyBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCB0YXJnZXQgYmVmb3JlIEkgZGlnIGluIGFueSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzcxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MTEuNjM4NjE2ODA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTYwMzk2MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19ibGtkZXZfZGlyZWN0X0lPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2ZvcHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9mb3BzLmM9NDY9c3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXFxuLS1cXG5ibG9jay9mb3BzLmMtNTQtXFxuYmxvY2svZm9wcy5jOjU1OnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxcbmJsb2NrL2ZvcHMuYy01Ni1cXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5ibG9jay9mb3BzLmM9MTMxPXN0YXRpYyB2b2lkIGJsa2Rldl9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2ZvcHMuYy0xNzQtXFxuYmxvY2svZm9wcy5jOjE3NTpzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuYmxvY2svZm9wcy5jLTE3Ni1cXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5ibG9jay9mb3BzLmM9Mjk0PXN0YXRpYyB2b2lkIGJsa2Rldl9iaW9fZW5kX2lvX2FzeW5jKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2ZvcHMuYy0zMjEtXFxuYmxvY2svZm9wcy5jOjMyMjpzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoc3RydWN0IGtpb2NiICppb2NiLFxcbmJsb2NrL2ZvcHMuYy0zMjMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svZm9wcy5jPTM5Nj1zdGF0aWMgc3NpemVfdCBibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuYmxvY2svZm9wcy5jLTQzMC1cXHRcXHRpZiAoaXNfc3luY19raW9jYihpb2NiKSlcXG5ibG9jay9mb3BzLmM6NDMxOlxcdFxcdFxcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU9fc2ltcGxlKGlvY2IsIGl0ZXIsIGJkZXYsXFxuYmxvY2svZm9wcy5jLTQzMi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlcyk7XFxuYmxvY2svZm9wcy5jOjQzMzpcXHRcXHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPX2FzeW5jKGlvY2IsIGl0ZXIsIGJkZXYsIG5yX3BhZ2VzKTtcXG5ibG9jay9mb3BzLmMtNDM0LVxcdH0gZWxzZSBpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0FUT01JQykge1xcbi0tXFxuYmxvY2svZm9wcy5jLTQzNi1cXHR9XFxuYmxvY2svZm9wcy5jOjQzNzpcXHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPKGlvY2IsIGl0ZXIsIGJkZXYsIGJpb19tYXhfc2Vncyhucl9wYWdlcykpO1xcbmJsb2NrL2ZvcHMuYy00MzgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzoxMi4wNTQ2Njk0MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NDk0NjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25maXJtaW5nIERpcmVjdCBJL08gYW5kIERpZ2dpbmcgRGVlcGVyKipcblxuWWVzLCBgX19ibGtkZXZfZGlyZWN0X0lPYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIHVzZWQgaGVyZS4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBibG9jayBsYXllcidzIGRpcmVjdCBJL08gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBgYmlvYCBzdHJ1Y3R1cmUgYW5kIHRoZSBJL08gdmVjdG9yIChgaW92YCkuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBiaW9faW92X2J2ZWNfYWxpZ25lZGAgaW4gYGJsb2NrL2Jpby5jYC4gVGhhdCdzIHdoZXJlIHRoZSBhbGlnbm1lbnQgbG9naWMgaXMgbGlrZWx5IHRvIHJlc2lkZSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IGl0IHJlbGF0ZXMgdG8gYGJ2ZWNgIGFsaWdubWVudCB3aWxsIGJlIGtleSB0byBtYWtpbmcgdGhlIHJlbGV2YW50IGRldGVybWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MTUuMDQ5NjIxNTQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg3ODgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaW9faW92X2J2ZWNfYWxpZ25lZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9iaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iaW8uYz0xMTkzPXN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5ibG9jay9iaW8uYy0xMjIzLSNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMXFxuYmxvY2svYmlvLmM6MTIyNDpzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jpby5jLTEyMjUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXFxuLS1cXG5ibG9jay9iaW8uYy0xMjM5LSNlbHNlXFxuYmxvY2svYmlvLmM6MTI0MDpzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jpby5jLTEyNDEtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXFxuLS1cXG5ibG9jay9iaW8uYz0xMjc5PWludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svYmlvLmMtMTI4OS1cXG5ibG9jay9iaW8uYzoxMjkwOlxcdFxcdGlmICghYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXFxuYmxvY2svYmlvLmMtMTI5MS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MTUuMTE2NTA4Njk5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDE5NTkyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIEkvTyBNYXBwaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBkaWcgaW50byB0aGlzIEkvTyBtYXBwaW5nIHByb2Nlc3MuIFdoaWxlIGBiaW9faW92X2J2ZWNfYWxpZ25lZGAgKmlzKiBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIG1ha2luZyBpdCBhIHBvdGVudGlhbGx5IGxlc3MtdGhhbi1pZGVhbCBmb2N1cyBmb3IgZGVlcC1kaXZlIGFuYWx5c2lzLCB0aGUgZnVuY3Rpb24gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGxvb2tzIGxpa2UgYSBtb3JlIHByb21pc2luZyBlbnRyeSBwb2ludC4gSXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBwcm92aWRlIGEgZ29vZCB2aWV3IGludG8gaG93IHRoZSBJL08gdmVjdG9ycyBnZXQgdHJhbnNsYXRlZCBpbnRvIHBhZ2Ugc3RydWN0dXJlcyBmb3IgYSBiaW8uXG5cblRoZXJlZm9yZSwgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBiaW9fbWFwX3VzZXJfaW92YCB3aXRoaW4gYGJsb2NrL2Jsay1tYXAuY2AuIFRoYXQgc2hvdWxkIGJlIHRoZSBhcmVhIG9mIGZvY3VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlci1zcGFjZSBJL08gdmVjdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGlzIG1hcHBpbmcgZnVuY3Rpb24uIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgaXMgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHRyYW5zbGF0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MTguMDU4NDc0NjMxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI2NDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaW9fbWFwX3VzZXJfaW92XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1tYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbWFwLmM9MTUwPXN0YXRpYyBpbnQgYmlvX2NvcHlfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgcnFfbWFwX2RhdGEgKm1hcF9kYXRhLFxcbi0tXFxuYmxvY2svYmxrLW1hcC5jLTI1OS1cXG5ibG9jay9ibGstbWFwLmM6MjYwOnN0YXRpYyBpbnQgYmlvX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5ibG9jay9ibGstbWFwLmMtMjYxLVxcdFxcdGdmcF90IGdmcF9tYXNrKVxcbi0tXFxuYmxvY2svYmxrLW1hcC5jPTQ5OT1pbnQgYmxrX3JxX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuYmxvY2svYmxrLW1hcC5jLTUzNC1cXHRcXHRlbHNlXFxuYmxvY2svYmxrLW1hcC5jOjUzNTpcXHRcXHRcXHRyZXQgPSBiaW9fbWFwX3VzZXJfaW92KHJxLCBcXHUwMDI2aSwgZ2ZwX21hc2spO1xcbmJsb2NrL2Jsay1tYXAuYy01MzYtXFx0XFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzoxOC4xMjA3NTUwNjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyMjI2MzM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSU8gVmVjdG9yIEluc3BlY3Rpb24qKlxuXG5BbHJpZ2h0LCBgYmlvX21hcF91c2VyX2lvdmAuLi4geWVhaCwgdGhhdCdzIGEgc29saWQgZnVuY3Rpb24uIEknbSBzYXRpc2ZpZWQgd2l0aCB0aGF0LiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBjcnVjaWFsIGNvbm5lY3Rpb25zIGluIHRoZSBJTyBwYXRoLCBsZXQncyBkcmlsbCBkb3duIGludG8gYGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXNgLiBUaGF0J3MgaW4gYGJsb2NrL2ZvcHMuY2AsIHJpZ2h0PyBHb29kLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSB0byBtYWtlIHN1cmUgdGhlIHVzZXIgSU8gdmVjdG9ycyBhcmUgYmVpbmcgcHJvcGVybHkgaGFuZGxlZCB0aHJvdWdoIHRvIHRoZSBibG9jayBkZXZpY2UgbGF5ZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgdHJhbnNmZXIgaXMgY29oZXJlbnQgYW5kIGVmZmljaWVudCBhbmQgdGhhdCBhbnkgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIGluIHRoaXMgYXJlYSBhcmVuJ3QgYmVjb21pbmcgYSBib3R0bGVuZWNrLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzoyMC45NDMwMjIzNTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDMyMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svZm9wcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2ZvcHMuYz0zOT1zdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuYmxvY2svZm9wcy5jLTQ1LVxcbmJsb2NrL2ZvcHMuYzo0NjpzdGF0aWMgaW5saW5lIGludCBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbyxcXG5ibG9jay9mb3BzLmMtNDctXFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbi0tXFxuYmxvY2svZm9wcy5jPTU1PXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuYmxvY2svZm9wcy5jLTg2LVxcbmJsb2NrL2ZvcHMuYzo4NzpcXHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKFxcdTAwMjZiaW8sIGl0ZXIsIGJkZXYpO1xcbmJsb2NrL2ZvcHMuYy04OC1cXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbmJsb2NrL2ZvcHMuYz0xNzU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svZm9wcy5jLTIxOC1cXG5ibG9jay9mb3BzLmM6MjE5OlxcdFxcdHJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTtcXG5ibG9jay9mb3BzLmMtMjIwLVxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLS1cXG5ibG9jay9mb3BzLmM9MzIyPXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5ibG9jay9mb3BzLmMtMzUzLVxcdH0gZWxzZSB7XFxuYmxvY2svZm9wcy5jOjM1NDpcXHRcXHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldik7XFxuYmxvY2svZm9wcy5jLTM1NS1cXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MjEuMDI1MDY0MTQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTMyMzExMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBCbG9jayBEZXZpY2UgSS9PIEFsaWdubWVudCoqXG5cbkFscmlnaHQsIHNvIGBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzYCBpcyBhICpzdGF0aWMgaW5saW5lKiBmdW5jdGlvbi4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCBtZWFucyB0aGUgY29tcGlsZXIgd2lsbCBsaWtlbHkgb3B0aW1pemUgaXQgaGVhdmlseSwgcG90ZW50aWFsbHkgaW5saW5pbmcgaXRzIGxvZ2ljIGRpcmVjdGx5LiBNYWtlcyBkZWJ1Z2dpbmcgYSBiaXQgaGFyZGVyIGlmIHlvdSdyZSBub3QgY2FyZWZ1bCwgYnV0IHVzdWFsbHkgaXQncyBhIG5ldCB3aW4gZm9yIHBlcmZvcm1hbmNlLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBhbGlnbm1lbnQgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbG9vcCBkZXZpY2UuIEdpdmVuIHRoYXQgY29udGV4dCwgSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGxvb3AgZHJpdmVyIG1hbmFnZXMgYWxpZ25tZW50IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcXVpcmtzIHdoZW4gZGVhbGluZyB3aXRoIGRpcmVjdCBJL08gYW5kLCBtb3JlIGJyb2FkbHksIGJsb2NrIGRldmljZSBpbnRlcmFjdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlIHdpdGggdGhvc2UgZGlyZWN0IElPIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzoyNC4xMTgyOTkyMjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NTQ2MDMzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTQzOT1zdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTAtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NDUxOnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9NTE2PXN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyMy1cXHRcXHRsby1cXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUyNDpcXHRsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KGxvKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzoyNC41MTM3Nzc1NjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NzAxNjkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gRGlyZWN0IEkvTyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBkaXJlY3QgSS9PIGlzIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgLCBgbG9vcF9zZXRfZG1hX2xpbWl0YCwgYW5kIGBsb29wX3NldF9kaW9gIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGF0J3MgZ29vZCB0byBrbm93IOKAkyBpdCBzdWdnZXN0cyB0aGV5IGFyZSBsb2NhbCB0byB0aGUgbW9kdWxlIG9yIGNvbXBpbGF0aW9uIHVuaXQgYW5kIGFyZW4ndCBtZWFudCB0byBiZSB1c2VkIGV4dGVybmFsbHkuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgdHJhbnNmZXIgYWN0dWFsbHkgaGFwcGVucyBpbiB0aGUgY29udGV4dCBvZiBgaW9tYXBgLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIExldCdzIHNlZSB3aGF0IGBpb21hcF9kaW9fYmlvX2l0ZXJfb25lYCBpcyBkb2luZzsgdGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWluIHdvcmsgaGFwcGVucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJL08gb3BlcmF0aW9ucyBhcmUgYnJva2VuIGRvd24sIG1hcHBlZCB0byB1bmRlcmx5aW5nIGJsb2NrIGRldmljZXMsIGFuZCBob3cgZGF0YSB0cmFuc2ZlciBpcyBpbml0aWF0ZWQsIGFuZCB0aGVzZSBmdW5jdGlvbnMgc2VlbSBsaWtlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBrZXkgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjI3LjY4MDc5NzQ5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzMTY3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2Jpb19pdGVyX29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz0yOTg9c3RhdGljIGludCBpb21hcF9kaW9femVybyhjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMzMzLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjMzNDpzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTMzNS1cXHRcXHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBhbGlnbm1lbnQsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz00MDI9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0Ni1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1NDc6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX2Jpb19pdGVyX29uZShpdGVyLCBkaW8sIHBvcywgYWxpZ25tZW50LCBiaW9fb3BmKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01NDgtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjI3Ljc0OTEyMjczNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU1MDQyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIERlZXAgRW5kOiBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBhbiBpbnRlcm5hbCB1dGlsaXR5LCBzY29wZWQgdG8gYSBzcGVjaWZpYyBjb250ZXh0LCBwcm9iYWJseSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIEkvTyBtYXBwaW5nIGxheWVyLiBNeSBndXQgdGVsbHMgbWUgaXQncyBoYW5kbGluZyBhIGNydWNpYWwgcGllY2Ugb2YgRGlyZWN0IEkvTyAoRElPKSBhbmQgcG90ZW50aWFsbHkgYmxvY2sgSS9PIGl0ZXJhdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9ucyB1c2VkIGluIHRoZSBrZXJuZWwsIEknZCBndWVzcyB0aGF0IGl0IGhhbmRsZXMgYSBzaW5nbGUgSS9PIG9wZXJhdGlvbiBpdGVyYXRpb24uIFRoZSBgX2Jpb19gIHBhcnQgb2YgdGhlIGZ1bmN0aW9uIG5hbWUgaW5kaWNhdGVzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHRpZ2h0bHkgY291cGxlZCB0byBiaW8gb3IgYmlvIGl0ZXJhdG9ycy5cblxuTGV0J3Mgc2Vl4oCmIEnigJlsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIGZ1bmN0aW9uLiBUaGUgbmFtaW5nIG9mIHRoZSBmdW5jdGlvbiBzb3VuZHMgbGlrZSBhbiBpb3ZlYyBpdGVyYXRvciBhbmQgYnVmZmVyIHZlY3RvciBleHRyYWN0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZC4gVGhpcyBpcyBsaWtlbHkgaG93IHdlJ3JlIGV4dHJhY3RpbmcgZGF0YSwgcG9zc2libHkgZnJvbSBhbiBpb3ZlYyBzdHJ1Y3R1cmUsIHRvIGNyZWF0ZSBhIGJ1ZmZlciB2ZWN0b3IgZm9yIEkvTyBvcGVyYXRpb25zLiBTaW5jZSB0aGUgZnVuY3Rpb24gaXMgbG9jYXRlZCBpbiBgbGliL2lvdl9pdGVyLmNgLCBpdCBjb25maXJtcyB0aGUgaXRlcmF0b3IgZGVzaWduLiBJIGV4cGVjdCB0aGF0IGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIHlpZWxkIGRlZXBlciBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgRElPIGFuZCBkYXRhIHRyYW5zZmVyIHdpdGhpbiB0aGUgSS9PIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDU0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MzEuMjA0MTY4Nzk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzU1MTQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9pb3ZfaXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9pb3ZfaXRlci5jPTE4NDk9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTg4Mi0vKipcXG5saWIvaW92X2l0ZXIuYzoxODgzOiAqIGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MgLSBFeHRyYWN0IGJ2ZWNzIGZyb20gYW4gaXRlcmF0b3JcXG5saWIvaW92X2l0ZXIuYy0xODg0LSAqIEBpdGVyOlxcdHRoZSBpdGVyYXRvciB0byBleHRyYWN0IGZyb21cXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTE4OTktICovXFxubGliL2lvdl9pdGVyLmM6MTkwMDpzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXFxubGliL2lvdl9pdGVyLmMtMTkwMS1cXHRcXHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTk1MS19XFxubGliL2lvdl9pdGVyLmM6MTk1MjpFWFBPUlRfU1lNQk9MX0dQTChpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MzEuMjY3NzMxMzU5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODUwNjUyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZyBvbiBLZXkgU3ltYm9scyoqXG5cbk9rYXksIHNvIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpcyBtYXJrZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUExgLiBUaGF04oCZcyBnb29kIGluZm9ybWF0aW9uIGZvciBtZSB0byBzdGFydCB3aXRoLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHMgaW4gdGhlIGtlcm5lbDogYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgKG9idmlvdXNseSksIGBsb29wX3NldF9kaW9gLCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgLCBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAsIGFuZCBmaW5hbGx5LCBgX19ibGtkZXZfZGlyZWN0X0lPYC5cblxuTm93LCBiZWZvcmUgSSBkaWcgaW4gdG9vIGRlZXBseSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBsb29wX3NldF9kaW9gIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gSXQncyBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgYSBkZWFkIGVuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2OTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MzQuNTUyODAxNDU1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc5MDIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29wX3NldF9kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9MTQyOD1zdGF0aWMgaW50IGxvb3Bfc2V0X2NhcGFjaXR5KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDQwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NDE6c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ0Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTE5PXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTMxLVxcdGNhc2UgTE9PUF9TRVRfRElSRUNUX0lPOlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1MzI6XFx0XFx0ZXJyID0gbG9vcF9zZXRfZGlvKGxvLCBhcmcpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MzMtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjM0LjYxNTYwMDAyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTcwOTQxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIElPQ1RMIEFjY2Vzc2liaWxpdHkgYW5kIEJsb2NrIFNpemUqKlxuXG5SaWdodCwgc28gYGxvb3Bfc2V0X2Rpb2AgaXMgZGVmaW5pdGVseSBleHBvc2VkIHRocm91Z2ggYW4gaW9jdGwsIHdoaWNoIEkgc3VzcGVjdGVkLiBUaGF0J3MgZ29vZCB0byBjb25maXJtLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgZnVuY3Rpb24gYWdhaW4uIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJ2xsIG1lbnRhbGx5IHJ1biB0aHJvdWdoIGl0cyBsb2dpYyBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLi4uIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGdvdGNoYXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBwYXRocyB0aGF0IEknbSBvdmVybG9va2luZy4gR290dGEga2VlcCB0aGUgZGV0YWlscyBzdHJhaWdodC4gSXQncyB0aGUgZnVuZGFtZW50YWxzIHRoYXQgc29tZXRpbWVzIGNhdGNoIHlvdSBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MzcuMzcyNjk3OTU0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg1MTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9nZXRfYmxvY2tfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMTY9c3RhdGljIHN0cnVjdCBmaWxlICp6bG9vcF9maWxwX29wZW5fZm10KGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDMzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM0OnN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDM1LVxcdFxcdFxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTEwNzU9c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEwLVxcdFxcdGlmICghemxvLVxcdTAwM2VibG9ja19zaXplKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMTE6XFx0XFx0XFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMi1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTAtXFx0aWYgKCF6bG8tXFx1MDAzZWJsb2NrX3NpemUpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MTpcXHRcXHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1NjpcXHR6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzozNy40MzY1NTY1ODlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYxODQwMjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmVhY2hpbmcgZm9yIHRoZSBCbG9jayBTaXplKipcblxuQWxyaWdodCwgc28gYHpsb29wX2dldF9ibG9ja19zaXplYCBpcyBpbmRlZWQgcmVhY2hhYmxlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIHBpdm90IGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYF9fYmxrZGV2X2RpcmVjdF9JT2AuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYmxvY2sgc2l6ZSB3ZSd2ZSBqdXN0IGNvbmZpcm1lZC4gS25vd2luZyBob3cgZGlyZWN0IEkvTyBpcyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIHRoZSBibG9jayBzaXplIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgYmVoYXZpb3VyLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIHRoYXQgd2UgY2FuIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjQwLjA1NDk2NDI1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwNjg2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19ibGtkZXZfZGlyZWN0X0lPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2ZvcHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9mb3BzLmM9NDY9c3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXFxuLS1cXG5ibG9jay9mb3BzLmMtNTQtXFxuYmxvY2svZm9wcy5jOjU1OnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxcbmJsb2NrL2ZvcHMuYy01Ni1cXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5ibG9jay9mb3BzLmM9MTMxPXN0YXRpYyB2b2lkIGJsa2Rldl9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2ZvcHMuYy0xNzQtXFxuYmxvY2svZm9wcy5jOjE3NTpzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuYmxvY2svZm9wcy5jLTE3Ni1cXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5ibG9jay9mb3BzLmM9Mjk0PXN0YXRpYyB2b2lkIGJsa2Rldl9iaW9fZW5kX2lvX2FzeW5jKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2ZvcHMuYy0zMjEtXFxuYmxvY2svZm9wcy5jOjMyMjpzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoc3RydWN0IGtpb2NiICppb2NiLFxcbmJsb2NrL2ZvcHMuYy0zMjMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svZm9wcy5jPTM5Nj1zdGF0aWMgc3NpemVfdCBibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuYmxvY2svZm9wcy5jLTQzMC1cXHRcXHRpZiAoaXNfc3luY19raW9jYihpb2NiKSlcXG5ibG9jay9mb3BzLmM6NDMxOlxcdFxcdFxcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU9fc2ltcGxlKGlvY2IsIGl0ZXIsIGJkZXYsXFxuYmxvY2svZm9wcy5jLTQzMi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlcyk7XFxuYmxvY2svZm9wcy5jOjQzMzpcXHRcXHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPX2FzeW5jKGlvY2IsIGl0ZXIsIGJkZXYsIG5yX3BhZ2VzKTtcXG5ibG9jay9mb3BzLmMtNDM0LVxcdH0gZWxzZSBpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0FUT01JQykge1xcbi0tXFxuYmxvY2svZm9wcy5jLTQzNi1cXHR9XFxuYmxvY2svZm9wcy5jOjQzNzpcXHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPKGlvY2IsIGl0ZXIsIGJkZXYsIGJpb19tYXhfc2Vncyhucl9wYWdlcykpO1xcbmJsb2NrL2ZvcHMuYy00MzgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo0MC4xMTUwMzcxODRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MzgzMTU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlYWNoaW5nIGEgQmxvY2sgRGV2aWNlKipcblxuQWxyaWdodCwgc28gYF9fYmxrZGV2X2RpcmVjdF9JT2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEdvb2QsIGdvb2QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwYXRoLCBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0IG9mIHdoYXRldmVyIHRyaWdnZXJzIHRoaXMuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcmx5IHRvIGRpdmUgaW50byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgaXNuJ3QgaXQ/IExldCdzIHRyYWNlIGhvdyB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdHMgYXJlIGJlaW5nIHBvcHVsYXRlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHBhZ2UgcGlubmluZyBzdHJhdGVneSBhbmQgcG90ZW50aWFsIGRhdGEgY29weWluZyBvciBtYXBwaW5nIGdvaW5nIG9uLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGludGVyYWN0aW9uIG9mIHRoZSBpdGVyYXRvcnMgaGVyZTsgaG93IG11Y2ggZGF0YSBjYW4gYmUgcHJvY2Vzc2VkIHBlciBpdGVyYXRpb24gYW5kIHdoYXQgaGFwcGVucyBpbiBlZGdlIGNhc2VzLiBXaGF0IEknbSByZWFsbHkgbG9va2luZyBmb3IgaXMgaG93IHRoaXMgaW1wYWN0cyBtZW1vcnkgdXRpbGl6YXRpb24sIGhvdyBtdWNoIGRhdGEgaXMgZ2V0dGluZyBwdWxsZWQgZnJvbSB1c2VyIHNwYWNlIChpZiBhdCBhbGwpLiBBbmQgb2YgY291cnNlLCBJJ20gd2F0Y2hpbmcgZm9yIGFueSBvYnZpb3VzIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLCBsaWtlIGhvdyB0aGUgcGFnZXMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gRE1BLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZSBzeXN0ZW0gY2FuIHByb3Blcmx5IGhhbmRsZSB0aGUgc2l0dWF0aW9uIHdoZW4gSS9PIHNpemVzIGFyZSBsYXJnZXIgdGhhbiB0aGUgcGh5c2ljYWwgbWVtb3J5IGFsbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo0My41NTg4NzMwNzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTk2NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLmM9MTE3Nz12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5ibG9jay9iaW8uYy0xMTg5LSAqIEFsaWducyB0aGUgYmlvIHNpemUgdG8gdGhlIGxlbl9hbGlnbl9tYXNrLCByZWxlYXNpbmcgZXhjZXNzaXZlIGJpbyB2ZWNzIHRoYXRcXG5ibG9jay9iaW8uYzoxMTkwOiAqIF9fYmlvX2lvdl9pdGVyX2dldF9wYWdlcyBtYXkgaGF2ZSBpbnNlcnRlZCwgYW5kIHJldmVydHMgdGhlIHRyaW1tZWQgbGVuZ3RoXFxuYmxvY2svYmlvLmMtMTE5MS0gKiBmb3IgdGhlIG5leHQgaXRlcmF0aW9uLlxcbi0tXFxuYmxvY2svYmlvLmM9MTI0MD1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbi0tXFxuYmxvY2svYmlvLmMtMTI1Ni0vKipcXG5ibG9jay9iaW8uYzoxMjU3OiAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW9cXG5ibG9jay9iaW8uYy0xMjU4LSAqIEBiaW86IGJpbyB0byBhZGQgcGFnZXMgdG9cXG4tLVxcbmJsb2NrL2Jpby5jLTEyNjYtICogbWFwIHRoZW0gaW50byB0aGUga2VybmVsLiBPbiBJTyBjb21wbGV0aW9uLCB0aGUgY2FsbGVyIHNob3VsZCBwdXQgdGhvc2VcXG5ibG9jay9iaW8uYzoxMjY3OiAqIHBhZ2VzLiBGb3IgYnZlYyBiYXNlZCBpdGVyYXRvcnMgYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpIHVzZXMgdGhlIHByb3ZpZGVkXFxuYmxvY2svYmlvLmMtMTI2OC0gKiBidmVjcyByYXRoZXIgdGhhbiBjb3B5aW5nIHRoZW0uIEhlbmNlIGFueW9uZSBpc3N1aW5nIGtpb2NiIGJhc2VkIElPIG5lZWRzXFxuLS1cXG5ibG9jay9iaW8uYy0xMjc4LSAqL1xcbmJsb2NrL2Jpby5jOjEyNzk6aW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuYmxvY2svYmlvLmMtMTI4MC1cXHRcXHRcXHQgICB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjQzLjYxODA4MjMwNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ2ODAzNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJL08gSXRlcmF0aW9uKipcblxuT2theSwgc28gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIEkvTyBmbG93LiBMZXQncyB0cmFjZSB0aGlzIGJhY2suIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBob3cgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIGludGVyYWN0cyB3aXRoIGl0LiBUaGlzIHByb2JhYmx5IGdpdmVzIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgbW92ZW1lbnQgcHJvY2VzcyB3aXRoaW4gdGhlIERpcmVjdCBJL08gY29udGV4dCBhbmQgd2hlcmUgdGhlIHBhZ2UgaW5mb3JtYXRpb24gaXMgYmVpbmcgZXh0cmFjdGVkIG9yIHV0aWxpemVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM0NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjQ2LjU2NDg4OTc0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5MzY1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2Jpb19pdGVyX29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz0yOTg9c3RhdGljIGludCBpb21hcF9kaW9femVybyhjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMzMzLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjMzNDpzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTMzNS1cXHRcXHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBhbGlnbm1lbnQsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz00MDI9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0Ni1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1NDc6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX2Jpb19pdGVyX29uZShpdGVyLCBkaW8sIHBvcywgYWxpZ25tZW50LCBiaW9fb3BmKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01NDgtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjQ2LjY0NTgzMzI3MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzM5NjU1OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGFuZCBEYXRhIE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBpb21hcF9kaW9fYmlvX2l0ZXJfb25lYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGF04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgYW5kIG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBiaW9fbWFwX3VzZXJfaW92YC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gbWFwcGluZyB1c2VyLXNwYWNlIEkvTyB2ZWN0b3JzIChpb3ZzKSB0byB0aGUgdW5kZXJseWluZyBibG9jayBJL08gKGJpbykgc3RydWN0dXJlLCBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbWFwcGluZyBhbmQgZGF0YSBtb3ZlbWVudCBsb2dpYyB3aWxsIHJlc2lkZSwgYW5kIHdoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyByZWxhdGVkIHRvIGRpcmVjdCBJL08gKERJTykgbWlnaHQgYmUgZm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODUxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6NDkuMzg1NDk1MTEzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODE3NDEzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX21hcF91c2VyX2lvdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLW1hcC5jPTE1MD1zdGF0aWMgaW50IGJpb19jb3B5X3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHJxX21hcF9kYXRhICptYXBfZGF0YSxcXG4tLVxcbmJsb2NrL2Jsay1tYXAuYy0yNTktXFxuYmxvY2svYmxrLW1hcC5jOjI2MDpzdGF0aWMgaW50IGJpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuYmxvY2svYmxrLW1hcC5jLTI2MS1cXHRcXHRnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmJsb2NrL2Jsay1tYXAuYz00OTk9aW50IGJsa19ycV9tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4tLVxcbmJsb2NrL2Jsay1tYXAuYy01MzQtXFx0XFx0ZWxzZVxcbmJsb2NrL2Jsay1tYXAuYzo1MzU6XFx0XFx0XFx0cmV0ID0gYmlvX21hcF91c2VyX2lvdihycSwgXFx1MDAyNmksIGdmcF9tYXNrKTtcXG5ibG9jay9ibGstbWFwLmMtNTM2LVxcdFxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6NDkuNzY3MjQ0ODAzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTM5ODk4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBEaXJlY3QgSU8gd2l0aCBCbG9jayBEZXZpY2VzKipcblxuT2theSwgaXQgc2VlbXMgdGhhdCBgYmlvX21hcF91c2VyX2lvdmAgaXMgZGVmaW5pdGl2ZWx5IHJlYWNoYWJsZSwgd2hpY2ggZ2l2ZXMgdXMgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBkaXJlY3QgSS9PIHBhdGguIE15IGZvY3VzIGlzIG5vdyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLCBgbG9vcF9zZXRfZGlvYCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgLCBgX19ibGtkZXZfZGlyZWN0X0lPYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludCwgYGJpb19tYXBfdXNlcl9pb3ZgLiBUaGlzIHN1aXRlIG9mIGZ1bmN0aW9ucyBsaWtlbHkgaWxsdXN0cmF0ZXMgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gdXNlciBzcGFjZSBJL08gdmVjdG9ycyB0byB0aGUgYmxvY2sgZGV2aWNlIGxldmVsLCBzbyB0aGF0IHNob3VsZCBiZSB0aGUgaGVhcnQgb2YgbXkgYW5hbHlzaXMuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGVudmlyb25tZW50LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEdpdmVuIHRoaXMgaXMgbGlrZWx5IGEgem9uZWQgYmxvY2sgZGV2aWNlLCBJIHdpbGwgYXNzdW1lIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW5jbHVkZSBgQkxLX0RFVl9MT09QYCwgYEJMS19ERVZfWk9ORURfTE9PUGAgYW5kIGBGU19JT01BUGAuIFNwZWNpZmljYWxseSwgSSBoYXZlIHRvIGRldGVybWluZSBpZiBgQkxLX0RFVl9aT05FRF9MT09QYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIGZvciB0aGlzIHNwZWNpZmljIHNldHVwIGFuZCBJIHdpbGwgd29yayB0aHJvdWdoIHRoYXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMxMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo1My42NjEyNDAzMzlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTgwMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXFx0dHJpc3RhdGUgXFxcIlpvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo1My43MzIyMzI4NDFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MTk3MzUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqVmVyaWZ5aW5nIERldmljZSBUeXBlIENvbnN0YW50cyoqXG5cbkFscmlnaHQsIGNvbmZpcm1lZCwgYEJMS19ERVZfWk9ORURfTE9PUGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbnN0YW50IHdlJ3JlIHVzaW5nLiBHb29kLiBMZXQncyBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aG91Z2gsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEJMS19ERVZfTE9PUGAgaXMgYWxzbyBhY2N1cmF0ZS4gR290dGEgbWFpbnRhaW4gdGhhdCByaWdvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4ODUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo1Ni45MTQyMTAxOThaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NjM4NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xNDA9Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0My1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTQ0OmNvbmZpZyBCTEtfREVWX0xPT1BcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVxcdHRyaXN0YXRlIFxcXCJMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNzgtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODAtXFx0aW50IFxcXCJOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo1Ni45ODE4NTY2MTFaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2OTkwNDk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2VybmVsIE1vZHVsZSBJZGVudGlmaWNhdGlvbioqXG5cblJpZ2h0LCBgQkxLX0RFVl9MT09QYCAqZG9lcyogc2VlbSB0byBiZSB0aGUgcmVsZXZhbnQgbW9kdWxlIGZvciB0aGlzLiBJJ3ZlIHNlZW4gdGhhdCBjb25maWd1cmF0aW9uIGJlZm9yZSBpbiBzaW1pbGFyIGNvbnRleHRzLCBhbmQgaXQgYWxpZ25zIHdpdGggd2hhdCBJJ20gZXhwZWN0aW5nLiBJdCdzIHRoZSBsb2dpY2FsIGNob2ljZSBoZXJlLlxuXG5Ob3csIGxldCdzIGp1c3QgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGVsc2UsIGFzIGEgbWF0dGVyIG9mIGR1ZSBkaWxpZ2VuY2UuIEkgd2FudCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbi4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYEZTX0lPTUFQYCBhbHNvIHBsYXlzIGEgcm9sZSBpbiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgaXQgKm1pZ2h0KiBiZSByZWxldmFudCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIGl0cyBwcm9wZXJ0aWVzIGluIHRoaXMgc2l0dWF0aW9uIHRvIGNvbmZpcm0gd2hldGhlciBpdCBuZWVkcyB0byBiZSBpbmNsdWRlZC4gSnVzdCBhIHF1aWNrIGNoZWNrIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTg2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDQ6MDAuMTUxNzY0OTczWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjgwOTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfSU9NQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4tLVxcbmZzL0tjb25maWctMTctXFxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDQ6MDAuMjE4NTgyNTc2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNDkxNjc1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgRmlsZSBTeXN0ZW0gTWFwcGluZyoqXG5cblJpZ2h0LCBgRlNfSU9NQVBgIGlzIGRlZmluaXRlbHkgdGhlIGNvcnJlY3QgYXBwcm9hY2ggaGVyZS4gTWFrZXMgcGVyZmVjdCBzZW5zZSBnaXZlbiB0aGUgY29udGV4dC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgZWxzZSB0aGF0J3MgY3JpdGljYWwgaW4gcmVsYXRpb24gdG8gaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJMT0NLYCBpcyB1bmRlcnN0b29kIGNvcnJlY3RseSBpbiB0aGlzIHdob2xlIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ4MSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQ0OjAyLjQ2Nzc1NDQ3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc4NDk2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnLTQtI1xcbmJsb2NrL0tjb25maWc6NTptZW51Y29uZmlnIEJMT0NLXFxuYmxvY2svS2NvbmZpZy02LSAgICAgICBib29sIFxcXCJFbmFibGUgdGhlIGJsb2NrIGxheWVyXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmJsb2NrL0tjb25maWc9Mjc9aWYgQkxPQ0tcXG5ibG9jay9LY29uZmlnLTI4LVxcbmJsb2NrL0tjb25maWc6Mjk6Y29uZmlnIEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxcbmJsb2NrL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiTGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnPTIxND1jb25maWcgQkxLX1BNXFxuLS1cXG5ibG9jay9LY29uZmlnLTIxNy0jIGRvIG5vdCB1c2UgaW4gbmV3IGNvZGVcXG5ibG9jay9LY29uZmlnOjIxODpjb25maWcgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcXG5ibG9jay9LY29uZmlnLTIxOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQ0OjAyLjUzNjU0OTQ4M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjM0NzI4NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSB0aGlua2VyOlxuXG4qKlJlYWNoaW5nIGEgQ29uY2x1c2lvbiBhbmQgUGxhbm5pbmcgdGhlIE5leHQgU3RlcCoqXG5cblllcywgSSdtIGNvbmZpZGVudCB0aGF0IGBCTE9DS2AgaXMgdGhlIGNvcnJlY3QgYW5zd2VyLiBUaGUgaW5pdGlhbCBhbmFseXNpcyBob2xkcy4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY3J1Y2lhbCBkZXRhaWwsIHNwZWNpZmljYWxseSB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYHpsb29wX2N0bF9hZGRgLiBUaGlzIHdpbGwgYmUgbXkgbmV4dCBhcmVhIG9mIGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc5NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQ0OjA1LjE3MTI4MjU4NloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2NTUyOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTExNjU9c3RhdGljIGJvb2wgemxvb3BfZGV2X2V4aXN0cyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE4My1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE4NDpzdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExODUte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE2NTg9c3RhdGljIHNzaXplX3Qgemxvb3BfY3RsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZixcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjk2LVxcdGNhc2UgWkxPT1BfQ1RMX0FERDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY5NzpcXHRcXHRyZXQgPSB6bG9vcF9jdGxfYWRkKFxcdTAwMjZvcHRzKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY5OC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDQ6MDUuMjM1OTUxMDNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNjY1MDQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgUmVhY2hhYmlsaXR5KipcblxuUmlnaHQsIHNvIGB6bG9vcF9jdGxfYWRkYCAqaXMqIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggdGhhdCBgL2Rldi96bG9vcC1jb250cm9sYCB3cml0ZS4gTWFrZXMgc2Vuc2U7IHRoYXQncyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZ2V0IGF0IGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjYWxsIGNoYWluLCB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBhbmQgdmVyaWZ5IGlmIGl0J3MgZXhwb3NlZCwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHRocm91Z2ggYW55IG9mIHRoZSBleGlzdGluZyBpbnRlcmZhY2VzLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSBEaXJlY3QgSS9PIChESU8pIGFsaWdubWVudCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgbG9vcCBkcml2ZXIgYW5kIHdoZXRoZXIgdGhlcmUncyBhbiBleGlzdGluZyBtZWNoYW5pc20gdG8gbW9kaWZ5IHRob3NlIHBhcmFtZXRlcnMuIFBlcmhhcHMgaXQncyBjYWxsZWQgaW50ZXJuYWxseSBieSBzb21lIG90aGVyIGNvbnRyb2wgb3BlcmF0aW9uLCBvciBleHBvc2VkIGJ5IGFub3RoZXIgSU9DVEwuIEkgbmVlZCB0byBnZXQgdGhpcyBuYWlsZWQgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0NDowOC40NTI2MDYyNjRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTM4NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9NDM5PXN0YXRpYyB2b2lkIGxvb3BfcmVyZWFkX3BhcnRpdGlvbnMoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1MC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0NTE6c3RhdGljIHZvaWQgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz01MTY9c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTIzLVxcdFxcdGxvLVxcdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XFxuZHJpdmVycy9ibG9jay9sb29wLmM6NTI0OlxcdGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQobG8pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQ0OjA4LjUxNTc1Mzk4OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzE1NDk5NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlYWNoaW5nIEtleSBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgc28gYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAgKmlzKiByZWFjaGFibGUsIHRoYXQncyBnb29kIG5ld3MuIFRoYXQgY29uZmlybXMgdGhlIGluaXRpYWwgc2V0dXAgaXMgd29ya2luZyBhcyBleHBlY3RlZC4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcml0aWNhbDogaXMgYGxvb3Bfc2V0X2RtYV9saW1pdGAgYWN0dWFsbHkgcmVhY2hhYmxlIGZyb20gdGhpcyBwb2ludD8gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyBJJ20gZm9jdXNpbmcgbXkgbWVudGFsIGVuZXJneSBvbiBkZXRlcm1pbmluZyAqdGhhdCogcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0NDoxMS4yMzEyNTkwMzlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTI4NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3Bfc2V0X2RtYV9saW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz05NDc9c3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NTQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6OTU1OnN0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTU2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTk2OD1zdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTg4LVxcdGxpbS1cXHUwMDNlaW9fbWluID0gYnNpemU7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6OTg5OlxcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgbGltKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05OTAtXFx0bGltLVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDQxPXN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2NC1cXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ2NTpcXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjYtXFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlLCBcXHUwMDI2bGltKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDQ6MTEuMjkyNzk0Mjk1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3OTgyNTY2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIExvb3AgRHJpdmVyJ3MgRE1BIExpbWl0KipcblxuT2theSwgaXQncyBjbGVhcjogYGxvb3Bfc2V0X2RtYV9saW1pdGAgaXMgaW5kZWVkIGEgcmVhY2hhYmxlIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIHN1YnN5c3RlbS4gSSd2ZSBjb25maXJtZWQgdGhhdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgaW50ZXJhY3Rpb25zIHN1cnJvdW5kaW5nIGl0LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyB0aHJvdWdoOlxuXG4qICAgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIOKAkyBUaGlzIG9uZSBpcyBwcm9iYWJseSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgYmlvIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlcy5cbiogICBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2Ag4oCTIEkgc3VzcGVjdCB0aGlzIHBsYXlzIGEgcm9sZSBpbiBleHRyYWN0aW5nIGRhdGEgZnJvbSBpb3ZlY3MgaW50byBibG9jayB2ZWN0b3JzLlxuKiAgIGBsb29wX3NldF9kaW9gIOKAkyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIGluIGRpcmVjdGx5IGludGVyYWN0aW5nIHdpdGggdGhlIGJsb2NrIGRldmljZS5cbiogICBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgLSBFc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHMgb2YgZGlyZWN0IElPLlxuKiAgIGBsb29wX3NldF9kbWFfbGltaXRgIOKAkyBPZiBjb3Vyc2UsIHRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24uXG4qICAgYHpsb29wX2dldF9ibG9ja19zaXplYCDigJMgSSB3aWxsIGhhdmUgdG8gbG9vayBhdCBob3cgdGhlIHpvbmVkIGxvb3AncyBibG9jayBzaXplIGFmZmVjdHMgdGhlIGFuYWx5c2lzLlxuKiAgIGB6bG9vcF9jdGxfYWRkYCDigJMgSXMgdGhlIGNvbnRyb2wgZnVuY3Rpb24uXG4qICAgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIOKAkyBBbm90aGVyIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZGlyZWN0IElPIHBhdGguXG4qICAgYF9fYmxrZGV2X2RpcmVjdF9JT2Ag4oCTIFRoaXMgaXMgdGhlIGNvcmUgZGlyZWN0IEkvTyBlbnRyeSBwb2ludCBhdCB0aGUgYmxvY2sgbGF5ZXIuXG4qICAgYGJpb19tYXBfdXNlcl9pb3ZgIOKAkyBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gdGhpcyBmb3IgdW5kZXJzdGFuZGluZyBtYXBwaW5nIHVzZXIgZGF0YSBpbnRvIGJpby5cblxuQWxzbywgSSBoYXZlIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlOlxuXG4qICAgYEJMS19ERVZfTE9PUGAgYW5kIGBCTEtfREVWX1pPTkVEX0xPT1BgIC0gVGhlc2UgYXJlIGNsZWFybHkgbmVjZXNzYXJ5IGZvciB0aGUgbG9vcCBkZXZpY2UgaXRzZWxmLCBhcyB3ZWxsIGFzIHRoZSB6b25lZCB2YXJpYW50LCBvYnZpb3VzbHkuXG4qICAgYEZTX0lPTUFQYCDigJMgVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgc2VlbXMgdG8gdGllIGluIHRoZSBJL08gbWFwcGluZy5cbiogICBgQkxPQ0tgIC0gVGhpcyBpcyB0aGUgcGFyZW50IGJsb2NrIGRyaXZlci5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGJlZ2luIHNldHRpbmcgdXAgYW5kIGNoZWNraW5nIHRoZSBhbmFseXNpcyByZXN1bHRzIGJhc2VkIG9uIHRoZSBwYXRoZmluZGluZy4gTGV0J3MgbW92ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxODEsIk91dHB1dFRva2VucyI6Mjk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQ0OjE4LjA5MTA1NDgzN1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTYxNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2lvdl9pdGVyX2dldF9wYWdlc1wiLFxuICAgIFwiaW92X2l0ZXJfZXh0cmFjdF9idmVjc1wiLFxuICAgIFwibG9vcF9zZXRfZGlvXCIsXG4gICAgXCJsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50XCIsXG4gICAgXCJsb29wX3NldF9kbWFfbGltaXRcIixcbiAgICBcInpsb29wX2dldF9ibG9ja19zaXplXCIsXG4gICAgXCJ6bG9vcF9jdGxfYWRkXCIsXG4gICAgXCJpb21hcF9kaW9fYmlvX2l0ZXJfb25lXCIsXG4gICAgXCJfX2Jsa2Rldl9kaXJlY3RfSU9cIixcbiAgICBcImJpb19tYXBfdXNlcl9pb3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGJpbyBoYW5kbGluZyBhbmQgZGlyZWN0IEkvTyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJdCBhZGRzIGBtZW1fYWxpZ25fbWFza2AgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgdG8gZW5mb3JjZSBETUEgYWxpZ25tZW50IGZvciBkaXJlY3QgSS9PLiBJdCBhbHNvIHVwZGF0ZXMgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gcHJvcGVybHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PLCBhbmQgdXBkYXRlcyBgaW9tYXBgIGFuZCBgYmxrZGV2YCBkaXJlY3QgSS9PIHBhdGhzIHRvIHBhc3MgdGhlIGNvcnJlY3QgYWxpZ25tZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2lvdl9pdGVyX2dldF9wYWdlc1wiLFxuICAgIFwiaW92X2l0ZXJfZXh0cmFjdF9idmVjc1wiLFxuICAgIFwibG9vcF9zZXRfZGlvXCIsXG4gICAgXCJsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50XCIsXG4gICAgXCJsb29wX3NldF9kbWFfbGltaXRcIixcbiAgICBcInpsb29wX2dldF9ibG9ja19zaXplXCIsXG4gICAgXCJ6bG9vcF9jdGxfYWRkXCIsXG4gICAgXCJpb21hcF9kaW9fYmlvX2l0ZXJfb25lXCIsXG4gICAgXCJfX2Jsa2Rldl9kaXJlY3RfSU9cIixcbiAgICBcImJpb19tYXBfdXNlcl9pb3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGJpbyBoYW5kbGluZyBhbmQgZGlyZWN0IEkvTyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJdCBhZGRzIGBtZW1fYWxpZ25fbWFza2AgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgdG8gZW5mb3JjZSBETUEgYWxpZ25tZW50IGZvciBkaXJlY3QgSS9PLiBJdCBhbHNvIHVwZGF0ZXMgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gcHJvcGVybHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PLCBhbmQgdXBkYXRlcyBgaW9tYXBgIGFuZCBgYmxrZGV2YCBkaXJlY3QgSS9PIHBhdGhzIHRvIHBhc3MgdGhlIGNvcnJlY3QgYWxpZ25tZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrfzz2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 04:12:34 +0000 UTC FinishedAt: 2026-07-21 04:44:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8173f7e2ce67e6ca1d4763f3da14e5b01ce77456", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP", "FS_IOMAP", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8173f7e2ce67e6ca1d4763f3da14e5b01ce77456", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP", "BLK_DEV_ZONED_LOOP", "FS_IOMAP", "BLOCK" ], "series_id": "aada9eae-745c-466b-8566-034bff742b41" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bio_iov_iter_get_pages", "iov_iter_extract_bvecs", "loop_set_dio", "loop_update_dio_alignment", "loop_set_dma_limit", "zloop_get_block_size", "zloop_ctl_add", "iomap_dio_bio_iter_one", "__blkdev_direct_IO", "bio_map_user_iov" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfYnZlY3MmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZGlvJiMzNDssCiAgICAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZG1hX2xpbWl0JiMzNDssCiAgICAmIzM0O3psb29wX2dldF9ibG9ja19zaXplJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF9hZGQmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX2Jpb19pdGVyX29uZSYjMzQ7LAogICAgJiMzNDtfX2Jsa2Rldl9kaXJlY3RfSU8mIzM0OywKICAgICYjMzQ7YmlvX21hcF91c2VyX2lvdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGJpbyBoYW5kbGluZyBhbmQgZGlyZWN0IEkvTyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJdCBhZGRzIGBtZW1fYWxpZ25fbWFza2AgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgdG8gZW5mb3JjZSBETUEgYWxpZ25tZW50IGZvciBkaXJlY3QgSS9PLiBJdCBhbHNvIHVwZGF0ZXMgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gcHJvcGVybHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PLCBhbmQgdXBkYXRlcyBgaW9tYXBgIGFuZCBgYmxrZGV2YCBkaXJlY3QgSS9PIHBhdGhzIHRvIHBhc3MgdGhlIGNvcnJlY3QgYWxpZ25tZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFlOTlkYzU3NjY1MjBmMjc4OWZmOWJlNzYyNDQ3NmUyMjM2MDA2ZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAwNDo0Mjo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCBmMmE1ZjRkMGE5NjcyYi4uZmFhZDQxYTcyYWM3N2YgMTAwNjQ0XG4tLS0gYS9ibG9jay9iaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmlvLmNcbkBAIC0xMjIwLDEwICYjNDM7MTIyMCw0NSBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0RFQlVHX0tFUk5FTFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnZlY19pdGVyIGl0ZXI7XG4mIzQzO1x0c3RydWN0IGJpb192ZWMgYnY7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ29ycmVjdCBjYWxsZXJzIG5ldmVyIGJyZWFrIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLCBzbyB0aGlzXG4mIzQzO1x0ICogZXhoYXVzdGl2ZSBjaGVjayBpcyBvbmx5IHBhaWQgZm9yIGluIGRlYnVnIGJ1aWxkcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9tcF9idmVjKGJ2LCBiaW8tXHUwMDNlYmlfaW9fdmVjLCBpdGVyLCBiaW8tXHUwMDNlYmlfaXRlcilcbiYjNDM7XHRcdGlmICgoYnYuYnZfb2Zmc2V0IHwgYnYuYnZfbGVuKSBcdTAwMjYgbWVtX2FsaWduX21hc2spXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGZvcndhcmQgdGhlIGJpb192ZWMgYXMtaXMsIHNvIElURVJfQlZFQyBjYWxsZXJzIG11c3QgcHJvdmlkZVxuJiM0MztcdCAqIHNlZ21lbnRzIGFscmVhZHkgYWxpZ25lZCB0byB0aGUgZGV2aWNlJiMzOTtzIERNQSBhbGlnbm1lbnQuIFRoZSBvbmx5XG4mIzQzO1x0ICogdW5jaGVja2VkIHVzZXItY29udHJvbGxhYmxlIG9mZnNldCB0aGF0IHJlYWNoZXMgaGVyZSBpcyBhbiBpb191cmluZ1xuJiM0MztcdCAqIHJlZ2lzdGVyZWQgYnVmZmVyIHdoZXJlIGp1c3QgdGhlIGZpcnN0IHNlZ21lbnQgY2FuIGJlIHVuYWxpZ25lZFxuJiM0MztcdCAqICh0aGUgcmVzdCBpcyB2aXJ0dWFsbHkgY29udGlndW91cyksIHNvIGNoZWNraW5nIG9ubHkgdGhhdCBvbmUgaXNcbiYjNDM7XHQgKiBzdWZmaWNpZW50IHRvIGtub3cgaWYgdGhlIGVudGlyZSB2ZWN0b3IgaXMgdmFsaWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuICEobXBfYnZlY19pdGVyX29mZnNldChiaW8tXHUwMDNlYmlfaW9fdmVjLCBiaW8tXHUwMDNlYmlfaXRlcikgXHUwMDI2XG4mIzQzO1x0XHRcdFx0XHRcdFx0bWVtX2FsaWduX21hc2spO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKipcbiAgKiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzIC0gYWRkIHVzZXIgb3Iga2VybmVsIHBhZ2VzIHRvIGEgYmlvXG4gICogQGJpbzogYmlvIHRvIGFkZCBwYWdlcyB0b1xuICAqIEBpdGVyOiBpb3YgaXRlcmF0b3IgZGVzY3JpYmluZyB0aGUgcmVnaW9uIHRvIGJlIGFkZGVkXG4mIzQzOyAqIEBtZW1fYWxpZ25fbWFzazogdGhlIG1hc2sgdGhlIHNvdXJjZSBhZGRyZXNzIGFuZCBsZW5ndGggbXVzdCBiZSBhbGlnbmVkIHRvLFxuJiM0MzsgKlx0MCBmb3Igbm8gcmVxdWlyZW1lbnRcbiAgKiBAbGVuX2FsaWduX21hc2s6IHRoZSBtYXNrIHRvIGFsaWduIHRoZSB0b3RhbCBzaXplIHRvLCAwIGZvciBhbnkgbGVuZ3RoXG4gICpcbiAgKiBUaGlzIHRha2VzIGVpdGhlciBhbiBpdGVyYXRvciBwb2ludGluZyB0byB1c2VyIG1lbW9yeSwgb3Igb25lIHBvaW50aW5nIHRvXG5AQCAtMTI0Miw3ICYjNDM7MTI3Nyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gICogaXMgcmV0dXJuZWQgb25seSBpZiAwIHBhZ2VzIGNvdWxkIGJlIHBpbm5lZC5cbiAgKi9cbiBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi1cdFx0XHQgICB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxuIHtcbiBcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBmbGFncyA9IDA7XG4gXG5AQCAtMTI1MSw2ICYjNDM7MTI4NiwxMCBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKSB7XG4gXHRcdGJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuQEAgLTEyNjUsOCAmIzQzOzEzMDQsMTkgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRcdHJldCA9IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoaXRlciwgYmlvLVx1MDAzZWJpX2lvX3ZlYyxcbiBcdFx0XHRcdEJJT19NQVhfU0laRSAtIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsXG4tXHRcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfdmNudCwgYmlvLVx1MDAzZWJpX21heF92ZWNzLCBmbGFncyk7XG4mIzQzO1x0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyxcbiYjNDM7XHRcdFx0XHRtZW1fYWxpZ25fbWFzaywgZmxhZ3MpO1xuIFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBIG1pc2FsaWduZWQgdmVjdG9yIGZhaWxzIHRoZSB3aG9sZSBJL08uICBSZWxlYXNlIGFueVxuJiM0MztcdFx0XHQgKiBwYWdlcyBwaW5uZWQgYnkgZWFybGllciBpdGVyYXRpb25zIGJlZm9yZSByZXR1cm5pbmdcbiYjNDM7XHRcdFx0ICogc2luY2UgdGhpcyBiaW8gd29uJiMzOTt0IGJlIHN1Ym1pdHRlZCB0byByZWxlYXNlIHRoZW0uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAocmV0ID09IC1FSU5WQUwpIHtcbiYjNDM7XHRcdFx0XHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRiaW9fY2xlYXJfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7XG4mIzQzO1x0XHRcdFx0YmlvLVx1MDAzZWJpX3ZjbnQgPSAwO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTM3Nyw3ICYjNDM7MTQyNyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRzc2l6ZV90IHJldDtcbiBcbiBcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXHUwMDNlYmlfaW9fdmVjICYjNDM7IDEsIGxlbixcbi1cdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MgLSAxLCAwKTtcbiYjNDM7XHRcdFx0XHRcdTAwMjZiaW8tXHUwMDNlYmlfdmNudCwgYmlvLVx1MDAzZWJpX21heF92ZWNzIC0gMSwgMCwgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4gXHRcdFx0aWYgKCFiaW8tXHUwMDNlYmlfdmNudCkge1xuIFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWFwLmMgYi9ibG9jay9ibGstbWFwLmNcbmluZGV4IDc2ODU0OWYxOWY5N2VjLi5jOTUzNWVmZTFhOTEzYyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLW1hcC5jXG5AQCAtMjc0LDcgJiM0MzsyNzQsNyBAQCBzdGF0aWMgaW50IGJpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHQgKiBObyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9uIG91ciBwYXJ0IHRvIHN1cHBvcnQgYXJiaXRyYXJ5XG4gXHQgKiBwYXNzdGhyb3VnaCBjb21tYW5kcy5cbiBcdCAqL1xuLVx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIDApO1xuJiM0MztcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCAwLCAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcdHJldCA9IGJsa19ycV9hcHBlbmRfYmlvKHJxLCBiaW8pO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2ZvcHMuYyBiL2Jsb2NrL2ZvcHMuY1xuaW5kZXggMTU3ODNhNjE4MGRlYzEuLmU1MTlkN2Y0M2IzMTA2IDEwMDY0NFxuLS0tIGEvYmxvY2svZm9wcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9mb3BzLmNcbkBAIC00Niw3ICYjNDM7NDYsNyBAQCBzdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLFxuIHN0YXRpYyBpbmxpbmUgaW50IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLFxuIFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4ge1xuLVx0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLFxuJiM0MztcdHJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpLFxuIFx0XHRcdGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpIC0gMSk7XG4gfVxuIFxuQEAgLTIxOCw3ICYjNDM7MjE4LDcgQEAgc3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFxuIFx0XHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldik7XG4gXHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG4tXHRcdFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIEJMS19TVFNfSU9FUlIpO1xuJiM0MztcdFx0XHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgZXJybm9fdG9fYmxrX3N0YXR1cyhyZXQpKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpIHtcbkBAIC0yMzgsOCAmIzQzOzIzOCwxMCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdH1cbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfSEFTX01FVEFEQVRBKSB7XG4gXHRcdFx0cmV0ID0gYmlvX2ludGVncml0eV9tYXBfaXRlcihiaW8sIGlvY2ItXHUwMDNlcHJpdmF0ZSk7XG4tXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4tXHRcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0XHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG4mIzQzO1x0XHRcdFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHRpZiAoaXNfcmVhZCkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDMxMGRlMDQ2M2JlYjE0Li41ZmU2MWQ1NDJmOGI3NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTU0LDYgJiM0Mzs1NCw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXG4gXHRzdHJ1Y3QgZmlsZVx0KmxvX2JhY2tpbmdfZmlsZTtcbiBcdHVuc2lnbmVkIGludFx0bG9fbWluX2Rpb19zaXplO1xuJiM0MztcdHVuc2lnbmVkIGludFx0bG9fZGlvX21lbV9hbGlnbjtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKmxvX2RldmljZTtcbiBcbiBcdGdmcF90XHRcdG9sZF9nZnBfbWFzaztcbkBAIC00NDcsMjYgJiM0Mzs0NDgsMzcgQEAgc3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0XHRcdF9fZnVuY19fLCBsby1cdTAwM2Vsb19udW1iZXIsIGxvLVx1MDAzZWxvX2ZpbGVfbmFtZSwgcmMpO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4mIzQzO3N0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKnNiX2JkZXYgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2O1xuIFx0c3RydWN0IGtzdGF0IHN0O1xuIFxuIFx0Lypcbi1cdCAqIFVzZSB0aGUgbWluaW1hbCBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC5cbiYjNDM7XHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZ1xuJiM0MztcdCAqIHJlcXVlc3QmIzM5O3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xuJiM0MztcdCAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJiMzOTtzIGRtYV9hbGlnbm1lbnQgd2hlblxuJiM0MztcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbiBcdCAqL1xuIFx0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZmaWxlLVx1MDAzZWZfcGF0aCwgXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSlcbi1cdFx0cmV0dXJuIHN0LmRpb19vZmZzZXRfYWxpZ247XG4mIzQzO1x0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4mIzQzO1x0XHRsby1cdTAwM2Vsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduO1xuJiM0MztcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyB3b3VsZG4mIzM5O3QgYmUgbmVlZGVkLCBidXQgYXMgb2YgTGludXggNi4xMyBvbmx5XG4gXHQgKiBhIGhhbmRmdWwgb2YgZmlsZSBzeXN0ZW1zIHN1cHBvcnQgdGhlIFNUQVRYX0RJT0FMSUdOIGZsYWcuXG4gXHQgKi9cbi1cdGlmIChzYl9iZGV2KVxuLVx0XHRyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4tXHRyZXR1cm4gU0VDVE9SX1NJWkU7XG4mIzQzO1x0aWYgKHNiX2JkZXYpIHtcbiYjNDM7XHRcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHNiX2JkZXYpO1xuJiM0MztcdFx0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuJiM0MztcdGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBTRUNUT1JfU0laRSAtIDE7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGlzX2xvb3BfZGV2aWNlKHN0cnVjdCBmaWxlICpmaWxlKVxuQEAgLTUwOSw3ICYjNDM7NTIxLDcgQEAgc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0XHRcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayBcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XG4gXHRpZiAobG8tXHUwMDNlbG9fYmFja2luZ19maWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fRElSRUNUKVxuIFx0XHRsby1cdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XG4tXHRsby1cdTAwM2Vsb19taW5fZGlvX3NpemUgPSBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShsbyk7XG4mIzQzO1x0bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG5AQCAtOTQwLDYgJiM0Mzs5NTIsMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRyZXR1cm4gU0VDVE9SX1NJWkU7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBsb29wX3NldF9kbWFfbGltaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSB1c2VyIHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzb1xuJiM0MztcdCAqIHRyYWNrIHRoZSBiYWNraW5nJiMzOTtzIERNQSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYXMgdGhlIG1vZGUgaXMgdG9nZ2xlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX0RJUkVDVF9JTylcbiYjNDM7XHRcdGxpbS1cdTAwM2VkbWFfYWxpZ25tZW50ID0gbWF4X3QodW5zaWduZWQgaW50LCBsby1cdTAwM2Vsb19kaW9fbWVtX2FsaWduLFxuJiM0MztcdFx0XHRcdFx0ICAgU0VDVE9SX1NJWkUgLSAxKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsaW0tXHUwMDNlZG1hX2FsaWdubWVudCA9IFNFQ1RPUl9TSVpFIC0gMTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHR1bnNpZ25lZCBpbnQgYnNpemUpXG4ge1xuQEAgLTk2MSw2ICYjNDM7OTg2LDcgQEAgc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbiBcdGxpbS1cdTAwM2Vsb2dpY2FsX2Jsb2NrX3NpemUgPSBic2l6ZTtcbiBcdGxpbS1cdTAwM2VwaHlzaWNhbF9ibG9ja19zaXplID0gYnNpemU7XG4gXHRsaW0tXHUwMDNlaW9fbWluID0gYnNpemU7XG4mIzQzO1x0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBsaW0pO1xuIFx0bGltLVx1MDAzZWZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX1JPVEFUSU9OQUwpO1xuIFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vmc3luYyBcdTAwMjZcdTAwMjYgIShsby1cdTAwM2Vsb19mbGFncyBcdTAwMjYgTE9fRkxBR1NfUkVBRF9PTkxZKSlcbiBcdFx0bGltLVx1MDAzZWZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xuQEAgLTE0MTYsNiAmIzQzOzE0NDIsNyBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRib29sIHVzZV9kaW8gPSAhIWFyZztcbiBcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiYjNDM7XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcbiBcdGlmIChsby1cdTAwM2Vsb19zdGF0ZSAhPSBMb19ib3VuZClcbiBcdFx0cmV0dXJuIC1FTlhJTztcbkBAIC0xNDM0LDYgJiM0MzsxNDYxLDkgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbiBcdGVsc2VcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2PSB+TE9fRkxBR1NfRElSRUNUX0lPO1xuJiM0MztcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuJiM0MztcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgXHUwMDI2bGltKTtcbiYjNDM7XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNTVlZWI2YWFjMGVhM2IuLmY5N2EyMGNmZGI3Y2U2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbkBAIC0xNDQsNiAmIzQzOzE0NCw3IEBAIHN0cnVjdCB6bG9vcF9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50XHRcdG5yX2NvbnZfem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bWF4X29wZW5fem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdFx0YmxvY2tfc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0ZGlvX21lbV9hbGlnbjtcbiBcbiBcdHNwaW5sb2NrX3RcdFx0b3Blbl96b25lc19sb2NrO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0b3Blbl96b25lc19scnVfbGlzdDtcbkBAIC0xMDM3LDIwICYjNDM7MTAzOCwzMCBAQCBzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbiBcdHN0cnVjdCBrc3RhdCBzdDtcbiBcbiBcdC8qXG4tXHQgKiBJZiB0aGUgRlMgYmxvY2sgc2l6ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIDRLLCB1c2UgdGhhdCBhcyB0aGVcbi1cdCAqIGRldmljZSBibG9jayBzaXplLiBPdGhlcndpc2UsIGZhbGxiYWNrIHRvIHRoZSBGUyBkaXJlY3QgSU8gYWxpZ25tZW50XG4tXHQgKiBjb25zdHJhaW50IGlmIHRoYXQgaXMgcHJvdmlkZWQsIGFuZCB0byB0aGUgRlMgdW5kZXJseWluZyBkZXZpY2Vcbi1cdCAqIHBoeXNpY2FsIGJsb2NrIHNpemUgaWYgdGhlIGRpcmVjdCBJTyBhbGlnbm1lbnQgaXMgdW5rbm93bi5cbiYjNDM7XHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nXG4mIzQzO1x0ICogcmVxdWVzdCYjMzk7cyBiaW9fdmVjIGlzIGZvcndhcmRlZCB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28gaXRzXG4mIzQzO1x0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UmIzM5O3MgZG1hX2FsaWdubWVudCB3aGVuXG4mIzQzO1x0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxuIFx0ICovXG4tXHRpZiAoZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgXHUwMDNjPSBTWl80Sylcbi1cdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBmaWxlX2lub2RlKHpvbmUtXHUwMDNlZmlsZSktXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbi1cdGVsc2UgaWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuLVx0XHQgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpXG4mIzQzO1x0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoc3QucmVzdWx0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4tXHRlbHNlIGlmIChzYl9iZGV2KVxuJiM0MztcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTtcbiYjNDM7XHR9IGVsc2UgaWYgKHNiX2JkZXYpIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4tXHRlbHNlXG4mIzQzO1x0XHR6bG8tXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTtcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuJiM0MztcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBTRUNUT1JfU0laRSAtIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZWZlciB0aGUgRlMgYmxvY2sgc2l6ZSBmb3IgdGhlIGRldmljZSBibG9jayBzaXplIHdoZW4gaXQgaXMgbm9cbiYjNDM7XHQgKiBsYXJnZXIgdGhhbiA0Szsgb3RoZXJ3aXNlIGtlZXAgdGhlIGRpcmVjdCBJL08gLyBwaHlzaWNhbCBibG9jayBzaXplXG4mIzQzO1x0ICogc2VsZWN0ZWQgYWJvdmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIFx1MDAzYz0gU1pfNEspXG4mIzQzO1x0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuIFxuIFx0aWYgKHpsby1cdTAwM2V6b25lX2NhcGFjaXR5IFx1MDAyNiAoKHpsby1cdTAwM2VibG9ja19zaXplIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQpIC0gMSkpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O1pvbmUgY2FwYWNpdHkgaXMgbm90IGFsaWduZWQgdG8gYmxvY2sgc2l6ZSAldVxcblwmIzM0OyxcbkBAIC0xMjc5LDYgJiM0MzsxMjkwLDEwIEBAIHN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcbiBcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gemxvLVx1MDAzZWJsb2NrX3NpemU7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gemxvLVx1MDAzZWJsb2NrX3NpemU7XG4mIzQzO1x0LyogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgcmVxdWVzdCBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlcyBhcy1pcy4gKi9cbiYjNDM7XHRpZiAoIW9wdHMtXHUwMDNlYnVmZmVyZWRfaW8pXG4mIzQzO1x0XHRsaW0uZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgemxvLVx1MDAzZWRpb19tZW1fYWxpZ24sXG4mIzQzO1x0XHRcdFx0XHQgIFNFQ1RPUl9TSVpFIC0gMSk7XG4gXHRpZiAoemxvLVx1MDAzZXpvbmVfYXBwZW5kKVxuIFx0XHRsaW0ubWF4X2h3X3pvbmVfYXBwZW5kX3NlY3RvcnMgPSBsaW0ubWF4X2h3X3NlY3RvcnM7XG4gXHRsaW0ubWF4X29wZW5fem9uZXMgPSB6bG8tXHUwMDNlbWF4X29wZW5fem9uZXM7XG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmZmNDU4YWExMmFlMjk4IDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5AQCAtMzU4LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuIFx0XHRcdFx0aW9tYXBfbWF4X2Jpb19zaXplKFx1MDAyNml0ZXItXHUwMDNlaW9tYXApLCBhbGlnbm1lbnQpO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgZGlvLVx1MDAzZXN1Ym1pdC5pdGVyLFxuJiM0MztcdFx0XHRcdFx0ICAgICBiZGV2X2RtYV9hbGlnbm1lbnQoYmlvLVx1MDAzZWJpX2JkZXYpLFxuIFx0XHRcdFx0XHQgICAgIGFsaWdubWVudCAtIDEpO1xuIFx0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdGdvdG8gb3V0X3B1dF9iaW87XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmhcbmluZGV4IDhmMzNmNzE3YjE0ZjViLi5jZTM0ZWE0OWVmMzU4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmlvLmhcbkBAIC00NzcsNyAmIzQzOzQ3Nyw3IEBAIGludCBiZGV2X3J3X3ZpcnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCB2b2lkICpkYXRhLFxuIFx0XHRzaXplX3QgbGVuLCBlbnVtIHJlcV9vcCBvcCk7XG4gXG4gaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tXHRcdHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKTtcbiYjNDM7XHRcdHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLCB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XG4gXG4gdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbiB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oXG5pbmRleCBhOWJjNWIzMDY3ZTMyMC4uZmUyZTk4NWQ3NGQyNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Vpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Vpby5oXG5AQCAtMzg5LDkgJiM0MzszODksMTcgQEAgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IHBhZ2UgKioqcGFnZXMsXG4gXHRcdFx0ICAgICAgIHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBpbnQgbWF4cGFnZXMsXG4gXHRcdFx0ICAgICAgIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzLFxuIFx0XHRcdCAgICAgICBzaXplX3QgKm9mZnNldDApO1xuJiM0MzsvKlxuJiM0MzsgKiBCbG9jay1sYXllciBjb25zdW1lcnMgKGUuZy4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpKSByZXF1aXJlIHRoYXQgdGhlXG4mIzQzOyAqIHNlZ21lbnRzIG9mIGFuIElURVJfQlZFQyBpdGVyYXRvciBhcmUgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSB0YXJnZXQgZGV2aWNlJiMzOTtzXG4mIzQzOyAqIERNQSBhbGlnbm1lbnQsIGFuZCBmb3J3YXJkIHRoZW0gYXMtaXMuICBJbi1rZXJuZWwgdXNlcnMgdGhhdCBidWlsZCB0aGVpciBvd25cbiYjNDM7ICogYnZlY3MgbXVzdCBub3QgY3JlYXRlIHN1Yi1hbGlnbmVkIHNlZ21lbnRzOyBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKCkgZW5mb3JjZXNcbiYjNDM7ICogdGhlIHNhbWUgZm9yIHRoZSBzZWdtZW50cyBpdCBleHRyYWN0cyB2aWEgQG1lbV9hbGlnbl9tYXNrLlxuJiM0MzsgKi9cbiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRcdHNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsXG4tXHRcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7XG4mIzQzO1x0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssXG4mIzQzO1x0XHRpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7XG4gXG4gLyoqXG4gICogaW92X2l0ZXJfZXh0cmFjdF93aWxsX3BpbiAtIEluZGljYXRlIGhvdyBwYWdlcyBmcm9tIHRoZSBpdGVyYXRvciB3aWxsIGJlIHJldGFpbmVkXG5kaWZmIC0tZ2l0IGEvbGliL2lvdl9pdGVyLmMgYi9saWIvaW92X2l0ZXIuY1xuaW5kZXggMjczOTE5YjE2MTYxNzYuLmMzNDMwNzU5NTFkZWQwIDEwMDY0NFxuLS0tIGEvbGliL2lvdl9pdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pb3ZfaXRlci5jXG5AQCAtMTg4Niw2ICYjNDM7MTg4Niw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NvbnRpZ19mb2xpb19sZW4oc3RydWN0IHBhZ2UgKipwYWdlcyxcbiAgKiBAbWF4X3NpemU6XHRtYXhpbXVtIHNpemUgdG8gZXh0cmFjdCBmcm9tIEBpdGVyXG4gICogQG5yX3ZlY3M6XHRudW1iZXIgb2YgdmVjdG9ycyBpbiBAYnYgKG9uIGluIGFuZCBvdXRwdXQpXG4gICogQG1heF92ZWNzOlx0bWF4aW11bSB2ZWN0b3JzIGluIEBidiwgaW5jbHVkaW5nIHRob3NlIGZpbGxlZCBiZWZvcmUgY2FsbGluZ1xuJiM0MzsgKiBAbWVtX2FsaWduX21hc2s6XHRyZWplY3Qgd2l0aCAtRUlOVkFMIGlmIHRoZSBzb3VyY2UgYWRkcmVzcyBvclxuJiM0MzsgKlx0XHRsZW5ndGggaXMgbm90IGFsaWduZWQgdG8gdGhpcyBtYXNrXG4gICogQGV4dHJhY3Rpb25fZmxhZ3M6IGZsYWdzIHRvIHF1YWxpZnkgcmVxdWVzdFxuICAqXG4gICogTGlrZSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKCksIGJ1dCByZXR1cm5zIHBoeXNpY2FsbHkgY29udGlndW91cyByYW5nZXNcbkBAIC0xODk3LDE0ICYjNDM7MTg5OSwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gICovXG4gc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0XHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxuLVx0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpXG4mIzQzO1x0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssXG4mIzQzO1x0XHRpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncylcbiB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKWl0ZXJfaW92X2FkZHIoaXRlcik7XG4gXHR1bnNpZ25lZCBzaG9ydCBlbnRyaWVzX2xlZnQgPSBtYXhfdmVjcyAtICpucl92ZWNzO1xuIFx0dW5zaWduZWQgc2hvcnQgbnJfcGFnZXMsIGkgPSAwO1xuIFx0c2l6ZV90IGxlZnQsIG9mZnNldCwgbGVuO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcztcbiBcdHNzaXplX3Qgc2l6ZTtcbiBcbiYjNDM7XHRpZiAoKHN0YXJ0IHwgaXRlcl9pb3ZfbGVuKGl0ZXIpKSBcdTAwMjYgbWVtX2FsaWduX21hc2spXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHQvKlxuIFx0ICogTW92ZSBwYWdlIGFycmF5IHVwIGluIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGUgYmlvIHZlY3MgYXMgZmFyIGFzXG4gXHQgKiBwb3NzaWJsZSBzbyB0aGF0IHdlIGNhbiBzdGFydCBmaWxsaW5nIGJpb3ZlY3MgZnJvbSB0aGUgYmVnaW5uaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfYnZlY3MmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZGlvJiMzNDssCiAgICAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZG1hX2xpbWl0JiMzNDssCiAgICAmIzM0O3psb29wX2dldF9ibG9ja19zaXplJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF9hZGQmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX2Jpb19pdGVyX29uZSYjMzQ7LAogICAgJiMzNDtfX2Jsa2Rldl9kaXJlY3RfSU8mIzM0OywKICAgICYjMzQ7YmlvX21hcF91c2VyX2lvdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGJpbyBoYW5kbGluZyBhbmQgZGlyZWN0IEkvTyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJdCBhZGRzIGBtZW1fYWxpZ25fbWFza2AgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgdG8gZW5mb3JjZSBETUEgYWxpZ25tZW50IGZvciBkaXJlY3QgSS9PLiBJdCBhbHNvIHVwZGF0ZXMgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gcHJvcGVybHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PLCBhbmQgdXBkYXRlcyBgaW9tYXBgIGFuZCBgYmxrZGV2YCBkaXJlY3QgSS9PIHBhdGhzIHRvIHBhc3MgdGhlIGNvcnJlY3QgYWxpZ25tZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWU5OWRjNTc2NjUyMGYyNzg5ZmY5YmU3NjI0NDc2ZTIyMzYwMDZlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDIxIDA0OjQyOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uYwppbmRleCBmMmE1ZjRkMGE5NjcyYi4uZmFhZDQxYTcyYWM3N2YgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jpby5jCkBAIC0xMjIwLDEwICYjNDM7MTIyMCw0NSBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCXJldHVybiAwOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19ERUJVR19LRVJORUwKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJCQkJdW5zaWduZWQgbWVtX2FsaWduX21hc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnZlY19pdGVyIGl0ZXI7CiYjNDM7CXN0cnVjdCBiaW9fdmVjIGJ2OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBDb3JyZWN0IGNhbGxlcnMgbmV2ZXIgYnJlYWsgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHMsIHNvIHRoaXMKJiM0MzsJICogZXhoYXVzdGl2ZSBjaGVjayBpcyBvbmx5IHBhaWQgZm9yIGluIGRlYnVnIGJ1aWxkcy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX21wX2J2ZWMoYnYsIGJpby0mZ3Q7YmlfaW9fdmVjLCBpdGVyLCBiaW8tJmd0O2JpX2l0ZXIpCiYjNDM7CQlpZiAoKGJ2LmJ2X29mZnNldCB8IGJ2LmJ2X2xlbikgJmFtcDsgbWVtX2FsaWduX21hc2spCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJCQkJdW5zaWduZWQgbWVtX2FsaWduX21hc2spCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBXZSBmb3J3YXJkIHRoZSBiaW9fdmVjIGFzLWlzLCBzbyBJVEVSX0JWRUMgY2FsbGVycyBtdXN0IHByb3ZpZGUKJiM0MzsJICogc2VnbWVudHMgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSBkZXZpY2UmIzM5O3MgRE1BIGFsaWdubWVudC4gVGhlIG9ubHkKJiM0MzsJICogdW5jaGVja2VkIHVzZXItY29udHJvbGxhYmxlIG9mZnNldCB0aGF0IHJlYWNoZXMgaGVyZSBpcyBhbiBpb191cmluZwomIzQzOwkgKiByZWdpc3RlcmVkIGJ1ZmZlciB3aGVyZSBqdXN0IHRoZSBmaXJzdCBzZWdtZW50IGNhbiBiZSB1bmFsaWduZWQKJiM0MzsJICogKHRoZSByZXN0IGlzIHZpcnR1YWxseSBjb250aWd1b3VzKSwgc28gY2hlY2tpbmcgb25seSB0aGF0IG9uZSBpcwomIzQzOwkgKiBzdWZmaWNpZW50IHRvIGtub3cgaWYgdGhlIGVudGlyZSB2ZWN0b3IgaXMgdmFsaWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gIShtcF9idmVjX2l0ZXJfb2Zmc2V0KGJpby0mZ3Q7YmlfaW9fdmVjLCBiaW8tJmd0O2JpX2l0ZXIpICZhbXA7CiYjNDM7CQkJCQkJCW1lbV9hbGlnbl9tYXNrKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW8KICAqIEBiaW86IGJpbyB0byBhZGQgcGFnZXMgdG8KICAqIEBpdGVyOiBpb3YgaXRlcmF0b3IgZGVzY3JpYmluZyB0aGUgcmVnaW9uIHRvIGJlIGFkZGVkCiYjNDM7ICogQG1lbV9hbGlnbl9tYXNrOiB0aGUgbWFzayB0aGUgc291cmNlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgdG8sCiYjNDM7ICoJMCBmb3Igbm8gcmVxdWlyZW1lbnQKICAqIEBsZW5fYWxpZ25fbWFzazogdGhlIG1hc2sgdG8gYWxpZ24gdGhlIHRvdGFsIHNpemUgdG8sIDAgZm9yIGFueSBsZW5ndGgKICAqCiAgKiBUaGlzIHRha2VzIGVpdGhlciBhbiBpdGVyYXRvciBwb2ludGluZyB0byB1c2VyIG1lbW9yeSwgb3Igb25lIHBvaW50aW5nIHRvCkBAIC0xMjQyLDcgJiM0MzsxMjc3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKICAqIGlzIHJldHVybmVkIG9ubHkgaWYgMCBwYWdlcyBjb3VsZCBiZSBwaW5uZWQuCiAgKi8KIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAotCQkJICAgdW5zaWduZWQgbGVuX2FsaWduX21hc2spCiYjNDM7CQkJICAgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKQogewogCWlvdl9pdGVyX2V4dHJhY3Rpb25fdCBmbGFncyA9IDA7CiAKQEAgLTEyNTEsNiAmIzQzOzEyODYsMTAgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAKIAlpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkgewogCQliaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7CiYjNDM7CiYjNDM7CQlpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCQlpb3ZfaXRlcl9hZHZhbmNlKGl0ZXIsIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTI2NSw4ICYjNDM7MTMwNCwxOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAogCQlyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby0mZ3Q7YmlfaW9fdmVjLAogCQkJCUJJT19NQVhfU0laRSAtIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplLAotCQkJCSZhbXA7YmlvLSZndDtiaV92Y250LCBiaW8tJmd0O2JpX21heF92ZWNzLCBmbGFncyk7CiYjNDM7CQkJCSZhbXA7YmlvLSZndDtiaV92Y250LCBiaW8tJmd0O2JpX21heF92ZWNzLAomIzQzOwkJCQltZW1fYWxpZ25fbWFzaywgZmxhZ3MpOwogCQlpZiAocmV0ICZsdDs9IDApIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgbWlzYWxpZ25lZCB2ZWN0b3IgZmFpbHMgdGhlIHdob2xlIEkvTy4gIFJlbGVhc2UgYW55CiYjNDM7CQkJICogcGFnZXMgcGlubmVkIGJ5IGVhcmxpZXIgaXRlcmF0aW9ucyBiZWZvcmUgcmV0dXJuaW5nCiYjNDM7CQkJICogc2luY2UgdGhpcyBiaW8gd29uJiMzOTt0IGJlIHN1Ym1pdHRlZCB0byByZWxlYXNlIHRoZW0uCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHJldCA9PSAtRUlOVkFMKSB7CiYjNDM7CQkJCWJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpOwomIzQzOwkJCQliaW9fY2xlYXJfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7CiYjNDM7CQkJCWJpby0mZ3Q7YmlfdmNudCA9IDA7CiYjNDM7CQkJfQogCQkJaWYgKCFiaW8tJmd0O2JpX3ZjbnQpCiAJCQkJcmV0dXJuIHJldDsKIAkJCWJyZWFrOwpAQCAtMTM3Nyw3ICYjNDM7MTQyNyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQlzc2l6ZV90IHJldDsKIAogCQlyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby0mZ3Q7YmlfaW9fdmVjICYjNDM7IDEsIGxlbiwKLQkJCQkmYW1wO2Jpby0mZ3Q7YmlfdmNudCwgYmlvLSZndDtiaV9tYXhfdmVjcyAtIDEsIDApOwomIzQzOwkJCQkmYW1wO2Jpby0mZ3Q7YmlfdmNudCwgYmlvLSZndDtiaV9tYXhfdmVjcyAtIDEsIDAsIDApOwogCQlpZiAocmV0ICZsdDs9IDApIHsKIAkJCWlmICghYmlvLSZndDtiaV92Y250KSB7CiAJCQkJZm9saW9fcHV0KGZvbGlvKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tYXAuYyBiL2Jsb2NrL2Jsay1tYXAuYwppbmRleCA3Njg1NDlmMTlmOTdlYy4uYzk1MzVlZmUxYTkxM2MgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbWFwLmMKQEAgLTI3NCw3ICYjNDM7Mjc0LDcgQEAgc3RhdGljIGludCBiaW9fbWFwX3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCSAqIE5vIGFsaWdubWVudCByZXF1aXJlbWVudHMgb24gb3VyIHBhcnQgdG8gc3VwcG9ydCBhcmJpdHJhcnkKIAkgKiBwYXNzdGhyb3VnaCBjb21tYW5kcy4KIAkgKi8KLQlyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCk7CiYjNDM7CXJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCAwLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wdXQ7CiAJcmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocnEsIGJpbyk7CmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmMKaW5kZXggMTU3ODNhNjE4MGRlYzEuLmU1MTlkN2Y0M2IzMTA2IDEwMDY0NAotLS0gYS9ibG9jay9mb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZm9wcy5jCkBAIC00Niw3ICYjNDM7NDYsNyBAQCBzdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLAogc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sCiAJCXN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlyZXR1cm4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsCiYjNDM7CXJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpLAogCQkJYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikgLSAxKTsKIH0KIApAQCAtMjE4LDcgJiM0MzsyMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAKIAkJcmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpOwogCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJYmlvX2VuZGlvX3N0YXR1cyhiaW8sIEJMS19TVFNfSU9FUlIpOwomIzQzOwkJCWJpb19lbmRpb19zdGF0dXMoYmlvLCBlcnJub190b19ibGtfc3RhdHVzKHJldCkpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKSB7CkBAIC0yMzgsOCAmIzQzOzIzOCwxMCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCX0KIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfSEFTX01FVEFEQVRBKSB7CiAJCQlyZXQgPSBiaW9faW50ZWdyaXR5X21hcF9pdGVyKGJpbywgaW9jYi0mZ3Q7cHJpdmF0ZSk7Ci0JCQlpZiAodW5saWtlbHkocmV0KSkKLQkJCQlnb3RvIGZhaWw7CiYjNDM7CQkJaWYgKHVubGlrZWx5KHJldCkpIHsKJiM0MzsJCQkJYmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJfQogCiAJCWlmIChpc19yZWFkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDMxMGRlMDQ2M2JlYjE0Li41ZmU2MWQ1NDJmOGI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTU0LDYgJiM0Mzs1NCw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7CiAKIAlzdHJ1Y3QgZmlsZQkqbG9fYmFja2luZ19maWxlOwogCXVuc2lnbmVkIGludAlsb19taW5fZGlvX3NpemU7CiYjNDM7CXVuc2lnbmVkIGludAlsb19kaW9fbWVtX2FsaWduOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmxvX2RldmljZTsKIAogCWdmcF90CQlvbGRfZ2ZwX21hc2s7CkBAIC00NDcsMjYgJiM0Mzs0NDgsMzcgQEAgc3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogCQkJX19mdW5jX18sIGxvLSZndDtsb19udW1iZXIsIGxvLSZndDtsb19maWxlX25hbWUsIHJjKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQomIzQzO3N0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLSZndDtsb19iYWNraW5nX2ZpbGU7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqc2JfYmRldiA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdC0mZ3Q7aV9zYi0mZ3Q7c19iZGV2OwogCXN0cnVjdCBrc3RhdCBzdDsKIAogCS8qCi0JICogVXNlIHRoZSBtaW5pbWFsIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLgomIzQzOwkgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZwomIzQzOwkgKiByZXF1ZXN0JiMzOTtzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHMKJiM0MzsJICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UmIzM5O3MgZG1hX2FsaWdubWVudCB3aGVuCiYjNDM7CSAqIHVzZWQgZm9yIGRpcmVjdC1pby4KIAkgKi8KIAlpZiAoIXZmc19nZXRhdHRyKCZhbXA7ZmlsZS0mZ3Q7Zl9wYXRoLCAmYW1wO3N0LCBTVEFUWF9ESU9BTElHTiwgMCkgJmFtcDsmYW1wOwotCSAgICAoc3QucmVzdWx0X21hc2sgJmFtcDsgU1RBVFhfRElPQUxJR04pKQotCQlyZXR1cm4gc3QuZGlvX29mZnNldF9hbGlnbjsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKJiM0MzsJCWxvLSZndDtsb19taW5fZGlvX3NpemUgPSBzdC5kaW9fb2Zmc2V0X2FsaWduOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJLyoKIAkgKiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyB3b3VsZG4mIzM5O3QgYmUgbmVlZGVkLCBidXQgYXMgb2YgTGludXggNi4xMyBvbmx5CiAJICogYSBoYW5kZnVsIG9mIGZpbGUgc3lzdGVtcyBzdXBwb3J0IHRoZSBTVEFUWF9ESU9BTElHTiBmbGFnLgogCSAqLwotCWlmIChzYl9iZGV2KQotCQlyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7Ci0JcmV0dXJuIFNFQ1RPUl9TSVpFOwomIzQzOwlpZiAoc2JfYmRldikgewomIzQzOwkJbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHNiX2JkZXYpOwomIzQzOwkJbG8tJmd0O2xvX2Rpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IFNFQ1RPUl9TSVpFOwomIzQzOwlsby0mZ3Q7bG9fZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC01MDksNyAmIzQzOzUyMSw3IEBAIHN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJCWxvLSZndDtvbGRfZ2ZwX21hc2sgJmFtcDsgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7CiAJaWYgKGxvLSZndDtsb19iYWNraW5nX2ZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19ESVJFQ1QpCiAJCWxvLSZndDtsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87Ci0JbG8tJmd0O2xvX21pbl9kaW9fc2l6ZSA9IGxvb3BfcXVlcnlfbWluX2Rpb19zaXplKGxvKTsKJiM0MzsJbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7CiB9CiAKIHN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC05NDAsNiAmIzQzOzk1MiwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlyZXR1cm4gU0VDVE9SX1NJWkU7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBsb29wX3NldF9kbWFfbGltaXQoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgdXNlciBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc28KJiM0MzsJICogdHJhY2sgdGhlIGJhY2tpbmcmIzM5O3MgRE1BIGFsaWdubWVudCByZXF1aXJlbWVudCBhcyB0aGUgbW9kZSBpcyB0b2dnbGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxvLSZndDtsb19mbGFncyAmYW1wOyBMT19GTEFHU19ESVJFQ1RfSU8pCiYjNDM7CQlsaW0tJmd0O2RtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxvLSZndDtsb19kaW9fbWVtX2FsaWduLAomIzQzOwkJCQkJICAgU0VDVE9SX1NJWkUgLSAxKTsKJiM0MzsJZWxzZQomIzQzOwkJbGltLSZndDtkbWFfYWxpZ25tZW50ID0gU0VDVE9SX1NJWkUgLSAxOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sCiAJCXVuc2lnbmVkIGludCBic2l6ZSkKIHsKQEAgLTk2MSw2ICYjNDM7OTg2LDcgQEAgc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwKIAlsaW0tJmd0O2xvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplOwogCWxpbS0mZ3Q7cGh5c2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplOwogCWxpbS0mZ3Q7aW9fbWluID0gYnNpemU7CiYjNDM7CWxvb3Bfc2V0X2RtYV9saW1pdChsbywgbGltKTsKIAlsaW0tJmd0O2ZlYXR1cmVzICZhbXA7PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7CiAJaWYgKGZpbGUtJmd0O2Zfb3AtJmd0O2ZzeW5jICZhbXA7JmFtcDsgIShsby0mZ3Q7bG9fZmxhZ3MgJmFtcDsgTE9fRkxBR1NfUkVBRF9PTkxZKSkKIAkJbGltLSZndDtmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTsKQEAgLTE0MTYsNiAmIzQzOzE0NDIsNyBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlib29sIHVzZV9kaW8gPSAhIWFyZzsKIAl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltOwogCiAJaWYgKGxvLSZndDtsb19zdGF0ZSAhPSBMb19ib3VuZCkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTE0MzQsNiAmIzQzOzE0NjEsOSBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJbG8tJmd0O2xvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTzsKIAllbHNlCiAJCWxvLSZndDtsb19mbGFncyAmYW1wOz0gfkxPX0ZMQUdTX0RJUkVDVF9JTzsKJiM0MzsJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwomIzQzOwlsb29wX3NldF9kbWFfbGltaXQobG8sICZhbXA7bGltKTsKJiM0MzsJcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlLCAmYW1wO2xpbSk7CiAJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgbWVtZmxhZ3MpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jCmluZGV4IDU1ZWViNmFhYzBlYTNiLi5mOTdhMjBjZmRiN2NlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwpAQCAtMTQ0LDYgJiM0MzsxNDQsNyBAQCBzdHJ1Y3Qgemxvb3BfZGV2aWNlIHsKIAl1bnNpZ25lZCBpbnQJCW5yX2NvbnZfem9uZXM7CiAJdW5zaWduZWQgaW50CQltYXhfb3Blbl96b25lczsKIAl1bnNpZ25lZCBpbnQJCWJsb2NrX3NpemU7CiYjNDM7CXVuc2lnbmVkIGludAkJZGlvX21lbV9hbGlnbjsKIAogCXNwaW5sb2NrX3QJCW9wZW5fem9uZXNfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW9wZW5fem9uZXNfbHJ1X2xpc3Q7CkBAIC0xMDM3LDIwICYjNDM7MTAzOCwzMCBAQCBzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywKIAlzdHJ1Y3Qga3N0YXQgc3Q7CiAKIAkvKgotCSAqIElmIHRoZSBGUyBibG9jayBzaXplIGlzIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gNEssIHVzZSB0aGF0IGFzIHRoZQotCSAqIGRldmljZSBibG9jayBzaXplLiBPdGhlcndpc2UsIGZhbGxiYWNrIHRvIHRoZSBGUyBkaXJlY3QgSU8gYWxpZ25tZW50Ci0JICogY29uc3RyYWludCBpZiB0aGF0IGlzIHByb3ZpZGVkLCBhbmQgdG8gdGhlIEZTIHVuZGVybHlpbmcgZGV2aWNlCi0JICogcGh5c2ljYWwgYmxvY2sgc2l6ZSBpZiB0aGUgZGlyZWN0IElPIGFsaWdubWVudCBpcyB1bmtub3duLgomIzQzOwkgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nCiYjNDM7CSAqIHJlcXVlc3QmIzM5O3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0cwomIzQzOwkgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSYjMzk7cyBkbWFfYWxpZ25tZW50IHdoZW4KJiM0MzsJICogdXNlZCBmb3IgZGlyZWN0LWlvLgogCSAqLwotCWlmIChmaWxlX2lub2RlKHpvbmUtJmd0O2ZpbGUpLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSAmbHQ7PSBTWl80SykKLQkJemxvLSZndDtibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLSZndDtmaWxlKS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0JZWxzZSBpZiAoIXZmc19nZXRhdHRyKCZhbXA7em9uZS0mZ3Q7ZmlsZS0mZ3Q7Zl9wYXRoLCAmYW1wO3N0LCBTVEFUWF9ESU9BTElHTiwgMCkgJmFtcDsmYW1wOwotCQkgKHN0LnJlc3VsdF9tYXNrICZhbXA7IFNUQVRYX0RJT0FMSUdOKSkKJiM0MzsJaWYgKCF2ZnNfZ2V0YXR0cigmYW1wO3pvbmUtJmd0O2ZpbGUtJmd0O2ZfcGF0aCwgJmFtcDtzdCwgU1RBVFhfRElPQUxJR04sIDApICZhbXA7JmFtcDsKJiM0MzsJICAgIChzdC5yZXN1bHRfbWFzayAmYW1wOyBTVEFUWF9ESU9BTElHTikpIHsKIAkJemxvLSZndDtibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjsKLQllbHNlIGlmIChzYl9iZGV2KQomIzQzOwkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7CiYjNDM7CX0gZWxzZSBpZiAoc2JfYmRldikgewogCQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7Ci0JZWxzZQomIzQzOwkJemxvLSZndDtkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpOwomIzQzOwl9IGVsc2UgewogCQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTsKJiM0MzsJCXpsby0mZ3Q7ZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcmVmZXIgdGhlIEZTIGJsb2NrIHNpemUgZm9yIHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSB3aGVuIGl0IGlzIG5vCiYjNDM7CSAqIGxhcmdlciB0aGFuIDRLOyBvdGhlcndpc2Uga2VlcCB0aGUgZGlyZWN0IEkvTyAvIHBoeXNpY2FsIGJsb2NrIHNpemUKJiM0MzsJICogc2VsZWN0ZWQgYWJvdmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoZmlsZV9pbm9kZSh6b25lLSZndDtmaWxlKS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUgJmx0Oz0gU1pfNEspCiYjNDM7CQl6bG8tJmd0O2Jsb2NrX3NpemUgPSBmaWxlX2lub2RlKHpvbmUtJmd0O2ZpbGUpLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKIAogCWlmICh6bG8tJmd0O3pvbmVfY2FwYWNpdHkgJmFtcDsgKCh6bG8tJmd0O2Jsb2NrX3NpemUgJmd0OyZndDsgU0VDVE9SX1NISUZUKSAtIDEpKSB7CiAJCXByX2VycigmIzM0O1pvbmUgY2FwYWNpdHkgaXMgbm90IGFsaWduZWQgdG8gYmxvY2sgc2l6ZSAldVxuJiMzNDssCkBAIC0xMjc5LDYgJiM0MzsxMjkwLDEwIEBAIHN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cykKIAogCWxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gemxvLSZndDtibG9ja19zaXplOwogCWxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSB6bG8tJmd0O2Jsb2NrX3NpemU7CiYjNDM7CS8qIERpcmVjdCBJL08gZm9yd2FyZHMgdGhlIHJlcXVlc3QgcGFnZXMgdG8gdGhlIGJhY2tpbmcgZmlsZXMgYXMtaXMuICovCiYjNDM7CWlmICghb3B0cy0mZ3Q7YnVmZmVyZWRfaW8pCiYjNDM7CQlsaW0uZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgemxvLSZndDtkaW9fbWVtX2FsaWduLAomIzQzOwkJCQkJICBTRUNUT1JfU0laRSAtIDEpOwogCWlmICh6bG8tJmd0O3pvbmVfYXBwZW5kKQogCQlsaW0ubWF4X2h3X3pvbmVfYXBwZW5kX3NlY3RvcnMgPSBsaW0ubWF4X2h3X3NlY3RvcnM7CiAJbGltLm1heF9vcGVuX3pvbmVzID0gemxvLSZndDttYXhfb3Blbl96b25lczsKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmZmNDU4YWExMmFlMjk4IDEwMDY0NAotLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uYwpAQCAtMzU4LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLAogCQkJCWlvbWFwX21heF9iaW9fc2l6ZSgmYW1wO2l0ZXItJmd0O2lvbWFwKSwgYWxpZ25tZW50KTsKIAllbHNlCiAJCXJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBkaW8tJmd0O3N1Ym1pdC5pdGVyLAomIzQzOwkJCQkJICAgICBiZGV2X2RtYV9hbGlnbm1lbnQoYmlvLSZndDtiaV9iZGV2KSwKIAkJCQkJICAgICBhbGlnbm1lbnQgLSAxKTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXRfcHV0X2JpbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IDhmMzNmNzE3YjE0ZjViLi5jZTM0ZWE0OWVmMzU4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC00NzcsNyAmIzQzOzQ3Nyw3IEBAIGludCBiZGV2X3J3X3ZpcnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCB2b2lkICpkYXRhLAogCQlzaXplX3QgbGVuLCBlbnVtIHJlcV9vcCBvcCk7CiAKIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAotCQl1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7CiYjNDM7CQl1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spOwogCiB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpOwogdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oCmluZGV4IGE5YmM1YjMwNjdlMzIwLi5mZTJlOTg1ZDc0ZDI0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Vpby5oCkBAIC0zODksOSAmIzQzOzM4OSwxNyBAQCBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcywKIAkJCSAgICAgICBzaXplX3QgbWF4c2l6ZSwgdW5zaWduZWQgaW50IG1heHBhZ2VzLAogCQkJICAgICAgIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzLAogCQkJICAgICAgIHNpemVfdCAqb2Zmc2V0MCk7CiYjNDM7LyoKJiM0MzsgKiBCbG9jay1sYXllciBjb25zdW1lcnMgKGUuZy4gYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpKSByZXF1aXJlIHRoYXQgdGhlCiYjNDM7ICogc2VnbWVudHMgb2YgYW4gSVRFUl9CVkVDIGl0ZXJhdG9yIGFyZSBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIHRhcmdldCBkZXZpY2UmIzM5O3MKJiM0MzsgKiBETUEgYWxpZ25tZW50LCBhbmQgZm9yd2FyZCB0aGVtIGFzLWlzLiAgSW4ta2VybmVsIHVzZXJzIHRoYXQgYnVpbGQgdGhlaXIgb3duCiYjNDM7ICogYnZlY3MgbXVzdCBub3QgY3JlYXRlIHN1Yi1hbGlnbmVkIHNlZ21lbnRzOyBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKCkgZW5mb3JjZXMKJiM0MzsgKiB0aGUgc2FtZSBmb3IgdGhlIHNlZ21lbnRzIGl0IGV4dHJhY3RzIHZpYSBAbWVtX2FsaWduX21hc2suCiYjNDM7ICovCiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsCiAJCXNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsCi0JCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7CiYjNDM7CQl1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssCiYjNDM7CQlpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7CiAKIC8qKgogICogaW92X2l0ZXJfZXh0cmFjdF93aWxsX3BpbiAtIEluZGljYXRlIGhvdyBwYWdlcyBmcm9tIHRoZSBpdGVyYXRvciB3aWxsIGJlIHJldGFpbmVkCmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jCmluZGV4IDI3MzkxOWIxNjE2MTc2Li5jMzQzMDc1OTUxZGVkMCAxMDA2NDQKLS0tIGEvbGliL2lvdl9pdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL2lvdl9pdGVyLmMKQEAgLTE4ODYsNiAmIzQzOzE4ODYsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsCiAgKiBAbWF4X3NpemU6CW1heGltdW0gc2l6ZSB0byBleHRyYWN0IGZyb20gQGl0ZXIKICAqIEBucl92ZWNzOgludW1iZXIgb2YgdmVjdG9ycyBpbiBAYnYgKG9uIGluIGFuZCBvdXRwdXQpCiAgKiBAbWF4X3ZlY3M6CW1heGltdW0gdmVjdG9ycyBpbiBAYnYsIGluY2x1ZGluZyB0aG9zZSBmaWxsZWQgYmVmb3JlIGNhbGxpbmcKJiM0MzsgKiBAbWVtX2FsaWduX21hc2s6CXJlamVjdCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIG9yCiYjNDM7ICoJCWxlbmd0aCBpcyBub3QgYWxpZ25lZCB0byB0aGlzIG1hc2sKICAqIEBleHRyYWN0aW9uX2ZsYWdzOiBmbGFncyB0byBxdWFsaWZ5IHJlcXVlc3QKICAqCiAgKiBMaWtlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSwgYnV0IHJldHVybnMgcGh5c2ljYWxseSBjb250aWd1b3VzIHJhbmdlcwpAQCAtMTg5NywxNCAmIzQzOzE4OTksMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogICovCiBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsCiAJCXNpemVfdCBtYXhfc2l6ZSwgdW5zaWduZWQgc2hvcnQgKm5yX3ZlY3MsCi0JCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncykKJiM0MzsJCXVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywKJiM0MzsJCWlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKQogewomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaXRlcl9pb3ZfYWRkcihpdGVyKTsKIAl1bnNpZ25lZCBzaG9ydCBlbnRyaWVzX2xlZnQgPSBtYXhfdmVjcyAtICpucl92ZWNzOwogCXVuc2lnbmVkIHNob3J0IG5yX3BhZ2VzLCBpID0gMDsKIAlzaXplX3QgbGVmdCwgb2Zmc2V0LCBsZW47CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKIAlzc2l6ZV90IHNpemU7CiAKJiM0MzsJaWYgKChzdGFydCB8IGl0ZXJfaW92X2xlbihpdGVyKSkgJmFtcDsgbWVtX2FsaWduX21hc2spCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkvKgogCSAqIE1vdmUgcGFnZSBhcnJheSB1cCBpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGJpbyB2ZWNzIGFzIGZhciBhcwogCSAqIHBvc3NpYmxlIHNvIHRoYXQgd2UgY2FuIHN0YXJ0IGZpbGxpbmcgYmlvdmVjcyBmcm9tIHRoZSBiZWdpbm5pbmcKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgzMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBwcmV0dHkgY29yZSBzdHVmZiDigJMgYmxvY2sgbGF5ZXIgYmlvIGhhbmRsaW5nIGFuZCBkaXJlY3QgSS9PIGFsaWdubWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgaW50cm9kdWN0aW9uIG9mIGBtZW1fYWxpZ25fbWFza2AgaW50byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpcyBpbW1lZGlhdGVseSBncmFiYmluZyBteSBhdHRlbnRpb24uIEFuZCB0aGUgdXBkYXRlcyB0byB0aGUgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gY29ycmVjdGx5IHNldCBETUEgYWxpZ25tZW50IGxpbWl0cyBmb3IgZGlyZWN0IEkvTyBhcmUgZGVmaW5pdGVseSBpbnRlcmVzdGluZy4gVGhlbiB0aGVyZSBpcyB0aGUgbW9kaWZpY2F0aW9uIG9mIGBpb21hcGAgYW5kIGBibGtkZXZgIHRvIHBhc3MgYGJkZXZfZG1hX2FsaWdubWVudChiZGV2KWAgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLiBJdCBzZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYXQgdGhlIHZlcnkgY29yZSBvZiB0aGUgYmxvY2sgbGF5ZXIgYW5kIHRoZSBkaXJlY3QgSS9PIGxvZ2ljLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIHRoaXMgc2NyZWFtcyBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGtleSBzeW1ib2xzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBhIG1lbnRhbCBjaGVja2xpc3Q6CiogICBgQ09ORklHX0JMS19ERVZfTE9PUGAgZm9yIHRoZSBsb29wIGRldmljZS4KKiAgIGBDT05GSUdfQkxLX0RFVl9aT05FRGAgZm9yIHRoZSB6bG9vcCBkZXZpY2UuLi4gaG1tLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQmIzM5O3MgbG9vayBpbnRvIHRoZSBjb2RlLCBpdCYjMzk7cyBgZHJpdmVycy9ibG9jay96bG9vcC5jYC4gSSYjMzk7bGwgdXNlIHRvb2xzIHRvIHZlcmlmeSBpdHMgY29uZmlnLgoqICAgYENPTkZJR19GU19JT01BUGAgZm9yIGlvbWFwLCBvYnZpb3VzbHkuCiogICBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CTE9DS2AgZm9yIHRoZSBibG9jayBsYXllciBpdHNlbGYuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZnVsbHkgYXdhcmUgb2YgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIHRhcmdldCBzeXN0ZW1zLiBUaGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIG15IGZ1enppbmcgcGxhbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG9vbHMgSSBuZWVkIHRvIGhlbHAgbWUgdW5kZXJzdGFuZCBgZHJpdmVycy9ibG9jay96bG9vcC5jYCBhbmQgaXRzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTM1Nj1jb25maWcgQkxLX0RFVl9aT05FRF9MT09QXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM2Ny1cdCAgZWNobyBcJiMzNDthZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcJiMzNDsgXHUwMDNlIFxcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzY4Olx0XHQvZGV2L3psb29wLWNvbnRyb2xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Kipab25lZCBMb29wIENvbmZpZ3VyYXRpb24gRGl2ZSoqCgpPa2F5LCBzbyBgQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhlIHpvbmVkIGxvb3AgZGV2aWNlLCB6bG9vcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIGRpcmVjdCBJL08gcGF0aC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlLgoKTXkgZm9jdXMgaXMgb24gdGhlIGRhdGEgcGF0aC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpbiBgYmxvY2svYmlvLmNgIGFuZCBgbGliL2lvdl9pdGVyLmNgLiBUaGVzZSB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBJL08gdmVjdG9ycyBhcmUgaGFuZGxlZC4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgem9uZWQgYXdhcmUgaGFuZGxpbmcgd2l0aGluIHRoZSBsb29wIGNvZGUuCgpJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGxvb3Bfc2V0X2Rpb2AsIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYHpsb29wX2N0bF9hZGRgLCBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAsIGFuZCBvZiBjb3Vyc2UsIGBfX2Jsa2Rldl9kaXJlY3RfSU9gLgoKQmVmb3JlIGRpZ2dpbmcgaW4gZnVydGhlciwgbGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIHRoYXQgYHpsb29wX2dldF9ibG9ja19zaXplYCBhY3R1YWxseSAqZXhpc3RzKi4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7bSBsb29raW5nIGF0IG91dGRhdGVkIGNvZGUgb3IgYSBkaWZmZXJlbnQgdmVyc2lvbiwgYW5kIEkgbmVlZCB0byBzdGFydCBoZXJlIHRvIGJlIGNlcnRhaW4gSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfZ2V0X2Jsb2NrX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMTY9c3RhdGljIHN0cnVjdCBmaWxlICp6bG9vcF9maWxwX29wZW5fZm10KGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAzMy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM0OnN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMzUtXHRcdFx0XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTA3NT1zdGF0aWMgaW50IHpsb29wX2luaXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEwLVx0XHRpZiAoIXpsby1cdTAwM2VibG9ja19zaXplKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTExMTpcdFx0XHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTItXHRcdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1MC1cdGlmICghemxvLVx1MDAzZWJsb2NrX3NpemUpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTUxOlx0XHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTItXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTUtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1NjpcdHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTQ0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBsb29wLmMgZm9yIERNQSBhbmQgQWxpZ25tZW50IFVwZGF0ZXMqKgoKUmlnaHQsIHRpbWUgdG8gZm9jdXMgb24gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb29wIGRldmljZSBoYW5kbGVzIERNQSB0cmFuc2ZlcnMgYW5kIGFsaWdubWVudC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgZnVuY3Rpb25zIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCBhbmQgYGxvb3Bfc2V0X2RtYV9saW1pdGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlc2UgYXJlIGNyaXRpY2FsIGZvciBlbnN1cmluZyBlZmZpY2llbnQgSS9PIGFuZCBwcmV2ZW50aW5nIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciwgZXZlbiB3b3JzZSwgZGF0YSBjb3JydXB0aW9uLCB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlJiMzOTtzIHNldHVwIGFuZCBvcGVyYXRpb24sIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gRE1BIGNvbnN0cmFpbnRzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGFsZ29yaXRobXMgdXNlZCBmb3IgYWxpZ25tZW50LCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBhcmlzZSB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIGlzIGxpa2VseSB3aGVyZSBhbnkgc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byBsb29wIGRldmljZSBmdW5jdGlvbmFsaXR5IHdvdWxkIGJlIGhpZGluZy4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTQzOT1zdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6NDUxOnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1Mi17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9NTE2PXN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjMtXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUyNDpcdGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQobG8pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtNTI1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAzMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBsb29wX3NldF9kbWFfbGltaXRgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbG9vcF9zZXRfZG1hX2xpbWl0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24g4oCTIGlzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybSBvciBhIG1vcmUgZ2VuZXJpYyBETUEgKERpcmVjdCBNZW1vcnkgQWNjZXNzKSBpbXBsZW1lbnRhdGlvbj8gVGhlIG5hbWluZyBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNldHRpbmcgc29tZSBzb3J0IG9mIHVwcGVyIGJvdW5kLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBzaXplIG9yIG51bWJlciBvZiBETUEgdHJhbnNmZXJzIHdpdGhpbiBhIGxvb3AuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCYjMzk7cyB0aGUgdHlwaWNhbCB1c2UgY2FzZT8gSXMgdGhpcyBmb3IgcHJldmVudGluZyBvdmVyZmxvdyBpbiBhIHNwZWNpZmljIHJlZ2lzdGVyLCBtYW5hZ2luZyBtZW1vcnkgYmFuZHdpZHRoLCBvciBpbXBvc2luZyBhIGxpbWl0YXRpb24gZm9yIHNhZmV0eSByZWFzb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBsb29wIHJlcHJlc2VudHMuIElzIGl0IGFuIGlubmVyIGxvb3Agd2l0aGluIGEgbW9yZSBjb21wbGV4IGFsZ29yaXRobSwgb3IgdGhlIHByaW1hcnkgbG9vcD8KCkkmIzM5O2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgZnVuY3Rpb24mIzM5O3MgZGVjbGFyYXRpb24gdG8gc2VlIHRoZSBhcmd1bWVudHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGludGVnZXIgbGltaXQsIG9yIGlzIHRoZXJlIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggaW52b2x2ZWQsIGxpa2UgYSBzdHJ1Y3R1cmUgd2l0aCB1cHBlciBhbmQgbG93ZXIgYm91bmQgZGVmaW5pdGlvbnM/IEFsc28sIGFyZSB3ZSBwb3RlbnRpYWxseSBzZXR0aW5nIGJvdW5kcyBvbiBpbmRpdmlkdWFsIGNoYW5uZWwgbG9vcHMsIG9yIHRoZSB3aG9sZSBvcGVyYXRpb24uIEkmIzM5O20ga2VlbiB0byBleGFtaW5lIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgdGhhdCBtaWdodCBuZWVkIGF0dGVudGlvbi4KCkkgbmVlZCB0byBzZWUgaG93IHRoZSBsaW1pdCBpcyAqdXNlZCouIFdoZXJlIGlzIHRoaXMgdmFyaWFibGUgYWNjZXNzZWQgd2l0aGluIHRoZSBsb29wPyBJcyBpdCBjaGVja2VkIHdpdGhpbiB0aGUgRE1BIHRyYW5zZmVyIGl0c2VsZj8gSXMgaXQgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9yIHRoZSBzaXplIG9mIGEgYnVmZmVyPyBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gdGhpcyBsaW1pdCwgd2hhdCBoYXBwZW5zIGlmIHRoZSBsb29wIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIGRtYSBsaW1pdD8KCkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGxvb3Bfc2V0X2RtYV9saW1pdGAgZml0cyBpbnRvIHRoZSBsYXJnZXIgRE1BIHBpY3R1cmUgdG8gY29uZmlybSB0aGF0IGl0JiMzOTtzIGNvcnJlY3RseSBwcmV2ZW50aW5nIHByb2JsZW1zLCBub3QgY3JlYXRpbmcgdGhlbS4gSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBib3R0bGVuZWNrcywgb3IgZXZlbiBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyByZWxhdGVkIHRvIERNQSBwZXJmb3JtYW5jZSBvciBkYXRhIGludGVncml0eS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3Bfc2V0X2RtYV9saW1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTk0Nz1zdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NTQtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NTU6c3RhdGljIHZvaWQgbG9vcF9zZXRfZG1hX2xpbWl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1Ni17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9OTY4PXN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTg4LVx0bGltLVx1MDAzZWlvX21pbiA9IGJzaXplO1xuZHJpdmVycy9ibG9jay9sb29wLmM6OTg5Olx0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBsaW0pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtOTkwLVx0bGltLVx1MDAzZWZlYXR1cmVzIFx1MDAyNj0gfihCTEtfRkVBVF9XUklURV9DQUNIRSB8IEJMS19GRUFUX1JPVEFUSU9OQUwpO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0NDE9c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2NC1cdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ2NTpcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgXHUwMDI2bGltKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjYtXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NDYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTG9vcCBEZXZpY2UgUGF0Y2gqKgoKT2theSwgdGhpcyBwYXRjaCBsb29rcyBzb2xpZCwgZGVmaW5pdGVseSB3b3J0aCBkZWRpY2F0aW5nIHNvbWUgZnV6emluZyB0aW1lIHRvLiBMZXQmIzM5O3MgZ2V0IGEgcGxhbiB0b2dldGhlci4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSB0aGlua2luZyB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUgbW9zdCByZWxldmFudDogYEJMS19ERVZfTE9PUGAsIGBCTEtfREVWX1pPTkVEX0xPT1BgLCBhbmQgYEZTX0lPTUFQYC4gV2hpbGUgYEZTX0lPTUFQYCBtaWdodCBiZSBpbXBsaWNpdGx5IGVuYWJsZWQgd2l0aCBYRlMgb3IgZXh0NCwgaXQmIzM5O3MgZ29vZCB0byBiZSBleHBsaWNpdCBhYm91dCBpdC4KCk5vdywgZm9yIGZvY3VzIHN5bWJvbHMsIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIHRoZSBmb2xsb3dpbmc6IGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLCBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAsIGBsb29wX3NldF9kbWFfbGltaXRgLCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgLCBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAsIGFuZCBgX19ibGtkZXZfZGlyZWN0X0lPYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBwcmltZSBzcG90cyB3aGVyZSB0aGUgcGF0Y2jigJlzIGxvZ2ljIGludGVyYWN0cyB3aXRoIHRoZSBleGlzdGluZyBjb2RlLCBpbmNyZWFzaW5nIHRoZSByaXNrIHN1cmZhY2UuCgpKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBJIG5lZWQgdG8gY29uZmlybSBgRlNfSU9NQVBgIGlzIGFjdHVhbGx5IGEgY29uZmlndXJhYmxlIGl0ZW0uIEl0IGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipJbnRlcm5hbCBBdWRpdCBvZiBgRlNfSU9NQVBgIGFuZCBEaXJlY3QgSS9PIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBgRlNfSU9NQVBgLi4uIHllYWgsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIGNvbmZpZyBvcHRpb24uIEdvdHRhIGtlZXAgdGhhdCBzdHJhaWdodCBpbiBteSBoZWFkLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCB0aGUgaW52ZXN0aWdhdGlvbiwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBfX2Jsa2Rldl9kaXJlY3RfSU9gIGlzIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGUgZnVuY3Rpb24gSSYjMzk7bSBsb29raW5nIGF0LiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhhdCB0byBhdm9pZCB3YXN0aW5nIHRpbWUgb24gYSByZWQgaGVycmluZy4gTmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBkZWFscyB3aXRoIGRpcmVjdCBJL08gZm9yIGJsb2NrIGRldmljZXMuIE15IG1lbW9yeSBpcyBnb29kLCBidXQgYSBxdWljayBjb25maXJtYXRpb24gbmV2ZXIgaHVydHMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCB0YXJnZXQgYmVmb3JlIEkgZGlnIGluIGFueSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYmxrZGV2X2RpcmVjdF9JTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2ZvcHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9mb3BzLmM9NDY9c3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svZm9wcy5jLTU0LVxuYmxvY2svZm9wcy5jOjU1OnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxuYmxvY2svZm9wcy5jLTU2LVx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4tLVxuYmxvY2svZm9wcy5jPTEzMT1zdGF0aWMgdm9pZCBibGtkZXZfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svZm9wcy5jLTE3NC1cbmJsb2NrL2ZvcHMuYzoxNzU6c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuYmxvY2svZm9wcy5jLTE3Ni1cdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbmJsb2NrL2ZvcHMuYz0yOTQ9c3RhdGljIHZvaWQgYmxrZGV2X2Jpb19lbmRfaW9fYXN5bmMoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2ZvcHMuYy0zMjEtXG5ibG9jay9mb3BzLmM6MzIyOnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5ibG9jay9mb3BzLmMtMzIzLVx0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuYmxvY2svZm9wcy5jPTM5Nj1zdGF0aWMgc3NpemVfdCBibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmJsb2NrL2ZvcHMuYy00MzAtXHRcdGlmIChpc19zeW5jX2tpb2NiKGlvY2IpKVxuYmxvY2svZm9wcy5jOjQzMTpcdFx0XHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShpb2NiLCBpdGVyLCBiZGV2LFxuYmxvY2svZm9wcy5jLTQzMi1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzKTtcbmJsb2NrL2ZvcHMuYzo0MzM6XHRcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoaW9jYiwgaXRlciwgYmRldiwgbnJfcGFnZXMpO1xuYmxvY2svZm9wcy5jLTQzNC1cdH0gZWxzZSBpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9BVE9NSUMpIHtcbi0tXG5ibG9jay9mb3BzLmMtNDM2LVx0fVxuYmxvY2svZm9wcy5jOjQzNzpcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU8oaW9jYiwgaXRlciwgYmRldiwgYmlvX21heF9zZWdzKG5yX3BhZ2VzKSk7XG5ibG9jay9mb3BzLmMtNDM4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxOTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbmZpcm1pbmcgRGlyZWN0IEkvTyBhbmQgRGlnZ2luZyBEZWVwZXIqKgoKWWVzLCBgX19ibGtkZXZfZGlyZWN0X0lPYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyB1c2VkIGhlcmUuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGJsb2NrIGxheWVyJiMzOTtzIGRpcmVjdCBJL08gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBgYmlvYCBzdHJ1Y3R1cmUgYW5kIHRoZSBJL08gdmVjdG9yIChgaW92YCkuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBiaW9faW92X2J2ZWNfYWxpZ25lZGAgaW4gYGJsb2NrL2Jpby5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWxpZ25tZW50IGxvZ2ljIGlzIGxpa2VseSB0byByZXNpZGUsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyBpdCByZWxhdGVzIHRvIGBidmVjYCBhbGlnbm1lbnQgd2lsbCBiZSBrZXkgdG8gbWFraW5nIHRoZSByZWxldmFudCBkZXRlcm1pbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW9faW92X2J2ZWNfYWxpZ25lZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jpby5jPTExOTM9c3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5ibG9jay9iaW8uYy0xMjIzLSNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMXG5ibG9jay9iaW8uYzoxMjI0OnN0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW92X2J2ZWNfYWxpZ25lZChjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9iaW8uYy0xMjI1LVx0XHRcdFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcbi0tXG5ibG9jay9iaW8uYy0xMjM5LSNlbHNlXG5ibG9jay9iaW8uYzoxMjQwOnN0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW92X2J2ZWNfYWxpZ25lZChjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9iaW8uYy0xMjQxLVx0XHRcdFx0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaylcbi0tXG5ibG9jay9iaW8uYz0xMjc5PWludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmJsb2NrL2Jpby5jLTEyODktXG5ibG9jay9iaW8uYzoxMjkwOlx0XHRpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKVxuYmxvY2svYmlvLmMtMTI5MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERldmljZSBJL08gTWFwcGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBkaWcgaW50byB0aGlzIEkvTyBtYXBwaW5nIHByb2Nlc3MuIFdoaWxlIGBiaW9faW92X2J2ZWNfYWxpZ25lZGAgKmlzKiBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIG1ha2luZyBpdCBhIHBvdGVudGlhbGx5IGxlc3MtdGhhbi1pZGVhbCBmb2N1cyBmb3IgZGVlcC1kaXZlIGFuYWx5c2lzLCB0aGUgZnVuY3Rpb24gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGxvb2tzIGxpa2UgYSBtb3JlIHByb21pc2luZyBlbnRyeSBwb2ludC4gSXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBwcm92aWRlIGEgZ29vZCB2aWV3IGludG8gaG93IHRoZSBJL08gdmVjdG9ycyBnZXQgdHJhbnNsYXRlZCBpbnRvIHBhZ2Ugc3RydWN0dXJlcyBmb3IgYSBiaW8uCgpUaGVyZWZvcmUsIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYGJpb19tYXBfdXNlcl9pb3ZgIHdpdGhpbiBgYmxvY2svYmxrLW1hcC5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIGFyZWEgb2YgZm9jdXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB1c2VyLXNwYWNlIEkvTyB2ZWN0b3JzIGFyZSBoYW5kbGVkIGluIHRoaXMgbWFwcGluZyBmdW5jdGlvbi4gSXQgaXMgbGlrZWx5IHRoYXQgdGhpcyBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdHJhbnNsYXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX21hcF91c2VyX2lvdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstbWFwLmM9MTUwPXN0YXRpYyBpbnQgYmlvX2NvcHlfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgcnFfbWFwX2RhdGEgKm1hcF9kYXRhLFxuLS1cbmJsb2NrL2Jsay1tYXAuYy0yNTktXG5ibG9jay9ibGstbWFwLmM6MjYwOnN0YXRpYyBpbnQgYmlvX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmJsb2NrL2Jsay1tYXAuYy0yNjEtXHRcdGdmcF90IGdmcF9tYXNrKVxuLS1cbmJsb2NrL2Jsay1tYXAuYz00OTk9aW50IGJsa19ycV9tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSxcbi0tXG5ibG9jay9ibGstbWFwLmMtNTM0LVx0XHRlbHNlXG5ibG9jay9ibGstbWFwLmM6NTM1Olx0XHRcdHJldCA9IGJpb19tYXBfdXNlcl9pb3YocnEsIFx1MDAyNmksIGdmcF9tYXNrKTtcbmJsb2NrL2Jsay1tYXAuYy01MzYtXHRcdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNjAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSU8gVmVjdG9yIEluc3BlY3Rpb24qKgoKQWxyaWdodCwgYGJpb19tYXBfdXNlcl9pb3ZgLi4uIHllYWgsIHRoYXQmIzM5O3MgYSBzb2xpZCBmdW5jdGlvbi4gSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGF0LiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY3J1Y2lhbCBjb25uZWN0aW9ucyBpbiB0aGUgSU8gcGF0aCwgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlc2AuIFRoYXQmIzM5O3MgaW4gYGJsb2NrL2ZvcHMuY2AsIHJpZ2h0PyBHb29kLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBJTyB2ZWN0b3JzIGFyZSBiZWluZyBwcm9wZXJseSBoYW5kbGVkIHRocm91Z2ggdG8gdGhlIGJsb2NrIGRldmljZSBsYXllci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSB0cmFuc2ZlciBpcyBjb2hlcmVudCBhbmQgZWZmaWNpZW50IGFuZCB0aGF0IGFueSBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgaW4gdGhpcyBhcmVhIGFyZW4mIzM5O3QgYmVjb21pbmcgYSBib3R0bGVuZWNrLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2ZvcHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9mb3BzLmM9Mzk9c3RhdGljIGJvb2wgYmxrZGV2X2Rpb19pbnZhbGlkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBraW9jYiAqaW9jYixcbi0tXG5ibG9jay9mb3BzLmMtNDUtXG5ibG9jay9mb3BzLmM6NDY6c3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9mb3BzLmMtNDctXHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5ibG9jay9mb3BzLmM9NTU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuYmxvY2svZm9wcy5jLTg2LVxuYmxvY2svZm9wcy5jOjg3Olx0cmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhcdTAwMjZiaW8sIGl0ZXIsIGJkZXYpO1xuYmxvY2svZm9wcy5jLTg4LVx0aWYgKHVubGlrZWx5KHJldCkpXG4tLVxuYmxvY2svZm9wcy5jPTE3NT1zdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuYmxvY2svZm9wcy5jLTIxOC1cbmJsb2NrL2ZvcHMuYzoyMTk6XHRcdHJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTtcbmJsb2NrL2ZvcHMuYy0yMjAtXHRcdGlmICh1bmxpa2VseShyZXQpKSB7XG4tLVxuYmxvY2svZm9wcy5jPTMyMj1zdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmJsb2NrL2ZvcHMuYy0zNTMtXHR9IGVsc2Uge1xuYmxvY2svZm9wcy5jOjM1NDpcdFx0cmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpO1xuYmxvY2svZm9wcy5jLTM1NS1cdFx0aWYgKHVubGlrZWx5KHJldCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEJsb2NrIERldmljZSBJL08gQWxpZ25tZW50KioKCkFscmlnaHQsIHNvIGBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzYCBpcyBhICpzdGF0aWMgaW5saW5lKiBmdW5jdGlvbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZCwgYXMgaXQgbWVhbnMgdGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IG9wdGltaXplIGl0IGhlYXZpbHksIHBvdGVudGlhbGx5IGlubGluaW5nIGl0cyBsb2dpYyBkaXJlY3RseS4gTWFrZXMgZGVidWdnaW5nIGEgYml0IGhhcmRlciBpZiB5b3UmIzM5O3JlIG5vdCBjYXJlZnVsLCBidXQgdXN1YWxseSBpdCYjMzk7cyBhIG5ldCB3aW4gZm9yIHBlcmZvcm1hbmNlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYWxpZ25tZW50IGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxvb3AgZGV2aWNlLiBHaXZlbiB0aGF0IGNvbnRleHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgbG9vcCBkcml2ZXIgbWFuYWdlcyBhbGlnbm1lbnQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBxdWlya3Mgd2hlbiBkZWFsaW5nIHdpdGggZGlyZWN0IEkvTyBhbmQsIG1vcmUgYnJvYWRseSwgYmxvY2sgZGV2aWNlIGludGVyYWN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSB3aXRoIHRob3NlIGRpcmVjdCBJTyBhbGlnbm1lbnQgY29uc2lkZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz00Mzk9c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1MC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ1MTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTIte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTUxNj1zdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTIzLVx0XHRsby1cdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MjQ6XHRsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KGxvKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDMyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gRGlyZWN0IEkvTyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGRpcmVjdCBJL08gaXMgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAsIGBsb29wX3NldF9kbWFfbGltaXRgLCBhbmQgYGxvb3Bfc2V0X2Rpb2AgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IOKAkyBpdCBzdWdnZXN0cyB0aGV5IGFyZSBsb2NhbCB0byB0aGUgbW9kdWxlIG9yIGNvbXBpbGF0aW9uIHVuaXQgYW5kIGFyZW4mIzM5O3QgbWVhbnQgdG8gYmUgdXNlZCBleHRlcm5hbGx5LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkYXRhIHRyYW5zZmVyIGFjdHVhbGx5IGhhcHBlbnMgaW4gdGhlIGNvbnRleHQgb2YgYGlvbWFwYCwgSSBuZWVkIHRvIGRpdmUgaW50byBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIGlzIGRvaW5nOyB0aGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWluIHdvcmsgaGFwcGVucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJL08gb3BlcmF0aW9ucyBhcmUgYnJva2VuIGRvd24sIG1hcHBlZCB0byB1bmRlcmx5aW5nIGJsb2NrIGRldmljZXMsIGFuZCBob3cgZGF0YSB0cmFuc2ZlciBpcyBpbml0aWF0ZWQsIGFuZCB0aGVzZSBmdW5jdGlvbnMgc2VlbSBsaWtlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBrZXkgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fYmlvX2l0ZXJfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9Mjk4PXN0YXRpYyBpbnQgaW9tYXBfZGlvX3plcm8oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zMzMtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzozMzQ6c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTMzNS1cdFx0c3RydWN0IGlvbWFwX2RpbyAqZGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgYWxpZ25tZW50LFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQwMj1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0Ni1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU0NzpcdFx0cmV0ID0gaW9tYXBfZGlvX2Jpb19pdGVyX29uZShpdGVyLCBkaW8sIHBvcywgYWxpZ25tZW50LCBiaW9fb3BmKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0OC1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBEZWVwIEVuZDogYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgLiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGFuIGludGVybmFsIHV0aWxpdHksIHNjb3BlZCB0byBhIHNwZWNpZmljIGNvbnRleHQsIHByb2JhYmx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgSS9PIG1hcHBpbmcgbGF5ZXIuIE15IGd1dCB0ZWxscyBtZSBpdCYjMzk7cyBoYW5kbGluZyBhIGNydWNpYWwgcGllY2Ugb2YgRGlyZWN0IEkvTyAoRElPKSBhbmQgcG90ZW50aWFsbHkgYmxvY2sgSS9PIGl0ZXJhdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9ucyB1c2VkIGluIHRoZSBrZXJuZWwsIEkmIzM5O2QgZ3Vlc3MgdGhhdCBpdCBoYW5kbGVzIGEgc2luZ2xlIEkvTyBvcGVyYXRpb24gaXRlcmF0aW9uLiBUaGUgYF9iaW9fYCBwYXJ0IG9mIHRoZSBmdW5jdGlvbiBuYW1lIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbiBpcyB0aWdodGx5IGNvdXBsZWQgdG8gYmlvIG9yIGJpbyBpdGVyYXRvcnMuCgpMZXQmIzM5O3Mgc2Vl4oCmIEnigJlsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIGZ1bmN0aW9uLiBUaGUgbmFtaW5nIG9mIHRoZSBmdW5jdGlvbiBzb3VuZHMgbGlrZSBhbiBpb3ZlYyBpdGVyYXRvciBhbmQgYnVmZmVyIHZlY3RvciBleHRyYWN0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZC4gVGhpcyBpcyBsaWtlbHkgaG93IHdlJiMzOTtyZSBleHRyYWN0aW5nIGRhdGEsIHBvc3NpYmx5IGZyb20gYW4gaW92ZWMgc3RydWN0dXJlLCB0byBjcmVhdGUgYSBidWZmZXIgdmVjdG9yIGZvciBJL08gb3BlcmF0aW9ucy4gU2luY2UgdGhlIGZ1bmN0aW9uIGlzIGxvY2F0ZWQgaW4gYGxpYi9pb3ZfaXRlci5jYCwgaXQgY29uZmlybXMgdGhlIGl0ZXJhdG9yIGRlc2lnbi4gSSBleHBlY3QgdGhhdCBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbCB5aWVsZCBkZWVwZXIgaW5zaWdodHMgaW50byBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIERJTyBhbmQgZGF0YSB0cmFuc2ZlciB3aXRoaW4gdGhlIEkvTyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL2lvdl9pdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL2lvdl9pdGVyLmM9MTg0OT1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubGliL2lvdl9pdGVyLmMtMTg4Mi0vKipcbmxpYi9pb3ZfaXRlci5jOjE4ODM6ICogaW92X2l0ZXJfZXh0cmFjdF9idmVjcyAtIEV4dHJhY3QgYnZlY3MgZnJvbSBhbiBpdGVyYXRvclxubGliL2lvdl9pdGVyLmMtMTg4NC0gKiBAaXRlcjpcdHRoZSBpdGVyYXRvciB0byBleHRyYWN0IGZyb21cbi0tXG5saWIvaW92X2l0ZXIuYy0xODk5LSAqL1xubGliL2lvdl9pdGVyLmM6MTkwMDpzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG5saWIvaW92X2l0ZXIuYy0xOTAxLVx0XHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxuLS1cbmxpYi9pb3ZfaXRlci5jLTE5NTEtfVxubGliL2lvdl9pdGVyLmM6MTk1MjpFWFBPUlRfU1lNQk9MX0dQTChpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2OTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBUaGlua2luZyBvbiBLZXkgU3ltYm9scyoqCgpPa2F5LCBzbyBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgaXMgbWFya2VkIHdpdGggYEVYUE9SVF9TWU1CT0xfR1BMYC4gVGhhdOKAmXMgZ29vZCBpbmZvcm1hdGlvbiBmb3IgbWUgdG8gc3RhcnQgd2l0aC4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzIGluIHRoZSBrZXJuZWw6IGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIChvYnZpb3VzbHkpLCBgbG9vcF9zZXRfZGlvYCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgLCBhbmQgZmluYWxseSwgYF9fYmxrZGV2X2RpcmVjdF9JT2AuCgpOb3csIGJlZm9yZSBJIGRpZyBpbiB0b28gZGVlcGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBsb29wX3NldF9kaW9gIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gSXQmIzM5O3MgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBhIGRlYWQgZW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX3NldF9kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDI4PXN0YXRpYyBpbnQgbG9vcF9zZXRfY2FwYWNpdHkoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDQwLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ0MTpzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NDIte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1MTk9c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTMxLVx0Y2FzZSBMT09QX1NFVF9ESVJFQ1RfSU86XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTMyOlx0XHRlcnIgPSBsb29wX3NldF9kaW8obG8sIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTMzLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgSU9DVEwgQWNjZXNzaWJpbGl0eSBhbmQgQmxvY2sgU2l6ZSoqCgpSaWdodCwgc28gYGxvb3Bfc2V0X2Rpb2AgaXMgZGVmaW5pdGVseSBleHBvc2VkIHRocm91Z2ggYW4gaW9jdGwsIHdoaWNoIEkgc3VzcGVjdGVkLiBUaGF0JiMzOTtzIGdvb2QgdG8gY29uZmlybS4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgIGZ1bmN0aW9uIGFnYWluLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkmIzM5O2xsIG1lbnRhbGx5IHJ1biB0aHJvdWdoIGl0cyBsb2dpYyBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLi4uIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBnb3RjaGFzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcGF0aHMgdGhhdCBJJiMzOTttIG92ZXJsb29raW5nLiBHb3R0YSBrZWVwIHRoZSBkZXRhaWxzIHN0cmFpZ2h0LiBJdCYjMzk7cyB0aGUgZnVuZGFtZW50YWxzIHRoYXQgc29tZXRpbWVzIGNhdGNoIHlvdSBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wX2dldF9ibG9ja19zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz0xMDE2PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqemxvb3BfZmlscF9vcGVuX2ZtdChpbnQgb2ZsYWdzLCB1bW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMzMtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzNDpzdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDM1LVx0XHRcdFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTEwNzU9c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMC1cdFx0aWYgKCF6bG8tXHUwMDNlYmxvY2tfc2l6ZSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMTE6XHRcdFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEyLVx0XHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTAtXHRpZiAoIXpsby1cdTAwM2VibG9ja19zaXplKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MTpcdFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUyLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTY6XHR6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmVhY2hpbmcgZm9yIHRoZSBCbG9jayBTaXplKioKCkFscmlnaHQsIHNvIGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgaXMgaW5kZWVkIHJlYWNoYWJsZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYF9fYmxrZGV2X2RpcmVjdF9JT2AuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYmxvY2sgc2l6ZSB3ZSYjMzk7dmUganVzdCBjb25maXJtZWQuIEtub3dpbmcgaG93IGRpcmVjdCBJL08gaXMgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGUgYmxvY2sgc2l6ZSBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGJlaGF2aW91ci4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgdGhhdCB3ZSBjYW4gZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYmxrZGV2X2RpcmVjdF9JTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2ZvcHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9mb3BzLmM9NDY9c3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svZm9wcy5jLTU0LVxuYmxvY2svZm9wcy5jOjU1OnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxuYmxvY2svZm9wcy5jLTU2LVx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4tLVxuYmxvY2svZm9wcy5jPTEzMT1zdGF0aWMgdm9pZCBibGtkZXZfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svZm9wcy5jLTE3NC1cbmJsb2NrL2ZvcHMuYzoxNzU6c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuYmxvY2svZm9wcy5jLTE3Ni1cdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbmJsb2NrL2ZvcHMuYz0yOTQ9c3RhdGljIHZvaWQgYmxrZGV2X2Jpb19lbmRfaW9fYXN5bmMoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2ZvcHMuYy0zMjEtXG5ibG9jay9mb3BzLmM6MzIyOnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5ibG9jay9mb3BzLmMtMzIzLVx0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuYmxvY2svZm9wcy5jPTM5Nj1zdGF0aWMgc3NpemVfdCBibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmJsb2NrL2ZvcHMuYy00MzAtXHRcdGlmIChpc19zeW5jX2tpb2NiKGlvY2IpKVxuYmxvY2svZm9wcy5jOjQzMTpcdFx0XHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShpb2NiLCBpdGVyLCBiZGV2LFxuYmxvY2svZm9wcy5jLTQzMi1cdFx0XHRcdFx0XHRcdG5yX3BhZ2VzKTtcbmJsb2NrL2ZvcHMuYzo0MzM6XHRcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoaW9jYiwgaXRlciwgYmRldiwgbnJfcGFnZXMpO1xuYmxvY2svZm9wcy5jLTQzNC1cdH0gZWxzZSBpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9BVE9NSUMpIHtcbi0tXG5ibG9jay9mb3BzLmMtNDM2LVx0fVxuYmxvY2svZm9wcy5jOjQzNzpcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU8oaW9jYiwgaXRlciwgYmRldiwgYmlvX21heF9zZWdzKG5yX3BhZ2VzKSk7XG5ibG9jay9mb3BzLmMtNDM4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUmVhY2hpbmcgYSBCbG9jayBEZXZpY2UqKgoKQWxyaWdodCwgc28gYF9fYmxrZGV2X2RpcmVjdF9JT2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEdvb2QsIGdvb2QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwYXRoLCBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0IG9mIHdoYXRldmVyIHRyaWdnZXJzIHRoaXMuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBkaXZlIGludG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGlzbiYjMzk7dCBpdD8gTGV0JiMzOTtzIHRyYWNlIGhvdyB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdHMgYXJlIGJlaW5nIHBvcHVsYXRlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHBhZ2UgcGlubmluZyBzdHJhdGVneSBhbmQgcG90ZW50aWFsIGRhdGEgY29weWluZyBvciBtYXBwaW5nIGdvaW5nIG9uLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGludGVyYWN0aW9uIG9mIHRoZSBpdGVyYXRvcnMgaGVyZTsgaG93IG11Y2ggZGF0YSBjYW4gYmUgcHJvY2Vzc2VkIHBlciBpdGVyYXRpb24gYW5kIHdoYXQgaGFwcGVucyBpbiBlZGdlIGNhc2VzLiBXaGF0IEkmIzM5O20gcmVhbGx5IGxvb2tpbmcgZm9yIGlzIGhvdyB0aGlzIGltcGFjdHMgbWVtb3J5IHV0aWxpemF0aW9uLCBob3cgbXVjaCBkYXRhIGlzIGdldHRpbmcgcHVsbGVkIGZyb20gdXNlciBzcGFjZSAoaWYgYXQgYWxsKS4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSB3YXRjaGluZyBmb3IgYW55IG9idmlvdXMgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBpc3N1ZXMsIGxpa2UgaG93IHRoZSBwYWdlcyBhcmUgYmVpbmcgaGFuZGxlZCBpbiByZWxhdGlvbiB0byBETUEuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIHN5c3RlbSBjYW4gcHJvcGVybHkgaGFuZGxlIHRoZSBzaXR1YXRpb24gd2hlbiBJL08gc2l6ZXMgYXJlIGxhcmdlciB0aGFuIHRoZSBwaHlzaWNhbCBtZW1vcnkgYWxsb2NhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MTE3Nz12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuYmxvY2svYmlvLmMtMTE4OS0gKiBBbGlnbnMgdGhlIGJpbyBzaXplIHRvIHRoZSBsZW5fYWxpZ25fbWFzaywgcmVsZWFzaW5nIGV4Y2Vzc2l2ZSBiaW8gdmVjcyB0aGF0XG5ibG9jay9iaW8uYzoxMTkwOiAqIF9fYmlvX2lvdl9pdGVyX2dldF9wYWdlcyBtYXkgaGF2ZSBpbnNlcnRlZCwgYW5kIHJldmVydHMgdGhlIHRyaW1tZWQgbGVuZ3RoXG5ibG9jay9iaW8uYy0xMTkxLSAqIGZvciB0aGUgbmV4dCBpdGVyYXRpb24uXG4tLVxuYmxvY2svYmlvLmM9MTI0MD1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuLS1cbmJsb2NrL2Jpby5jLTEyNTYtLyoqXG5ibG9jay9iaW8uYzoxMjU3OiAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW9cbmJsb2NrL2Jpby5jLTEyNTgtICogQGJpbzogYmlvIHRvIGFkZCBwYWdlcyB0b1xuLS1cbmJsb2NrL2Jpby5jLTEyNjYtICogbWFwIHRoZW0gaW50byB0aGUga2VybmVsLiBPbiBJTyBjb21wbGV0aW9uLCB0aGUgY2FsbGVyIHNob3VsZCBwdXQgdGhvc2VcbmJsb2NrL2Jpby5jOjEyNjc6ICogcGFnZXMuIEZvciBidmVjIGJhc2VkIGl0ZXJhdG9ycyBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkgdXNlcyB0aGUgcHJvdmlkZWRcbmJsb2NrL2Jpby5jLTEyNjgtICogYnZlY3MgcmF0aGVyIHRoYW4gY29weWluZyB0aGVtLiBIZW5jZSBhbnlvbmUgaXNzdWluZyBraW9jYiBiYXNlZCBJTyBuZWVkc1xuLS1cbmJsb2NrL2Jpby5jLTEyNzgtICovXG5ibG9jay9iaW8uYzoxMjc5OmludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuYmxvY2svYmlvLmMtMTI4MC1cdFx0XHQgICB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzQ1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSS9PIEl0ZXJhdGlvbioqCgpPa2F5LCBzbyBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgSS9PIGZsb3cuIExldCYjMzk7cyB0cmFjZSB0aGlzIGJhY2suIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBob3cgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIGludGVyYWN0cyB3aXRoIGl0LiBUaGlzIHByb2JhYmx5IGdpdmVzIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgbW92ZW1lbnQgcHJvY2VzcyB3aXRoaW4gdGhlIERpcmVjdCBJL08gY29udGV4dCBhbmQgd2hlcmUgdGhlIHBhZ2UgaW5mb3JtYXRpb24gaXMgYmVpbmcgZXh0cmFjdGVkIG9yIHV0aWxpemVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fYmlvX2l0ZXJfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9Mjk4PXN0YXRpYyBpbnQgaW9tYXBfZGlvX3plcm8oY29uc3Qgc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zMzMtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzozMzQ6c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTMzNS1cdFx0c3RydWN0IGlvbWFwX2RpbyAqZGlvLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgYWxpZ25tZW50LFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQwMj1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0Ni1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU0NzpcdFx0cmV0ID0gaW9tYXBfZGlvX2Jpb19pdGVyX29uZShpdGVyLCBkaW8sIHBvcywgYWxpZ25tZW50LCBiaW9fb3BmKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0OC1cdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGFuZCBEYXRhIE1hcHBpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdpdGhpbiB0aGlzIGNvbnRleHQuIFRoYXTigJlzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBhbmQgbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBiaW9fbWFwX3VzZXJfaW92YC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gbWFwcGluZyB1c2VyLXNwYWNlIEkvTyB2ZWN0b3JzIChpb3ZzKSB0byB0aGUgdW5kZXJseWluZyBibG9jayBJL08gKGJpbykgc3RydWN0dXJlLCBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbWFwcGluZyBhbmQgZGF0YSBtb3ZlbWVudCBsb2dpYyB3aWxsIHJlc2lkZSwgYW5kIHdoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyByZWxhdGVkIHRvIGRpcmVjdCBJL08gKERJTykgbWlnaHQgYmUgZm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jpb19tYXBfdXNlcl9pb3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1hcC5jPTE1MD1zdGF0aWMgaW50IGJpb19jb3B5X3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHJxX21hcF9kYXRhICptYXBfZGF0YSxcbi0tXG5ibG9jay9ibGstbWFwLmMtMjU5LVxuYmxvY2svYmxrLW1hcC5jOjI2MDpzdGF0aWMgaW50IGJpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5ibG9jay9ibGstbWFwLmMtMjYxLVx0XHRnZnBfdCBnZnBfbWFzaylcbi0tXG5ibG9jay9ibGstbWFwLmM9NDk5PWludCBibGtfcnFfbWFwX3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4tLVxuYmxvY2svYmxrLW1hcC5jLTUzNC1cdFx0ZWxzZVxuYmxvY2svYmxrLW1hcC5jOjUzNTpcdFx0XHRyZXQgPSBiaW9fbWFwX3VzZXJfaW92KHJxLCBcdTAwMjZpLCBnZnBfbWFzayk7XG5ibG9jay9ibGstbWFwLmMtNTM2LVx0XHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeTogRGlyZWN0IElPIHdpdGggQmxvY2sgRGV2aWNlcyoqCgpPa2F5LCBpdCBzZWVtcyB0aGF0IGBiaW9fbWFwX3VzZXJfaW92YCBpcyBkZWZpbml0aXZlbHkgcmVhY2hhYmxlLCB3aGljaCBnaXZlcyB1cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBkaXJlY3QgSS9PIHBhdGguIE15IGZvY3VzIGlzIG5vdyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLCBgbG9vcF9zZXRfZGlvYCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgLCBgX19ibGtkZXZfZGlyZWN0X0lPYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludCwgYGJpb19tYXBfdXNlcl9pb3ZgLiBUaGlzIHN1aXRlIG9mIGZ1bmN0aW9ucyBsaWtlbHkgaWxsdXN0cmF0ZXMgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gdXNlciBzcGFjZSBJL08gdmVjdG9ycyB0byB0aGUgYmxvY2sgZGV2aWNlIGxldmVsLCBzbyB0aGF0IHNob3VsZCBiZSB0aGUgaGVhcnQgb2YgbXkgYW5hbHlzaXMuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBlbnZpcm9ubWVudCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGFjY291bnRpbmcgZm9yIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBHaXZlbiB0aGlzIGlzIGxpa2VseSBhIHpvbmVkIGJsb2NrIGRldmljZSwgSSB3aWxsIGFzc3VtZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGluY2x1ZGUgYEJMS19ERVZfTE9PUGAsIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBgRlNfSU9NQVBgLiBTcGVjaWZpY2FsbHksIEkgaGF2ZSB0byBkZXRlcm1pbmUgaWYgYEJMS19ERVZfWk9ORURfTE9PUGAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZyBmb3IgdGhpcyBzcGVjaWZpYyBzZXR1cCBhbmQgSSB3aWxsIHdvcmsgdGhyb3VnaCB0aGF0IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1NS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cdHRyaXN0YXRlIFwmIzM0O1pvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIERldmljZSBUeXBlIENvbnN0YW50cyoqCgpBbHJpZ2h0LCBjb25maXJtZWQsIGBCTEtfREVWX1pPTkVEX0xPT1BgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25zdGFudCB3ZSYjMzk7cmUgdXNpbmcuIEdvb2QuIExldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aG91Z2gsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEJMS19ERVZfTE9PUGAgaXMgYWxzbyBhY2N1cmF0ZS4gR290dGEgbWFpbnRhaW4gdGhhdCByaWdvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTE9PUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cdGludCBcJiMzNDtOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTg2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIEtlcm5lbCBNb2R1bGUgSWRlbnRpZmljYXRpb24qKgoKUmlnaHQsIGBCTEtfREVWX0xPT1BgICpkb2VzKiBzZWVtIHRvIGJlIHRoZSByZWxldmFudCBtb2R1bGUgZm9yIHRoaXMuIEkmIzM5O3ZlIHNlZW4gdGhhdCBjb25maWd1cmF0aW9uIGJlZm9yZSBpbiBzaW1pbGFyIGNvbnRleHRzLCBhbmQgaXQgYWxpZ25zIHdpdGggd2hhdCBJJiMzOTttIGV4cGVjdGluZy4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgY2hvaWNlIGhlcmUuCgpOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgdmVyaWZ5IHNvbWV0aGluZyBlbHNlLCBhcyBhIG1hdHRlciBvZiBkdWUgZGlsaWdlbmNlLiBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4uIEkgbmVlZCB0byBjb25maXJtIGlmIGBGU19JT01BUGAgYWxzbyBwbGF5cyBhIHJvbGUgaW4gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGl0ICptaWdodCogYmUgcmVsZXZhbnQsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCBpdHMgcHJvcGVydGllcyBpbiB0aGlzIHNpdHVhdGlvbiB0byBjb25maXJtIHdoZXRoZXIgaXQgbmVlZHMgdG8gYmUgaW5jbHVkZWQuIEp1c3QgYSBxdWljayBjaGVjayB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0ODEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEZpbGUgU3lzdGVtIE1hcHBpbmcqKgoKUmlnaHQsIGBGU19JT01BUGAgaXMgZGVmaW5pdGVseSB0aGUgY29ycmVjdCBhcHByb2FjaCBoZXJlLiBNYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LiBOb3csIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBlbHNlIHRoYXQmIzM5O3MgY3JpdGljYWwgaW4gcmVsYXRpb24gdG8gaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJMT0NLYCBpcyB1bmRlcnN0b29kIGNvcnJlY3RseSBpbiB0aGlzIHdob2xlIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWctNC0jXG5ibG9jay9LY29uZmlnOjU6bWVudWNvbmZpZyBCTE9DS1xuYmxvY2svS2NvbmZpZy02LSAgICAgICBib29sIFwmIzM0O0VuYWJsZSB0aGUgYmxvY2sgbGF5ZXJcJiMzNDsgaWYgRVhQRVJUXG4tLVxuYmxvY2svS2NvbmZpZz0yNz1pZiBCTE9DS1xuYmxvY2svS2NvbmZpZy0yOC1cbmJsb2NrL0tjb25maWc6Mjk6Y29uZmlnIEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxuYmxvY2svS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTIxND1jb25maWcgQkxLX1BNXG4tLVxuYmxvY2svS2NvbmZpZy0yMTctIyBkbyBub3QgdXNlIGluIG5ldyBjb2RlXG5ibG9jay9LY29uZmlnOjIxODpjb25maWcgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcbmJsb2NrL0tjb25maWctMjE5LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc5NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgdGhpbmtlcjoKCioqUmVhY2hpbmcgYSBDb25jbHVzaW9uIGFuZCBQbGFubmluZyB0aGUgTmV4dCBTdGVwKioKClllcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgQkxPQ0tgIGlzIHRoZSBjb3JyZWN0IGFuc3dlci4gVGhlIGluaXRpYWwgYW5hbHlzaXMgaG9sZHMuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSBhIGNydWNpYWwgZGV0YWlsLCBzcGVjaWZpY2FsbHkgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGB6bG9vcF9jdGxfYWRkYC4gVGhpcyB3aWxsIGJlIG15IG5leHQgYXJlYSBvZiBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfY3RsX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTE2NT1zdGF0aWMgYm9vbCB6bG9vcF9kZXZfZXhpc3RzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE4My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTg0OnN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTg1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY1OD1zdGF0aWMgc3NpemVfdCB6bG9vcF9jdGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjk2LVx0Y2FzZSBaTE9PUF9DVExfQUREOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE2OTc6XHRcdHJldCA9IHpsb29wX2N0bF9hZGQoXHUwMDI2b3B0cyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY5OC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIFJlYWNoYWJpbGl0eSoqCgpSaWdodCwgc28gYHpsb29wX2N0bF9hZGRgICppcyogZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCB0aGF0IGAvZGV2L3psb29wLWNvbnRyb2xgIHdyaXRlLiBNYWtlcyBzZW5zZTsgdGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZ2V0IGF0IGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjYWxsIGNoYWluLCB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBhbmQgdmVyaWZ5IGlmIGl0JiMzOTtzIGV4cG9zZWQsIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0aHJvdWdoIGFueSBvZiB0aGUgZXhpc3RpbmcgaW50ZXJmYWNlcy4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhlIERpcmVjdCBJL08gKERJTykgYWxpZ25tZW50IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBsb29wIGRyaXZlciBhbmQgd2hldGhlciB0aGVyZSYjMzk7cyBhbiBleGlzdGluZyBtZWNoYW5pc20gdG8gbW9kaWZ5IHRob3NlIHBhcmFtZXRlcnMuIFBlcmhhcHMgaXQmIzM5O3MgY2FsbGVkIGludGVybmFsbHkgYnkgc29tZSBvdGhlciBjb250cm9sIG9wZXJhdGlvbiwgb3IgZXhwb3NlZCBieSBhbm90aGVyIElPQ1RMLiBJIG5lZWQgdG8gZ2V0IHRoaXMgbmFpbGVkIGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz00Mzk9c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1MC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ1MTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTIte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTUxNj1zdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTIzLVx0XHRsby1cdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MjQ6XHRsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KGxvKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWFjaGluZyBLZXkgRnVuY3Rpb25hbGl0eSoqCgpBbHJpZ2h0LCBzbyBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCAqaXMqIHJlYWNoYWJsZSwgdGhhdCYjMzk7cyBnb29kIG5ld3MuIFRoYXQgY29uZmlybXMgdGhlIGluaXRpYWwgc2V0dXAgaXMgd29ya2luZyBhcyBleHBlY3RlZC4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcml0aWNhbDogaXMgYGxvb3Bfc2V0X2RtYV9saW1pdGAgYWN0dWFsbHkgcmVhY2hhYmxlIGZyb20gdGhpcyBwb2ludD8gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28gSSYjMzk7bSBmb2N1c2luZyBteSBtZW50YWwgZW5lcmd5IG9uIGRldGVybWluaW5nICp0aGF0KiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwNDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX3NldF9kbWFfbGltaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz05NDc9c3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtOTU0LVxuZHJpdmVycy9ibG9jay9sb29wLmM6OTU1OnN0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NTYte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTk2OD1zdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk4OC1cdGxpbS1cdTAwM2Vpb19taW4gPSBic2l6ZTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjk4OTpcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgbGltKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk5MC1cdGxpbS1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDQxPXN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjQtXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NjU6XHRsb29wX3NldF9kbWFfbGltaXQobG8sIFx1MDAyNmxpbSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDY2LVx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDA0OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTgxCgkJCQkJCQlvdXRwdXQ6IDI5NAoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTG9vcCBEcml2ZXImIzM5O3MgRE1BIExpbWl0KioKCk9rYXksIGl0JiMzOTtzIGNsZWFyOiBgbG9vcF9zZXRfZG1hX2xpbWl0YCBpcyBpbmRlZWQgYSByZWFjaGFibGUgZnVuY3Rpb24gd2l0aGluIHRoaXMgc3Vic3lzdGVtLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgaW50ZXJhY3Rpb25zIHN1cnJvdW5kaW5nIGl0LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaDoKCiogICBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2Ag4oCTIFRoaXMgb25lIGlzIHByb2JhYmx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBiaW8gaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2VzLgoqICAgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIOKAkyBJIHN1c3BlY3QgdGhpcyBwbGF5cyBhIHJvbGUgaW4gZXh0cmFjdGluZyBkYXRhIGZyb20gaW92ZWNzIGludG8gYmxvY2sgdmVjdG9ycy4KKiAgIGBsb29wX3NldF9kaW9gIOKAkyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIGluIGRpcmVjdGx5IGludGVyYWN0aW5nIHdpdGggdGhlIGJsb2NrIGRldmljZS4KKiAgIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCAtIEVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBvZiBkaXJlY3QgSU8uCiogICBgbG9vcF9zZXRfZG1hX2xpbWl0YCDigJMgT2YgY291cnNlLCB0aGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uLgoqICAgYHpsb29wX2dldF9ibG9ja19zaXplYCDigJMgSSB3aWxsIGhhdmUgdG8gbG9vayBhdCBob3cgdGhlIHpvbmVkIGxvb3AmIzM5O3MgYmxvY2sgc2l6ZSBhZmZlY3RzIHRoZSBhbmFseXNpcy4KKiAgIGB6bG9vcF9jdGxfYWRkYCDigJMgSXMgdGhlIGNvbnRyb2wgZnVuY3Rpb24uCiogICBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAg4oCTIEFub3RoZXIgY3JpdGljYWwgZnVuY3Rpb24gd2l0aGluIHRoZSBkaXJlY3QgSU8gcGF0aC4KKiAgIGBfX2Jsa2Rldl9kaXJlY3RfSU9gIOKAkyBUaGlzIGlzIHRoZSBjb3JlIGRpcmVjdCBJL08gZW50cnkgcG9pbnQgYXQgdGhlIGJsb2NrIGxheWVyLgoqICAgYGJpb19tYXBfdXNlcl9pb3ZgIOKAkyBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gdGhpcyBmb3IgdW5kZXJzdGFuZGluZyBtYXBwaW5nIHVzZXIgZGF0YSBpbnRvIGJpby4KCkFsc28sIEkgaGF2ZSB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZToKCiogICBgQkxLX0RFVl9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAgLSBUaGVzZSBhcmUgY2xlYXJseSBuZWNlc3NhcnkgZm9yIHRoZSBsb29wIGRldmljZSBpdHNlbGYsIGFzIHdlbGwgYXMgdGhlIHpvbmVkIHZhcmlhbnQsIG9idmlvdXNseS4KKiAgIGBGU19JT01BUGAg4oCTIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHNlZW1zIHRvIHRpZSBpbiB0aGUgSS9PIG1hcHBpbmcuCiogICBgQkxPQ0tgIC0gVGhpcyBpcyB0aGUgcGFyZW50IGJsb2NrIGRyaXZlci4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gYmVnaW4gc2V0dGluZyB1cCBhbmQgY2hlY2tpbmcgdGhlIGFuYWx5c2lzIHJlc3VsdHMgYmFzZWQgb24gdGhlIHBhdGhmaW5kaW5nLiBMZXQmIzM5O3MgbW92ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMDQ6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfYnZlY3MmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZGlvJiMzNDssCiAgICAmIzM0O2xvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQmIzM0OywKICAgICYjMzQ7bG9vcF9zZXRfZG1hX2xpbWl0JiMzNDssCiAgICAmIzM0O3psb29wX2dldF9ibG9ja19zaXplJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF9hZGQmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX2Jpb19pdGVyX29uZSYjMzQ7LAogICAgJiMzNDtfX2Jsa2Rldl9kaXJlY3RfSU8mIzM0OywKICAgICYjMzQ7YmlvX21hcF91c2VyX2lvdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGJpbyBoYW5kbGluZyBhbmQgZGlyZWN0IEkvTyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJdCBhZGRzIGBtZW1fYWxpZ25fbWFza2AgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgdG8gZW5mb3JjZSBETUEgYWxpZ25tZW50IGZvciBkaXJlY3QgSS9PLiBJdCBhbHNvIHVwZGF0ZXMgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gcHJvcGVybHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PLCBhbmQgdXBkYXRlcyBgaW9tYXBgIGFuZCBgYmxrZGV2YCBkaXJlY3QgSS9PIHBhdGhzIHRvIHBhc3MgdGhlIGNvcnJlY3QgYWxpZ25tZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICAgJiMzNDtGU19JT01BUCYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jpb19pb3ZfaXRlcl9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aW92X2l0ZXJfZXh0cmFjdF9idmVjcyYjMzQ7LAogICAgJiMzNDtsb29wX3NldF9kaW8mIzM0OywKICAgICYjMzQ7bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudCYjMzQ7LAogICAgJiMzNDtsb29wX3NldF9kbWFfbGltaXQmIzM0OywKICAgICYjMzQ7emxvb3BfZ2V0X2Jsb2NrX3NpemUmIzM0OywKICAgICYjMzQ7emxvb3BfY3RsX2FkZCYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fYmlvX2l0ZXJfb25lJiMzNDssCiAgICAmIzM0O19fYmxrZGV2X2RpcmVjdF9JTyYjMzQ7LAogICAgJiMzNDtiaW9fbWFwX3VzZXJfaW92JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgYmlvIGhhbmRsaW5nIGFuZCBkaXJlY3QgSS9PIGFsaWdubWVudCByZXF1aXJlbWVudHMuIEl0IGFkZHMgYG1lbV9hbGlnbl9tYXNrYCB0byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCB0byBlbmZvcmNlIERNQSBhbGlnbm1lbnQgZm9yIGRpcmVjdCBJL08uIEl0IGFsc28gdXBkYXRlcyBgbG9vcGAgYW5kIGB6bG9vcGAgZHJpdmVycyB0byBwcm9wZXJseSBzZXQgRE1BIGFsaWdubWVudCBsaW1pdHMgZm9yIGRpcmVjdCBJL08sIGFuZCB1cGRhdGVzIGBpb21hcGAgYW5kIGBibGtkZXZgIGRpcmVjdCBJL08gcGF0aHMgdG8gcGFzcyB0aGUgY29ycmVjdCBhbGlnbm1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDI6NDQuMjczMTQ4OTY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM4OTk4ODU1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgICBcIkZTX0lPTUFQXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgICBcImlvdl9pdGVyX2V4dHJhY3RfYnZlY3NcIixcbiAgICBcImxvb3Bfc2V0X2Rpb1wiLFxuICAgIFwibG9vcF91cGRhdGVfZGlvX2FsaWdubWVudFwiLFxuICAgIFwibG9vcF9zZXRfZG1hX2xpbWl0XCIsXG4gICAgXCJ6bG9vcF9nZXRfYmxvY2tfc2l6ZVwiLFxuICAgIFwiemxvb3BfY3RsX2FkZFwiLFxuICAgIFwiaW9tYXBfZGlvX2Jpb19pdGVyX29uZVwiLFxuICAgIFwiX19ibGtkZXZfZGlyZWN0X0lPXCIsXG4gICAgXCJiaW9fbWFwX3VzZXJfaW92XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBibG9jayBsYXllciBiaW8gaGFuZGxpbmcgYW5kIGRpcmVjdCBJL08gYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gSXQgYWRkcyBgbWVtX2FsaWduX21hc2tgIHRvIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIHRvIGVuZm9yY2UgRE1BIGFsaWdubWVudCBmb3IgZGlyZWN0IEkvTy4gSXQgYWxzbyB1cGRhdGVzIGBsb29wYCBhbmQgYHpsb29wYCBkcml2ZXJzIHRvIHByb3Blcmx5IHNldCBETUEgYWxpZ25tZW50IGxpbWl0cyBmb3IgZGlyZWN0IEkvTywgYW5kIHVwZGF0ZXMgYGlvbWFwYCBhbmQgYGJsa2RldmAgZGlyZWN0IEkvTyBwYXRocyB0byBwYXNzIHRoZSBjb3JyZWN0IGFsaWdubWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgZHJpdmVycywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQyOjQ0LjI3MzE1OTI5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NjQ5Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWU5OWRjNTc2NjUyMGYyNzg5ZmY5YmU3NjI0NDc2ZTIyMzYwMDZlYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAwNDo0Mjo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXFxuaW5kZXggZjJhNWY0ZDBhOTY3MmIuLmZhYWQ0MWE3MmFjNzdmIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jpby5jXFxuKysrIGIvYmxvY2svYmlvLmNcXG5AQCAtMTIyMCwxMCArMTIyMCw0NSBAQCBzdGF0aWMgaW50IGJpb19pb3ZfaXRlcl9hbGlnbl9kb3duKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19ERUJVR19LRVJORUxcXG4rc3RhdGljIGlubGluZSBib29sIGJpb19pb3ZfYnZlY19hbGlnbmVkKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXFxuK3tcXG4rXFx0c3RydWN0IGJ2ZWNfaXRlciBpdGVyO1xcbitcXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENvcnJlY3QgY2FsbGVycyBuZXZlciBicmVhayB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cywgc28gdGhpc1xcbitcXHQgKiBleGhhdXN0aXZlIGNoZWNrIGlzIG9ubHkgcGFpZCBmb3IgaW4gZGVidWcgYnVpbGRzLlxcbitcXHQgKi9cXG4rXFx0Zm9yX2VhY2hfbXBfYnZlYyhidiwgYmlvLVxcdTAwM2ViaV9pb192ZWMsIGl0ZXIsIGJpby1cXHUwMDNlYmlfaXRlcilcXG4rXFx0XFx0aWYgKChidi5idl9vZmZzZXQgfCBidi5idl9sZW4pIFxcdTAwMjYgbWVtX2FsaWduX21hc2spXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIGJpb19pb3ZfYnZlY19hbGlnbmVkKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogV2UgZm9yd2FyZCB0aGUgYmlvX3ZlYyBhcy1pcywgc28gSVRFUl9CVkVDIGNhbGxlcnMgbXVzdCBwcm92aWRlXFxuK1xcdCAqIHNlZ21lbnRzIGFscmVhZHkgYWxpZ25lZCB0byB0aGUgZGV2aWNlJ3MgRE1BIGFsaWdubWVudC4gVGhlIG9ubHlcXG4rXFx0ICogdW5jaGVja2VkIHVzZXItY29udHJvbGxhYmxlIG9mZnNldCB0aGF0IHJlYWNoZXMgaGVyZSBpcyBhbiBpb191cmluZ1xcbitcXHQgKiByZWdpc3RlcmVkIGJ1ZmZlciB3aGVyZSBqdXN0IHRoZSBmaXJzdCBzZWdtZW50IGNhbiBiZSB1bmFsaWduZWRcXG4rXFx0ICogKHRoZSByZXN0IGlzIHZpcnR1YWxseSBjb250aWd1b3VzKSwgc28gY2hlY2tpbmcgb25seSB0aGF0IG9uZSBpc1xcbitcXHQgKiBzdWZmaWNpZW50IHRvIGtub3cgaWYgdGhlIGVudGlyZSB2ZWN0b3IgaXMgdmFsaWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gIShtcF9idmVjX2l0ZXJfb2Zmc2V0KGJpby1cXHUwMDNlYmlfaW9fdmVjLCBiaW8tXFx1MDAzZWJpX2l0ZXIpIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0bWVtX2FsaWduX21hc2spO1xcbit9XFxuKyNlbmRpZlxcbitcXG4gLyoqXFxuICAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW9cXG4gICogQGJpbzogYmlvIHRvIGFkZCBwYWdlcyB0b1xcbiAgKiBAaXRlcjogaW92IGl0ZXJhdG9yIGRlc2NyaWJpbmcgdGhlIHJlZ2lvbiB0byBiZSBhZGRlZFxcbisgKiBAbWVtX2FsaWduX21hc2s6IHRoZSBtYXNrIHRoZSBzb3VyY2UgYWRkcmVzcyBhbmQgbGVuZ3RoIG11c3QgYmUgYWxpZ25lZCB0byxcXG4rICpcXHQwIGZvciBubyByZXF1aXJlbWVudFxcbiAgKiBAbGVuX2FsaWduX21hc2s6IHRoZSBtYXNrIHRvIGFsaWduIHRoZSB0b3RhbCBzaXplIHRvLCAwIGZvciBhbnkgbGVuZ3RoXFxuICAqXFxuICAqIFRoaXMgdGFrZXMgZWl0aGVyIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHVzZXIgbWVtb3J5LCBvciBvbmUgcG9pbnRpbmcgdG9cXG5AQCAtMTI0Miw3ICsxMjc3LDcgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gICogaXMgcmV0dXJuZWQgb25seSBpZiAwIHBhZ2VzIGNvdWxkIGJlIHBpbm5lZC5cXG4gICovXFxuIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi1cXHRcXHRcXHQgICB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcXG4rXFx0XFx0XFx0ICAgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssIHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKVxcbiB7XFxuIFxcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBmbGFncyA9IDA7XFxuIFxcbkBAIC0xMjUxLDYgKzEyODYsMTAgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcbiBcXHRpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkge1xcbiBcXHRcXHRiaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7XFxuK1xcbitcXHRcXHRpZiAoIWJpb19pb3ZfYnZlY19hbGlnbmVkKGJpbywgbWVtX2FsaWduX21hc2spKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbkBAIC0xMjY1LDggKzEzMDQsMTkgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcbiBcXHRcXHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKGl0ZXIsIGJpby1cXHUwMDNlYmlfaW9fdmVjLFxcbiBcXHRcXHRcXHRcXHRCSU9fTUFYX1NJWkUgLSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfdmNudCwgYmlvLVxcdTAwM2ViaV9tYXhfdmVjcywgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRcXHUwMDI2YmlvLVxcdTAwM2ViaV92Y250LCBiaW8tXFx1MDAzZWJpX21heF92ZWNzLFxcbitcXHRcXHRcXHRcXHRtZW1fYWxpZ25fbWFzaywgZmxhZ3MpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQSBtaXNhbGlnbmVkIHZlY3RvciBmYWlscyB0aGUgd2hvbGUgSS9PLiAgUmVsZWFzZSBhbnlcXG4rXFx0XFx0XFx0ICogcGFnZXMgcGlubmVkIGJ5IGVhcmxpZXIgaXRlcmF0aW9ucyBiZWZvcmUgcmV0dXJuaW5nXFxuK1xcdFxcdFxcdCAqIHNpbmNlIHRoaXMgYmlvIHdvbid0IGJlIHN1Ym1pdHRlZCB0byByZWxlYXNlIHRoZW0uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAocmV0ID09IC1FSU5WQUwpIHtcXG4rXFx0XFx0XFx0XFx0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdGJpb19jbGVhcl9mbGFnKGJpbywgQklPX1BBR0VfUElOTkVEKTtcXG4rXFx0XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV92Y250ID0gMDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoIWJpby1cXHUwMDNlYmlfdmNudClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTEzNzcsNyArMTQyNyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRzc2l6ZV90IHJldDtcXG4gXFxuIFxcdFxcdHJldCA9IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MoaXRlciwgYmlvLVxcdTAwM2ViaV9pb192ZWMgKyAxLCBsZW4sXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZiaW8tXFx1MDAzZWJpX3ZjbnQsIGJpby1cXHUwMDNlYmlfbWF4X3ZlY3MgLSAxLCAwKTtcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmJpby1cXHUwMDNlYmlfdmNudCwgYmlvLVxcdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDAsIDApO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG4gXFx0XFx0XFx0aWYgKCFiaW8tXFx1MDAzZWJpX3ZjbnQpIHtcXG4gXFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1hcC5jIGIvYmxvY2svYmxrLW1hcC5jXFxuaW5kZXggNzY4NTQ5ZjE5Zjk3ZWMuLmM5NTM1ZWZlMWE5MTNjIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay1tYXAuY1xcbisrKyBiL2Jsb2NrL2Jsay1tYXAuY1xcbkBAIC0yNzQsNyArMjc0LDcgQEAgc3RhdGljIGludCBiaW9fbWFwX3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHQgKiBObyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9uIG91ciBwYXJ0IHRvIHN1cHBvcnQgYXJiaXRyYXJ5XFxuIFxcdCAqIHBhc3N0aHJvdWdoIGNvbW1hbmRzLlxcbiBcXHQgKi9cXG4tXFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIDApO1xcbitcXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgMCwgMCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gXFx0cmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocnEsIGJpbyk7XFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2ZvcHMuYyBiL2Jsb2NrL2ZvcHMuY1xcbmluZGV4IDE1NzgzYTYxODBkZWMxLi5lNTE5ZDdmNDNiMzEwNiAxMDA2NDRcXG4tLS0gYS9ibG9jay9mb3BzLmNcXG4rKysgYi9ibG9jay9mb3BzLmNcXG5AQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLFxcbiBzdGF0aWMgaW5saW5lIGludCBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbyxcXG4gXFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiB7XFxuLVxcdHJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlcixcXG4rXFx0cmV0dXJuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldiksXFxuIFxcdFxcdFxcdGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpIC0gMSk7XFxuIH1cXG4gXFxuQEAgLTIxOCw3ICsyMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcbiBcXHRcXHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldik7XFxuIFxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLVxcdFxcdFxcdGJpb19lbmRpb19zdGF0dXMoYmlvLCBCTEtfU1RTX0lPRVJSKTtcXG4rXFx0XFx0XFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKSB7XFxuQEAgLTIzOCw4ICsyMzgsMTAgQEAgc3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfSEFTX01FVEFEQVRBKSB7XFxuIFxcdFxcdFxcdHJldCA9IGJpb19pbnRlZ3JpdHlfbWFwX2l0ZXIoYmlvLCBpb2NiLVxcdTAwM2Vwcml2YXRlKTtcXG4tXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuLVxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4rXFx0XFx0XFx0XFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChpc19yZWFkKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcXG5pbmRleCAzMTBkZTA0NjNiZWIxNC4uNWZlNjFkNTQyZjhiNzUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbkBAIC01NCw2ICs1NCw3IEBAIHN0cnVjdCBsb29wX2RldmljZSB7XFxuIFxcbiBcXHRzdHJ1Y3QgZmlsZVxcdCpsb19iYWNraW5nX2ZpbGU7XFxuIFxcdHVuc2lnbmVkIGludFxcdGxvX21pbl9kaW9fc2l6ZTtcXG4rXFx0dW5zaWduZWQgaW50XFx0bG9fZGlvX21lbV9hbGlnbjtcXG4gXFx0c3RydWN0IGJsb2NrX2RldmljZSAqbG9fZGV2aWNlO1xcbiBcXG4gXFx0Z2ZwX3RcXHRcXHRvbGRfZ2ZwX21hc2s7XFxuQEAgLTQ0NywyNiArNDQ4LDM3IEBAIHN0YXRpYyB2b2lkIGxvb3BfcmVyZWFkX3BhcnRpdGlvbnMoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4gXFx0XFx0XFx0X19mdW5jX18sIGxvLVxcdTAwM2Vsb19udW1iZXIsIGxvLVxcdTAwM2Vsb19maWxlX25hbWUsIHJjKTtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGludCBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbitzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIHtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBsby1cXHUwMDNlbG9fYmFja2luZ19maWxlO1xcbiBcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpzYl9iZGV2ID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXY7XFxuIFxcdHN0cnVjdCBrc3RhdCBzdDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFVzZSB0aGUgbWluaW1hbCBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC5cXG4rXFx0ICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbW9pbmdcXG4rXFx0ICogcmVxdWVzdCdzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHNcXG4rXFx0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UncyBkbWFfYWxpZ25tZW50IHdoZW5cXG4rXFx0ICogdXNlZCBmb3IgZGlyZWN0LWlvLlxcbiBcXHQgKi9cXG4gXFx0aWYgKCF2ZnNfZ2V0YXR0cihcXHUwMDI2ZmlsZS1cXHUwMDNlZl9wYXRoLCBcXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pKVxcbi1cXHRcXHRyZXR1cm4gc3QuZGlvX29mZnNldF9hbGlnbjtcXG4rXFx0ICAgIChzdC5yZXN1bHRfbWFzayBcXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSkge1xcbitcXHRcXHRsby1cXHUwMDNlbG9fbWluX2Rpb19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcXG4rXFx0XFx0bG8tXFx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyB3b3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCBhcyBvZiBMaW51eCA2LjEzIG9ubHlcXG4gXFx0ICogYSBoYW5kZnVsIG9mIGZpbGUgc3lzdGVtcyBzdXBwb3J0IHRoZSBTVEFUWF9ESU9BTElHTiBmbGFnLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHNiX2JkZXYpXFxuLVxcdFxcdHJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzYl9iZGV2KTtcXG4tXFx0cmV0dXJuIFNFQ1RPUl9TSVpFO1xcbitcXHRpZiAoc2JfYmRldikge1xcbitcXHRcXHRsby1cXHUwMDNlbG9fbWluX2Rpb19zaXplID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XFxuK1xcdFxcdGxvLVxcdTAwM2Vsb19kaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGxvLVxcdTAwM2Vsb19taW5fZGlvX3NpemUgPSBTRUNUT1JfU0laRTtcXG4rXFx0bG8tXFx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBTRUNUT1JfU0laRSAtIDE7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGlzX2xvb3BfZGV2aWNlKHN0cnVjdCBmaWxlICpmaWxlKVxcbkBAIC01MDksNyArNTIxLDcgQEAgc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRcXHRcXHRsby1cXHUwMDNlb2xkX2dmcF9tYXNrIFxcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XFxuIFxcdGlmIChsby1cXHUwMDNlbG9fYmFja2luZ19maWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19ESVJFQ1QpXFxuIFxcdFxcdGxvLVxcdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XFxuLVxcdGxvLVxcdTAwM2Vsb19taW5fZGlvX3NpemUgPSBsb29wX3F1ZXJ5X21pbl9kaW9fc2l6ZShsbyk7XFxuK1xcdGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQobG8pO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGxvb3BfY2hlY2tfYmFja2luZ19maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxcbkBAIC05NDAsNiArOTUyLDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcF9kZWZhdWx0X2Jsb2Nrc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbiBcXHRyZXR1cm4gU0VDVE9SX1NJWkU7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgdXNlciBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc29cXG4rXFx0ICogdHJhY2sgdGhlIGJhY2tpbmcncyBETUEgYWxpZ25tZW50IHJlcXVpcmVtZW50IGFzIHRoZSBtb2RlIGlzIHRvZ2dsZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAobG8tXFx1MDAzZWxvX2ZsYWdzIFxcdTAwMjYgTE9fRkxBR1NfRElSRUNUX0lPKVxcbitcXHRcXHRsaW0tXFx1MDAzZWRtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxvLVxcdTAwM2Vsb19kaW9fbWVtX2FsaWduLFxcbitcXHRcXHRcXHRcXHRcXHQgICBTRUNUT1JfU0laRSAtIDEpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGxpbS1cXHUwMDNlZG1hX2FsaWdubWVudCA9IFNFQ1RPUl9TSVpFIC0gMTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbG9vcF91cGRhdGVfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcXG4gXFx0XFx0dW5zaWduZWQgaW50IGJzaXplKVxcbiB7XFxuQEAgLTk2MSw2ICs5ODYsNyBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbiBcXHRsaW0tXFx1MDAzZWxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplO1xcbiBcXHRsaW0tXFx1MDAzZXBoeXNpY2FsX2Jsb2NrX3NpemUgPSBic2l6ZTtcXG4gXFx0bGltLVxcdTAwM2Vpb19taW4gPSBic2l6ZTtcXG4rXFx0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBsaW0pO1xcbiBcXHRsaW0tXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcXG4gXFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWZzeW5jIFxcdTAwMjZcXHUwMDI2ICEobG8tXFx1MDAzZWxvX2ZsYWdzIFxcdTAwMjYgTE9fRkxBR1NfUkVBRF9PTkxZKSlcXG4gXFx0XFx0bGltLVxcdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcXG5AQCAtMTQxNiw2ICsxNDQyLDcgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXFxuIHtcXG4gXFx0Ym9vbCB1c2VfZGlvID0gISFhcmc7XFxuIFxcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4rXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07XFxuIFxcbiBcXHRpZiAobG8tXFx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKVxcbiBcXHRcXHRyZXR1cm4gLUVOWElPO1xcbkBAIC0xNDM0LDYgKzE0NjEsOSBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcXG4gXFx0ZWxzZVxcbiBcXHRcXHRsby1cXHUwMDNlbG9fZmxhZ3MgXFx1MDAyNj0gfkxPX0ZMQUdTX0RJUkVDVF9JTztcXG4rXFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbitcXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFxcdTAwMjZsaW0pO1xcbitcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUsIFxcdTAwMjZsaW0pO1xcbiBcXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlLCBtZW1mbGFncyk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbmluZGV4IDU1ZWViNmFhYzBlYTNiLi5mOTdhMjBjZmRiN2NlNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG5AQCAtMTQ0LDYgKzE0NCw3IEBAIHN0cnVjdCB6bG9vcF9kZXZpY2Uge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRucl9jb252X3pvbmVzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRtYXhfb3Blbl96b25lcztcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0YmxvY2tfc2l6ZTtcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0ZGlvX21lbV9hbGlnbjtcXG4gXFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRvcGVuX3pvbmVzX2xvY2s7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRvcGVuX3pvbmVzX2xydV9saXN0O1xcbkBAIC0xMDM3LDIwICsxMDM4LDMwIEBAIHN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbiBcXHRzdHJ1Y3Qga3N0YXQgc3Q7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBJZiB0aGUgRlMgYmxvY2sgc2l6ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIDRLLCB1c2UgdGhhdCBhcyB0aGVcXG4tXFx0ICogZGV2aWNlIGJsb2NrIHNpemUuIE90aGVyd2lzZSwgZmFsbGJhY2sgdG8gdGhlIEZTIGRpcmVjdCBJTyBhbGlnbm1lbnRcXG4tXFx0ICogY29uc3RyYWludCBpZiB0aGF0IGlzIHByb3ZpZGVkLCBhbmQgdG8gdGhlIEZTIHVuZGVybHlpbmcgZGV2aWNlXFxuLVxcdCAqIHBoeXNpY2FsIGJsb2NrIHNpemUgaWYgdGhlIGRpcmVjdCBJTyBhbGlnbm1lbnQgaXMgdW5rbm93bi5cXG4rXFx0ICogVXNlIHRoZSBkaW8gYWxpZ25tZW50IG9mIHRoZSBmaWxlIHN5c3RlbSBpZiBwcm92aWRlZC4gIFRoZSBpbmNvbWluZ1xcbitcXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xcbitcXHQgKiByZXF1aXJlZCBtZW1vcnkgYWxpZ25tZW50IGJlY29tZXMgdGhlIGRldmljZSdzIGRtYV9hbGlnbm1lbnQgd2hlblxcbitcXHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uXFxuIFxcdCAqL1xcbi1cXHRpZiAoZmlsZV9pbm9kZSh6b25lLVxcdTAwM2VmaWxlKS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgXFx1MDAzYz0gU1pfNEspXFxuLVxcdFxcdHpsby1cXHUwMDNlYmxvY2tfc2l6ZSA9IGZpbGVfaW5vZGUoem9uZS1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbi1cXHRlbHNlIGlmICghdmZzX2dldGF0dHIoXFx1MDAyNnpvbmUtXFx1MDAzZWZpbGUtXFx1MDAzZWZfcGF0aCwgXFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0IChzdC5yZXN1bHRfbWFzayBcXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSlcXG4rXFx0aWYgKCF2ZnNfZ2V0YXR0cihcXHUwMDI2em9uZS1cXHUwMDNlZmlsZS1cXHUwMDNlZl9wYXRoLCBcXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKHN0LnJlc3VsdF9tYXNrIFxcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XFxuIFxcdFxcdHpsby1cXHUwMDNlYmxvY2tfc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XFxuLVxcdGVsc2UgaWYgKHNiX2JkZXYpXFxuK1xcdFxcdHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IHN0LmRpb19tZW1fYWxpZ24gLSAxO1xcbitcXHR9IGVsc2UgaWYgKHNiX2JkZXYpIHtcXG4gXFx0XFx0emxvLVxcdTAwM2VibG9ja19zaXplID0gYmRldl9waHlzaWNhbF9ibG9ja19zaXplKHNiX2JkZXYpO1xcbi1cXHRlbHNlXFxuK1xcdFxcdHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChzYl9iZGV2KTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0emxvLVxcdTAwM2VibG9ja19zaXplID0gU0VDVE9SX1NJWkU7XFxuK1xcdFxcdHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogUHJlZmVyIHRoZSBGUyBibG9jayBzaXplIGZvciB0aGUgZGV2aWNlIGJsb2NrIHNpemUgd2hlbiBpdCBpcyBub1xcbitcXHQgKiBsYXJnZXIgdGhhbiA0Szsgb3RoZXJ3aXNlIGtlZXAgdGhlIGRpcmVjdCBJL08gLyBwaHlzaWNhbCBibG9jayBzaXplXFxuK1xcdCAqIHNlbGVjdGVkIGFib3ZlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGZpbGVfaW5vZGUoem9uZS1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplIFxcdTAwM2M9IFNaXzRLKVxcbitcXHRcXHR6bG8tXFx1MDAzZWJsb2NrX3NpemUgPSBmaWxlX2lub2RlKHpvbmUtXFx1MDAzZWZpbGUpLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4gXFxuIFxcdGlmICh6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHkgXFx1MDAyNiAoKHpsby1cXHUwMDNlYmxvY2tfc2l6ZSBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQpIC0gMSkpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJab25lIGNhcGFjaXR5IGlzIG5vdCBhbGlnbmVkIHRvIGJsb2NrIHNpemUgJXVcXFxcblxcXCIsXFxuQEAgLTEyNzksNiArMTI5MCwxMCBAQCBzdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXFxuIFxcbiBcXHRsaW0ucGh5c2ljYWxfYmxvY2tfc2l6ZSA9IHpsby1cXHUwMDNlYmxvY2tfc2l6ZTtcXG4gXFx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IHpsby1cXHUwMDNlYmxvY2tfc2l6ZTtcXG4rXFx0LyogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgcmVxdWVzdCBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlcyBhcy1pcy4gKi9cXG4rXFx0aWYgKCFvcHRzLVxcdTAwM2VidWZmZXJlZF9pbylcXG4rXFx0XFx0bGltLmRtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIHpsby1cXHUwMDNlZGlvX21lbV9hbGlnbixcXG4rXFx0XFx0XFx0XFx0XFx0ICBTRUNUT1JfU0laRSAtIDEpO1xcbiBcXHRpZiAoemxvLVxcdTAwM2V6b25lX2FwcGVuZClcXG4gXFx0XFx0bGltLm1heF9od196b25lX2FwcGVuZF9zZWN0b3JzID0gbGltLm1heF9od19zZWN0b3JzO1xcbiBcXHRsaW0ubWF4X29wZW5fem9uZXMgPSB6bG8tXFx1MDAzZW1heF9vcGVuX3pvbmVzO1xcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuaW5kZXggYjQ4NWUzYjE5MWRhZmEuLmZmNDU4YWExMmFlMjk4IDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG5AQCAtMzU4LDYgKzM1OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuIFxcdFxcdFxcdFxcdGlvbWFwX21heF9iaW9fc2l6ZShcXHUwMDI2aXRlci1cXHUwMDNlaW9tYXApLCBhbGlnbm1lbnQpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBkaW8tXFx1MDAzZXN1Ym1pdC5pdGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJkZXZfZG1hX2FsaWdubWVudChiaW8tXFx1MDAzZWJpX2JkZXYpLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGFsaWdubWVudCAtIDEpO1xcbiBcXHRpZiAodW5saWtlbHkocmV0KSlcXG4gXFx0XFx0Z290byBvdXRfcHV0X2JpbztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmhcXG5pbmRleCA4ZjMzZjcxN2IxNGY1Yi4uY2UzNGVhNDllZjM1ODIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmhcXG5AQCAtNDc3LDcgKzQ3Nyw3IEBAIGludCBiZGV2X3J3X3ZpcnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCB2b2lkICpkYXRhLFxcbiBcXHRcXHRzaXplX3QgbGVuLCBlbnVtIHJlcV9vcCBvcCk7XFxuIFxcbiBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tXFx0XFx0dW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xcbitcXHRcXHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xcbiBcXG4gdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG4gdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW8uaCBiL2luY2x1ZGUvbGludXgvdWlvLmhcXG5pbmRleCBhOWJjNWIzMDY3ZTMyMC4uZmUyZTk4NWQ3NGQyNGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdWlvLmhcXG5AQCAtMzg5LDkgKzM4OSwxNyBAQCBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcXG4gXFx0XFx0XFx0ICAgICAgIHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBpbnQgbWF4cGFnZXMsXFxuIFxcdFxcdFxcdCAgICAgICBpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyxcXG4gXFx0XFx0XFx0ICAgICAgIHNpemVfdCAqb2Zmc2V0MCk7XFxuKy8qXFxuKyAqIEJsb2NrLWxheWVyIGNvbnN1bWVycyAoZS5nLiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkpIHJlcXVpcmUgdGhhdCB0aGVcXG4rICogc2VnbWVudHMgb2YgYW4gSVRFUl9CVkVDIGl0ZXJhdG9yIGFyZSBhbHJlYWR5IGFsaWduZWQgdG8gdGhlIHRhcmdldCBkZXZpY2Unc1xcbisgKiBETUEgYWxpZ25tZW50LCBhbmQgZm9yd2FyZCB0aGVtIGFzLWlzLiAgSW4ta2VybmVsIHVzZXJzIHRoYXQgYnVpbGQgdGhlaXIgb3duXFxuKyAqIGJ2ZWNzIG11c3Qgbm90IGNyZWF0ZSBzdWItYWxpZ25lZCBzZWdtZW50czsgaW92X2l0ZXJfZXh0cmFjdF9idmVjcygpIGVuZm9yY2VzXFxuKyAqIHRoZSBzYW1lIGZvciB0aGUgc2VnbWVudHMgaXQgZXh0cmFjdHMgdmlhIEBtZW1fYWxpZ25fbWFzay5cXG4rICovXFxuIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBiaW9fdmVjICpidixcXG4gXFx0XFx0c2l6ZV90IG1heF9zaXplLCB1bnNpZ25lZCBzaG9ydCAqbnJfdmVjcyxcXG4tXFx0XFx0dW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKTtcXG4rXFx0XFx0dW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrLFxcbitcXHRcXHRpb3ZfaXRlcl9leHRyYWN0aW9uX3QgZXh0cmFjdGlvbl9mbGFncyk7XFxuIFxcbiAvKipcXG4gICogaW92X2l0ZXJfZXh0cmFjdF93aWxsX3BpbiAtIEluZGljYXRlIGhvdyBwYWdlcyBmcm9tIHRoZSBpdGVyYXRvciB3aWxsIGJlIHJldGFpbmVkXFxuZGlmZiAtLWdpdCBhL2xpYi9pb3ZfaXRlci5jIGIvbGliL2lvdl9pdGVyLmNcXG5pbmRleCAyNzM5MTliMTYxNjE3Ni4uYzM0MzA3NTk1MWRlZDAgMTAwNjQ0XFxuLS0tIGEvbGliL2lvdl9pdGVyLmNcXG4rKysgYi9saWIvaW92X2l0ZXIuY1xcbkBAIC0xODg2LDYgKzE4ODYsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuICAqIEBtYXhfc2l6ZTpcXHRtYXhpbXVtIHNpemUgdG8gZXh0cmFjdCBmcm9tIEBpdGVyXFxuICAqIEBucl92ZWNzOlxcdG51bWJlciBvZiB2ZWN0b3JzIGluIEBidiAob24gaW4gYW5kIG91dHB1dClcXG4gICogQG1heF92ZWNzOlxcdG1heGltdW0gdmVjdG9ycyBpbiBAYnYsIGluY2x1ZGluZyB0aG9zZSBmaWxsZWQgYmVmb3JlIGNhbGxpbmdcXG4rICogQG1lbV9hbGlnbl9tYXNrOlxcdHJlamVjdCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhZGRyZXNzIG9yXFxuKyAqXFx0XFx0bGVuZ3RoIGlzIG5vdCBhbGlnbmVkIHRvIHRoaXMgbWFza1xcbiAgKiBAZXh0cmFjdGlvbl9mbGFnczogZmxhZ3MgdG8gcXVhbGlmeSByZXF1ZXN0XFxuICAqXFxuICAqIExpa2UgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcygpLCBidXQgcmV0dXJucyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcmFuZ2VzXFxuQEAgLTE4OTcsMTQgKzE4OTksMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbiAgKi9cXG4gc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxcbiBcXHRcXHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxcbi1cXHRcXHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpXFxuK1xcdFxcdHVuc2lnbmVkIHNob3J0IG1heF92ZWNzLCB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzayxcXG4rXFx0XFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKWl0ZXJfaW92X2FkZHIoaXRlcik7XFxuIFxcdHVuc2lnbmVkIHNob3J0IGVudHJpZXNfbGVmdCA9IG1heF92ZWNzIC0gKm5yX3ZlY3M7XFxuIFxcdHVuc2lnbmVkIHNob3J0IG5yX3BhZ2VzLCBpID0gMDtcXG4gXFx0c2l6ZV90IGxlZnQsIG9mZnNldCwgbGVuO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xcbiBcXHRzc2l6ZV90IHNpemU7XFxuIFxcbitcXHRpZiAoKHN0YXJ0IHwgaXRlcl9pb3ZfbGVuKGl0ZXIpKSBcXHUwMDI2IG1lbV9hbGlnbl9tYXNrKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIE1vdmUgcGFnZSBhcnJheSB1cCBpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGJpbyB2ZWNzIGFzIGZhciBhc1xcbiBcXHQgKiBwb3NzaWJsZSBzbyB0aGF0IHdlIGNhbiBzdGFydCBmaWxsaW5nIGJpb3ZlY3MgZnJvbSB0aGUgYmVnaW5uaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQyOjQ0LjkxOTYwNTkwM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzMjUzNDE1ODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzXCIsXG4gICAgXCJpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzXCIsXG4gICAgXCJsb29wX3NldF9kaW9cIixcbiAgICBcImxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRcIixcbiAgICBcImxvb3Bfc2V0X2RtYV9saW1pdFwiLFxuICAgIFwiemxvb3BfZ2V0X2Jsb2NrX3NpemVcIixcbiAgICBcInpsb29wX2N0bF9hZGRcIixcbiAgICBcImlvbWFwX2Rpb19iaW9faXRlcl9vbmVcIixcbiAgICBcIl9fYmxrZGV2X2RpcmVjdF9JT1wiLFxuICAgIFwiYmlvX21hcF91c2VyX2lvdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgYmxvY2sgbGF5ZXIgYmlvIGhhbmRsaW5nIGFuZCBkaXJlY3QgSS9PIGFsaWdubWVudCByZXF1aXJlbWVudHMuIEl0IGFkZHMgYG1lbV9hbGlnbl9tYXNrYCB0byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCB0byBlbmZvcmNlIERNQSBhbGlnbm1lbnQgZm9yIGRpcmVjdCBJL08uIEl0IGFsc28gdXBkYXRlcyBgbG9vcGAgYW5kIGB6bG9vcGAgZHJpdmVycyB0byBwcm9wZXJseSBzZXQgRE1BIGFsaWdubWVudCBsaW1pdHMgZm9yIGRpcmVjdCBJL08sIGFuZCB1cGRhdGVzIGBpb21hcGAgYW5kIGBibGtkZXZgIGRpcmVjdCBJL08gcGF0aHMgdG8gcGFzcyB0aGUgY29ycmVjdCBhbGlnbm1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFlOTlkYzU3NjY1MjBmMjc4OWZmOWJlNzYyNDQ3NmUyMjM2MDA2ZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAwNDo0Mjo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jpby5jIGIvYmxvY2svYmlvLmNcbmluZGV4IGYyYTVmNGQwYTk2NzJiLi5mYWFkNDFhNzJhYzc3ZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jpby5jXG4rKysgYi9ibG9jay9iaW8uY1xuQEAgLTEyMjAsMTAgKzEyMjAsNDUgQEAgc3RhdGljIGludCBiaW9faW92X2l0ZXJfYWxpZ25fZG93bihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0RFQlVHX0tFUk5FTFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW92X2J2ZWNfYWxpZ25lZChjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdFx0XHRcdHVuc2lnbmVkIG1lbV9hbGlnbl9tYXNrKVxuK3tcbitcdHN0cnVjdCBidmVjX2l0ZXIgaXRlcjtcbitcdHN0cnVjdCBiaW9fdmVjIGJ2O1xuK1xuK1x0LypcbitcdCAqIENvcnJlY3QgY2FsbGVycyBuZXZlciBicmVhayB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cywgc28gdGhpc1xuK1x0ICogZXhoYXVzdGl2ZSBjaGVjayBpcyBvbmx5IHBhaWQgZm9yIGluIGRlYnVnIGJ1aWxkcy5cbitcdCAqL1xuK1x0Zm9yX2VhY2hfbXBfYnZlYyhidiwgYmlvLVx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIpXG4rXHRcdGlmICgoYnYuYnZfb2Zmc2V0IHwgYnYuYnZfbGVuKSBcdTAwMjYgbWVtX2FsaWduX21hc2spXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBib29sIGJpb19pb3ZfYnZlY19hbGlnbmVkKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcbitcdFx0XHRcdFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXG4re1xuK1x0LypcbitcdCAqIFdlIGZvcndhcmQgdGhlIGJpb192ZWMgYXMtaXMsIHNvIElURVJfQlZFQyBjYWxsZXJzIG11c3QgcHJvdmlkZVxuK1x0ICogc2VnbWVudHMgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSBkZXZpY2UncyBETUEgYWxpZ25tZW50LiBUaGUgb25seVxuK1x0ICogdW5jaGVja2VkIHVzZXItY29udHJvbGxhYmxlIG9mZnNldCB0aGF0IHJlYWNoZXMgaGVyZSBpcyBhbiBpb191cmluZ1xuK1x0ICogcmVnaXN0ZXJlZCBidWZmZXIgd2hlcmUganVzdCB0aGUgZmlyc3Qgc2VnbWVudCBjYW4gYmUgdW5hbGlnbmVkXG4rXHQgKiAodGhlIHJlc3QgaXMgdmlydHVhbGx5IGNvbnRpZ3VvdXMpLCBzbyBjaGVja2luZyBvbmx5IHRoYXQgb25lIGlzXG4rXHQgKiBzdWZmaWNpZW50IHRvIGtub3cgaWYgdGhlIGVudGlyZSB2ZWN0b3IgaXMgdmFsaWQuXG4rXHQgKi9cbitcdHJldHVybiAhKG1wX2J2ZWNfaXRlcl9vZmZzZXQoYmlvLVx1MDAzZWJpX2lvX3ZlYywgYmlvLVx1MDAzZWJpX2l0ZXIpIFx1MDAyNlxuK1x0XHRcdFx0XHRcdFx0bWVtX2FsaWduX21hc2spO1xuK31cbisjZW5kaWZcbitcbiAvKipcbiAgKiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzIC0gYWRkIHVzZXIgb3Iga2VybmVsIHBhZ2VzIHRvIGEgYmlvXG4gICogQGJpbzogYmlvIHRvIGFkZCBwYWdlcyB0b1xuICAqIEBpdGVyOiBpb3YgaXRlcmF0b3IgZGVzY3JpYmluZyB0aGUgcmVnaW9uIHRvIGJlIGFkZGVkXG4rICogQG1lbV9hbGlnbl9tYXNrOiB0aGUgbWFzayB0aGUgc291cmNlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgdG8sXG4rICpcdDAgZm9yIG5vIHJlcXVpcmVtZW50XG4gICogQGxlbl9hbGlnbl9tYXNrOiB0aGUgbWFzayB0byBhbGlnbiB0aGUgdG90YWwgc2l6ZSB0bywgMCBmb3IgYW55IGxlbmd0aFxuICAqXG4gICogVGhpcyB0YWtlcyBlaXRoZXIgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdXNlciBtZW1vcnksIG9yIG9uZSBwb2ludGluZyB0b1xuQEAgLTEyNDIsNyArMTI3Nyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gICogaXMgcmV0dXJuZWQgb25seSBpZiAwIHBhZ2VzIGNvdWxkIGJlIHBpbm5lZC5cbiAgKi9cbiBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi1cdFx0XHQgICB1bnNpZ25lZCBsZW5fYWxpZ25fbWFzaylcbitcdFx0XHQgICB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXG4ge1xuIFx0aW92X2l0ZXJfZXh0cmFjdGlvbl90IGZsYWdzID0gMDtcbiBcbkBAIC0xMjUxLDYgKzEyODYsMTAgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkge1xuIFx0XHRiaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7XG4rXG4rXHRcdGlmICghYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuQEAgLTEyNjUsOCArMTMwNCwxOSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXHUwMDNlYmlfaW9fdmVjLFxuIFx0XHRcdFx0QklPX01BWF9TSVpFIC0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSxcbi1cdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MsIGZsYWdzKTtcbitcdFx0XHRcdFx1MDAyNmJpby1cdTAwM2ViaV92Y250LCBiaW8tXHUwMDNlYmlfbWF4X3ZlY3MsXG4rXHRcdFx0XHRtZW1fYWxpZ25fbWFzaywgZmxhZ3MpO1xuIFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQSBtaXNhbGlnbmVkIHZlY3RvciBmYWlscyB0aGUgd2hvbGUgSS9PLiAgUmVsZWFzZSBhbnlcbitcdFx0XHQgKiBwYWdlcyBwaW5uZWQgYnkgZWFybGllciBpdGVyYXRpb25zIGJlZm9yZSByZXR1cm5pbmdcbitcdFx0XHQgKiBzaW5jZSB0aGlzIGJpbyB3b24ndCBiZSBzdWJtaXR0ZWQgdG8gcmVsZWFzZSB0aGVtLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChyZXQgPT0gLUVJTlZBTCkge1xuK1x0XHRcdFx0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XG4rXHRcdFx0XHRiaW9fY2xlYXJfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7XG4rXHRcdFx0XHRiaW8tXHUwMDNlYmlfdmNudCA9IDA7XG4rXHRcdFx0fVxuIFx0XHRcdGlmICghYmlvLVx1MDAzZWJpX3ZjbnQpXG4gXHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRcdGJyZWFrO1xuQEAgLTEzNzcsNyArMTQyNyw3IEBAIHN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2JvdW5jZV9yZWFkKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRzc2l6ZV90IHJldDtcbiBcbiBcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhpdGVyLCBiaW8tXHUwMDNlYmlfaW9fdmVjICsgMSwgbGVuLFxuLVx0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDApO1xuK1x0XHRcdFx0XHUwMDI2YmlvLVx1MDAzZWJpX3ZjbnQsIGJpby1cdTAwM2ViaV9tYXhfdmVjcyAtIDEsIDAsIDApO1xuIFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuIFx0XHRcdGlmICghYmlvLVx1MDAzZWJpX3ZjbnQpIHtcbiBcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1hcC5jIGIvYmxvY2svYmxrLW1hcC5jXG5pbmRleCA3Njg1NDlmMTlmOTdlYy4uYzk1MzVlZmUxYTkxM2MgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstbWFwLmNcbisrKyBiL2Jsb2NrL2Jsay1tYXAuY1xuQEAgLTI3NCw3ICsyNzQsNyBAQCBzdGF0aWMgaW50IGJpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHQgKiBObyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9uIG91ciBwYXJ0IHRvIHN1cHBvcnQgYXJiaXRyYXJ5XG4gXHQgKiBwYXNzdGhyb3VnaCBjb21tYW5kcy5cbiBcdCAqL1xuLVx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIDApO1xuK1x0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIDAsIDApO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0O1xuIFx0cmV0ID0gYmxrX3JxX2FwcGVuZF9iaW8ocnEsIGJpbyk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svZm9wcy5jIGIvYmxvY2svZm9wcy5jXG5pbmRleCAxNTc4M2E2MTgwZGVjMS4uZTUxOWQ3ZjQzYjMxMDYgMTAwNjQ0XG4tLS0gYS9ibG9jay9mb3BzLmNcbisrKyBiL2Jsb2NrL2ZvcHMuY1xuQEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIGJvb2wgYmxrZGV2X2Rpb19pbnZhbGlkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBraW9jYiAqaW9jYixcbiBzdGF0aWMgaW5saW5lIGludCBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbyxcbiBcdFx0c3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHtcbi1cdHJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlcixcbitcdHJldHVybiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpLFxuIFx0XHRcdGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpIC0gMSk7XG4gfVxuIFxuQEAgLTIxOCw3ICsyMTgsNyBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXG4gXHRcdHJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTtcbiBcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbi1cdFx0XHRiaW9fZW5kaW9fc3RhdHVzKGJpbywgQkxLX1NUU19JT0VSUik7XG4rXHRcdFx0YmlvX2VuZGlvX3N0YXR1cyhiaW8sIGVycm5vX3RvX2Jsa19zdGF0dXMocmV0KSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKSB7XG5AQCAtMjM4LDggKzIzOCwxMCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdH1cbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfSEFTX01FVEFEQVRBKSB7XG4gXHRcdFx0cmV0ID0gYmlvX2ludGVncml0eV9tYXBfaXRlcihiaW8sIGlvY2ItXHUwMDNlcHJpdmF0ZSk7XG4tXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4tXHRcdFx0XHRnb3RvIGZhaWw7XG4rXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbitcdFx0XHRcdGJpb19lbmRpb19zdGF0dXMoYmlvLCBlcnJub190b19ibGtfc3RhdHVzKHJldCkpO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChpc19yZWFkKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggMzEwZGUwNDYzYmViMTQuLjVmZTYxZDU0MmY4Yjc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNTQsNiArNTQsNyBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFxuIFx0c3RydWN0IGZpbGVcdCpsb19iYWNraW5nX2ZpbGU7XG4gXHR1bnNpZ25lZCBpbnRcdGxvX21pbl9kaW9fc2l6ZTtcbitcdHVuc2lnbmVkIGludFx0bG9fZGlvX21lbV9hbGlnbjtcbiBcdHN0cnVjdCBibG9ja19kZXZpY2UgKmxvX2RldmljZTtcbiBcbiBcdGdmcF90XHRcdG9sZF9nZnBfbWFzaztcbkBAIC00NDcsMjYgKzQ0OCwzNyBAQCBzdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4gXHRcdFx0X19mdW5jX18sIGxvLVx1MDAzZWxvX251bWJlciwgbG8tXHUwMDNlbG9fZmlsZV9uYW1lLCByYyk7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgbG9vcF9xdWVyeV9taW5fZGlvX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbitzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuIFx0c3RydWN0IGZpbGUgKmZpbGUgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpzYl9iZGV2ID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdC1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldjtcbiBcdHN0cnVjdCBrc3RhdCBzdDtcbiBcbiBcdC8qXG4tXHQgKiBVc2UgdGhlIG1pbmltYWwgZGlvIGFsaWdubWVudCBvZiB0aGUgZmlsZSBzeXN0ZW0gaWYgcHJvdmlkZWQuXG4rXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29tb2luZ1xuK1x0ICogcmVxdWVzdCdzIGJpb192ZWMgaXMgZm9yd2FyZGVkIHRvIHRoZSBiYWNraW5nIGZpbGUgdW5jaGFuZ2VkLCBzbyBpdHNcbitcdCAqIHJlcXVpcmVkIG1lbW9yeSBhbGlnbm1lbnQgYmVjb21lcyB0aGUgZGV2aWNlJ3MgZG1hX2FsaWdubWVudCB3aGVuXG4rXHQgKiB1c2VkIGZvciBkaXJlY3QtaW8uXG4gXHQgKi9cbiBcdGlmICghdmZzX2dldGF0dHIoXHUwMDI2ZmlsZS1cdTAwM2VmX3BhdGgsIFx1MDAyNnN0LCBTVEFUWF9ESU9BTElHTiwgMCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHN0LnJlc3VsdF9tYXNrIFx1MDAyNiBTVEFUWF9ESU9BTElHTikpXG4tXHRcdHJldHVybiBzdC5kaW9fb2Zmc2V0X2FsaWduO1xuK1x0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4rXHRcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IHN0LmRpb19vZmZzZXRfYWxpZ247XG4rXHRcdGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBzdC5kaW9fbWVtX2FsaWduIC0gMTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0LypcbiBcdCAqIEluIGEgcGVyZmVjdCB3b3JsZCB0aGlzIHdvdWxkbid0IGJlIG5lZWRlZCwgYnV0IGFzIG9mIExpbnV4IDYuMTMgb25seVxuIFx0ICogYSBoYW5kZnVsIG9mIGZpbGUgc3lzdGVtcyBzdXBwb3J0IHRoZSBTVEFUWF9ESU9BTElHTiBmbGFnLlxuIFx0ICovXG4tXHRpZiAoc2JfYmRldilcbi1cdFx0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHNiX2JkZXYpO1xuLVx0cmV0dXJuIFNFQ1RPUl9TSVpFO1xuK1x0aWYgKHNiX2JkZXYpIHtcbitcdFx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4rXHRcdGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoc2JfYmRldik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGxvLVx1MDAzZWxvX21pbl9kaW9fc2l6ZSA9IFNFQ1RPUl9TSVpFO1xuK1x0bG8tXHUwMDNlbG9fZGlvX21lbV9hbGlnbiA9IFNFQ1RPUl9TSVpFIC0gMTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgaXNfbG9vcF9kZXZpY2Uoc3RydWN0IGZpbGUgKmZpbGUpXG5AQCAtNTA5LDcgKzUyMSw3IEBAIHN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0XHRsby1cdTAwM2VvbGRfZ2ZwX21hc2sgXHUwMDI2IH4oX19HRlBfSU8gfCBfX0dGUF9GUykpO1xuIFx0aWYgKGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0RJUkVDVClcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPO1xuLVx0bG8tXHUwMDNlbG9fbWluX2Rpb19zaXplID0gbG9vcF9xdWVyeV9taW5fZGlvX3NpemUobG8pO1xuK1x0bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbG9vcF9jaGVja19iYWNraW5nX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXG5AQCAtOTQwLDYgKzk1MiwxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiBcdHJldHVybiBTRUNUT1JfU0laRTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbG9vcF9zZXRfZG1hX2xpbWl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcbit7XG4rXHQvKlxuK1x0ICogRGlyZWN0IEkvTyBmb3J3YXJkcyB0aGUgdXNlciBwYWdlcyB0byB0aGUgYmFja2luZyBmaWxlIHVuY2hhbmdlZCwgc29cbitcdCAqIHRyYWNrIHRoZSBiYWNraW5nJ3MgRE1BIGFsaWdubWVudCByZXF1aXJlbWVudCBhcyB0aGUgbW9kZSBpcyB0b2dnbGVkLlxuK1x0ICovXG4rXHRpZiAobG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX0RJUkVDVF9JTylcbitcdFx0bGltLVx1MDAzZWRtYV9hbGlnbm1lbnQgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxvLVx1MDAzZWxvX2Rpb19tZW1fYWxpZ24sXG4rXHRcdFx0XHRcdCAgIFNFQ1RPUl9TSVpFIC0gMSk7XG4rXHRlbHNlXG4rXHRcdGxpbS1cdTAwM2VkbWFfYWxpZ25tZW50ID0gU0VDVE9SX1NJWkUgLSAxO1xuK31cbitcbiBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0XHR1bnNpZ25lZCBpbnQgYnNpemUpXG4ge1xuQEAgLTk2MSw2ICs5ODYsNyBAQCBzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxuIFx0bGltLVx1MDAzZWxvZ2ljYWxfYmxvY2tfc2l6ZSA9IGJzaXplO1xuIFx0bGltLVx1MDAzZXBoeXNpY2FsX2Jsb2NrX3NpemUgPSBic2l6ZTtcbiBcdGxpbS1cdTAwM2Vpb19taW4gPSBic2l6ZTtcbitcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgbGltKTtcbiBcdGxpbS1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcbiBcdGlmIChmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZnN5bmMgXHUwMDI2XHUwMDI2ICEobG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2IExPX0ZMQUdTX1JFQURfT05MWSkpXG4gXHRcdGxpbS1cdTAwM2VmZWF0dXJlcyB8PSBCTEtfRkVBVF9XUklURV9DQUNIRTtcbkBAIC0xNDE2LDYgKzE0NDIsNyBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRib29sIHVzZV9kaW8gPSAhIWFyZztcbiBcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFxuIFx0aWYgKGxvLVx1MDAzZWxvX3N0YXRlICE9IExvX2JvdW5kKVxuIFx0XHRyZXR1cm4gLUVOWElPO1xuQEAgLTE0MzQsNiArMTQ2MSw5IEBAIHN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRsby1cdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XG4gXHRlbHNlXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIFx1MDAyNj0gfkxPX0ZMQUdTX0RJUkVDVF9JTztcbitcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuK1x0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBcdTAwMjZsaW0pO1xuK1x0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUsIG1lbWZsYWdzKTtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbmluZGV4IDU1ZWViNmFhYzBlYTNiLi5mOTdhMjBjZmRiN2NlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtMTQ0LDYgKzE0NCw3IEBAIHN0cnVjdCB6bG9vcF9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50XHRcdG5yX2NvbnZfem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bWF4X29wZW5fem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdFx0YmxvY2tfc2l6ZTtcbitcdHVuc2lnbmVkIGludFx0XHRkaW9fbWVtX2FsaWduO1xuIFxuIFx0c3BpbmxvY2tfdFx0XHRvcGVuX3pvbmVzX2xvY2s7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRvcGVuX3pvbmVzX2xydV9saXN0O1xuQEAgLTEwMzcsMjAgKzEwMzgsMzAgQEAgc3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG4gXHRzdHJ1Y3Qga3N0YXQgc3Q7XG4gXG4gXHQvKlxuLVx0ICogSWYgdGhlIEZTIGJsb2NrIHNpemUgaXMgbG93ZXIgdGhhbiBvciBlcXVhbCB0byA0SywgdXNlIHRoYXQgYXMgdGhlXG4tXHQgKiBkZXZpY2UgYmxvY2sgc2l6ZS4gT3RoZXJ3aXNlLCBmYWxsYmFjayB0byB0aGUgRlMgZGlyZWN0IElPIGFsaWdubWVudFxuLVx0ICogY29uc3RyYWludCBpZiB0aGF0IGlzIHByb3ZpZGVkLCBhbmQgdG8gdGhlIEZTIHVuZGVybHlpbmcgZGV2aWNlXG4tXHQgKiBwaHlzaWNhbCBibG9jayBzaXplIGlmIHRoZSBkaXJlY3QgSU8gYWxpZ25tZW50IGlzIHVua25vd24uXG4rXHQgKiBVc2UgdGhlIGRpbyBhbGlnbm1lbnQgb2YgdGhlIGZpbGUgc3lzdGVtIGlmIHByb3ZpZGVkLiAgVGhlIGluY29taW5nXG4rXHQgKiByZXF1ZXN0J3MgYmlvX3ZlYyBpcyBmb3J3YXJkZWQgdG8gdGhlIGJhY2tpbmcgZmlsZSB1bmNoYW5nZWQsIHNvIGl0c1xuK1x0ICogcmVxdWlyZWQgbWVtb3J5IGFsaWdubWVudCBiZWNvbWVzIHRoZSBkZXZpY2UncyBkbWFfYWxpZ25tZW50IHdoZW5cbitcdCAqIHVzZWQgZm9yIGRpcmVjdC1pby5cbiBcdCAqL1xuLVx0aWYgKGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIFx1MDAzYz0gU1pfNEspXG4tXHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gZmlsZV9pbm9kZSh6b25lLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXHRlbHNlIGlmICghdmZzX2dldGF0dHIoXHUwMDI2em9uZS1cdTAwM2VmaWxlLVx1MDAzZWZfcGF0aCwgXHUwMDI2c3QsIFNUQVRYX0RJT0FMSUdOLCAwKSBcdTAwMjZcdTAwMjZcbi1cdFx0IChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKVxuK1x0aWYgKCF2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdCwgU1RBVFhfRElPQUxJR04sIDApIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChzdC5yZXN1bHRfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pKSB7XG4gXHRcdHpsby1cdTAwM2VibG9ja19zaXplID0gc3QuZGlvX29mZnNldF9hbGlnbjtcbi1cdGVsc2UgaWYgKHNiX2JkZXYpXG4rXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gc3QuZGlvX21lbV9hbGlnbiAtIDE7XG4rXHR9IGVsc2UgaWYgKHNiX2JkZXYpIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoc2JfYmRldik7XG4tXHRlbHNlXG4rXHRcdHpsby1cdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KHNiX2JkZXYpO1xuK1x0fSBlbHNlIHtcbiBcdFx0emxvLVx1MDAzZWJsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbitcdFx0emxvLVx1MDAzZWRpb19tZW1fYWxpZ24gPSBTRUNUT1JfU0laRSAtIDE7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogUHJlZmVyIHRoZSBGUyBibG9jayBzaXplIGZvciB0aGUgZGV2aWNlIGJsb2NrIHNpemUgd2hlbiBpdCBpcyBub1xuK1x0ICogbGFyZ2VyIHRoYW4gNEs7IG90aGVyd2lzZSBrZWVwIHRoZSBkaXJlY3QgSS9PIC8gcGh5c2ljYWwgYmxvY2sgc2l6ZVxuK1x0ICogc2VsZWN0ZWQgYWJvdmUuXG4rXHQgKi9cbitcdGlmIChmaWxlX2lub2RlKHpvbmUtXHUwMDNlZmlsZSktXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSBcdTAwM2M9IFNaXzRLKVxuK1x0XHR6bG8tXHUwMDNlYmxvY2tfc2l6ZSA9IGZpbGVfaW5vZGUoem9uZS1cdTAwM2VmaWxlKS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuIFxuIFx0aWYgKHpsby1cdTAwM2V6b25lX2NhcGFjaXR5IFx1MDAyNiAoKHpsby1cdTAwM2VibG9ja19zaXplIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQpIC0gMSkpIHtcbiBcdFx0cHJfZXJyKFwiWm9uZSBjYXBhY2l0eSBpcyBub3QgYWxpZ25lZCB0byBibG9jayBzaXplICV1XFxuXCIsXG5AQCAtMTI3OSw2ICsxMjkwLDEwIEBAIHN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcbiBcbiBcdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gemxvLVx1MDAzZWJsb2NrX3NpemU7XG4gXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gemxvLVx1MDAzZWJsb2NrX3NpemU7XG4rXHQvKiBEaXJlY3QgSS9PIGZvcndhcmRzIHRoZSByZXF1ZXN0IHBhZ2VzIHRvIHRoZSBiYWNraW5nIGZpbGVzIGFzLWlzLiAqL1xuK1x0aWYgKCFvcHRzLVx1MDAzZWJ1ZmZlcmVkX2lvKVxuK1x0XHRsaW0uZG1hX2FsaWdubWVudCA9IG1heF90KHVuc2lnbmVkIGludCwgemxvLVx1MDAzZWRpb19tZW1fYWxpZ24sXG4rXHRcdFx0XHRcdCAgU0VDVE9SX1NJWkUgLSAxKTtcbiBcdGlmICh6bG8tXHUwMDNlem9uZV9hcHBlbmQpXG4gXHRcdGxpbS5tYXhfaHdfem9uZV9hcHBlbmRfc2VjdG9ycyA9IGxpbS5tYXhfaHdfc2VjdG9ycztcbiBcdGxpbS5tYXhfb3Blbl96b25lcyA9IHpsby1cdTAwM2VtYXhfb3Blbl96b25lcztcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5pbmRleCBiNDg1ZTNiMTkxZGFmYS4uZmY0NThhYTEyYWUyOTggMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbkBAIC0zNTgsNiArMzU4LDcgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdFx0XHRcdGlvbWFwX21heF9iaW9fc2l6ZShcdTAwMjZpdGVyLVx1MDAzZWlvbWFwKSwgYWxpZ25tZW50KTtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGRpby1cdTAwM2VzdWJtaXQuaXRlcixcbitcdFx0XHRcdFx0ICAgICBiZGV2X2RtYV9hbGlnbm1lbnQoYmlvLVx1MDAzZWJpX2JkZXYpLFxuIFx0XHRcdFx0XHQgICAgIGFsaWdubWVudCAtIDEpO1xuIFx0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdGdvdG8gb3V0X3B1dF9iaW87XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmhcbmluZGV4IDhmMzNmNzE3YjE0ZjViLi5jZTM0ZWE0OWVmMzU4MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmhcbkBAIC00NzcsNyArNDc3LDcgQEAgaW50IGJkZXZfcndfdmlydChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsIHZvaWQgKmRhdGEsXG4gXHRcdHNpemVfdCBsZW4sIGVudW0gcmVxX29wIG9wKTtcbiBcbiBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi1cdFx0dW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xuK1x0XHR1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xuIFxuIHZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XG4gdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaFxuaW5kZXggYTliYzViMzA2N2UzMjAuLmZlMmU5ODVkNzRkMjRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaFxuKysrIGIvaW5jbHVkZS9saW51eC91aW8uaFxuQEAgLTM4OSw5ICszODksMTcgQEAgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IHBhZ2UgKioqcGFnZXMsXG4gXHRcdFx0ICAgICAgIHNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBpbnQgbWF4cGFnZXMsXG4gXHRcdFx0ICAgICAgIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzLFxuIFx0XHRcdCAgICAgICBzaXplX3QgKm9mZnNldDApO1xuKy8qXG4rICogQmxvY2stbGF5ZXIgY29uc3VtZXJzIChlLmcuIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoKSkgcmVxdWlyZSB0aGF0IHRoZVxuKyAqIHNlZ21lbnRzIG9mIGFuIElURVJfQlZFQyBpdGVyYXRvciBhcmUgYWxyZWFkeSBhbGlnbmVkIHRvIHRoZSB0YXJnZXQgZGV2aWNlJ3NcbisgKiBETUEgYWxpZ25tZW50LCBhbmQgZm9yd2FyZCB0aGVtIGFzLWlzLiAgSW4ta2VybmVsIHVzZXJzIHRoYXQgYnVpbGQgdGhlaXIgb3duXG4rICogYnZlY3MgbXVzdCBub3QgY3JlYXRlIHN1Yi1hbGlnbmVkIHNlZ21lbnRzOyBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKCkgZW5mb3JjZXNcbisgKiB0aGUgc2FtZSBmb3IgdGhlIHNlZ21lbnRzIGl0IGV4dHJhY3RzIHZpYSBAbWVtX2FsaWduX21hc2suXG4rICovXG4gc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0XHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxuLVx0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgaW92X2l0ZXJfZXh0cmFjdGlvbl90IGV4dHJhY3Rpb25fZmxhZ3MpO1xuK1x0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssXG4rXHRcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKTtcbiBcbiAvKipcbiAgKiBpb3ZfaXRlcl9leHRyYWN0X3dpbGxfcGluIC0gSW5kaWNhdGUgaG93IHBhZ2VzIGZyb20gdGhlIGl0ZXJhdG9yIHdpbGwgYmUgcmV0YWluZWRcbmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jXG5pbmRleCAyNzM5MTliMTYxNjE3Ni4uYzM0MzA3NTk1MWRlZDAgMTAwNjQ0XG4tLS0gYS9saWIvaW92X2l0ZXIuY1xuKysrIGIvbGliL2lvdl9pdGVyLmNcbkBAIC0xODg2LDYgKzE4ODYsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9jb250aWdfZm9saW9fbGVuKHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gICogQG1heF9zaXplOlx0bWF4aW11bSBzaXplIHRvIGV4dHJhY3QgZnJvbSBAaXRlclxuICAqIEBucl92ZWNzOlx0bnVtYmVyIG9mIHZlY3RvcnMgaW4gQGJ2IChvbiBpbiBhbmQgb3V0cHV0KVxuICAqIEBtYXhfdmVjczpcdG1heGltdW0gdmVjdG9ycyBpbiBAYnYsIGluY2x1ZGluZyB0aG9zZSBmaWxsZWQgYmVmb3JlIGNhbGxpbmdcbisgKiBAbWVtX2FsaWduX21hc2s6XHRyZWplY3Qgd2l0aCAtRUlOVkFMIGlmIHRoZSBzb3VyY2UgYWRkcmVzcyBvclxuKyAqXHRcdGxlbmd0aCBpcyBub3QgYWxpZ25lZCB0byB0aGlzIG1hc2tcbiAgKiBAZXh0cmFjdGlvbl9mbGFnczogZmxhZ3MgdG8gcXVhbGlmeSByZXF1ZXN0XG4gICpcbiAgKiBMaWtlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSwgYnV0IHJldHVybnMgcGh5c2ljYWxseSBjb250aWd1b3VzIHJhbmdlc1xuQEAgLTE4OTcsMTQgKzE4OTksMTkgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuICAqL1xuIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBiaW9fdmVjICpidixcbiBcdFx0c2l6ZV90IG1heF9zaXplLCB1bnNpZ25lZCBzaG9ydCAqbnJfdmVjcyxcbi1cdFx0dW5zaWduZWQgc2hvcnQgbWF4X3ZlY3MsIGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKVxuK1x0XHR1bnNpZ25lZCBzaG9ydCBtYXhfdmVjcywgdW5zaWduZWQgbWVtX2FsaWduX21hc2ssXG4rXHRcdGlvdl9pdGVyX2V4dHJhY3Rpb25fdCBleHRyYWN0aW9uX2ZsYWdzKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZylpdGVyX2lvdl9hZGRyKGl0ZXIpO1xuIFx0dW5zaWduZWQgc2hvcnQgZW50cmllc19sZWZ0ID0gbWF4X3ZlY3MgLSAqbnJfdmVjcztcbiBcdHVuc2lnbmVkIHNob3J0IG5yX3BhZ2VzLCBpID0gMDtcbiBcdHNpemVfdCBsZWZ0LCBvZmZzZXQsIGxlbjtcbiBcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4gXHRzc2l6ZV90IHNpemU7XG4gXG4rXHRpZiAoKHN0YXJ0IHwgaXRlcl9pb3ZfbGVuKGl0ZXIpKSBcdTAwMjYgbWVtX2FsaWduX21hc2spXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0LypcbiBcdCAqIE1vdmUgcGFnZSBhcnJheSB1cCBpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhlIGJpbyB2ZWNzIGFzIGZhciBhc1xuIFx0ICogcG9zc2libGUgc28gdGhhdCB3ZSBjYW4gc3RhcnQgZmlsbGluZyBiaW92ZWNzIGZyb20gdGhlIGJlZ2lubmluZ1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDI6NDQuOTE5NjA4MTcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwNjU3NzE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIHByZXR0eSBjb3JlIHN0dWZmIOKAkyBibG9jayBsYXllciBiaW8gaGFuZGxpbmcgYW5kIGRpcmVjdCBJL08gYWxpZ25tZW50LiBTcGVjaWZpY2FsbHksIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1lbV9hbGlnbl9tYXNrYCBpbnRvIGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIGlzIGltbWVkaWF0ZWx5IGdyYWJiaW5nIG15IGF0dGVudGlvbi4gQW5kIHRoZSB1cGRhdGVzIHRvIHRoZSBgbG9vcGAgYW5kIGB6bG9vcGAgZHJpdmVycyB0byBjb3JyZWN0bHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PIGFyZSBkZWZpbml0ZWx5IGludGVyZXN0aW5nLiBUaGVuIHRoZXJlIGlzIHRoZSBtb2RpZmljYXRpb24gb2YgYGlvbWFwYCBhbmQgYGJsa2RldmAgdG8gcGFzcyBgYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpYCB0byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AuIEl0IHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUgdmVyeSBjb3JlIG9mIHRoZSBibG9jayBsYXllciBhbmQgdGhlIGRpcmVjdCBJL08gbG9naWMuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCB0aGlzIHNjcmVhbXMgZm9yIGZ1enppbmcuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBmb2N1cyBteSBhdHRlbnRpb24gb24ga2V5IHN5bWJvbHMuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBhIG1lbnRhbCBjaGVja2xpc3Q6XG4qICAgYENPTkZJR19CTEtfREVWX0xPT1BgIGZvciB0aGUgbG9vcCBkZXZpY2UuXG4qICAgYENPTkZJR19CTEtfREVWX1pPTkVEYCBmb3IgdGhlIHpsb29wIGRldmljZS4uLiBobW0sIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0J3MgbG9vayBpbnRvIHRoZSBjb2RlLCBpdCdzIGBkcml2ZXJzL2Jsb2NrL3psb29wLmNgLiBJJ2xsIHVzZSB0b29scyB0byB2ZXJpZnkgaXRzIGNvbmZpZy5cbiogICBgQ09ORklHX0ZTX0lPTUFQYCBmb3IgaW9tYXAsIG9idmlvdXNseS5cbiogICBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CTE9DS2AgZm9yIHRoZSBibG9jayBsYXllciBpdHNlbGYuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGZ1bGx5IGF3YXJlIG9mIGhvdyB0aGVzZSBjb21wb25lbnRzIGFyZSBjb25maWd1cmVkIGluIHRoZSB0YXJnZXQgc3lzdGVtcy4gVGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBteSBmdXp6aW5nIHBsYW4uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdG9vbHMgSSBuZWVkIHRvIGhlbHAgbWUgdW5kZXJzdGFuZCBgZHJpdmVycy9ibG9jay96bG9vcC5jYCBhbmQgaXRzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mjo1MC42MjYxODk1ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzNTI4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTY9Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM2Ny1cXHQgIGVjaG8gXFxcImFkZCBpZD0wLHpvbmVfc2l6ZV9tYj0yNTYsY2FwYWNpdHlfbWI9MTYzODQsY29udl96b25lcz0xMVxcXCIgXFx1MDAzZSBcXFxcXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM2ODpcXHRcXHQvZGV2L3psb29wLWNvbnRyb2xcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mjo1MC42ODk1NDk1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDY0MDMzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWm9uZWQgTG9vcCBDb25maWd1cmF0aW9uIERpdmUqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0JMS19ERVZfWk9ORURfTE9PUGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhlIHpvbmVkIGxvb3AgZGV2aWNlLCB6bG9vcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGlyZWN0IEkvTyBwYXRoLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUuXG5cbk15IGZvY3VzIGlzIG9uIHRoZSBkYXRhIHBhdGguIEknbGwgc3RhcnQgd2l0aCBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpbiBgYmxvY2svYmlvLmNgIGFuZCBgbGliL2lvdl9pdGVyLmNgLiBUaGVzZSB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBJL08gdmVjdG9ycyBhcmUgaGFuZGxlZC4gRnJvbSB0aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgem9uZWQgYXdhcmUgaGFuZGxpbmcgd2l0aGluIHRoZSBsb29wIGNvZGUuXG5cbkkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgbG9vcF9zZXRfZGlvYCwgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgLCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgLCBgemxvb3BfY3RsX2FkZGAsIGBpb21hcF9kaW9fYmlvX2l0ZXJfb25lYCwgYW5kIG9mIGNvdXJzZSwgYF9fYmxrZGV2X2RpcmVjdF9JT2AuXG5cbkJlZm9yZSBkaWdnaW5nIGluIGZ1cnRoZXIsIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGF0IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgYWN0dWFsbHkgKmV4aXN0cyouIEl0J3MgcG9zc2libGUgSSdtIGxvb2tpbmcgYXQgb3V0ZGF0ZWQgY29kZSBvciBhIGRpZmZlcmVudCB2ZXJzaW9uLCBhbmQgSSBuZWVkIHRvIHN0YXJ0IGhlcmUgdG8gYmUgY2VydGFpbiBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjU0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQyOjU0Ljc5NTk1NjczM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDMyODEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9nZXRfYmxvY2tfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMTY9c3RhdGljIHN0cnVjdCBmaWxlICp6bG9vcF9maWxwX29wZW5fZm10KGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDMzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM0OnN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDM1LVxcdFxcdFxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTEwNzU9c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEwLVxcdFxcdGlmICghemxvLVxcdTAwM2VibG9ja19zaXplKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMTE6XFx0XFx0XFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMi1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTAtXFx0aWYgKCF6bG8tXFx1MDAzZWJsb2NrX3NpemUpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MTpcXHRcXHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1NjpcXHR6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mjo1NC44NzAyOTI4NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY4MTk4NzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBsb29wLmMgZm9yIERNQSBhbmQgQWxpZ25tZW50IFVwZGF0ZXMqKlxuXG5SaWdodCwgdGltZSB0byBmb2N1cyBvbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvb3AgZGV2aWNlIGhhbmRsZXMgRE1BIHRyYW5zZmVycyBhbmQgYWxpZ25tZW50LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIHRoZSBmdW5jdGlvbnMgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgIGFuZCBgbG9vcF9zZXRfZG1hX2xpbWl0YC4gSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgZW5zdXJpbmcgZWZmaWNpZW50IEkvTyBhbmQgcHJldmVudGluZyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IsIGV2ZW4gd29yc2UsIGRhdGEgY29ycnVwdGlvbiwgd2hlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGRldmljZSdzIHNldHVwIGFuZCBvcGVyYXRpb24sIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gRE1BIGNvbnN0cmFpbnRzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgYWxnb3JpdGhtcyB1c2VkIGZvciBhbGlnbm1lbnQsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGFyaXNlIHdpdGggY29uY3VycmVudCBhY2Nlc3MuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIGFueSBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIGxvb3AgZGV2aWNlIGZ1bmN0aW9uYWxpdHkgd291bGQgYmUgaGlkaW5nLiBMZXQncyBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDI6NTguMTM4NDk1NDk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDM1NTI1NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF91cGRhdGVfZGlvX2FsaWdubWVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz00Mzk9c3RhdGljIHZvaWQgbG9vcF9yZXJlYWRfcGFydGl0aW9ucyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQ1MTpzdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNDUyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTUxNj1zdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjMtXFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1MjQ6XFx0bG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChsbyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTI1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDI6NTkuNjgyMDU1ODY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwMTEwODgwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGxvb3Bfc2V0X2RtYV9saW1pdGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbG9vcF9zZXRfZG1hX2xpbWl0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24g4oCTIGlzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybSBvciBhIG1vcmUgZ2VuZXJpYyBETUEgKERpcmVjdCBNZW1vcnkgQWNjZXNzKSBpbXBsZW1lbnRhdGlvbj8gVGhlIG5hbWluZyBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggc2V0dGluZyBzb21lIHNvcnQgb2YgdXBwZXIgYm91bmQsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHNpemUgb3IgbnVtYmVyIG9mIERNQSB0cmFuc2ZlcnMgd2l0aGluIGEgbG9vcC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQncyB0aGUgdHlwaWNhbCB1c2UgY2FzZT8gSXMgdGhpcyBmb3IgcHJldmVudGluZyBvdmVyZmxvdyBpbiBhIHNwZWNpZmljIHJlZ2lzdGVyLCBtYW5hZ2luZyBtZW1vcnkgYmFuZHdpZHRoLCBvciBpbXBvc2luZyBhIGxpbWl0YXRpb24gZm9yIHNhZmV0eSByZWFzb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBsb29wIHJlcHJlc2VudHMuIElzIGl0IGFuIGlubmVyIGxvb3Agd2l0aGluIGEgbW9yZSBjb21wbGV4IGFsZ29yaXRobSwgb3IgdGhlIHByaW1hcnkgbG9vcD9cblxuSSdsbCBxdWlja2x5IGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgZGVjbGFyYXRpb24gdG8gc2VlIHRoZSBhcmd1bWVudHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGludGVnZXIgbGltaXQsIG9yIGlzIHRoZXJlIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggaW52b2x2ZWQsIGxpa2UgYSBzdHJ1Y3R1cmUgd2l0aCB1cHBlciBhbmQgbG93ZXIgYm91bmQgZGVmaW5pdGlvbnM/IEFsc28sIGFyZSB3ZSBwb3RlbnRpYWxseSBzZXR0aW5nIGJvdW5kcyBvbiBpbmRpdmlkdWFsIGNoYW5uZWwgbG9vcHMsIG9yIHRoZSB3aG9sZSBvcGVyYXRpb24uIEknbSBrZWVuIHRvIGV4YW1pbmUgdGhlIGNvZGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IG5lZWQgYXR0ZW50aW9uLlxuXG5JIG5lZWQgdG8gc2VlIGhvdyB0aGUgbGltaXQgaXMgKnVzZWQqLiBXaGVyZSBpcyB0aGlzIHZhcmlhYmxlIGFjY2Vzc2VkIHdpdGhpbiB0aGUgbG9vcD8gSXMgaXQgY2hlY2tlZCB3aXRoaW4gdGhlIERNQSB0cmFuc2ZlciBpdHNlbGY/IElzIGl0IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvciB0aGUgc2l6ZSBvZiBhIGJ1ZmZlcj8gSSBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIHRoaXMgbGltaXQsIHdoYXQgaGFwcGVucyBpZiB0aGUgbG9vcCBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBkbWEgbGltaXQ/XG5cbkVzc2VudGlhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGxvb3Bfc2V0X2RtYV9saW1pdGAgZml0cyBpbnRvIHRoZSBsYXJnZXIgRE1BIHBpY3R1cmUgdG8gY29uZmlybSB0aGF0IGl0J3MgY29ycmVjdGx5IHByZXZlbnRpbmcgcHJvYmxlbXMsIG5vdCBjcmVhdGluZyB0aGVtLiBJJ20gbG9va2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYm90dGxlbmVja3MsIG9yIGV2ZW4gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgcmVsYXRlZCB0byBETUEgcGVyZm9ybWFuY2Ugb3IgZGF0YSBpbnRlZ3JpdHkuIExldCdzIHN0YXJ0IHdpdGggdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MDMuNzgzMTY4NTczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc2NDczMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9zZXRfZG1hX2xpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTk0Nz1zdGF0aWMgdW5zaWduZWQgaW50IGxvb3BfZGVmYXVsdF9ibG9ja3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk1NC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5NTU6c3RhdGljIHZvaWQgbG9vcF9zZXRfZG1hX2xpbWl0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NTYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9OTY4PXN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05ODgtXFx0bGltLVxcdTAwM2Vpb19taW4gPSBic2l6ZTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo5ODk6XFx0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBsaW0pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTk5MC1cXHRsaW0tXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjY9IH4oQkxLX0ZFQVRfV1JJVEVfQ0FDSEUgfCBCTEtfRkVBVF9ST1RBVElPTkFMKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0NDE9c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDY0LVxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDY1OlxcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2Ni1cXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUsIFxcdTAwMjZsaW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzowNC4yMTA4NDY1MTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4NzQ5MjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBMb29wIERldmljZSBQYXRjaCoqXG5cbk9rYXksIHRoaXMgcGF0Y2ggbG9va3Mgc29saWQsIGRlZmluaXRlbHkgd29ydGggZGVkaWNhdGluZyBzb21lIGZ1enppbmcgdGltZSB0by4gTGV0J3MgZ2V0IGEgcGxhbiB0b2dldGhlci4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSdtIHRoaW5raW5nIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIHRoZSBtb3N0IHJlbGV2YW50OiBgQkxLX0RFVl9MT09QYCwgYEJMS19ERVZfWk9ORURfTE9PUGAsIGFuZCBgRlNfSU9NQVBgLiBXaGlsZSBgRlNfSU9NQVBgIG1pZ2h0IGJlIGltcGxpY2l0bHkgZW5hYmxlZCB3aXRoIFhGUyBvciBleHQ0LCBpdCdzIGdvb2QgdG8gYmUgZXhwbGljaXQgYWJvdXQgaXQuXG5cbk5vdywgZm9yIGZvY3VzIHN5bWJvbHMsIEknbSBsZWFuaW5nIHRvd2FyZHMgdGhlIGZvbGxvd2luZzogYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AsIGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YCwgYGxvb3Bfc2V0X2RtYV9saW1pdGAsIGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAsIGBpb21hcF9kaW9fYmlvX2l0ZXJfb25lYCwgYW5kIGBfX2Jsa2Rldl9kaXJlY3RfSU9gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIHByaW1lIHNwb3RzIHdoZXJlIHRoZSBwYXRjaOKAmXMgbG9naWMgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIGNvZGUsIGluY3JlYXNpbmcgdGhlIHJpc2sgc3VyZmFjZS5cblxuSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjaywgSSBuZWVkIHRvIGNvbmZpcm0gYEZTX0lPTUFQYCBpcyBhY3R1YWxseSBhIGNvbmZpZ3VyYWJsZSBpdGVtLiBJdCBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MDguMjk4MzQyNTE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMzNjkzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXFxuLS1cXG5mcy9LY29uZmlnLTE3LVxcbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXFxuZnMvS2NvbmZpZy0xOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjA4LjQxMTcyMDI4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjY4OTE5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludGVybmFsIEF1ZGl0IG9mIGBGU19JT01BUGAgYW5kIERpcmVjdCBJL08gSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgYEZTX0lPTUFQYC4uLiB5ZWFoLCB0aGF0J3MgZGVmaW5pdGVseSBhIGNvbmZpZyBvcHRpb24uIEdvdHRhIGtlZXAgdGhhdCBzdHJhaWdodCBpbiBteSBoZWFkLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCB0aGUgaW52ZXN0aWdhdGlvbiwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBfX2Jsa2Rldl9kaXJlY3RfSU9gIGlzIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGUgZnVuY3Rpb24gSSdtIGxvb2tpbmcgYXQuIEknbGwgZG91YmxlLWNoZWNrIHRoYXQgdG8gYXZvaWQgd2FzdGluZyB0aW1lIG9uIGEgcmVkIGhlcnJpbmcuIE5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGVhbHMgd2l0aCBkaXJlY3QgSS9PIGZvciBibG9jayBkZXZpY2VzLiBNeSBtZW1vcnkgaXMgZ29vZCwgYnV0IGEgcXVpY2sgY29uZmlybWF0aW9uIG5ldmVyIGh1cnRzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggZnVuZGFtZW50YWwgYXNwZWN0cyBvZiB0aGUgc3lzdGVtLiBMZXQncyBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCB0YXJnZXQgYmVmb3JlIEkgZGlnIGluIGFueSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzcxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MTEuNjM4NjE2ODA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTYwMzk2MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19ibGtkZXZfZGlyZWN0X0lPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2ZvcHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9mb3BzLmM9NDY9c3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXFxuLS1cXG5ibG9jay9mb3BzLmMtNTQtXFxuYmxvY2svZm9wcy5jOjU1OnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxcbmJsb2NrL2ZvcHMuYy01Ni1cXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5ibG9jay9mb3BzLmM9MTMxPXN0YXRpYyB2b2lkIGJsa2Rldl9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2ZvcHMuYy0xNzQtXFxuYmxvY2svZm9wcy5jOjE3NTpzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuYmxvY2svZm9wcy5jLTE3Ni1cXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5ibG9jay9mb3BzLmM9Mjk0PXN0YXRpYyB2b2lkIGJsa2Rldl9iaW9fZW5kX2lvX2FzeW5jKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2ZvcHMuYy0zMjEtXFxuYmxvY2svZm9wcy5jOjMyMjpzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoc3RydWN0IGtpb2NiICppb2NiLFxcbmJsb2NrL2ZvcHMuYy0zMjMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svZm9wcy5jPTM5Nj1zdGF0aWMgc3NpemVfdCBibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuYmxvY2svZm9wcy5jLTQzMC1cXHRcXHRpZiAoaXNfc3luY19raW9jYihpb2NiKSlcXG5ibG9jay9mb3BzLmM6NDMxOlxcdFxcdFxcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU9fc2ltcGxlKGlvY2IsIGl0ZXIsIGJkZXYsXFxuYmxvY2svZm9wcy5jLTQzMi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlcyk7XFxuYmxvY2svZm9wcy5jOjQzMzpcXHRcXHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPX2FzeW5jKGlvY2IsIGl0ZXIsIGJkZXYsIG5yX3BhZ2VzKTtcXG5ibG9jay9mb3BzLmMtNDM0LVxcdH0gZWxzZSBpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0FUT01JQykge1xcbi0tXFxuYmxvY2svZm9wcy5jLTQzNi1cXHR9XFxuYmxvY2svZm9wcy5jOjQzNzpcXHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPKGlvY2IsIGl0ZXIsIGJkZXYsIGJpb19tYXhfc2Vncyhucl9wYWdlcykpO1xcbmJsb2NrL2ZvcHMuYy00MzgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzoxMi4wNTQ2Njk0MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NDk0NjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25maXJtaW5nIERpcmVjdCBJL08gYW5kIERpZ2dpbmcgRGVlcGVyKipcblxuWWVzLCBgX19ibGtkZXZfZGlyZWN0X0lPYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIHVzZWQgaGVyZS4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBibG9jayBsYXllcidzIGRpcmVjdCBJL08gaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBgYmlvYCBzdHJ1Y3R1cmUgYW5kIHRoZSBJL08gdmVjdG9yIChgaW92YCkuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBiaW9faW92X2J2ZWNfYWxpZ25lZGAgaW4gYGJsb2NrL2Jpby5jYC4gVGhhdCdzIHdoZXJlIHRoZSBhbGlnbm1lbnQgbG9naWMgaXMgbGlrZWx5IHRvIHJlc2lkZSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IGl0IHJlbGF0ZXMgdG8gYGJ2ZWNgIGFsaWdubWVudCB3aWxsIGJlIGtleSB0byBtYWtpbmcgdGhlIHJlbGV2YW50IGRldGVybWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MTUuMDQ5NjIxNTQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg3ODgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaW9faW92X2J2ZWNfYWxpZ25lZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9iaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iaW8uYz0xMTkzPXN0YXRpYyBpbnQgYmlvX2lvdl9pdGVyX2FsaWduX2Rvd24oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5ibG9jay9iaW8uYy0xMjIzLSNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMXFxuYmxvY2svYmlvLmM6MTIyNDpzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jpby5jLTEyMjUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXFxuLS1cXG5ibG9jay9iaW8uYy0xMjM5LSNlbHNlXFxuYmxvY2svYmlvLmM6MTI0MDpzdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbmJsb2NrL2Jpby5jLTEyNDEtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbWVtX2FsaWduX21hc2spXFxuLS1cXG5ibG9jay9iaW8uYz0xMjc5PWludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svYmlvLmMtMTI4OS1cXG5ibG9jay9iaW8uYzoxMjkwOlxcdFxcdGlmICghYmlvX2lvdl9idmVjX2FsaWduZWQoYmlvLCBtZW1fYWxpZ25fbWFzaykpXFxuYmxvY2svYmlvLmMtMTI5MS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MTUuMTE2NTA4Njk5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDE5NTkyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIEkvTyBNYXBwaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBkaWcgaW50byB0aGlzIEkvTyBtYXBwaW5nIHByb2Nlc3MuIFdoaWxlIGBiaW9faW92X2J2ZWNfYWxpZ25lZGAgKmlzKiBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIG1ha2luZyBpdCBhIHBvdGVudGlhbGx5IGxlc3MtdGhhbi1pZGVhbCBmb2N1cyBmb3IgZGVlcC1kaXZlIGFuYWx5c2lzLCB0aGUgZnVuY3Rpb24gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGxvb2tzIGxpa2UgYSBtb3JlIHByb21pc2luZyBlbnRyeSBwb2ludC4gSXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBwcm92aWRlIGEgZ29vZCB2aWV3IGludG8gaG93IHRoZSBJL08gdmVjdG9ycyBnZXQgdHJhbnNsYXRlZCBpbnRvIHBhZ2Ugc3RydWN0dXJlcyBmb3IgYSBiaW8uXG5cblRoZXJlZm9yZSwgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBiaW9fbWFwX3VzZXJfaW92YCB3aXRoaW4gYGJsb2NrL2Jsay1tYXAuY2AuIFRoYXQgc2hvdWxkIGJlIHRoZSBhcmVhIG9mIGZvY3VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlci1zcGFjZSBJL08gdmVjdG9ycyBhcmUgaGFuZGxlZCBpbiB0aGlzIG1hcHBpbmcgZnVuY3Rpb24uIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgaXMgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHRyYW5zbGF0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MTguMDU4NDc0NjMxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI2NDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaW9fbWFwX3VzZXJfaW92XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1tYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbWFwLmM9MTUwPXN0YXRpYyBpbnQgYmlvX2NvcHlfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgcnFfbWFwX2RhdGEgKm1hcF9kYXRhLFxcbi0tXFxuYmxvY2svYmxrLW1hcC5jLTI1OS1cXG5ibG9jay9ibGstbWFwLmM6MjYwOnN0YXRpYyBpbnQgYmlvX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5ibG9jay9ibGstbWFwLmMtMjYxLVxcdFxcdGdmcF90IGdmcF9tYXNrKVxcbi0tXFxuYmxvY2svYmxrLW1hcC5jPTQ5OT1pbnQgYmxrX3JxX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuYmxvY2svYmxrLW1hcC5jLTUzNC1cXHRcXHRlbHNlXFxuYmxvY2svYmxrLW1hcC5jOjUzNTpcXHRcXHRcXHRyZXQgPSBiaW9fbWFwX3VzZXJfaW92KHJxLCBcXHUwMDI2aSwgZ2ZwX21hc2spO1xcbmJsb2NrL2Jsay1tYXAuYy01MzYtXFx0XFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzoxOC4xMjA3NTUwNjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyMjI2MzM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSU8gVmVjdG9yIEluc3BlY3Rpb24qKlxuXG5BbHJpZ2h0LCBgYmlvX21hcF91c2VyX2lvdmAuLi4geWVhaCwgdGhhdCdzIGEgc29saWQgZnVuY3Rpb24uIEknbSBzYXRpc2ZpZWQgd2l0aCB0aGF0LiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBjcnVjaWFsIGNvbm5lY3Rpb25zIGluIHRoZSBJTyBwYXRoLCBsZXQncyBkcmlsbCBkb3duIGludG8gYGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXNgLiBUaGF0J3MgaW4gYGJsb2NrL2ZvcHMuY2AsIHJpZ2h0PyBHb29kLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSB0byBtYWtlIHN1cmUgdGhlIHVzZXIgSU8gdmVjdG9ycyBhcmUgYmVpbmcgcHJvcGVybHkgaGFuZGxlZCB0aHJvdWdoIHRvIHRoZSBibG9jayBkZXZpY2UgbGF5ZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgdHJhbnNmZXIgaXMgY29oZXJlbnQgYW5kIGVmZmljaWVudCBhbmQgdGhhdCBhbnkgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIGluIHRoaXMgYXJlYSBhcmVuJ3QgYmVjb21pbmcgYSBib3R0bGVuZWNrLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzoyMC45NDMwMjIzNTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMDMyMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svZm9wcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2ZvcHMuYz0zOT1zdGF0aWMgYm9vbCBibGtkZXZfZGlvX2ludmFsaWQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuYmxvY2svZm9wcy5jLTQ1LVxcbmJsb2NrL2ZvcHMuYzo0NjpzdGF0aWMgaW5saW5lIGludCBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbyxcXG5ibG9jay9mb3BzLmMtNDctXFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbi0tXFxuYmxvY2svZm9wcy5jPTU1PXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuYmxvY2svZm9wcy5jLTg2LVxcbmJsb2NrL2ZvcHMuYzo4NzpcXHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKFxcdTAwMjZiaW8sIGl0ZXIsIGJkZXYpO1xcbmJsb2NrL2ZvcHMuYy04OC1cXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbmJsb2NrL2ZvcHMuYz0xNzU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svZm9wcy5jLTIxOC1cXG5ibG9jay9mb3BzLmM6MjE5OlxcdFxcdHJldCA9IGJsa2Rldl9pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBiZGV2KTtcXG5ibG9jay9mb3BzLmMtMjIwLVxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLS1cXG5ibG9jay9mb3BzLmM9MzIyPXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5ibG9jay9mb3BzLmMtMzUzLVxcdH0gZWxzZSB7XFxuYmxvY2svZm9wcy5jOjM1NDpcXHRcXHRyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldik7XFxuYmxvY2svZm9wcy5jLTM1NS1cXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MjEuMDI1MDY0MTQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTMyMzExMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBCbG9jayBEZXZpY2UgSS9PIEFsaWdubWVudCoqXG5cbkFscmlnaHQsIHNvIGBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzYCBpcyBhICpzdGF0aWMgaW5saW5lKiBmdW5jdGlvbi4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBhcyBpdCBtZWFucyB0aGUgY29tcGlsZXIgd2lsbCBsaWtlbHkgb3B0aW1pemUgaXQgaGVhdmlseSwgcG90ZW50aWFsbHkgaW5saW5pbmcgaXRzIGxvZ2ljIGRpcmVjdGx5LiBNYWtlcyBkZWJ1Z2dpbmcgYSBiaXQgaGFyZGVyIGlmIHlvdSdyZSBub3QgY2FyZWZ1bCwgYnV0IHVzdWFsbHkgaXQncyBhIG5ldCB3aW4gZm9yIHBlcmZvcm1hbmNlLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBhbGlnbm1lbnQgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbG9vcCBkZXZpY2UuIEdpdmVuIHRoYXQgY29udGV4dCwgSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGxvb3AgZHJpdmVyIG1hbmFnZXMgYWxpZ25tZW50IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcXVpcmtzIHdoZW4gZGVhbGluZyB3aXRoIGRpcmVjdCBJL08gYW5kLCBtb3JlIGJyb2FkbHksIGJsb2NrIGRldmljZSBpbnRlcmFjdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlIHdpdGggdGhvc2UgZGlyZWN0IElPIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzoyNC4xMTgyOTkyMjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NTQ2MDMzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTQzOT1zdGF0aWMgdm9pZCBsb29wX3JlcmVhZF9wYXJ0aXRpb25zKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTAtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6NDUxOnN0YXRpYyB2b2lkIGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00NTIte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9NTE2PXN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyMy1cXHRcXHRsby1cXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUyNDpcXHRsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50KGxvKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzoyNC41MTM3Nzc1NjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NzAxNjkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gRGlyZWN0IEkvTyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBkaXJlY3QgSS9PIGlzIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgYGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRgLCBgbG9vcF9zZXRfZG1hX2xpbWl0YCwgYW5kIGBsb29wX3NldF9kaW9gIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGF0J3MgZ29vZCB0byBrbm93IOKAkyBpdCBzdWdnZXN0cyB0aGV5IGFyZSBsb2NhbCB0byB0aGUgbW9kdWxlIG9yIGNvbXBpbGF0aW9uIHVuaXQgYW5kIGFyZW4ndCBtZWFudCB0byBiZSB1c2VkIGV4dGVybmFsbHkuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgdHJhbnNmZXIgYWN0dWFsbHkgaGFwcGVucyBpbiB0aGUgY29udGV4dCBvZiBgaW9tYXBgLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIExldCdzIHNlZSB3aGF0IGBpb21hcF9kaW9fYmlvX2l0ZXJfb25lYCBpcyBkb2luZzsgdGhhdCdzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWluIHdvcmsgaGFwcGVucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJL08gb3BlcmF0aW9ucyBhcmUgYnJva2VuIGRvd24sIG1hcHBlZCB0byB1bmRlcmx5aW5nIGJsb2NrIGRldmljZXMsIGFuZCBob3cgZGF0YSB0cmFuc2ZlciBpcyBpbml0aWF0ZWQsIGFuZCB0aGVzZSBmdW5jdGlvbnMgc2VlbSBsaWtlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBrZXkgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjI3LjY4MDc5NzQ5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzMTY3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2Jpb19pdGVyX29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz0yOTg9c3RhdGljIGludCBpb21hcF9kaW9femVybyhjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMzMzLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjMzNDpzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTMzNS1cXHRcXHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBhbGlnbm1lbnQsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz00MDI9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0Ni1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1NDc6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX2Jpb19pdGVyX29uZShpdGVyLCBkaW8sIHBvcywgYWxpZ25tZW50LCBiaW9fb3BmKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01NDgtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjI3Ljc0OTEyMjczNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU1MDQyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIERlZXAgRW5kOiBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBhbiBpbnRlcm5hbCB1dGlsaXR5LCBzY29wZWQgdG8gYSBzcGVjaWZpYyBjb250ZXh0LCBwcm9iYWJseSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIEkvTyBtYXBwaW5nIGxheWVyLiBNeSBndXQgdGVsbHMgbWUgaXQncyBoYW5kbGluZyBhIGNydWNpYWwgcGllY2Ugb2YgRGlyZWN0IEkvTyAoRElPKSBhbmQgcG90ZW50aWFsbHkgYmxvY2sgSS9PIGl0ZXJhdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9ucyB1c2VkIGluIHRoZSBrZXJuZWwsIEknZCBndWVzcyB0aGF0IGl0IGhhbmRsZXMgYSBzaW5nbGUgSS9PIG9wZXJhdGlvbiBpdGVyYXRpb24uIFRoZSBgX2Jpb19gIHBhcnQgb2YgdGhlIGZ1bmN0aW9uIG5hbWUgaW5kaWNhdGVzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHRpZ2h0bHkgY291cGxlZCB0byBiaW8gb3IgYmlvIGl0ZXJhdG9ycy5cblxuTGV0J3Mgc2Vl4oCmIEnigJlsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgIGZ1bmN0aW9uLiBUaGUgbmFtaW5nIG9mIHRoZSBmdW5jdGlvbiBzb3VuZHMgbGlrZSBhbiBpb3ZlYyBpdGVyYXRvciBhbmQgYnVmZmVyIHZlY3RvciBleHRyYWN0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZC4gVGhpcyBpcyBsaWtlbHkgaG93IHdlJ3JlIGV4dHJhY3RpbmcgZGF0YSwgcG9zc2libHkgZnJvbSBhbiBpb3ZlYyBzdHJ1Y3R1cmUsIHRvIGNyZWF0ZSBhIGJ1ZmZlciB2ZWN0b3IgZm9yIEkvTyBvcGVyYXRpb25zLiBTaW5jZSB0aGUgZnVuY3Rpb24gaXMgbG9jYXRlZCBpbiBgbGliL2lvdl9pdGVyLmNgLCBpdCBjb25maXJtcyB0aGUgaXRlcmF0b3IgZGVzaWduLiBJIGV4cGVjdCB0aGF0IGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIHlpZWxkIGRlZXBlciBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgRElPIGFuZCBkYXRhIHRyYW5zZmVyIHdpdGhpbiB0aGUgSS9PIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDU0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MzEuMjA0MTY4Nzk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzU1MTQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9pb3ZfaXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9pb3ZfaXRlci5jPTE4NDk9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTg4Mi0vKipcXG5saWIvaW92X2l0ZXIuYzoxODgzOiAqIGlvdl9pdGVyX2V4dHJhY3RfYnZlY3MgLSBFeHRyYWN0IGJ2ZWNzIGZyb20gYW4gaXRlcmF0b3JcXG5saWIvaW92X2l0ZXIuYy0xODg0LSAqIEBpdGVyOlxcdHRoZSBpdGVyYXRvciB0byBleHRyYWN0IGZyb21cXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTE4OTktICovXFxubGliL2lvdl9pdGVyLmM6MTkwMDpzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY3Moc3RydWN0IGlvdl9pdGVyICppdGVyLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXFxubGliL2lvdl9pdGVyLmMtMTkwMS1cXHRcXHRzaXplX3QgbWF4X3NpemUsIHVuc2lnbmVkIHNob3J0ICpucl92ZWNzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTk1MS19XFxubGliL2lvdl9pdGVyLmM6MTk1MjpFWFBPUlRfU1lNQk9MX0dQTChpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MzEuMjY3NzMxMzU5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODUwNjUyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZyBvbiBLZXkgU3ltYm9scyoqXG5cbk9rYXksIHNvIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzYCBpcyBtYXJrZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUExgLiBUaGF04oCZcyBnb29kIGluZm9ybWF0aW9uIGZvciBtZSB0byBzdGFydCB3aXRoLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHMgaW4gdGhlIGtlcm5lbDogYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgKG9idmlvdXNseSksIGBsb29wX3NldF9kaW9gLCBgemxvb3BfZ2V0X2Jsb2NrX3NpemVgLCBgaW9tYXBfZGlvX2Jpb19pdGVyX29uZWAsIGFuZCBmaW5hbGx5LCBgX19ibGtkZXZfZGlyZWN0X0lPYC5cblxuTm93LCBiZWZvcmUgSSBkaWcgaW4gdG9vIGRlZXBseSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBsb29wX3NldF9kaW9gIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gSXQncyBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGNoYXNpbmcgYSBkZWFkIGVuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2OTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MzQuNTUyODAxNDU1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc5MDIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29wX3NldF9kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9MTQyOD1zdGF0aWMgaW50IGxvb3Bfc2V0X2NhcGFjaXR5KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDQwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NDE6c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ0Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTE5PXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTMxLVxcdGNhc2UgTE9PUF9TRVRfRElSRUNUX0lPOlxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1MzI6XFx0XFx0ZXJyID0gbG9vcF9zZXRfZGlvKGxvLCBhcmcpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MzMtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjM0LjYxNTYwMDAyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NTcwOTQxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIElPQ1RMIEFjY2Vzc2liaWxpdHkgYW5kIEJsb2NrIFNpemUqKlxuXG5SaWdodCwgc28gYGxvb3Bfc2V0X2Rpb2AgaXMgZGVmaW5pdGVseSBleHBvc2VkIHRocm91Z2ggYW4gaW9jdGwsIHdoaWNoIEkgc3VzcGVjdGVkLiBUaGF0J3MgZ29vZCB0byBjb25maXJtLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGB6bG9vcF9nZXRfYmxvY2tfc2l6ZWAgZnVuY3Rpb24gYWdhaW4uIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJ2xsIG1lbnRhbGx5IHJ1biB0aHJvdWdoIGl0cyBsb2dpYyBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLi4uIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGdvdGNoYXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBwYXRocyB0aGF0IEknbSBvdmVybG9va2luZy4gR290dGEga2VlcCB0aGUgZGV0YWlscyBzdHJhaWdodC4gSXQncyB0aGUgZnVuZGFtZW50YWxzIHRoYXQgc29tZXRpbWVzIGNhdGNoIHlvdSBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6MzcuMzcyNjk3OTU0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg1MTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9nZXRfYmxvY2tfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMTY9c3RhdGljIHN0cnVjdCBmaWxlICp6bG9vcF9maWxwX29wZW5fZm10KGludCBvZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDMzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDM0OnN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDM1LVxcdFxcdFxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTEwNzU9c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEwLVxcdFxcdGlmICghemxvLVxcdTAwM2VibG9ja19zaXplKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMTE6XFx0XFx0XFx0cmV0ID0gemxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExMi1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTAtXFx0aWYgKCF6bG8tXFx1MDAzZWJsb2NrX3NpemUpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MTpcXHRcXHRyZXQgPSB6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUyLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1NjpcXHR6bG9vcF9nZXRfYmxvY2tfc2l6ZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0MzozNy40MzY1NTY1ODlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYxODQwMjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmVhY2hpbmcgZm9yIHRoZSBCbG9jayBTaXplKipcblxuQWxyaWdodCwgc28gYHpsb29wX2dldF9ibG9ja19zaXplYCBpcyBpbmRlZWQgcmVhY2hhYmxlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIHBpdm90IGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYF9fYmxrZGV2X2RpcmVjdF9JT2AuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYmxvY2sgc2l6ZSB3ZSd2ZSBqdXN0IGNvbmZpcm1lZC4gS25vd2luZyBob3cgZGlyZWN0IEkvTyBpcyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIHRoZSBibG9jayBzaXplIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgYmVoYXZpb3VyLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIHRoYXQgd2UgY2FuIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjQwLjA1NDk2NDI1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwNjg2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19ibGtkZXZfZGlyZWN0X0lPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2ZvcHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9mb3BzLmM9NDY9c3RhdGljIGlubGluZSBpbnQgYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXFxuLS1cXG5ibG9jay9mb3BzLmMtNTQtXFxuYmxvY2svZm9wcy5jOjU1OnN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxcbmJsb2NrL2ZvcHMuYy01Ni1cXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5ibG9jay9mb3BzLmM9MTMxPXN0YXRpYyB2b2lkIGJsa2Rldl9iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2ZvcHMuYy0xNzQtXFxuYmxvY2svZm9wcy5jOjE3NTpzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuYmxvY2svZm9wcy5jLTE3Ni1cXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5ibG9jay9mb3BzLmM9Mjk0PXN0YXRpYyB2b2lkIGJsa2Rldl9iaW9fZW5kX2lvX2FzeW5jKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2ZvcHMuYy0zMjEtXFxuYmxvY2svZm9wcy5jOjMyMjpzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoc3RydWN0IGtpb2NiICppb2NiLFxcbmJsb2NrL2ZvcHMuYy0zMjMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuYmxvY2svZm9wcy5jPTM5Nj1zdGF0aWMgc3NpemVfdCBibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbi0tXFxuYmxvY2svZm9wcy5jLTQzMC1cXHRcXHRpZiAoaXNfc3luY19raW9jYihpb2NiKSlcXG5ibG9jay9mb3BzLmM6NDMxOlxcdFxcdFxcdHJldHVybiBfX2Jsa2Rldl9kaXJlY3RfSU9fc2ltcGxlKGlvY2IsIGl0ZXIsIGJkZXYsXFxuYmxvY2svZm9wcy5jLTQzMi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRucl9wYWdlcyk7XFxuYmxvY2svZm9wcy5jOjQzMzpcXHRcXHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPX2FzeW5jKGlvY2IsIGl0ZXIsIGJkZXYsIG5yX3BhZ2VzKTtcXG5ibG9jay9mb3BzLmMtNDM0LVxcdH0gZWxzZSBpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0FUT01JQykge1xcbi0tXFxuYmxvY2svZm9wcy5jLTQzNi1cXHR9XFxuYmxvY2svZm9wcy5jOjQzNzpcXHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPKGlvY2IsIGl0ZXIsIGJkZXYsIGJpb19tYXhfc2Vncyhucl9wYWdlcykpO1xcbmJsb2NrL2ZvcHMuYy00MzgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo0MC4xMTUwMzcxODRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MzgzMTU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlYWNoaW5nIGEgQmxvY2sgRGV2aWNlKipcblxuQWxyaWdodCwgc28gYF9fYmxrZGV2X2RpcmVjdF9JT2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEdvb2QsIGdvb2QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwYXRoLCBhbmQgZmlndXJlIG91dCB0aGUgaW1wYWN0IG9mIHdoYXRldmVyIHRyaWdnZXJzIHRoaXMuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhcmx5IHRvIGRpdmUgaW50byBgYmlvX2lvdl9pdGVyX2dldF9wYWdlc2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgaXNuJ3QgaXQ/IExldCdzIHRyYWNlIGhvdyB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdHMgYXJlIGJlaW5nIHBvcHVsYXRlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHBhZ2UgcGlubmluZyBzdHJhdGVneSBhbmQgcG90ZW50aWFsIGRhdGEgY29weWluZyBvciBtYXBwaW5nIGdvaW5nIG9uLiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGludGVyYWN0aW9uIG9mIHRoZSBpdGVyYXRvcnMgaGVyZTsgaG93IG11Y2ggZGF0YSBjYW4gYmUgcHJvY2Vzc2VkIHBlciBpdGVyYXRpb24gYW5kIHdoYXQgaGFwcGVucyBpbiBlZGdlIGNhc2VzLiBXaGF0IEknbSByZWFsbHkgbG9va2luZyBmb3IgaXMgaG93IHRoaXMgaW1wYWN0cyBtZW1vcnkgdXRpbGl6YXRpb24sIGhvdyBtdWNoIGRhdGEgaXMgZ2V0dGluZyBwdWxsZWQgZnJvbSB1c2VyIHNwYWNlIChpZiBhdCBhbGwpLiBBbmQgb2YgY291cnNlLCBJJ20gd2F0Y2hpbmcgZm9yIGFueSBvYnZpb3VzIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLCBsaWtlIGhvdyB0aGUgcGFnZXMgYXJlIGJlaW5nIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gRE1BLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZSBzeXN0ZW0gY2FuIHByb3Blcmx5IGhhbmRsZSB0aGUgc2l0dWF0aW9uIHdoZW4gSS9PIHNpemVzIGFyZSBsYXJnZXIgdGhhbiB0aGUgcGh5c2ljYWwgbWVtb3J5IGFsbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo0My41NTg4NzMwNzhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTk2NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpb19pb3ZfaXRlcl9nZXRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLmM9MTE3Nz12b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5ibG9jay9iaW8uYy0xMTg5LSAqIEFsaWducyB0aGUgYmlvIHNpemUgdG8gdGhlIGxlbl9hbGlnbl9tYXNrLCByZWxlYXNpbmcgZXhjZXNzaXZlIGJpbyB2ZWNzIHRoYXRcXG5ibG9jay9iaW8uYzoxMTkwOiAqIF9fYmlvX2lvdl9pdGVyX2dldF9wYWdlcyBtYXkgaGF2ZSBpbnNlcnRlZCwgYW5kIHJldmVydHMgdGhlIHRyaW1tZWQgbGVuZ3RoXFxuYmxvY2svYmlvLmMtMTE5MS0gKiBmb3IgdGhlIG5leHQgaXRlcmF0aW9uLlxcbi0tXFxuYmxvY2svYmlvLmM9MTI0MD1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX2lvdl9idmVjX2FsaWduZWQoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxcbi0tXFxuYmxvY2svYmlvLmMtMTI1Ni0vKipcXG5ibG9jay9iaW8uYzoxMjU3OiAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMgLSBhZGQgdXNlciBvciBrZXJuZWwgcGFnZXMgdG8gYSBiaW9cXG5ibG9jay9iaW8uYy0xMjU4LSAqIEBiaW86IGJpbyB0byBhZGQgcGFnZXMgdG9cXG4tLVxcbmJsb2NrL2Jpby5jLTEyNjYtICogbWFwIHRoZW0gaW50byB0aGUga2VybmVsLiBPbiBJTyBjb21wbGV0aW9uLCB0aGUgY2FsbGVyIHNob3VsZCBwdXQgdGhvc2VcXG5ibG9jay9iaW8uYzoxMjY3OiAqIHBhZ2VzLiBGb3IgYnZlYyBiYXNlZCBpdGVyYXRvcnMgYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpIHVzZXMgdGhlIHByb3ZpZGVkXFxuYmxvY2svYmlvLmMtMTI2OC0gKiBidmVjcyByYXRoZXIgdGhhbiBjb3B5aW5nIHRoZW0uIEhlbmNlIGFueW9uZSBpc3N1aW5nIGtpb2NiIGJhc2VkIElPIG5lZWRzXFxuLS1cXG5ibG9jay9iaW8uYy0xMjc4LSAqL1xcbmJsb2NrL2Jpby5jOjEyNzk6aW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuYmxvY2svYmlvLmMtMTI4MC1cXHRcXHRcXHQgICB1bnNpZ25lZCBtZW1fYWxpZ25fbWFzaywgdW5zaWduZWQgbGVuX2FsaWduX21hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjQzLjYxODA4MjMwNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ2ODAzNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJL08gSXRlcmF0aW9uKipcblxuT2theSwgc28gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIEkvTyBmbG93LiBMZXQncyB0cmFjZSB0aGlzIGJhY2suIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBob3cgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIGludGVyYWN0cyB3aXRoIGl0LiBUaGlzIHByb2JhYmx5IGdpdmVzIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgbW92ZW1lbnQgcHJvY2VzcyB3aXRoaW4gdGhlIERpcmVjdCBJL08gY29udGV4dCBhbmQgd2hlcmUgdGhlIHBhZ2UgaW5mb3JtYXRpb24gaXMgYmVpbmcgZXh0cmFjdGVkIG9yIHV0aWxpemVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM0NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjQ2LjU2NDg4OTc0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5MzY1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2Jpb19pdGVyX29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz0yOTg9c3RhdGljIGludCBpb21hcF9kaW9femVybyhjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMzMzLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjMzNDpzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTMzNS1cXHRcXHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBhbGlnbm1lbnQsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz00MDI9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU0Ni1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1NDc6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX2Jpb19pdGVyX29uZShpdGVyLCBkaW8sIHBvcywgYWxpZ25tZW50LCBiaW9fb3BmKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01NDgtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQzOjQ2LjY0NTgzMzI3MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzM5NjU1OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUmVhY2hhYmlsaXR5IGFuZCBEYXRhIE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBpb21hcF9kaW9fYmlvX2l0ZXJfb25lYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aXRoaW4gdGhpcyBjb250ZXh0LiBUaGF04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgYW5kIG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBiaW9fbWFwX3VzZXJfaW92YC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gbWFwcGluZyB1c2VyLXNwYWNlIEkvTyB2ZWN0b3JzIChpb3ZzKSB0byB0aGUgdW5kZXJseWluZyBibG9jayBJL08gKGJpbykgc3RydWN0dXJlLCBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbWFwcGluZyBhbmQgZGF0YSBtb3ZlbWVudCBsb2dpYyB3aWxsIHJlc2lkZSwgYW5kIHdoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyByZWxhdGVkIHRvIGRpcmVjdCBJL08gKERJTykgbWlnaHQgYmUgZm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODUxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6NDkuMzg1NDk1MTEzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODE3NDEzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX21hcF91c2VyX2lvdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLW1hcC5jPTE1MD1zdGF0aWMgaW50IGJpb19jb3B5X3VzZXJfaW92KHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHJxX21hcF9kYXRhICptYXBfZGF0YSxcXG4tLVxcbmJsb2NrL2Jsay1tYXAuYy0yNTktXFxuYmxvY2svYmxrLW1hcC5jOjI2MDpzdGF0aWMgaW50IGJpb19tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuYmxvY2svYmxrLW1hcC5jLTI2MS1cXHRcXHRnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmJsb2NrL2Jsay1tYXAuYz00OTk9aW50IGJsa19ycV9tYXBfdXNlcl9pb3Yoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4tLVxcbmJsb2NrL2Jsay1tYXAuYy01MzQtXFx0XFx0ZWxzZVxcbmJsb2NrL2Jsay1tYXAuYzo1MzU6XFx0XFx0XFx0cmV0ID0gYmlvX21hcF91c2VyX2lvdihycSwgXFx1MDAyNmksIGdmcF9tYXNrKTtcXG5ibG9jay9ibGstbWFwLmMtNTM2LVxcdFxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDM6NDkuNzY3MjQ0ODAzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTM5ODk4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBEaXJlY3QgSU8gd2l0aCBCbG9jayBEZXZpY2VzKipcblxuT2theSwgaXQgc2VlbXMgdGhhdCBgYmlvX21hcF91c2VyX2lvdmAgaXMgZGVmaW5pdGl2ZWx5IHJlYWNoYWJsZSwgd2hpY2ggZ2l2ZXMgdXMgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQgaW4gdGhpcyBkaXJlY3QgSS9PIHBhdGguIE15IGZvY3VzIGlzIG5vdyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY3NgLCBgbG9vcF9zZXRfZGlvYCwgYHpsb29wX2dldF9ibG9ja19zaXplYCwgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgLCBgX19ibGtkZXZfZGlyZWN0X0lPYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBlbnRyeSBwb2ludCwgYGJpb19tYXBfdXNlcl9pb3ZgLiBUaGlzIHN1aXRlIG9mIGZ1bmN0aW9ucyBsaWtlbHkgaWxsdXN0cmF0ZXMgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gdXNlciBzcGFjZSBJL08gdmVjdG9ycyB0byB0aGUgYmxvY2sgZGV2aWNlIGxldmVsLCBzbyB0aGF0IHNob3VsZCBiZSB0aGUgaGVhcnQgb2YgbXkgYW5hbHlzaXMuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGVudmlyb25tZW50LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEdpdmVuIHRoaXMgaXMgbGlrZWx5IGEgem9uZWQgYmxvY2sgZGV2aWNlLCBJIHdpbGwgYXNzdW1lIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW5jbHVkZSBgQkxLX0RFVl9MT09QYCwgYEJMS19ERVZfWk9ORURfTE9PUGAgYW5kIGBGU19JT01BUGAuIFNwZWNpZmljYWxseSwgSSBoYXZlIHRvIGRldGVybWluZSBpZiBgQkxLX0RFVl9aT05FRF9MT09QYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIGZvciB0aGlzIHNwZWNpZmljIHNldHVwIGFuZCBJIHdpbGwgd29yayB0aHJvdWdoIHRoYXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMxMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo1My42NjEyNDAzMzlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTgwMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXFx0dHJpc3RhdGUgXFxcIlpvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo1My43MzIyMzI4NDFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MTk3MzUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqVmVyaWZ5aW5nIERldmljZSBUeXBlIENvbnN0YW50cyoqXG5cbkFscmlnaHQsIGNvbmZpcm1lZCwgYEJMS19ERVZfWk9ORURfTE9PUGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbnN0YW50IHdlJ3JlIHVzaW5nLiBHb29kLiBMZXQncyBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aG91Z2gsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEJMS19ERVZfTE9PUGAgaXMgYWxzbyBhY2N1cmF0ZS4gR290dGEgbWFpbnRhaW4gdGhhdCByaWdvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4ODUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo1Ni45MTQyMTAxOThaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NjM4NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0xNDA9Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE0My1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTQ0OmNvbmZpZyBCTEtfREVWX0xPT1BcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVxcdHRyaXN0YXRlIFxcXCJMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNzgtXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODAtXFx0aW50IFxcXCJOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0Mzo1Ni45ODE4NTY2MTFaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2OTkwNDk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgS2VybmVsIE1vZHVsZSBJZGVudGlmaWNhdGlvbioqXG5cblJpZ2h0LCBgQkxLX0RFVl9MT09QYCAqZG9lcyogc2VlbSB0byBiZSB0aGUgcmVsZXZhbnQgbW9kdWxlIGZvciB0aGlzLiBJJ3ZlIHNlZW4gdGhhdCBjb25maWd1cmF0aW9uIGJlZm9yZSBpbiBzaW1pbGFyIGNvbnRleHRzLCBhbmQgaXQgYWxpZ25zIHdpdGggd2hhdCBJJ20gZXhwZWN0aW5nLiBJdCdzIHRoZSBsb2dpY2FsIGNob2ljZSBoZXJlLlxuXG5Ob3csIGxldCdzIGp1c3QgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGVsc2UsIGFzIGEgbWF0dGVyIG9mIGR1ZSBkaWxpZ2VuY2UuIEkgd2FudCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbi4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYEZTX0lPTUFQYCBhbHNvIHBsYXlzIGEgcm9sZSBpbiB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgaXQgKm1pZ2h0KiBiZSByZWxldmFudCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIGl0cyBwcm9wZXJ0aWVzIGluIHRoaXMgc2l0dWF0aW9uIHRvIGNvbmZpcm0gd2hldGhlciBpdCBuZWVkcyB0byBiZSBpbmNsdWRlZC4gSnVzdCBhIHF1aWNrIGNoZWNrIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTg2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDQ6MDAuMTUxNzY0OTczWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjgwOTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfSU9NQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4tLVxcbmZzL0tjb25maWctMTctXFxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDQ6MDAuMjE4NTgyNTc2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNDkxNjc1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgRmlsZSBTeXN0ZW0gTWFwcGluZyoqXG5cblJpZ2h0LCBgRlNfSU9NQVBgIGlzIGRlZmluaXRlbHkgdGhlIGNvcnJlY3QgYXBwcm9hY2ggaGVyZS4gTWFrZXMgcGVyZmVjdCBzZW5zZSBnaXZlbiB0aGUgY29udGV4dC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgZWxzZSB0aGF0J3MgY3JpdGljYWwgaW4gcmVsYXRpb24gdG8gaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJMT0NLYCBpcyB1bmRlcnN0b29kIGNvcnJlY3RseSBpbiB0aGlzIHdob2xlIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ4MSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQ0OjAyLjQ2Nzc1NDQ3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc4NDk2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnLTQtI1xcbmJsb2NrL0tjb25maWc6NTptZW51Y29uZmlnIEJMT0NLXFxuYmxvY2svS2NvbmZpZy02LSAgICAgICBib29sIFxcXCJFbmFibGUgdGhlIGJsb2NrIGxheWVyXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmJsb2NrL0tjb25maWc9Mjc9aWYgQkxPQ0tcXG5ibG9jay9LY29uZmlnLTI4LVxcbmJsb2NrL0tjb25maWc6Mjk6Y29uZmlnIEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxcbmJsb2NrL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiTGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnPTIxND1jb25maWcgQkxLX1BNXFxuLS1cXG5ibG9jay9LY29uZmlnLTIxNy0jIGRvIG5vdCB1c2UgaW4gbmV3IGNvZGVcXG5ibG9jay9LY29uZmlnOjIxODpjb25maWcgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcXG5ibG9jay9LY29uZmlnLTIxOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQ0OjAyLjUzNjU0OTQ4M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjM0NzI4NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSB0aGlua2VyOlxuXG4qKlJlYWNoaW5nIGEgQ29uY2x1c2lvbiBhbmQgUGxhbm5pbmcgdGhlIE5leHQgU3RlcCoqXG5cblllcywgSSdtIGNvbmZpZGVudCB0aGF0IGBCTE9DS2AgaXMgdGhlIGNvcnJlY3QgYW5zd2VyLiBUaGUgaW5pdGlhbCBhbmFseXNpcyBob2xkcy4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGEgY3J1Y2lhbCBkZXRhaWwsIHNwZWNpZmljYWxseSB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYHpsb29wX2N0bF9hZGRgLiBUaGlzIHdpbGwgYmUgbXkgbmV4dCBhcmVhIG9mIGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc5NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQ0OjA1LjE3MTI4MjU4NloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2NTUyOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTExNjU9c3RhdGljIGJvb2wgemxvb3BfZGV2X2V4aXN0cyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE4My1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE4NDpzdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExODUte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE2NTg9c3RhdGljIHNzaXplX3Qgemxvb3BfY3RsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZixcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjk2LVxcdGNhc2UgWkxPT1BfQ1RMX0FERDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY5NzpcXHRcXHRyZXQgPSB6bG9vcF9jdGxfYWRkKFxcdTAwMjZvcHRzKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY5OC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDQ6MDUuMjM1OTUxMDNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNjY1MDQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgUmVhY2hhYmlsaXR5KipcblxuUmlnaHQsIHNvIGB6bG9vcF9jdGxfYWRkYCAqaXMqIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggdGhhdCBgL2Rldi96bG9vcC1jb250cm9sYCB3cml0ZS4gTWFrZXMgc2Vuc2U7IHRoYXQncyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZ2V0IGF0IGBsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50YD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjYWxsIGNoYWluLCB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBhbmQgdmVyaWZ5IGlmIGl0J3MgZXhwb3NlZCwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHRocm91Z2ggYW55IG9mIHRoZSBleGlzdGluZyBpbnRlcmZhY2VzLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSBEaXJlY3QgSS9PIChESU8pIGFsaWdubWVudCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgbG9vcCBkcml2ZXIgYW5kIHdoZXRoZXIgdGhlcmUncyBhbiBleGlzdGluZyBtZWNoYW5pc20gdG8gbW9kaWZ5IHRob3NlIHBhcmFtZXRlcnMuIFBlcmhhcHMgaXQncyBjYWxsZWQgaW50ZXJuYWxseSBieSBzb21lIG90aGVyIGNvbnRyb2wgb3BlcmF0aW9uLCBvciBleHBvc2VkIGJ5IGFub3RoZXIgSU9DVEwuIEkgbmVlZCB0byBnZXQgdGhpcyBuYWlsZWQgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0NDowOC40NTI2MDYyNjRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTM4NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9NDM5PXN0YXRpYyB2b2lkIGxvb3BfcmVyZWFkX3BhcnRpdGlvbnMoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1MC1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0NTE6c3RhdGljIHZvaWQgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQ1Mi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz01MTY9c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTIzLVxcdFxcdGxvLVxcdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XFxuZHJpdmVycy9ibG9jay9sb29wLmM6NTI0OlxcdGxvb3BfdXBkYXRlX2Rpb19hbGlnbm1lbnQobG8pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTUyNS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQ0OjA4LjUxNTc1Mzk4OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzE1NDk5NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlYWNoaW5nIEtleSBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgc28gYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAgKmlzKiByZWFjaGFibGUsIHRoYXQncyBnb29kIG5ld3MuIFRoYXQgY29uZmlybXMgdGhlIGluaXRpYWwgc2V0dXAgaXMgd29ya2luZyBhcyBleHBlY3RlZC4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcml0aWNhbDogaXMgYGxvb3Bfc2V0X2RtYV9saW1pdGAgYWN0dWFsbHkgcmVhY2hhYmxlIGZyb20gdGhpcyBwb2ludD8gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyBJJ20gZm9jdXNpbmcgbXkgbWVudGFsIGVuZXJneSBvbiBkZXRlcm1pbmluZyAqdGhhdCogcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwNDo0NDoxMS4yMzEyNTkwMzlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTI4NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3Bfc2V0X2RtYV9saW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz05NDc9c3RhdGljIHVuc2lnbmVkIGludCBsb29wX2RlZmF1bHRfYmxvY2tzaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05NTQtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6OTU1OnN0YXRpYyB2b2lkIGxvb3Bfc2V0X2RtYV9saW1pdChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTU2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTk2OD1zdGF0aWMgdm9pZCBsb29wX3VwZGF0ZV9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtOTg4LVxcdGxpbS1cXHUwMDNlaW9fbWluID0gYnNpemU7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6OTg5OlxcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgbGltKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy05OTAtXFx0bGltLVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2PSB+KEJMS19GRUFUX1dSSVRFX0NBQ0hFIHwgQkxLX0ZFQVRfUk9UQVRJT05BTCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDQxPXN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2NC1cXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQ2NTpcXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjYtXFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlLCBcXHUwMDI2bGltKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDQ6NDQ6MTEuMjkyNzk0Mjk1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3OTgyNTY2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIExvb3AgRHJpdmVyJ3MgRE1BIExpbWl0KipcblxuT2theSwgaXQncyBjbGVhcjogYGxvb3Bfc2V0X2RtYV9saW1pdGAgaXMgaW5kZWVkIGEgcmVhY2hhYmxlIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIHN1YnN5c3RlbS4gSSd2ZSBjb25maXJtZWQgdGhhdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgaW50ZXJhY3Rpb25zIHN1cnJvdW5kaW5nIGl0LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyB0aHJvdWdoOlxuXG4qICAgYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIOKAkyBUaGlzIG9uZSBpcyBwcm9iYWJseSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgYmlvIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlcy5cbiogICBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2Ag4oCTIEkgc3VzcGVjdCB0aGlzIHBsYXlzIGEgcm9sZSBpbiBleHRyYWN0aW5nIGRhdGEgZnJvbSBpb3ZlY3MgaW50byBibG9jayB2ZWN0b3JzLlxuKiAgIGBsb29wX3NldF9kaW9gIOKAkyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIGluIGRpcmVjdGx5IGludGVyYWN0aW5nIHdpdGggdGhlIGJsb2NrIGRldmljZS5cbiogICBgbG9vcF91cGRhdGVfZGlvX2FsaWdubWVudGAgLSBFc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudHMgb2YgZGlyZWN0IElPLlxuKiAgIGBsb29wX3NldF9kbWFfbGltaXRgIOKAkyBPZiBjb3Vyc2UsIHRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24uXG4qICAgYHpsb29wX2dldF9ibG9ja19zaXplYCDigJMgSSB3aWxsIGhhdmUgdG8gbG9vayBhdCBob3cgdGhlIHpvbmVkIGxvb3AncyBibG9jayBzaXplIGFmZmVjdHMgdGhlIGFuYWx5c2lzLlxuKiAgIGB6bG9vcF9jdGxfYWRkYCDigJMgSXMgdGhlIGNvbnRyb2wgZnVuY3Rpb24uXG4qICAgYGlvbWFwX2Rpb19iaW9faXRlcl9vbmVgIOKAkyBBbm90aGVyIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZGlyZWN0IElPIHBhdGguXG4qICAgYF9fYmxrZGV2X2RpcmVjdF9JT2Ag4oCTIFRoaXMgaXMgdGhlIGNvcmUgZGlyZWN0IEkvTyBlbnRyeSBwb2ludCBhdCB0aGUgYmxvY2sgbGF5ZXIuXG4qICAgYGJpb19tYXBfdXNlcl9pb3ZgIOKAkyBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gdGhpcyBmb3IgdW5kZXJzdGFuZGluZyBtYXBwaW5nIHVzZXIgZGF0YSBpbnRvIGJpby5cblxuQWxzbywgSSBoYXZlIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlOlxuXG4qICAgYEJMS19ERVZfTE9PUGAgYW5kIGBCTEtfREVWX1pPTkVEX0xPT1BgIC0gVGhlc2UgYXJlIGNsZWFybHkgbmVjZXNzYXJ5IGZvciB0aGUgbG9vcCBkZXZpY2UgaXRzZWxmLCBhcyB3ZWxsIGFzIHRoZSB6b25lZCB2YXJpYW50LCBvYnZpb3VzbHkuXG4qICAgYEZTX0lPTUFQYCDigJMgVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgc2VlbXMgdG8gdGllIGluIHRoZSBJL08gbWFwcGluZy5cbiogICBgQkxPQ0tgIC0gVGhpcyBpcyB0aGUgcGFyZW50IGJsb2NrIGRyaXZlci5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGJlZ2luIHNldHRpbmcgdXAgYW5kIGNoZWNraW5nIHRoZSBhbmFseXNpcyByZXN1bHRzIGJhc2VkIG9uIHRoZSBwYXRoZmluZGluZy4gTGV0J3MgbW92ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxODEsIk91dHB1dFRva2VucyI6Mjk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDA0OjQ0OjE4LjA5MTA1NDgzN1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTYxNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2lvdl9pdGVyX2dldF9wYWdlc1wiLFxuICAgIFwiaW92X2l0ZXJfZXh0cmFjdF9idmVjc1wiLFxuICAgIFwibG9vcF9zZXRfZGlvXCIsXG4gICAgXCJsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50XCIsXG4gICAgXCJsb29wX3NldF9kbWFfbGltaXRcIixcbiAgICBcInpsb29wX2dldF9ibG9ja19zaXplXCIsXG4gICAgXCJ6bG9vcF9jdGxfYWRkXCIsXG4gICAgXCJpb21hcF9kaW9fYmlvX2l0ZXJfb25lXCIsXG4gICAgXCJfX2Jsa2Rldl9kaXJlY3RfSU9cIixcbiAgICBcImJpb19tYXBfdXNlcl9pb3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGJpbyBoYW5kbGluZyBhbmQgZGlyZWN0IEkvTyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJdCBhZGRzIGBtZW1fYWxpZ25fbWFza2AgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgdG8gZW5mb3JjZSBETUEgYWxpZ25tZW50IGZvciBkaXJlY3QgSS9PLiBJdCBhbHNvIHVwZGF0ZXMgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gcHJvcGVybHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PLCBhbmQgdXBkYXRlcyBgaW9tYXBgIGFuZCBgYmxrZGV2YCBkaXJlY3QgSS9PIHBhdGhzIHRvIHBhc3MgdGhlIGNvcnJlY3QgYWxpZ25tZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmlvX2lvdl9pdGVyX2dldF9wYWdlc1wiLFxuICAgIFwiaW92X2l0ZXJfZXh0cmFjdF9idmVjc1wiLFxuICAgIFwibG9vcF9zZXRfZGlvXCIsXG4gICAgXCJsb29wX3VwZGF0ZV9kaW9fYWxpZ25tZW50XCIsXG4gICAgXCJsb29wX3NldF9kbWFfbGltaXRcIixcbiAgICBcInpsb29wX2dldF9ibG9ja19zaXplXCIsXG4gICAgXCJ6bG9vcF9jdGxfYWRkXCIsXG4gICAgXCJpb21hcF9kaW9fYmlvX2l0ZXJfb25lXCIsXG4gICAgXCJfX2Jsa2Rldl9kaXJlY3RfSU9cIixcbiAgICBcImJpb19tYXBfdXNlcl9pb3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJsb2NrIGxheWVyIGJpbyBoYW5kbGluZyBhbmQgZGlyZWN0IEkvTyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiBJdCBhZGRzIGBtZW1fYWxpZ25fbWFza2AgdG8gYGJpb19pb3ZfaXRlcl9nZXRfcGFnZXNgIGFuZCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjc2AgdG8gZW5mb3JjZSBETUEgYWxpZ25tZW50IGZvciBkaXJlY3QgSS9PLiBJdCBhbHNvIHVwZGF0ZXMgYGxvb3BgIGFuZCBgemxvb3BgIGRyaXZlcnMgdG8gcHJvcGVybHkgc2V0IERNQSBhbGlnbm1lbnQgbGltaXRzIGZvciBkaXJlY3QgSS9PLCBhbmQgdXBkYXRlcyBgaW9tYXBgIGFuZCBgYmxrZGV2YCBkaXJlY3QgSS9PIHBhdGhzIHRvIHBhc3MgdGhlIGNvcnJlY3QgYWxpZ25tZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrfzz2[1] Phase: Succeeded StartedAt: 2026-07-21 04:44:30 +0000 UTC FinishedAt: 2026-07-21 04:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 04:44:30 +0000 UTC FinishedAt: 2026-07-21 04:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2] Phase: Succeeded StartedAt: 2026-07-21 04:44:30 +0000 UTC FinishedAt: 2026-07-21 08:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-21 04:44:30 +0000 UTC FinishedAt: 2026-07-21 08:43:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 04:44:30 +0000 UTC FinishedAt: 2026-07-21 04:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 04:44:30 +0000 UTC FinishedAt: 2026-07-21 04:44:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrfzz2/series-workflowrfzz2-convert-artifact-2238680244/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 04:44:40 +0000 UTC FinishedAt: 2026-07-21 05:10:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 04:44:40 +0000 UTC FinishedAt: 2026-07-21 05:10:15 +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:*92ca913f-2dbb-40d2-bcd6-9aecfc85c3c3,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-workflowrfzz2/series-workflowrfzz2-convert-artifact-2238680244/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": "d355f753-35c9-420c-a6f4-92a11a783d58", "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-workflowrfzz2/series-workflowrfzz2-build-action-3788718770/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 04:44:40 +0000 UTC FinishedAt: 2026-07-21 05:09:07 +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:*92ca913f-2dbb-40d2-bcd6-9aecfc85c3c3,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-workflowrfzz2/series-workflowrfzz2-convert-artifact-2238680244/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": "d355f753-35c9-420c-a6f4-92a11a783d58", "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-workflowrfzz2/series-workflowrfzz2-build-action-3788718770/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 05:10:15 +0000 UTC FinishedAt: 2026-07-21 05:10:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 05:10:15 +0000 UTC FinishedAt: 2026-07-21 05:10:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 05:10:15 +0000 UTC FinishedAt: 2026-07-21 05:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 05:10:15 +0000 UTC FinishedAt: 2026-07-21 05:10:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrfzz2/series-workflowrfzz2-convert-artifact-3166429043/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 05:10:26 +0000 UTC FinishedAt: 2026-07-21 05:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 05:10:26 +0000 UTC FinishedAt: 2026-07-21 05:12:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d355f753-35c9-420c-a6f4-92a11a783d58,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-workflowrfzz2/series-workflowrfzz2-build-action-3788718770/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-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 05:12:27 +0000 UTC FinishedAt: 2026-07-21 05:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 05:12:27 +0000 UTC FinishedAt: 2026-07-21 05:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 05:12:27 +0000 UTC FinishedAt: 2026-07-21 05:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 05:12:27 +0000 UTC FinishedAt: 2026-07-21 05:37:36 +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:*92ca913f-2dbb-40d2-bcd6-9aecfc85c3c3,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-workflowrfzz2/series-workflowrfzz2-convert-artifact-3166429043/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": "f87829d9-7f4d-4b5f-9fca-2d7eec018b6c", "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-workflowrfzz2/series-workflowrfzz2-build-action-568497959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 05:12:27 +0000 UTC FinishedAt: 2026-07-21 05:37:26 +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:*92ca913f-2dbb-40d2-bcd6-9aecfc85c3c3,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-workflowrfzz2/series-workflowrfzz2-convert-artifact-3166429043/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": "f87829d9-7f4d-4b5f-9fca-2d7eec018b6c", "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-workflowrfzz2/series-workflowrfzz2-build-action-568497959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 05:37:36 +0000 UTC FinishedAt: 2026-07-21 05:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 05:37:36 +0000 UTC FinishedAt: 2026-07-21 05:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 05:37:36 +0000 UTC FinishedAt: 2026-07-21 05:39:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 05:37:36 +0000 UTC FinishedAt: 2026-07-21 05:39:33 +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:*f87829d9-7f4d-4b5f-9fca-2d7eec018b6c,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-workflowrfzz2/series-workflowrfzz2-build-action-568497959/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-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 05:39:43 +0000 UTC FinishedAt: 2026-07-21 08:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 05:39:43 +0000 UTC FinishedAt: 2026-07-21 08:43:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"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:*d355f753-35c9-420c-a6f4-92a11a783d58,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f87829d9-7f4d-4b5f-9fca-2d7eec018b6c,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-workflowrfzz2/series-workflowrfzz2-build-action-3788718770/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-workflowrfzz2/series-workflowrfzz2-build-action-568497959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 05:39:43 +0000 UTC FinishedAt: 2026-07-21 05:39:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 05:39:43 +0000 UTC FinishedAt: 2026-07-21 05:39:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"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-workflowrfzz2/series-workflowrfzz2-convert-artifact-3243309420/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 05:39:43 +0000 UTC FinishedAt: 2026-07-21 05:39:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 05:39:43 +0000 UTC FinishedAt: 2026-07-21 05:39:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 05:39:43 +0000 UTC FinishedAt: 2026-07-21 05:39:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 05:39:53 +0000 UTC FinishedAt: 2026-07-21 08:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrfzz2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bio_iov_iter_get_pages","iov_iter_extract_bvecs","loop_set_dio","loop_update_dio_alignment","loop_set_dma_limit","zloop_get_block_size","zloop_ctl_add","iomap_dio_bio_iter_one","__blkdev_direct_IO","bio_map_user_iov"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8173f7e2ce67e6ca1d4763f3da14e5b01ce77456","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP","BLK_DEV_ZONED_LOOP","FS_IOMAP","BLOCK"],"series_id":"aada9eae-745c-466b-8566-034bff742b41","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 05:39:53 +0000 UTC FinishedAt: 2026-07-21 08:42:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d355f753-35c9-420c-a6f4-92a11a783d58,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f87829d9-7f4d-4b5f-9fca-2d7eec018b6c,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-workflowrfzz2/series-workflowrfzz2-build-action-3788718770/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-workflowrfzz2/series-workflowrfzz2-build-action-568497959/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-workflowrfzz2/series-workflowrfzz2-convert-artifact-3243309420/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,}