Name: series-workflowvvqrb Phase: Succeeded StartedAt: 2026-07-18 00:01:37 +0000 UTC FinishedAt: 2026-07-18 05:10:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[0] Phase: Succeeded StartedAt: 2026-07-18 00:01:37 +0000 UTC FinishedAt: 2026-07-18 00:37:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[0].run-triage Phase: Succeeded StartedAt: 2026-07-18 00:01:37 +0000 UTC FinishedAt: 2026-07-18 00:37:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "6c683acd-d1c3-4be0-8b5f-4c313b76236b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "send_prp_supervision_frame", "prp_drop_frame", "hsr_drop_frame", "fill_frame_info", "hsr_add_node", "hsr_get_node", "hsr_handle_sup_frame", "prp_register_frame_out", "hsr_newlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAwOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O2ZpbGxfZnJhbWVfaW5mbyYjMzQ7LAogICAgJiMzNDtoc3JfYWRkX25vZGUmIzM0OywKICAgICYjMzQ7aHNyX2dldF9ub2RlJiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfc3VwX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9yZWdpc3Rlcl9mcmFtZV9vdXQmIzM0OywKICAgICYjMzQ7aHNyX25ld2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgZm9yIFBSUCAoUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCkgUmVkQm94IChpbnRlcmxpbmspLiBUaGlzIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gcGFja2V0IGZvcndhcmRpbmcsIGRyb3BwaW5nIGxvZ2ljLCBub2RlIG1hbmFnZW1lbnQsIGFuZCBzdXBlcnZpc2lvbiBmcmFtZSBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0d29yayB0cmFmZmljIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDA6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNTBiZDAwZTFiNWNiY2U2OTJmNzlmMTVmNDcyODhjM2Y4YWNhNWQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMDA6Mzc6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuaW5kZXggNTU1NWI3MWFiMTliNTkuLjA5NzNmOWE5NGY0ZDQ4IDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2RldmljZS5jXG5AQCAtMzcyLDEwICYjNDM7MzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIHtcbiBcdHN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLVx1MDAzZWhzcjtcbiBcdHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQgKmhzcl9zcDtcbiYjNDM7XHRzdHJ1Y3QgaHNyX3N1cF90bHYgKmhzcl9zdGx2O1xuIFx0c3RydWN0IGhzcl9zdXBfdGFnICpoc3Jfc3RhZztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0Ym9vbCByZWRib3hfcHJveHk7XG4mIzQzO1x0aW50IGV4dHJhID0gMDtcbiBcbi1cdHNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIDApO1xuJiM0MztcdHJlZGJveF9wcm94eSA9IGhzci1cdTAwM2VyZWRib3ggXHUwMDI2XHUwMDI2IG1hc3Rlci1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTks7XG4mIzQzO1xuJiM0MztcdC8qIEEgcHJveHktYW5ub3VuY2UgY2FycmllcyBhIFJlZEJveC1NQUMgVExWIGFuZCBhbiBFT1QgbWFya2VyLiAqL1xuJiM0MztcdGlmIChyZWRib3hfcHJveHkpXG4mIzQzO1x0XHRleHRyYSA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpICYjNDM7XG4mIzQzO1x0XHRcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSAmIzQzO1xuJiM0MztcdFx0XHRzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KTtcbiYjNDM7XG4mIzQzO1x0c2tiID0gaHNyX2luaXRfc2tiKG1hc3RlciwgZXh0cmEpO1xuIFx0aWYgKCFza2IpIHtcbiBcdFx0bmV0ZGV2X3dhcm5fb25jZShtYXN0ZXItXHUwMDNlZGV2LCBcJiMzNDtQUlA6IENvdWxkIG5vdCBzZW5kIHN1cGVydmlzaW9uIGZyYW1lXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuO1xuQEAgLTM5Myw5ICYjNDM7NDA0LDI1IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IFBSUF9UTFZfTElGRV9DSEVDS19ERDtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcbiBcbi1cdC8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBICovXG4mIzQzO1x0LyogUGF5bG9hZDogTWFjQWRkcmVzc0EsIHRoZSBhbm5vdW5jZWQgbm9kZS4gKi9cbiBcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xuLVx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0LyogUHJveHktYW5ub3VuY2U6IGFwcGVuZCB0aGUgUmVkQm94LU1BQyBUTFYgKFR5cGUgMzApIGFuZCBhbiBleHBsaWNpdFxuJiM0MztcdCAqIEVPVCB0byB0ZXJtaW5hdGUgdGhlIFRMViBjaGFpbiBiZWZvcmUgemVybyBwYWRkaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZWRib3hfcHJveHkpIHtcbiYjNDM7XHRcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcbiYjNDM7XHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfdHlwZSA9IFBSUF9UTFZfUkVEQk9YX01BQztcbiYjNDM7XHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuJiM0MztcbiYjNDM7XHRcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xuJiM0MztcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XG4mIzQzO1xuJiM0MztcdFx0aHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpO1xuJiM0MztcdFx0aHNyX3N0bHYtXHUwMDNlSFNSX1RMVl90eXBlID0gSFNSX1RMVl9FT1Q7XG4mIzQzO1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX2xlbmd0aCA9IDA7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuQEAgLTc2OCw2ICYjNDM7Nzk1LDE1IEBAIGludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sXG4gXHQvKiBNYWtlIHN1cmUgdGhlIDFzdCBjYWxsIHRvIG5ldGlmX2NhcnJpZXJfb24oKSBnZXRzIHRocm91Z2ggKi9cbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKGhzcl9kZXYpO1xuIFxuJiM0MztcdC8qIFB1Ymxpc2ggdGhlIFJlZEJveCBzdGF0ZSBiZWZvcmUgYW55IHBvcnQgaXMgYXR0YWNoZWQ6IHRoZSByeFxuJiM0MztcdCAqIGhhbmRsZXJzIGFyZSBsaXZlIGZyb20gaHNyX2FkZF9wb3J0KCkgb24sIGFuZCBoc3JfYWRkX25vZGUoKVxuJiM0MztcdCAqIHNpemVzIGVhY2ggbm9kZSYjMzk7cyBwZXItcG9ydCBzZXF1ZW5jZSBzdGF0ZSBmcm9tIGhzci1cdTAwM2VyZWRib3guXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGludGVybGluaykge1xuJiM0MztcdFx0aHNyLVx1MDAzZXJlZGJveCA9IHRydWU7XG4mIzQzO1x0XHRldGhlcl9hZGRyX2NvcHkoaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94LCBpbnRlcmxpbmstXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXMgPSBoc3JfYWRkX3BvcnQoaHNyLCBoc3JfZGV2LCBIU1JfUFRfTUFTVEVSLCBleHRhY2spO1xuIFx0aWYgKHJlcylcbiBcdFx0Z290byBlcnJfYWRkX21hc3RlcjtcbkBAIC04MDUsOCAmIzQzOzg0MSw2IEBAIGludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sXG4gXHRcdGlmIChyZXMpXG4gXHRcdFx0Z290byBlcnJfdW5yZWdpc3RlcjtcbiBcbi1cdFx0aHNyLVx1MDAzZXJlZGJveCA9IHRydWU7XG4tXHRcdGV0aGVyX2FkZHJfY29weShoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cdTAwM2VkZXZfYWRkcik7XG4gXHRcdG1vZF90aW1lcihcdTAwMjZoc3ItXHUwMDNlcHJ1bmVfcHJveHlfdGltZXIsXG4gXHRcdFx0ICBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoUFJVTkVfUFJPWFlfUEVSSU9EKSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5pbmRleCAwNzc0OTgxYTY1YzE2NC4uNzczNGE1MjFhOTZjMjMgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTQ0MCwxMiAmIzQzOzQ0MCwzNCBAQCBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdHJldHVybiBkZXZfcXVldWVfeG1pdChza2IpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgcHJwX2lzX2xhbl9kdXAoZW51bSBoc3JfcG9ydF90eXBlIHJ4LCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHJ4ID09IEhTUl9QVF9TTEFWRV9BIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8XG4mIzQzO1x0ICAgICAgIChyeCA9PSBIU1JfUFRfU0xBVkVfQiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKTtcbiYjNDM7fVxuJiM0MztcbiBib29sIHBycF9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiB7XG4tXHRyZXR1cm4gKChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BIFx1MDAyNlx1MDAyNlxuLVx0XHQgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKSB8fFxuLVx0XHQoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQiBcdTAwMjZcdTAwMjZcbi1cdFx0IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSkpO1xuJiM0MztcdGVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGU7XG4mIzQzO1xuJiM0MztcdC8qIFN1cGVydmlzaW9uIGZyYW1lcyBhcmUgbm90IGRlbGl2ZXJlZCB0byBhIFNBTiBvbiB0aGUgaW50ZXJsaW5rLiAqL1xuJiM0MztcdGlmIChmcmFtZS1cdTAwM2Vpc19zdXBlcnZpc2lvbiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBycF9pc19sYW5fZHVwKHJ4LCBwb3J0KSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBMQU4gdG8gaW50ZXJsaW5rOiBrZWVwIFBSUC1uZXR3b3JrIHVuaWNhc3Qgb2ZmIHRoZSBTQU4gc2VnbWVudC4gKi9cbiYjNDM7XHRpZiAoKHJ4ID09IEhTUl9QVF9TTEFWRV9BIHx8IHJ4ID09IEhTUl9QVF9TTEFWRV9CKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXG4mIzQzO1x0XHRyZXR1cm4gZnJhbWUtXHUwMDNlZHN0X2luX25vZGVfZGI7XG4mIzQzO1xuJiM0MztcdC8qIEludGVybGluayB0byBMQU46IGtlZXAgU0FOLXRvLVNBTiB1bmljYXN0IGxvY2FsLiAqL1xuJiM0MztcdGlmICgocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BIHx8IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJ4ID09IEhTUl9QVF9JTlRFUkxJTkspXG4mIzQzO1x0XHRyZXR1cm4gZnJhbWUtXHUwMDNlZHN0X2luX3Byb3h5X25vZGVfZGI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5AQCAtNDUzLDcgJiM0Mzs0NzUsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRpZiAocG9ydC1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfSFNSX0ZXRClcbi1cdFx0cmV0dXJuIHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybiBwcnBfaXNfbGFuX2R1cChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlLCBwb3J0KTtcbiBcbiBcdC8qIFJlZEJveCBzcGVjaWZpYyBmcmFtZXMgZHJvcHBpbmcgcG9saWNpZXNcbiBcdCAqXG5AQCAtNDY2LDcgJiM0Mzs0ODgsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIGFyZSBhZGRyZXNzZWQgdG8gaW50ZXJsaW5rIHBvcnQgKGFuZCBhcmUgaW4gdGhlIFByb3h5Tm9kZVRhYmxlKS5cbiBcdCAqL1xuIFx0c2tiID0gZnJhbWUtXHUwMDNlc2tiX2hzcjtcbi1cdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiBwcnBfaXNfbGFuX2R1cChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlLCBwb3J0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVx1MDAzZWhfZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaHNyX2lzX25vZGVfaW5fZGIoXHUwMDI2cG9ydC1cdTAwM2Voc3ItXHUwMDNlcHJveHlfbm9kZV9kYixcbiBcdFx0XHQgICAgICBldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0KSkge1xuQEAgLTcwNiw2ICYjNDM7NzI4LDE4IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gXHRmcmFtZS1cdTAwM2Vpc192bGFuID0gZmFsc2U7XG4gXHRwcm90byA9IGV0aGhkci1cdTAwM2VoX3Byb3RvO1xuIFxuJiM0MztcdC8qIFBSUCBSZWRCb3ggb25seTogY2xhc3NpZnkgdGhlIHVuaWNhc3QgZGVzdGluYXRpb24gb25jZSBzbyB0aGVcbiYjNDM7XHQgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94XG4mIzQzO1x0ICogZG9lcyBpdHMgb3duIGNsYXNzaWZpY2F0aW9uIGFuZCBtdXN0IG5vdCBwYXkgdGhlc2Ugbm9kZS10YWJsZSB3YWxrcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgXHUwMDI2XHUwMDI2IGhzci1cdTAwM2VyZWRib3ggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGlzX3VuaWNhc3RfZXRoZXJfYWRkcihldGhoZHItXHUwMDNlaF9kZXN0KSkge1xuJiM0MztcdFx0ZnJhbWUtXHUwMDNlZHN0X2luX25vZGVfZGIgPVxuJiM0MztcdFx0XHRoc3JfaXNfbm9kZV9pbl9kYihcdTAwMjZoc3ItXHUwMDNlbm9kZV9kYiwgZXRoaGRyLVx1MDAzZWhfZGVzdCk7XG4mIzQzO1x0XHRmcmFtZS1cdTAwM2Vkc3RfaW5fcHJveHlfbm9kZV9kYiA9XG4mIzQzO1x0XHRcdGhzcl9pc19ub2RlX2luX2RiKFx1MDAyNmhzci1cdTAwM2Vwcm94eV9ub2RlX2RiLCBldGhoZHItXHUwMDNlaF9kZXN0KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHByb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSlcbiBcdFx0ZnJhbWUtXHUwMDNlaXNfdmxhbiA9IHRydWU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuYyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmNcbmluZGV4IGU0NDkyOTg3MTI3NDQ1Li5iM2IxMDZiZTY5MmVhZiAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmNcbkBAIC0xOTksNyAmIzQzOzE5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHNyX25vZGUgKmhzcl9hZGRfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcixcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5ld19ub2RlLVx1MDAzZXNlcV9vdXRfbG9jayk7XG4gXG4gXHRpZiAoaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEpXG4tXHRcdG5ld19ub2RlLVx1MDAzZXNlcV9wb3J0X2NudCA9IDE7XG4mIzQzO1x0XHRuZXdfbm9kZS1cdTAwM2VzZXFfcG9ydF9jbnQgPSBoc3ItXHUwMDNlcmVkYm94ID8gMiA6IDE7XG4gXHRlbHNlXG4gXHRcdG5ld19ub2RlLVx1MDAzZXNlcV9wb3J0X2NudCA9IEhTUl9QVF9QT1JUUyAtIDE7XG4gXG5AQCAtMjkzLDggJiM0MzsyOTMsMTcgQEAgc3RydWN0IGhzcl9ub2RlICpoc3JfZ2V0X25vZGUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLFxuIFx0ICovXG4gXHRpZiAoZXRoaGRyLVx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSB8fFxuIFx0ICAgIGV0aGhkci1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX0hTUikpIHtcbi1cdFx0LyogQ2hlY2sgaWYgc2tiIGNvbnRhaW5zIGhzcl9ldGhoZHIgKi9cbi1cdFx0aWYgKHNrYi1cdTAwM2VtYWNfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IGhzcl9ldGhoZHIpKVxuJiM0MztcdFx0Ym9vbCBwcnBfc3VwO1xuJiM0MztcbiYjNDM7XHRcdC8qIEEgUFJQIHN1cGVydmlzaW9uIGZyYW1lIGlzIGFuIHVudGFnZ2VkIEVUSF9QX1BSUCBmcmFtZVxuJiM0MztcdFx0ICogKG1hY19sZW4gPT0gRVRIX0hMRU4pOyBpdHMgUkNUIGlzIGFwcGVuZGVkIG9ubHkgb24gZWdyZXNzLlxuJiM0MztcdFx0ICogSFNSIChFVEhfUF9IU1IpIHN1cGVydmlzaW9uIGlzIGZyb250LXRhZ2dlZCBhbmQgc3RpbGwgbXVzdFxuJiM0MztcdFx0ICogY29udGFpbiBhIHN0cnVjdCBoc3JfZXRoaGRyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwcnBfc3VwID0gaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgZXRoaGRyLVx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSBcdTAwMjZcdTAwMjYgaXNfc3VwO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcHJwX3N1cCBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZW1hY19sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaHNyX2V0aGhkcikpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9IGVsc2Uge1xuIFx0XHRyY3QgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcbkBAIC0zODEsNiAmIzQzOzM5MCw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdHN0cnVjdCBldGhoZHIgKmV0aGhkcjtcbiBcdHVuc2lnbmVkIGludCB0b3RhbF9wdWxsX3NpemUgPSAwO1xuIFx0dW5zaWduZWQgaW50IHB1bGxfc2l6ZSA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNlcV9wb3J0X2NudDtcbiBcdHVuc2lnbmVkIGxvbmcgaWR4O1xuIFx0aW50IGk7XG4gXG5AQCAtNDc0LDYgJiM0Mzs0ODQsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRzZXFfcG9ydF9jbnQgPSBtaW4obm9kZV9yZWFsLVx1MDAzZXNlcV9wb3J0X2NudCwgbm9kZV9jdXJyLVx1MDAzZXNlcV9wb3J0X2NudCk7XG4gXHR4YV9mb3JfZWFjaChcdTAwMjZub2RlX2N1cnItXHUwMDNlc2VxX2Jsb2NrcywgaWR4LCBzcmNfYmxrKSB7XG4gXHRcdGlmIChoc3Jfc2VxX2Jsb2NrX2lzX29sZChzcmNfYmxrKSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC00ODIsNyAmIzQzOzQ5Myw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdFx0aWYgKCFtZXJnZV9ibGspXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdG1lcmdlX2Jsay1cdTAwM2V0aW1lID0gbWluKG1lcmdlX2Jsay1cdTAwM2V0aW1lLCBzcmNfYmxrLVx1MDAzZXRpbWUpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBub2RlX3JlYWwtXHUwMDNlc2VxX3BvcnRfY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2VxX3BvcnRfY250OyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGJpdG1hcF9vcihtZXJnZV9ibGstXHUwMDNlc2VxX25yc1tpXSwgbWVyZ2VfYmxrLVx1MDAzZXNlcV9ucnNbaV0sXG4gXHRcdFx0XHQgIHNyY19ibGstXHUwMDNlc2VxX25yc1tpXSwgSFNSX1NFUV9CTE9DS19TSVpFKTtcbiBcdFx0fVxuQEAgLTY0OSw5ICYjNDM7NjYwLDEzIEBAIGludCBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdGlmIChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogZm9yIFBSUCB3ZSBzaG91bGQgb25seSBmb3J3YXJkIGZyYW1lcyBmcm9tIHRoZSBzbGF2ZSBwb3J0c1xuLVx0ICogdG8gdGhlIG1hc3RlciBwb3J0XG4mIzQzO1x0LyogUmVkQm94OiBmb3J3YXJkIExBTiBmcmFtZXMgb3V0IHRoZSBpbnRlcmxpbmsgdG8gYSBTQU4sIGRlZHVwaW5nIHRoZVxuJiM0MztcdCAqIHR3byBMQU4gY29waWVzIG9uIGEgZGVkaWNhdGVkIHNsb3QuXG4gXHQgKi9cbiYjNDM7XHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXG4mIzQzO1x0XHRyZXR1cm4gaHNyX2NoZWNrX2R1cGxpY2F0ZShmcmFtZSwgMSk7XG4mIzQzO1xuJiM0MztcdC8qIEZvciBQUlAgb25seSBzbGF2ZS10by1tYXN0ZXIgZnJhbWVzIGFyZSBmb3J3YXJkZWQuICovXG4gXHRpZiAocG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmggYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG5pbmRleCBjNjVlY2I5MjU3MzQ4OS4uMTI3YTNmYjY0ZDVmMDMgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG5AQCAtMjcsNiAmIzQzOzI3LDggQEAgc3RydWN0IGhzcl9mcmFtZV9pbmZvIHtcbiBcdGJvb2wgaXNfbG9jYWxfZGVzdDtcbiBcdGJvb2wgaXNfbG9jYWxfZXhjbHVzaXZlO1xuIFx0Ym9vbCBpc19mcm9tX3NhbjtcbiYjNDM7XHRib29sIGRzdF9pbl9ub2RlX2RiO1xuJiM0MztcdGJvb2wgZHN0X2luX3Byb3h5X25vZGVfZGI7XG4gfTtcbiBcbiB2b2lkIGhzcl9kZWxfc2VsZl9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyKTtcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9tYWluLmggYi9uZXQvaHNyL2hzcl9tYWluLmhcbmluZGV4IDEzNGU0ZjNmZmY2MDM2Li41M2U5NWJhZTBlZTI3NiAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX21haW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfbWFpbi5oXG5AQCAtMjExLDcgJiM0MzsyMTEsNyBAQCBzdHJ1Y3QgaHNyX3ByaXYge1xuIFx0XHRcdFx0ICovXG4gXHRib29sIGZ3ZF9vZmZsb2FkZWQ7XHQvKiBGb3J3YXJkaW5nIG9mZmxvYWRlZCB0byBIVyAqL1xuIFx0Ym9vbCByZWRib3g7ICAgICAgICAgICAgLyogRGV2aWNlIHN1cHBvcnRzIEhTUiBSZWRCb3ggKi9cbi1cdHVuc2lnbmVkIGNoYXJcdFx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dO1xuJiM0MztcdHVuc2lnbmVkIGNoYXJcdFx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XG4gXHR1bnNpZ25lZCBjaGFyXHRcdHN1cF9tdWx0aWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKHNpemVvZih1MTYpKTtcbiBcdFx0XHRcdC8qIEFsaWduIHRvIHUxNiBib3VuZGFyeSB0byBhdm9pZCB1bmFsaWduZWQgYWNjZXNzXG4gXHRcdFx0XHQgKiBpbiBldGhlcl9hZGRyX2VxdWFsXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbmV0bGluay5jIGIvbmV0L2hzci9oc3JfbmV0bGluay5jXG5pbmRleCA4MDk5ZjIwNjlhNzQ4ZS4uODg5NDBlODAxNGIyNGYgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX25ldGxpbmsuY1xuQEAgLTEyMSwxNCAmIzQzOzEyMSw4IEBAIHN0YXRpYyBpbnQgaHNyX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApIHtcbiYjNDM7XHRpZiAocHJvdG8gPT0gSFNSX1BST1RPQ09MX1BSUClcbiBcdFx0cHJvdG9fdmVyc2lvbiA9IFBSUF9WMTtcbi1cdFx0aWYgKGludGVybGluaykge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4tXHRcdFx0XHRcdCAgIFwmIzM0O0ludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0fVxuIFxuIFx0cmV0dXJuIGhzcl9kZXZfZmluYWxpemUoZGV2LCBsaW5rLCBpbnRlcmxpbmssIG11bHRpY2FzdF9zcGVjLFxuIFx0XHRcdFx0cHJvdG9fdmVyc2lvbiwgZXh0YWNrKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuaW5kZXggMzFmYjkzMjZjZjUzM2QuLjIxNTBlNDg3YWM3ZDdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuQEAgLTQsNiAmIzQzOzQsNyBAQCB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi5cbiBcbiBURVNUX1BST0dTIDo9IFxcXG4gXHRoc3JfcGluZy5zaCBcXFxuJiM0MztcdGhzcl9wcnBfcmVkYm94LnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuIFx0cHJwX3Bpbmcuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NzljODkyMjI1YjFmM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaFxuQEAgLTAsMCAmIzQzOzEsOTkgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgVGVzdCBhIFBSUCBSZWRCb3ggKFBSUC1TQU4pOiBhIFNBTiB0aGF0IHNpdHMgYmVoaW5kIHRoZSBpbnRlcmxpbmsgcG9ydCBtdXN0XG4mIzQzOyMgcmVhY2gsIGFuZCBiZSByZWFjaGVkIGJ5LCBhIHBlZXIgREFOUCBvbiB0aGUgUFJQIG5ldHdvcmsgd2l0aCBpdHMgb3duIE1BQ1xuJiM0MzsjIHByZXNlcnZlZCBvbiB0aGUgd2lyZSwgYW5kIHRoZSBSZWRCb3ggbXVzdCBhbm5vdW5jZSB0aGUgU0FOIHdpdGggYSBSZWRCb3gtTUFDXG4mIzQzOyMgVExWICh0ZXJtaW5hdGVkIGJ5IGFuIEVPVCBtYXJrZXIpIGluIGl0cyBQUlAgc3VwZXJ2aXNpb24gZnJhbWVzLlxuJiM0MzsjXG4mIzQzOyMgICBSQiAgICBQUlAgUmVkQm94OiBwcnAwIG92ZXIgcmJfYS9yYl9iIChMQU4gQS9CKSAmIzQzOyBpbnRlcmxpbmsgcmJfaWxcbiYjNDM7IyAgIFBFRVIgIHBlZXIgREFOUCA6IHBycDAgb3ZlciBwZV9hL3BlX2IsIDEwMC42NC4wLjJcbiYjNDM7IyAgIFNBTiAgIFNBTiAgICAgICA6IHNhbl9pbCwgb3duIE1BQywgMTAwLjY0LjAuNTEgKGJlaGluZCB0aGUgaW50ZXJsaW5rKVxuJiM0MztcbiYjNDM7aXB2Nj1mYWxzZVxuJiM0MztcbiYjNDM7c291cmNlIC4vaHNyX2NvbW1vbi5zaFxuJiM0MztcbiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlc1xuJiM0MztcbiYjNDM7aWYgISBjb21tYW5kIC12IHRjcGR1bXAgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTS0lQOiBUaGlzIHRlc3QgcmVxdWlyZXMgdGNwZHVtcFwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0MztmaVxuJiM0MztcbiYjNDM7aWYgISBpcCBsaW5rIGhlbHAgaHNyIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtcSBpbnRlcmxpbms7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IGlwcm91dGUyIHRvbyBvbGQgKG5vIGhzciBpbnRlcmxpbmsgc3VwcG9ydClcJiMzNDtcbiYjNDM7XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3NldHVwX25zIFJCIFBFRVIgU0FOXG4mIzQzO3RyYXAgJiMzOTtjbGVhbnVwX25zIFwmIzM0OyRSQlwmIzM0OyBcJiMzNDskUEVFUlwmIzM0OyBcJiMzNDskU0FOXCYjMzQ7JiMzOTsgRVhJVFxuJiM0MztcbiYjNDM7aXAgbGluayBhZGQgcmJfYSBuZXRucyBcJiMzNDskUkJcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9hIG5ldG5zIFwmIzM0OyRQRUVSXCYjMzQ7XG4mIzQzO2lwIGxpbmsgYWRkIHJiX2IgbmV0bnMgXCYjMzQ7JFJCXCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYiBuZXRucyBcJiMzNDskUEVFUlwmIzM0O1xuJiM0MztpcCBsaW5rIGFkZCByYl9pbCBuZXRucyBcJiMzNDskUkJcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzYW5faWwgbmV0bnMgXCYjMzQ7JFNBTlwmIzM0O1xuJiM0MztcbiYjNDM7aXAgLW4gXCYjMzQ7JFJCXCYjMzQ7ICAgbGluayBzZXQgcmJfYSB1cFxuJiM0MztpcCAtbiBcJiMzNDskUkJcJiMzNDsgICBsaW5rIHNldCByYl9iIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRSQlwmIzM0OyAgIGxpbmsgc2V0IHJiX2lsIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRQRUVSXCYjMzQ7IGxpbmsgc2V0IHBlX2EgdXBcbiYjNDM7aXAgLW4gXCYjMzQ7JFBFRVJcJiMzNDsgbGluayBzZXQgcGVfYiB1cFxuJiM0MztpcCAtbiBcJiMzNDskU0FOXCYjMzQ7ICBsaW5rIHNldCBzYW5faWwgdXBcbiYjNDM7aXAgLW4gXCYjMzQ7JFNBTlwmIzM0OyAgYWRkciBhZGQgMTAwLjY0LjAuNTEvMjQgZGV2IHNhbl9pbFxuJiM0MztcbiYjNDM7IyBGZWF0dXJlIGdhdGU6IFBSUCBpbnRlcmxpbmsgKFJlZEJveCkgY3JlYXRpb24uIEEga2VybmVsIHdpdGhvdXQgUFJQIFJlZEJveFxuJiM0MzsjIHN1cHBvcnQgcmVqZWN0cyB0aGlzIHdpdGggLUVJTlZBTCwgc28gU0tJUCByYXRoZXIgdGhhbiBGQUlMLlxuJiM0MztpZiAhIGlwIC1uIFwmIzM0OyRSQlwmIzM0OyBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHJiX2Egc2xhdmUyIHJiX2IgXFxcbiYjNDM7ICAgICBpbnRlcmxpbmsgcmJfaWwgcHJvdG8gMSAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTS0lQOiBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94IChpbnRlcmxpbmspIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7ZmlcbiYjNDM7aXAgLW4gXCYjMzQ7JFJCXCYjMzQ7ICAgbGluayBzZXQgcHJwMCB1cFxuJiM0MztpcCAtbiBcJiMzNDskUEVFUlwmIzM0OyBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHBlX2Egc2xhdmUyIHBlX2IgcHJvdG8gMVxuJiM0MztpcCAtbiBcJiMzNDskUEVFUlwmIzM0OyBsaW5rIHNldCBwcnAwIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRQRUVSXCYjMzQ7IGFkZHIgYWRkIDEwMC42NC4wLjIvMjQgZGV2IHBycDBcbiYjNDM7c2xlZXAgMVxuJiM0MztcbiYjNDM7c2FuX21hYz0kKGlwIC1uIFwmIzM0OyRTQU5cJiMzNDsgLWJyIGxpbmsgc2hvdyBzYW5faWwgfCBhd2sgJiMzOTt7cHJpbnQgJDN9JiMzOTspXG4mIzQzO3JiX21hYz0kKGlwIC1uIFwmIzM0OyRSQlwmIzM0OyAtYnIgbGluayBzaG93IHJiX2lsIHwgYXdrICYjMzk7e3ByaW50ICQzfSYjMzk7KVxuJiM0MztcbiYjNDM7IyBCaWRpcmVjdGlvbmFsIHVuaWNhc3QgYWNyb3NzIHRoZSBpbnRlcmxpbmsuXG4mIzQzO2RvX3BpbmcgXCYjMzQ7JFBFRVJcJiMzNDsgMTAwLjY0LjAuNTFcbiYjNDM7ZG9fcGluZyBcJiMzNDskU0FOXCYjMzQ7ICAxMDAuNjQuMC4yXG4mIzQzO3N0b3BfaWZfZXJyb3IgXCYjMzQ7UFJQIFJlZEJveCBiaWRpcmVjdGlvbmFsIHVuaWNhc3QgZmFpbGVkXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIFRoZSBTQU4gc291cmNlIE1BQyBtdXN0IGJlIHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmssIG5vdCBsYXVuZGVyZWQgdG8gdGhlXG4mIzQzOyMgUmVkQm94IE1BQzogdGhlIHBlZXIgcmVzb2x2ZXMgdGhlIFNBTiBJUCB0byB0aGUgU0FOJiMzOTtzIG93biBNQUMuXG4mIzQzO25laWdoPSQoaXAgLW4gXCYjMzQ7JFBFRVJcJiMzNDsgbmVpZ2ggc2hvdyAxMDAuNjQuMC41MSB8IGF3ayAmIzM5O3twcmludCAkNX0mIzM5OylcbiYjNDM7aWYgWyBcJiMzNDskbmVpZ2hcJiMzNDsgIT0gXCYjMzQ7JHNhbl9tYWNcJiMzNDsgXTsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7U0FOIE1BQyBwcmVzZXJ2YXRpb24gWyBGQUlMIF06IHBlZXIgcmVzb2x2ZWQgMTAwLjY0LjAuNTEgdG9cJiMzNDsgXFxcbiYjNDM7XHQgICAgIFwmIzM0OyYjMzk7JG5laWdoJiMzOTssIGV4cGVjdGVkICRzYW5fbWFjXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0cmV0PTFcbiYjNDM7ZmlcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtTQU4gTUFDIG5vdCBwcmVzZXJ2ZWQgb24gdGhlIFBSUCBuZXR3b3JrXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIFRoZSBwcm94eS1hbm5vdW5jZSBzdXBlcnZpc2lvbiBmcmFtZSBtdXN0IGNhcnJ5LCBpbiBvcmRlciwgdGhlIGxpZmUtY2hlY2sgVExWXG4mIzQzOyMgKHR5cGUgMHgxNCwgbGVuIDYpICYjNDM7IE1hY0FkZHJlc3NBID09IFNBTiBNQUMgJiM0MzsgdGhlIFJlZEJveC1NQUMgVExWICh0eXBlIDB4MWUsXG4mIzQzOyMgbGVuIDYpICYjNDM7IE1hY0FkZHJlc3NSZWRCb3ggPT0gUmVkQm94IE1BQyAmIzQzOyB0aGUgRU9UIG1hcmtlciAoMHgwMDAwKS5cbiYjNDM7aXAgbmV0bnMgZXhlYyBcJiMzNDskU0FOXCYjMzQ7IHBpbmcgLWkgMC4yIC1xIDEwMC42NC4wLjIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuJiM0MztwaW5nX3BpZD0kIVxuJiM0MztjYXA9JChpcCBuZXRucyBleGVjIFwmIzM0OyRQRUVSXCYjMzQ7IHRpbWVvdXQgNSB0Y3BkdW1wIC1pIHBlX2EgLW5uIC14IFxcXG4mIzQzO1x0XCYjMzQ7ZXRoZXIgcHJvdG8gMHg4OGZiIGFuZCBldGhlciBzcmMgJHJiX21hY1wmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWUpXG4mIzQzO2tpbGwgXCYjMzQ7JHBpbmdfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuJiM0Mzt3YWl0IFwmIzM0OyRwaW5nX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcbiYjNDM7XG4mIzQzO3Nhbl9oZXg9JChlY2hvIFwmIzM0OyRzYW5fbWFjXCYjMzQ7IHwgdHIgLWQgJiMzOTs6JiMzOTspXG4mIzQzO3JiX2hleD0kKGVjaG8gXCYjMzQ7JHJiX21hY1wmIzM0OyB8IHRyIC1kICYjMzk7OiYjMzk7KVxuJiM0MzsjIFJlYXNzZW1ibGUgY29udGlndW91cyBmcmFtZSBoZXg6IGRyb3AgdGhlIFwmIzM0OzB4MDAxMDpcJiMzNDsgb2Zmc2V0IGxhYmVscyBhbmQgc3BhY2VzLlxuJiM0MztmcmFtZV9oZXg9JChlY2hvIFwmIzM0OyRjYXBcJiMzNDsgfCBhd2sgJiMzOTsvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0mIzQzOzovIHtcbiYjNDM7XHRzdWIoL15bWzpzcGFjZTpdXSoweFswLTlhLWZdJiM0Mzs6W1s6c3BhY2U6XV0qLywgXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XHRnc3ViKC8gLywgXCYjMzQ7XCYjMzQ7KTsgcHJpbnRmIFwmIzM0OyVzXCYjMzQ7LCAkMCB9JiMzOTspXG4mIzQzO2lmICEgZWNobyBcJiMzNDskZnJhbWVfaGV4XCYjMzQ7IHwgZ3JlcCAtcSBcJiMzNDsxNDA2JHtzYW5faGV4fTFlMDYke3JiX2hleH0wMDAwXCYjMzQ7OyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMViBbIEZBSUwgXTogbWlzc2luZyBTQU4gTUFDLCBUeXBlLTMwXCYjMzQ7IFxcXG4mIzQzO1x0ICAgICBcJiMzNDtwYXlsb2FkLCBvciBFT1RcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRyZXQ9MVxuJiM0MztmaVxuJiM0MztzdG9wX2lmX2Vycm9yIFwmIzM0O1BSUCBSZWRCb3ggc3VwZXJ2aXNpb24gUmVkQm94LU1BQyBUTFYvRU9UIGNoZWNrIGZhaWxlZFwmIzM0O1xuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtJTkZPOiBQUlAgUmVkQm94IChQUlAtU0FOKSBjb25mb3JtYW5jZSBjaGVja3MgcGFzc2VkXCYjMzQ7XG4mIzQzO2V4aXQgJHJldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAwOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O2ZpbGxfZnJhbWVfaW5mbyYjMzQ7LAogICAgJiMzNDtoc3JfYWRkX25vZGUmIzM0OywKICAgICYjMzQ7aHNyX2dldF9ub2RlJiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfc3VwX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9yZWdpc3Rlcl9mcmFtZV9vdXQmIzM0OywKICAgICYjMzQ7aHNyX25ld2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgZm9yIFBSUCAoUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCkgUmVkQm94IChpbnRlcmxpbmspLiBUaGlzIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gcGFja2V0IGZvcndhcmRpbmcsIGRyb3BwaW5nIGxvZ2ljLCBub2RlIG1hbmFnZW1lbnQsIGFuZCBzdXBlcnZpc2lvbiBmcmFtZSBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0d29yayB0cmFmZmljIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM1MGJkMDBlMWI1Y2JjZTY5MmY3OWYxNWY0NzI4OGMzZjhhY2E1ZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxOCAwMDozNzoyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmMKaW5kZXggNTU1NWI3MWFiMTliNTkuLjA5NzNmOWE5NGY0ZDQ4IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMzcyLDEwICYjNDM7MzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogewogCXN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLSZndDtoc3I7CiAJc3RydWN0IGhzcl9zdXBfcGF5bG9hZCAqaHNyX3NwOwomIzQzOwlzdHJ1Y3QgaHNyX3N1cF90bHYgKmhzcl9zdGx2OwogCXN0cnVjdCBoc3Jfc3VwX3RhZyAqaHNyX3N0YWc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJYm9vbCByZWRib3hfcHJveHk7CiYjNDM7CWludCBleHRyYSA9IDA7CiAKLQlza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTsKJiM0MzsJcmVkYm94X3Byb3h5ID0gaHNyLSZndDtyZWRib3ggJmFtcDsmYW1wOyBtYXN0ZXItJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSzsKJiM0MzsKJiM0MzsJLyogQSBwcm94eS1hbm5vdW5jZSBjYXJyaWVzIGEgUmVkQm94LU1BQyBUTFYgYW5kIGFuIEVPVCBtYXJrZXIuICovCiYjNDM7CWlmIChyZWRib3hfcHJveHkpCiYjNDM7CQlleHRyYSA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpICYjNDM7CiYjNDM7CQkJc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpICYjNDM7CiYjNDM7CQkJc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3Rsdik7CiYjNDM7CiYjNDM7CXNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIGV4dHJhKTsKIAlpZiAoIXNrYikgewogCQluZXRkZXZfd2Fybl9vbmNlKG1hc3Rlci0mZ3Q7ZGV2LCAmIzM0O1BSUDogQ291bGQgbm90IHNlbmQgc3VwZXJ2aXNpb24gZnJhbWVcbiYjMzQ7KTsKIAkJcmV0dXJuOwpAQCAtMzkzLDkgJiM0Mzs0MDQsMjUgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7CiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTsKIAotCS8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBICovCiYjNDM7CS8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBLCB0aGUgYW5ub3VuY2VkIG5vZGUuICovCiAJaHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7Ci0JZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBtYXN0ZXItJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIGFkZHIpOwomIzQzOwomIzQzOwkvKiBQcm94eS1hbm5vdW5jZTogYXBwZW5kIHRoZSBSZWRCb3gtTUFDIFRMViAoVHlwZSAzMCkgYW5kIGFuIGV4cGxpY2l0CiYjNDM7CSAqIEVPVCB0byB0ZXJtaW5hdGUgdGhlIFRMViBjaGFpbiBiZWZvcmUgemVybyBwYWRkaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlZGJveF9wcm94eSkgewomIzQzOwkJaHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpOwomIzQzOwkJaHNyX3N0bHYtJmd0O0hTUl9UTFZfdHlwZSA9IFBSUF9UTFZfUkVEQk9YX01BQzsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTsKJiM0MzsKJiM0MzsJCWhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpOwomIzQzOwkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKJiM0MzsKJiM0MzsJCWhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX3R5cGUgPSBIU1JfVExWX0VPVDsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX2xlbmd0aCA9IDA7CiYjNDM7CX0KIAogCWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKQEAgLTc2OCw2ICYjNDM7Nzk1LDE1IEBAIGludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sCiAJLyogTWFrZSBzdXJlIHRoZSAxc3QgY2FsbCB0byBuZXRpZl9jYXJyaWVyX29uKCkgZ2V0cyB0aHJvdWdoICovCiAJbmV0aWZfY2Fycmllcl9vZmYoaHNyX2Rldik7CiAKJiM0MzsJLyogUHVibGlzaCB0aGUgUmVkQm94IHN0YXRlIGJlZm9yZSBhbnkgcG9ydCBpcyBhdHRhY2hlZDogdGhlIHJ4CiYjNDM7CSAqIGhhbmRsZXJzIGFyZSBsaXZlIGZyb20gaHNyX2FkZF9wb3J0KCkgb24sIGFuZCBoc3JfYWRkX25vZGUoKQomIzQzOwkgKiBzaXplcyBlYWNoIG5vZGUmIzM5O3MgcGVyLXBvcnQgc2VxdWVuY2Ugc3RhdGUgZnJvbSBoc3ItJmd0O3JlZGJveC4KJiM0MzsJICovCiYjNDM7CWlmIChpbnRlcmxpbmspIHsKJiM0MzsJCWhzci0mZ3Q7cmVkYm94ID0gdHJ1ZTsKJiM0MzsJCWV0aGVyX2FkZHJfY29weShoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94LCBpbnRlcmxpbmstJmd0O2Rldl9hZGRyKTsKJiM0MzsJfQomIzQzOwogCXJlcyA9IGhzcl9hZGRfcG9ydChoc3IsIGhzcl9kZXYsIEhTUl9QVF9NQVNURVIsIGV4dGFjayk7CiAJaWYgKHJlcykKIAkJZ290byBlcnJfYWRkX21hc3RlcjsKQEAgLTgwNSw4ICYjNDM7ODQxLDYgQEAgaW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSwKIAkJaWYgKHJlcykKIAkJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CiAKLQkJaHNyLSZndDtyZWRib3ggPSB0cnVlOwotCQlldGhlcl9hZGRyX2NvcHkoaHNyLSZndDttYWNhZGRyZXNzX3JlZGJveCwgaW50ZXJsaW5rLSZndDtkZXZfYWRkcik7CiAJCW1vZF90aW1lcigmYW1wO2hzci0mZ3Q7cHJ1bmVfcHJveHlfdGltZXIsCiAJCQkgIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhQUlVORV9QUk9YWV9QRVJJT0QpKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKaW5kZXggMDc3NDk4MWE2NWMxNjQuLjc3MzRhNTIxYTk2YzIzIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCkBAIC00NDAsMTIgJiM0Mzs0NDAsMzQgQEAgc3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJcmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBwcnBfaXNfbGFuX2R1cChlbnVtIGhzcl9wb3J0X3R5cGUgcngsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXJldHVybiAocnggPT0gSFNSX1BUX1NMQVZFX0EgJmFtcDsmYW1wOyBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9TTEFWRV9CKSB8fAomIzQzOwkgICAgICAgKHJ4ID09IEhTUl9QVF9TTEFWRV9CICZhbXA7JmFtcDsgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQSk7CiYjNDM7fQomIzQzOwogYm9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiB7Ci0JcmV0dXJuICgoZnJhbWUtJmd0O3BvcnRfcmN2LSZndDt0eXBlID09IEhTUl9QVF9TTEFWRV9BICZhbXA7JmFtcDsKLQkJIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8Ci0JCShmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX1NMQVZFX0IgJmFtcDsmYW1wOwotCQkgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQSkpOwomIzQzOwllbnVtIGhzcl9wb3J0X3R5cGUgcnggPSBmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGU7CiYjNDM7CiYjNDM7CS8qIFN1cGVydmlzaW9uIGZyYW1lcyBhcmUgbm90IGRlbGl2ZXJlZCB0byBhIFNBTiBvbiB0aGUgaW50ZXJsaW5rLiAqLwomIzQzOwlpZiAoZnJhbWUtJmd0O2lzX3N1cGVydmlzaW9uICZhbXA7JmFtcDsgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChwcnBfaXNfbGFuX2R1cChyeCwgcG9ydCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogTEFOIHRvIGludGVybGluazoga2VlcCBQUlAtbmV0d29yayB1bmljYXN0IG9mZiB0aGUgU0FOIHNlZ21lbnQuICovCiYjNDM7CWlmICgocnggPT0gSFNSX1BUX1NMQVZFX0EgfHwgcnggPT0gSFNSX1BUX1NMQVZFX0IpICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykKJiM0MzsJCXJldHVybiBmcmFtZS0mZ3Q7ZHN0X2luX25vZGVfZGI7CiYjNDM7CiYjNDM7CS8qIEludGVybGluayB0byBMQU46IGtlZXAgU0FOLXRvLVNBTiB1bmljYXN0IGxvY2FsLiAqLwomIzQzOwlpZiAoKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX1NMQVZFX0EgfHwgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgJmFtcDsmYW1wOwomIzQzOwkgICAgcnggPT0gSFNSX1BUX0lOVEVSTElOSykKJiM0MzsJCXJldHVybiBmcmFtZS0mZ3Q7ZHN0X2luX3Byb3h5X25vZGVfZGI7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCkBAIC00NTMsNyAmIzQzOzQ3NSw3IEBAIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZiAocG9ydC0mZ3Q7ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX0hTUl9GV0QpCi0JCXJldHVybiBwcnBfZHJvcF9mcmFtZShmcmFtZSwgcG9ydCk7CiYjNDM7CQlyZXR1cm4gcHJwX2lzX2xhbl9kdXAoZnJhbWUtJmd0O3BvcnRfcmN2LSZndDt0eXBlLCBwb3J0KTsKIAogCS8qIFJlZEJveCBzcGVjaWZpYyBmcmFtZXMgZHJvcHBpbmcgcG9saWNpZXMKIAkgKgpAQCAtNDY2LDcgJiM0Mzs0ODgsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIAkgKiBhcmUgYWRkcmVzc2VkIHRvIGludGVybGluayBwb3J0IChhbmQgYXJlIGluIHRoZSBQcm94eU5vZGVUYWJsZSkuCiAJICovCiAJc2tiID0gZnJhbWUtJmd0O3NrYl9oc3I7Ci0JaWYgKHNrYiAmYW1wOyZhbXA7IHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KSAmYW1wOyZhbXA7CiYjNDM7CWlmIChza2IgJmFtcDsmYW1wOyBwcnBfaXNfbGFuX2R1cChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUsIHBvcnQpICZhbXA7JmFtcDsKIAkgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0mZ3Q7aF9kZXN0KSAmYW1wOyZhbXA7CiAJICAgIGhzcl9pc19ub2RlX2luX2RiKCZhbXA7cG9ydC0mZ3Q7aHNyLSZndDtwcm94eV9ub2RlX2RiLAogCQkJICAgICAgZXRoX2hkcihza2IpLSZndDtoX2Rlc3QpKSB7CkBAIC03MDYsNiAmIzQzOzcyOCwxOCBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAogCWZyYW1lLSZndDtpc192bGFuID0gZmFsc2U7CiAJcHJvdG8gPSBldGhoZHItJmd0O2hfcHJvdG87CiAKJiM0MzsJLyogUFJQIFJlZEJveCBvbmx5OiBjbGFzc2lmeSB0aGUgdW5pY2FzdCBkZXN0aW5hdGlvbiBvbmNlIHNvIHRoZQomIzQzOwkgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94CiYjNDM7CSAqIGRvZXMgaXRzIG93biBjbGFzc2lmaWNhdGlvbiBhbmQgbXVzdCBub3QgcGF5IHRoZXNlIG5vZGUtdGFibGUgd2Fsa3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHNyLSZndDtwcm90X3ZlcnNpb24gPT0gUFJQX1YxICZhbXA7JmFtcDsgaHNyLSZndDtyZWRib3ggJmFtcDsmYW1wOwomIzQzOwkgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aGhkci0mZ3Q7aF9kZXN0KSkgewomIzQzOwkJZnJhbWUtJmd0O2RzdF9pbl9ub2RlX2RiID0KJiM0MzsJCQloc3JfaXNfbm9kZV9pbl9kYigmYW1wO2hzci0mZ3Q7bm9kZV9kYiwgZXRoaGRyLSZndDtoX2Rlc3QpOwomIzQzOwkJZnJhbWUtJmd0O2RzdF9pbl9wcm94eV9ub2RlX2RiID0KJiM0MzsJCQloc3JfaXNfbm9kZV9pbl9kYigmYW1wO2hzci0mZ3Q7cHJveHlfbm9kZV9kYiwgZXRoaGRyLSZndDtoX2Rlc3QpOwomIzQzOwl9CiYjNDM7CiAJaWYgKHByb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSkKIAkJZnJhbWUtJmd0O2lzX3ZsYW4gPSB0cnVlOwogCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuYwppbmRleCBlNDQ5Mjk4NzEyNzQ0NS4uYjNiMTA2YmU2OTJlYWYgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuYwpAQCAtMTk5LDcgJiM0MzsxOTksNyBAQCBzdGF0aWMgc3RydWN0IGhzcl9ub2RlICpoc3JfYWRkX25vZGUoc3RydWN0IGhzcl9wcml2ICpoc3IsCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtuZXdfbm9kZS0mZ3Q7c2VxX291dF9sb2NrKTsKIAogCWlmIChoc3ItJmd0O3Byb3RfdmVyc2lvbiA9PSBQUlBfVjEpCi0JCW5ld19ub2RlLSZndDtzZXFfcG9ydF9jbnQgPSAxOwomIzQzOwkJbmV3X25vZGUtJmd0O3NlcV9wb3J0X2NudCA9IGhzci0mZ3Q7cmVkYm94ID8gMiA6IDE7CiAJZWxzZQogCQluZXdfbm9kZS0mZ3Q7c2VxX3BvcnRfY250ID0gSFNSX1BUX1BPUlRTIC0gMTsKIApAQCAtMjkzLDggJiM0MzsyOTMsMTcgQEAgc3RydWN0IGhzcl9ub2RlICpoc3JfZ2V0X25vZGUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLAogCSAqLwogCWlmIChldGhoZHItJmd0O2hfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSB8fAogCSAgICBldGhoZHItJmd0O2hfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSkgewotCQkvKiBDaGVjayBpZiBza2IgY29udGFpbnMgaHNyX2V0aGhkciAqLwotCQlpZiAoc2tiLSZndDttYWNfbGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSkKJiM0MzsJCWJvb2wgcHJwX3N1cDsKJiM0MzsKJiM0MzsJCS8qIEEgUFJQIHN1cGVydmlzaW9uIGZyYW1lIGlzIGFuIHVudGFnZ2VkIEVUSF9QX1BSUCBmcmFtZQomIzQzOwkJICogKG1hY19sZW4gPT0gRVRIX0hMRU4pOyBpdHMgUkNUIGlzIGFwcGVuZGVkIG9ubHkgb24gZWdyZXNzLgomIzQzOwkJICogSFNSIChFVEhfUF9IU1IpIHN1cGVydmlzaW9uIGlzIGZyb250LXRhZ2dlZCBhbmQgc3RpbGwgbXVzdAomIzQzOwkJICogY29udGFpbiBhIHN0cnVjdCBoc3JfZXRoaGRyLgomIzQzOwkJICovCiYjNDM7CQlwcnBfc3VwID0gaHNyLSZndDtwcm90X3ZlcnNpb24gPT0gUFJQX1YxICZhbXA7JmFtcDsKJiM0MzsJCQkgIGV0aGhkci0mZ3Q7aF9wcm90byA9PSBodG9ucyhFVEhfUF9QUlApICZhbXA7JmFtcDsgaXNfc3VwOwomIzQzOwomIzQzOwkJaWYgKCFwcnBfc3VwICZhbXA7JmFtcDsgc2tiLSZndDttYWNfbGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSkKIAkJCXJldHVybiBOVUxMOwogCX0gZWxzZSB7CiAJCXJjdCA9IHNrYl9nZXRfUFJQX3JjdChza2IpOwpAQCAtMzgxLDYgJiM0MzszOTAsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCXVuc2lnbmVkIGludCB0b3RhbF9wdWxsX3NpemUgPSAwOwogCXVuc2lnbmVkIGludCBwdWxsX3NpemUgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgc2VxX3BvcnRfY250OwogCXVuc2lnbmVkIGxvbmcgaWR4OwogCWludCBpOwogCkBAIC00NzQsNiAmIzQzOzQ4NCw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSkKIAkJfQogCX0KIAomIzQzOwlzZXFfcG9ydF9jbnQgPSBtaW4obm9kZV9yZWFsLSZndDtzZXFfcG9ydF9jbnQsIG5vZGVfY3Vyci0mZ3Q7c2VxX3BvcnRfY250KTsKIAl4YV9mb3JfZWFjaCgmYW1wO25vZGVfY3Vyci0mZ3Q7c2VxX2Jsb2NrcywgaWR4LCBzcmNfYmxrKSB7CiAJCWlmIChoc3Jfc2VxX2Jsb2NrX2lzX29sZChzcmNfYmxrKSkKIAkJCWNvbnRpbnVlOwpAQCAtNDgyLDcgJiM0Mzs0OTMsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiAJCWlmICghbWVyZ2VfYmxrKQogCQkJY29udGludWU7CiAJCW1lcmdlX2Jsay0mZ3Q7dGltZSA9IG1pbihtZXJnZV9ibGstJmd0O3RpbWUsIHNyY19ibGstJmd0O3RpbWUpOwotCQlmb3IgKGkgPSAwOyBpICZsdDsgbm9kZV9yZWFsLSZndDtzZXFfcG9ydF9jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgc2VxX3BvcnRfY250OyBpJiM0MzsmIzQzOykgewogCQkJYml0bWFwX29yKG1lcmdlX2Jsay0mZ3Q7c2VxX25yc1tpXSwgbWVyZ2VfYmxrLSZndDtzZXFfbnJzW2ldLAogCQkJCSAgc3JjX2Jsay0mZ3Q7c2VxX25yc1tpXSwgSFNSX1NFUV9CTE9DS19TSVpFKTsKIAkJfQpAQCAtNjQ5LDkgJiM0Mzs2NjAsMTMgQEAgaW50IHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKQogCWlmIChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUikKIAkJcmV0dXJuIDA7CiAKLQkvKiBmb3IgUFJQIHdlIHNob3VsZCBvbmx5IGZvcndhcmQgZnJhbWVzIGZyb20gdGhlIHNsYXZlIHBvcnRzCi0JICogdG8gdGhlIG1hc3RlciBwb3J0CiYjNDM7CS8qIFJlZEJveDogZm9yd2FyZCBMQU4gZnJhbWVzIG91dCB0aGUgaW50ZXJsaW5rIHRvIGEgU0FOLCBkZWR1cGluZyB0aGUKJiM0MzsJICogdHdvIExBTiBjb3BpZXMgb24gYSBkZWRpY2F0ZWQgc2xvdC4KIAkgKi8KJiM0MzsJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykKJiM0MzsJCXJldHVybiBoc3JfY2hlY2tfZHVwbGljYXRlKGZyYW1lLCAxKTsKJiM0MzsKJiM0MzsJLyogRm9yIFBSUCBvbmx5IHNsYXZlLXRvLW1hc3RlciBmcmFtZXMgYXJlIGZvcndhcmRlZC4gKi8KIAlpZiAocG9ydC0mZ3Q7dHlwZSAhPSBIU1JfUFRfTUFTVEVSKQogCQlyZXR1cm4gMTsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaCBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmgKaW5kZXggYzY1ZWNiOTI1NzM0ODkuLjEyN2EzZmI2NGQ1ZjAzIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmgKQEAgLTI3LDYgJiM0MzsyNyw4IEBAIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyB7CiAJYm9vbCBpc19sb2NhbF9kZXN0OwogCWJvb2wgaXNfbG9jYWxfZXhjbHVzaXZlOwogCWJvb2wgaXNfZnJvbV9zYW47CiYjNDM7CWJvb2wgZHN0X2luX25vZGVfZGI7CiYjNDM7CWJvb2wgZHN0X2luX3Byb3h5X25vZGVfZGI7CiB9OwogCiB2b2lkIGhzcl9kZWxfc2VsZl9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyKTsKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX21haW4uaCBiL25ldC9oc3IvaHNyX21haW4uaAppbmRleCAxMzRlNGYzZmZmNjAzNi4uNTNlOTViYWUwZWUyNzYgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX21haW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9tYWluLmgKQEAgLTIxMSw3ICYjNDM7MjExLDcgQEAgc3RydWN0IGhzcl9wcml2IHsKIAkJCQkgKi8KIAlib29sIGZ3ZF9vZmZsb2FkZWQ7CS8qIEZvcndhcmRpbmcgb2ZmbG9hZGVkIHRvIEhXICovCiAJYm9vbCByZWRib3g7ICAgICAgICAgICAgLyogRGV2aWNlIHN1cHBvcnRzIEhTUiBSZWRCb3ggKi8KLQl1bnNpZ25lZCBjaGFyCQltYWNhZGRyZXNzX3JlZGJveFtFVEhfQUxFTl07CiYjNDM7CXVuc2lnbmVkIGNoYXIJCW1hY2FkZHJlc3NfcmVkYm94W0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpOwogCXVuc2lnbmVkIGNoYXIJCXN1cF9tdWx0aWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKHNpemVvZih1MTYpKTsKIAkJCQkvKiBBbGlnbiB0byB1MTYgYm91bmRhcnkgdG8gYXZvaWQgdW5hbGlnbmVkIGFjY2VzcwogCQkJCSAqIGluIGV0aGVyX2FkZHJfZXF1YWwKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX25ldGxpbmsuYyBiL25ldC9oc3IvaHNyX25ldGxpbmsuYwppbmRleCA4MDk5ZjIwNjlhNzQ4ZS4uODg5NDBlODAxNGIyNGYgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9uZXRsaW5rLmMKQEAgLTEyMSwxNCAmIzQzOzEyMSw4IEBAIHN0YXRpYyBpbnQgaHNyX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJfQogCX0KIAotCWlmIChwcm90byA9PSBIU1JfUFJPVE9DT0xfUFJQKSB7CiYjNDM7CWlmIChwcm90byA9PSBIU1JfUFJPVE9DT0xfUFJQKQogCQlwcm90b192ZXJzaW9uID0gUFJQX1YxOwotCQlpZiAoaW50ZXJsaW5rKSB7Ci0JCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAotCQkJCQkgICAmIzM0O0ludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSJiMzNDspOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9CiAKIAlyZXR1cm4gaHNyX2Rldl9maW5hbGl6ZShkZXYsIGxpbmssIGludGVybGluaywgbXVsdGljYXN0X3NwZWMsCiAJCQkJcHJvdG9fdmVyc2lvbiwgZXh0YWNrKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCmluZGV4IDMxZmI5MzI2Y2Y1MzNkLi4yMTUwZTQ4N2FjN2Q3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCkBAIC00LDYgJiM0Mzs0LDcgQEAgdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uCiAKIFRFU1RfUFJPR1MgOj0gXAogCWhzcl9waW5nLnNoIFwKJiM0MzsJaHNyX3BycF9yZWRib3guc2ggXAogCWhzcl9yZWRib3guc2ggXAogCWxpbmtfZmF1bHRzLnNoIFwKIAlwcnBfcGluZy5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uNDc5Yzg5MjIyNWIxZjMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoCkBAIC0wLDAgJiM0MzsxLDk5IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgVGVzdCBhIFBSUCBSZWRCb3ggKFBSUC1TQU4pOiBhIFNBTiB0aGF0IHNpdHMgYmVoaW5kIHRoZSBpbnRlcmxpbmsgcG9ydCBtdXN0CiYjNDM7IyByZWFjaCwgYW5kIGJlIHJlYWNoZWQgYnksIGEgcGVlciBEQU5QIG9uIHRoZSBQUlAgbmV0d29yayB3aXRoIGl0cyBvd24gTUFDCiYjNDM7IyBwcmVzZXJ2ZWQgb24gdGhlIHdpcmUsIGFuZCB0aGUgUmVkQm94IG11c3QgYW5ub3VuY2UgdGhlIFNBTiB3aXRoIGEgUmVkQm94LU1BQwomIzQzOyMgVExWICh0ZXJtaW5hdGVkIGJ5IGFuIEVPVCBtYXJrZXIpIGluIGl0cyBQUlAgc3VwZXJ2aXNpb24gZnJhbWVzLgomIzQzOyMKJiM0MzsjICAgUkIgICAgUFJQIFJlZEJveDogcHJwMCBvdmVyIHJiX2EvcmJfYiAoTEFOIEEvQikgJiM0MzsgaW50ZXJsaW5rIHJiX2lsCiYjNDM7IyAgIFBFRVIgIHBlZXIgREFOUCA6IHBycDAgb3ZlciBwZV9hL3BlX2IsIDEwMC42NC4wLjIKJiM0MzsjICAgU0FOICAgU0FOICAgICAgIDogc2FuX2lsLCBvd24gTUFDLCAxMDAuNjQuMC41MSAoYmVoaW5kIHRoZSBpbnRlcmxpbmspCiYjNDM7CiYjNDM7aXB2Nj1mYWxzZQomIzQzOwomIzQzO3NvdXJjZSAuL2hzcl9jb21tb24uc2gKJiM0MzsKJiM0MztjaGVja19wcmVyZXF1aXNpdGVzCiYjNDM7CiYjNDM7aWYgISBjb21tYW5kIC12IHRjcGR1bXAgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogVGhpcyB0ZXN0IHJlcXVpcmVzIHRjcGR1bXAmIzM0OwomIzQzOwlleGl0ICRrc2Z0X3NraXAKJiM0MztmaQomIzQzOwomIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyJmd0OyZhbXA7MSB8IGdyZXAgLXEgaW50ZXJsaW5rOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBpcHJvdXRlMiB0b28gb2xkIChubyBoc3IgaW50ZXJsaW5rIHN1cHBvcnQpJiMzNDsKJiM0MzsJZXhpdCAka3NmdF9za2lwCiYjNDM7ZmkKJiM0MzsKJiM0MztzZXR1cF9ucyBSQiBQRUVSIFNBTgomIzQzO3RyYXAgJiMzOTtjbGVhbnVwX25zICYjMzQ7JFJCJiMzNDsgJiMzNDskUEVFUiYjMzQ7ICYjMzQ7JFNBTiYjMzQ7JiMzOTsgRVhJVAomIzQzOwomIzQzO2lwIGxpbmsgYWRkIHJiX2EgbmV0bnMgJiMzNDskUkImIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBlX2EgbmV0bnMgJiMzNDskUEVFUiYjMzQ7CiYjNDM7aXAgbGluayBhZGQgcmJfYiBuZXRucyAmIzM0OyRSQiYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYiBuZXRucyAmIzM0OyRQRUVSJiMzNDsKJiM0MztpcCBsaW5rIGFkZCByYl9pbCBuZXRucyAmIzM0OyRSQiYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgc2FuX2lsIG5ldG5zICYjMzQ7JFNBTiYjMzQ7CiYjNDM7CiYjNDM7aXAgLW4gJiMzNDskUkImIzM0OyAgIGxpbmsgc2V0IHJiX2EgdXAKJiM0MztpcCAtbiAmIzM0OyRSQiYjMzQ7ICAgbGluayBzZXQgcmJfYiB1cAomIzQzO2lwIC1uICYjMzQ7JFJCJiMzNDsgICBsaW5rIHNldCByYl9pbCB1cAomIzQzO2lwIC1uICYjMzQ7JFBFRVImIzM0OyBsaW5rIHNldCBwZV9hIHVwCiYjNDM7aXAgLW4gJiMzNDskUEVFUiYjMzQ7IGxpbmsgc2V0IHBlX2IgdXAKJiM0MztpcCAtbiAmIzM0OyRTQU4mIzM0OyAgbGluayBzZXQgc2FuX2lsIHVwCiYjNDM7aXAgLW4gJiMzNDskU0FOJiMzNDsgIGFkZHIgYWRkIDEwMC42NC4wLjUxLzI0IGRldiBzYW5faWwKJiM0MzsKJiM0MzsjIEZlYXR1cmUgZ2F0ZTogUFJQIGludGVybGluayAoUmVkQm94KSBjcmVhdGlvbi4gQSBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94CiYjNDM7IyBzdXBwb3J0IHJlamVjdHMgdGhpcyB3aXRoIC1FSU5WQUwsIHNvIFNLSVAgcmF0aGVyIHRoYW4gRkFJTC4KJiM0MztpZiAhIGlwIC1uICYjMzQ7JFJCJiMzNDsgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSByYl9hIHNsYXZlMiByYl9iIFwKJiM0MzsgICAgIGludGVybGluayByYl9pbCBwcm90byAxIDImZ3Q7L2Rldi9udWxsOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94IChpbnRlcmxpbmspIHN1cHBvcnQmIzM0OwomIzQzOwlleGl0ICRrc2Z0X3NraXAKJiM0MztmaQomIzQzO2lwIC1uICYjMzQ7JFJCJiMzNDsgICBsaW5rIHNldCBwcnAwIHVwCiYjNDM7aXAgLW4gJiMzNDskUEVFUiYjMzQ7IGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcGVfYSBzbGF2ZTIgcGVfYiBwcm90byAxCiYjNDM7aXAgLW4gJiMzNDskUEVFUiYjMzQ7IGxpbmsgc2V0IHBycDAgdXAKJiM0MztpcCAtbiAmIzM0OyRQRUVSJiMzNDsgYWRkciBhZGQgMTAwLjY0LjAuMi8yNCBkZXYgcHJwMAomIzQzO3NsZWVwIDEKJiM0MzsKJiM0MztzYW5fbWFjPSQoaXAgLW4gJiMzNDskU0FOJiMzNDsgLWJyIGxpbmsgc2hvdyBzYW5faWwgfCBhd2sgJiMzOTt7cHJpbnQgJDN9JiMzOTspCiYjNDM7cmJfbWFjPSQoaXAgLW4gJiMzNDskUkImIzM0OyAtYnIgbGluayBzaG93IHJiX2lsIHwgYXdrICYjMzk7e3ByaW50ICQzfSYjMzk7KQomIzQzOwomIzQzOyMgQmlkaXJlY3Rpb25hbCB1bmljYXN0IGFjcm9zcyB0aGUgaW50ZXJsaW5rLgomIzQzO2RvX3BpbmcgJiMzNDskUEVFUiYjMzQ7IDEwMC42NC4wLjUxCiYjNDM7ZG9fcGluZyAmIzM0OyRTQU4mIzM0OyAgMTAwLjY0LjAuMgomIzQzO3N0b3BfaWZfZXJyb3IgJiMzNDtQUlAgUmVkQm94IGJpZGlyZWN0aW9uYWwgdW5pY2FzdCBmYWlsZWQmIzM0OwomIzQzOwomIzQzOyMgVGhlIFNBTiBzb3VyY2UgTUFDIG11c3QgYmUgcHJlc2VydmVkIG9uIHRoZSBQUlAgbmV0d29yaywgbm90IGxhdW5kZXJlZCB0byB0aGUKJiM0MzsjIFJlZEJveCBNQUM6IHRoZSBwZWVyIHJlc29sdmVzIHRoZSBTQU4gSVAgdG8gdGhlIFNBTiYjMzk7cyBvd24gTUFDLgomIzQzO25laWdoPSQoaXAgLW4gJiMzNDskUEVFUiYjMzQ7IG5laWdoIHNob3cgMTAwLjY0LjAuNTEgfCBhd2sgJiMzOTt7cHJpbnQgJDV9JiMzOTspCiYjNDM7aWYgWyAmIzM0OyRuZWlnaCYjMzQ7ICE9ICYjMzQ7JHNhbl9tYWMmIzM0OyBdOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTQU4gTUFDIHByZXNlcnZhdGlvbiBbIEZBSUwgXTogcGVlciByZXNvbHZlZCAxMDAuNjQuMC41MSB0byYjMzQ7IFwKJiM0MzsJICAgICAmIzM0OyYjMzk7JG5laWdoJiMzOTssIGV4cGVjdGVkICRzYW5fbWFjJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJcmV0PTEKJiM0MztmaQomIzQzO3N0b3BfaWZfZXJyb3IgJiMzNDtTQU4gTUFDIG5vdCBwcmVzZXJ2ZWQgb24gdGhlIFBSUCBuZXR3b3JrJiMzNDsKJiM0MzsKJiM0MzsjIFRoZSBwcm94eS1hbm5vdW5jZSBzdXBlcnZpc2lvbiBmcmFtZSBtdXN0IGNhcnJ5LCBpbiBvcmRlciwgdGhlIGxpZmUtY2hlY2sgVExWCiYjNDM7IyAodHlwZSAweDE0LCBsZW4gNikgJiM0MzsgTWFjQWRkcmVzc0EgPT0gU0FOIE1BQyAmIzQzOyB0aGUgUmVkQm94LU1BQyBUTFYgKHR5cGUgMHgxZSwKJiM0MzsjIGxlbiA2KSAmIzQzOyBNYWNBZGRyZXNzUmVkQm94ID09IFJlZEJveCBNQUMgJiM0MzsgdGhlIEVPVCBtYXJrZXIgKDB4MDAwMCkuCiYjNDM7aXAgbmV0bnMgZXhlYyAmIzM0OyRTQU4mIzM0OyBwaW5nIC1pIDAuMiAtcSAxMDAuNjQuMC4yICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgJmFtcDsKJiM0MztwaW5nX3BpZD0kIQomIzQzO2NhcD0kKGlwIG5ldG5zIGV4ZWMgJiMzNDskUEVFUiYjMzQ7IHRpbWVvdXQgNSB0Y3BkdW1wIC1pIHBlX2EgLW5uIC14IFwKJiM0MzsJJiMzNDtldGhlciBwcm90byAweDg4ZmIgYW5kIGV0aGVyIHNyYyAkcmJfbWFjJiMzNDsgMiZndDsvZGV2L251bGwgfHwgdHJ1ZSkKJiM0MztraWxsICYjMzQ7JHBpbmdfcGlkJiMzNDsgMiZndDsvZGV2L251bGwgfHwgdHJ1ZQomIzQzO3dhaXQgJiMzNDskcGluZ19waWQmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7CiYjNDM7c2FuX2hleD0kKGVjaG8gJiMzNDskc2FuX21hYyYjMzQ7IHwgdHIgLWQgJiMzOTs6JiMzOTspCiYjNDM7cmJfaGV4PSQoZWNobyAmIzM0OyRyYl9tYWMmIzM0OyB8IHRyIC1kICYjMzk7OiYjMzk7KQomIzQzOyMgUmVhc3NlbWJsZSBjb250aWd1b3VzIGZyYW1lIGhleDogZHJvcCB0aGUgJiMzNDsweDAwMTA6JiMzNDsgb2Zmc2V0IGxhYmVscyBhbmQgc3BhY2VzLgomIzQzO2ZyYW1lX2hleD0kKGVjaG8gJiMzNDskY2FwJiMzNDsgfCBhd2sgJiMzOTsvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0mIzQzOzovIHsKJiM0MzsJc3ViKC9eW1s6c3BhY2U6XV0qMHhbMC05YS1mXSYjNDM7OltbOnNwYWNlOl1dKi8sICYjMzQ7JiMzNDspOwomIzQzOwlnc3ViKC8gLywgJiMzNDsmIzM0Oyk7IHByaW50ZiAmIzM0OyVzJiMzNDssICQwIH0mIzM5OykKJiM0MztpZiAhIGVjaG8gJiMzNDskZnJhbWVfaGV4JiMzNDsgfCBncmVwIC1xICYjMzQ7MTQwNiR7c2FuX2hleH0xZTA2JHtyYl9oZXh9MDAwMCYjMzQ7OyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMViBbIEZBSUwgXTogbWlzc2luZyBTQU4gTUFDLCBUeXBlLTMwJiMzNDsgXAomIzQzOwkgICAgICYjMzQ7cGF5bG9hZCwgb3IgRU9UJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJcmV0PTEKJiM0MztmaQomIzQzO3N0b3BfaWZfZXJyb3IgJiMzNDtQUlAgUmVkQm94IHN1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWL0VPVCBjaGVjayBmYWlsZWQmIzM0OwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBQUlAgUmVkQm94IChQUlAtU0FOKSBjb25mb3JtYW5jZSBjaGVja3MgcGFzc2VkJiMzNDsKJiM0MztleGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAyOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIU1IgUFJQIFJlZEJveCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgdG8gdGhlIEhTUiBkcml2ZXIgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUFJQIFJlZEJveCBpbnRlcmxpbmtpbmcuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBoc3JfZGV2aWNlLmNgLCBgaHNyX2ZvcndhcmQuY2AsIGBoc3JfZnJhbWVyZWcuY2AsIGFuZCBgaHNyX25ldGxpbmsuY2AsIHdoaWNoIGlzIHRoZSB0eXBpY2FsIGFyZWEgZm9yIG5ldHdvcmsgZHJpdmVyIG1vZGlmaWNhdGlvbnMsIGFuZCBpbmNsdWRlcyBhIHNlbGZ0ZXN0LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjayByZWxhdGVkIHRvIGhpZ2ggYXZhaWxhYmlsaXR5LiBHaXZlbiB0aGF0IGl0IGRlYWxzIHdpdGggYWRkaW5nIFBSUCBSZWRCb3ggZnVuY3Rpb25hbGl0eSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgY29yZSBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYy4gRnVuY3Rpb25zIGxpa2UgYGhzcl94bWl0YCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYW5kIGBwcnBfZHJvcF9mcmFtZWAgYXJlIGdvaW5nIHRvIGJlIGFmZmVjdGVkLgoKVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0aGF0IHRoaXMgZGVtYW5kcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlLCBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBwYWNrZXQgaGFuZGxpbmcuCgpJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgaGFuZGxpbmcgaW5jb21pbmcgb3Igb3V0Z29pbmcgZnJhbWVzLCBvciB3aGVyZSBQUlAgcHJvdG9jb2wgbG9naWMgaXMgaW1wbGVtZW50ZWQ6CgoqICAgYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYAoqICAgYGhzcl9kZXZfZmluYWxpemVgCiogICBgcHJwX2Ryb3BfZnJhbWVgCiogICBgaHNyX2Ryb3BfZnJhbWVgCiogICBgZmlsbF9mcmFtZV9pbmZvYAoqICAgYGhzcl9hZGRfbm9kZWAKKiAgIGBoc3JfZ2V0X25vZGVgCiogICBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgCiogICBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAKKiAgIGBoc3JfbmV3bGlua2AKCkJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGZ1enppbmcsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIHZlcmlmeSB0aGF0IEhTUiBpcyBlbmFibGVkIGFuZCB0byBzZWUgaWYgYW55IG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWMgdG8gUFJQIGhhdmUgYmVlbiBpbnRyb2R1Y2VkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGxvb2sgZm9yIGBDT05GSUdfSFNSYCBhbmQgYW55IHJlbGF0ZWQgb3B0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIU1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBIU1IgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgbmV0L2hzci9LY29uZmlnYC4gVGhpcyBtZWFucyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSKSBwcm90b2NvbCBzdXBwb3J0IHdpdGhpbiB0aGlzIHNwZWNpZmljIG5ldHdvcmsgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gaW1wbGVtZW50ZWQsIHdoYXQga25vYnMgYXJlIGF2YWlsYWJsZSB0byBmaW5lLXR1bmUgaXRzIGJlaGF2aW9yLCBhbmQgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSBLY29uZmlnIGZpbGUgaXRzZWxmLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBgY29uZmlnYCBlbnRyaWVzLCBgbWVudWNvbmZpZ2AsIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIGRlZmluaXRpb25zIGFuZCBoZWxwIHRleHQuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgYXJlYXMgd2hlcmUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gY2hhbmdlcyBtaWdodCByZXF1aXJlIHNwZWNpYWwgY29uc2lkZXJhdGlvbi4gSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgdGhpcyBpcyBhIGNvcmUgSFNSIGltcGxlbWVudGF0aW9uIG9yIGFuIGV4dGVuc2lvbiwgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIG5ldHdvcmtpbmcgZmVhdHVyZXMgKGUuZy4sIFZMQU5zLCBicmlkZ2luZywgUW9TKSBhbmQgaGFyZHdhcmUgcGxhdGZvcm1zLiBJIG5lZWQgdG8gZW5zdXJlIGEgY29ycmVjdCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnLTUtXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXG5uZXQvaHNyL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0hpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcdTAwMjYgUFJQKVwmIzM0O1xuLS1cbm5ldC9oc3IvS2NvbmZpZz00Mj1pZiBIU1Jcbm5ldC9oc3IvS2NvbmZpZy00My1cbm5ldC9oc3IvS2NvbmZpZzo0NDpjb25maWcgUFJQX0RVUF9ESVNDQVJEX0tVTklUX1RFU1Rcbm5ldC9oc3IvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O1BSUCBkdXBsaWNhdGUgZGlzY2FyZCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhTUiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBgSFNSYCBjb25maWd1cmF0aW9uIGlzIHRoZSBjZW50cmFsIHBpZWNlIGhlcmUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRob3NlLiBJJiMzOTt2ZSBnb3QgdG8gZm9jdXMgb24gdGhlIGZvbGxvd2luZzogYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYHBycF9kcm9wX2ZyYW1lYCwgYGhzcl9kcm9wX2ZyYW1lYCwgYGZpbGxfZnJhbWVfaW5mb2AsIGBoc3JfYWRkX25vZGVgLCBgaHNyX2dldF9ub2RlYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLCBhbmQgYGhzcl9uZXdsaW5rYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQsIGJ1dCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIGBwcnBfaXNfbGFuX2R1cGAsIGFuZCBhIG1vZGlmaWVkIGZ1bmN0aW9uLCBgaHNyX2Rldl9maW5hbGl6ZWAsIHRoYXQgSSBuZWVkIHRvIGZhY3RvciBpbi4KCk5vdywgSSYjMzk7bGwgc3dpdGNoIG15IGZvY3VzIHRvIGBuZXQvaHNyL2hzcl9kZXZpY2UuY2AgdG8gZXhhbWluZSBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2RldmljZS5jPTI5Mz1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY4LVxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzY5OnN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzcwLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmludGVydmFsLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcbm5ldC9oc3IvaHNyX2RldmljZS5jOjY1OTpcdC5zZW5kX3N2X2ZyYW1lID0gc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUsXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjAtXHQuY3JlYXRlX3RhZ2dlZF9mcmFtZSA9IHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDQ1CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBSUCBSZWRCb3ggUGF0Y2ggYW5kIElkZW50aWZ5aW5nIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgY2VudGVycyBvbiBpZGVudGlmeWluZyBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBQUlAgUmVkQm94IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIU1IgZHJpdmVyLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIHBpbnBvaW50IHRoZSBiZXN0IGFyZWFzIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QsIGJhc2VkIG9uIHRoZSBjb2RlIGFuYWx5c2lzIHNvIGZhciwgYXJlOiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLCBgcHJwX2Ryb3BfZnJhbWVgLCBgaHNyX2Ryb3BfZnJhbWVgLCBgZmlsbF9mcmFtZV9pbmZvYCwgYGhzcl9hZGRfbm9kZWAsIGBoc3JfZ2V0X25vZGVgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAsIGFuZCBgaHNyX25ld2xpbmtgLiBJJiMzOTtsbCB3YW50IHRvIHJldmlzaXQgdGhvc2UsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIEhTUiBjb25maWcuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgaW5saW5pbmcgc3RhdHVzIG9mIGBwcnBfaXNfbGFuX2R1cGAsIGFsdGhvdWdoIEkgdGhpbmsgSSBjYW4gYXZvaWQgaXQgYnkganVzdCB1c2luZyB0aGUgYHBycF9kcm9wX2ZyYW1lYCBhbmQgYGhzcl9kcm9wX2ZyYW1lYCBmdW5jdGlvbnMuCgpUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWRkcyBzdXBwb3J0IGZvciBQUlAgUmVkQm94IGludGVybGluayBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBob3cgdGhlIEhTUiBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIFRoZXJlZm9yZSwgaXQmIzM5O3MgYWJzb2x1dGVseSBjcnVjaWFsIHRvIGZ1enogdGhpcyBpbXBsZW1lbnRhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHJlZmluZSB0aGlzIGxpc3QuIGBoc3JfbmV3bGlua2AgYXBwZWFycyB0byBiZSB0aGUgbmV0bGluayBlbnRyeSBwb2ludCBmb3IgaW50ZXJmYWNlIGNyZWF0aW9uLiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIHNlZW1zIHRvIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgb3IgdHJpZ2dlcmVkIG9uIGRlbWFuZC4gIGBwcnBfZHJvcF9mcmFtZWAgYW5kIGBoc3JfZHJvcF9mcmFtZWAgYXJlIGNyaXRpY2FsIGZvciBwYWNrZXQgcmVjZXB0aW9uIGFuZCBmb3J3YXJkaW5nLiBgZmlsbF9mcmFtZV9pbmZvYCBpcyBhbHNvIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcmVjZXB0aW9uLiBUaGUgYGhzcl9hZGRfbm9kZWAgYW5kIGBoc3JfZ2V0X25vZGVgIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgaW4gdGhlIG1hbmFnZW1lbnQgb2YgdGhlIG5vZGUgdGFibGUsIGR1cmluZyBwYWNrZXQgcmVjZXB0aW9uLiBGaW5hbGx5LCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgIGhhbmRsZXMgdGhlIHN1cGVydmlzaW9uIGZyYW1lIGFuZCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAgaXMgY2FsbGVkIG9uIHRyYW5zbWlzc2lvbi4KClllcywgdGhpcyBpcyBhIHNvbGlkIGxpc3Qgb2YgdGFyZ2V0cy4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGNvdmVycyB0aGUgbW9zdCBjcml0aWNhbCBhcmVhcyBmb3IgZnV6emluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7ZmlsbF9mcmFtZV9pbmZvJiMzNDssCiAgICAmIzM0O2hzcl9hZGRfbm9kZSYjMzQ7LAogICAgJiMzNDtoc3JfZ2V0X25vZGUmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9zdXBfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX3JlZ2lzdGVyX2ZyYW1lX291dCYjMzQ7LAogICAgJiMzNDtoc3JfbmV3bGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUFJQIChQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sKSBSZWRCb3ggKGludGVybGluaykuIFRoaXMgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBwYWNrZXQgZm9yd2FyZGluZywgZHJvcHBpbmcgbG9naWMsIG5vZGUgbWFuYWdlbWVudCwgYW5kIHN1cGVydmlzaW9uIGZyYW1lIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7ZmlsbF9mcmFtZV9pbmZvJiMzNDssCiAgICAmIzM0O2hzcl9hZGRfbm9kZSYjMzQ7LAogICAgJiMzNDtoc3JfZ2V0X25vZGUmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9zdXBfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX3JlZ2lzdGVyX2ZyYW1lX291dCYjMzQ7LAogICAgJiMzNDtoc3JfbmV3bGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUFJQIChQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sKSBSZWRCb3ggKGludGVybGluaykuIFRoaXMgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBwYWNrZXQgZm9yd2FyZGluZywgZHJvcHBpbmcgbG9naWMsIG5vZGUgbWFuYWdlbWVudCwgYW5kIHN1cGVydmlzaW9uIGZyYW1lIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAwOjM3OjI1LjYzNTM3OTM2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzA3ODMyMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lXCIsXG4gICAgXCJwcnBfZHJvcF9mcmFtZVwiLFxuICAgIFwiaHNyX2Ryb3BfZnJhbWVcIixcbiAgICBcImZpbGxfZnJhbWVfaW5mb1wiLFxuICAgIFwiaHNyX2FkZF9ub2RlXCIsXG4gICAgXCJoc3JfZ2V0X25vZGVcIixcbiAgICBcImhzcl9oYW5kbGVfc3VwX2ZyYW1lXCIsXG4gICAgXCJwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0XCIsXG4gICAgXCJoc3JfbmV3bGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciBQUlAgKFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wpIFJlZEJveCAoaW50ZXJsaW5rKS4gVGhpcyBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIHBhY2tldCBmb3J3YXJkaW5nLCBkcm9wcGluZyBsb2dpYywgbm9kZSBtYW5hZ2VtZW50LCBhbmQgc3VwZXJ2aXNpb24gZnJhbWUgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMDozNzoyNS42MzUzODMyNDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODIzMDk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM1MGJkMDBlMWI1Y2JjZTY5MmY3OWYxNWY0NzI4OGMzZjhhY2E1ZDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTggMDA6Mzc6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4wOTczZjlhOTRmNGQ0OCAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jXFxuQEAgLTM3MiwxMCArMzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbiB7XFxuIFxcdHN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLVxcdTAwM2Voc3I7XFxuIFxcdHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQgKmhzcl9zcDtcXG4rXFx0c3RydWN0IGhzcl9zdXBfdGx2ICpoc3Jfc3RsdjtcXG4gXFx0c3RydWN0IGhzcl9zdXBfdGFnICpoc3Jfc3RhZztcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0Ym9vbCByZWRib3hfcHJveHk7XFxuK1xcdGludCBleHRyYSA9IDA7XFxuIFxcbi1cXHRza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTtcXG4rXFx0cmVkYm94X3Byb3h5ID0gaHNyLVxcdTAwM2VyZWRib3ggXFx1MDAyNlxcdTAwMjYgbWFzdGVyLVxcdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTks7XFxuK1xcbitcXHQvKiBBIHByb3h5LWFubm91bmNlIGNhcnJpZXMgYSBSZWRCb3gtTUFDIFRMViBhbmQgYW4gRU9UIG1hcmtlci4gKi9cXG4rXFx0aWYgKHJlZGJveF9wcm94eSlcXG4rXFx0XFx0ZXh0cmEgPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSArXFxuK1xcdFxcdFxcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSArXFxuK1xcdFxcdFxcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpO1xcbitcXG4rXFx0c2tiID0gaHNyX2luaXRfc2tiKG1hc3RlciwgZXh0cmEpO1xcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHRuZXRkZXZfd2Fybl9vbmNlKG1hc3Rlci1cXHUwMDNlZGV2LCBcXFwiUFJQOiBDb3VsZCBub3Qgc2VuZCBzdXBlcnZpc2lvbiBmcmFtZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMzkzLDkgKzQwNCwyNSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XFxuIFxcdGhzcl9zdGFnLVxcdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XFxuIFxcbi1cXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSAqL1xcbitcXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSwgdGhlIGFubm91bmNlZCBub2RlLiAqL1xcbiBcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4tXFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVxcdTAwM2VtYWNhZGRyZXNzX0EsIGFkZHIpO1xcbitcXG4rXFx0LyogUHJveHktYW5ub3VuY2U6IGFwcGVuZCB0aGUgUmVkQm94LU1BQyBUTFYgKFR5cGUgMzApIGFuZCBhbiBleHBsaWNpdFxcbitcXHQgKiBFT1QgdG8gdGVybWluYXRlIHRoZSBUTFYgY2hhaW4gYmVmb3JlIHplcm8gcGFkZGluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChyZWRib3hfcHJveHkpIHtcXG4rXFx0XFx0aHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl90eXBlID0gUFJQX1RMVl9SRURCT1hfTUFDO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XFxuK1xcbitcXHRcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4rXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXFx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcXG4rXFxuK1xcdFxcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcXG4rXFx0XFx0aHNyX3N0bHYtXFx1MDAzZUhTUl9UTFZfdHlwZSA9IEhTUl9UTFZfRU9UO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl9sZW5ndGggPSAwO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG5AQCAtNzY4LDYgKzc5NSwxNSBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxcbiBcXHQvKiBNYWtlIHN1cmUgdGhlIDFzdCBjYWxsIHRvIG5ldGlmX2NhcnJpZXJfb24oKSBnZXRzIHRocm91Z2ggKi9cXG4gXFx0bmV0aWZfY2Fycmllcl9vZmYoaHNyX2Rldik7XFxuIFxcbitcXHQvKiBQdWJsaXNoIHRoZSBSZWRCb3ggc3RhdGUgYmVmb3JlIGFueSBwb3J0IGlzIGF0dGFjaGVkOiB0aGUgcnhcXG4rXFx0ICogaGFuZGxlcnMgYXJlIGxpdmUgZnJvbSBoc3JfYWRkX3BvcnQoKSBvbiwgYW5kIGhzcl9hZGRfbm9kZSgpXFxuK1xcdCAqIHNpemVzIGVhY2ggbm9kZSdzIHBlci1wb3J0IHNlcXVlbmNlIHN0YXRlIGZyb20gaHNyLVxcdTAwM2VyZWRib3guXFxuK1xcdCAqL1xcbitcXHRpZiAoaW50ZXJsaW5rKSB7XFxuK1xcdFxcdGhzci1cXHUwMDNlcmVkYm94ID0gdHJ1ZTtcXG4rXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXMgPSBoc3JfYWRkX3BvcnQoaHNyLCBoc3JfZGV2LCBIU1JfUFRfTUFTVEVSLCBleHRhY2spO1xcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRnb3RvIGVycl9hZGRfbWFzdGVyO1xcbkBAIC04MDUsOCArODQxLDYgQEAgaW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSxcXG4gXFx0XFx0aWYgKHJlcylcXG4gXFx0XFx0XFx0Z290byBlcnJfdW5yZWdpc3RlcjtcXG4gXFxuLVxcdFxcdGhzci1cXHUwMDNlcmVkYm94ID0gdHJ1ZTtcXG4tXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmhzci1cXHUwMDNlcHJ1bmVfcHJveHlfdGltZXIsXFxuIFxcdFxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUFJVTkVfUFJPWFlfUEVSSU9EKSk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXFxuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjc3MzRhNTIxYTk2YzIzIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC00NDAsMTIgKzQ0MCwzNCBAQCBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4gXFx0cmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHBycF9pc19sYW5fZHVwKGVudW0gaHNyX3BvcnRfdHlwZSByeCwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHJldHVybiAocnggPT0gSFNSX1BUX1NMQVZFX0EgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHxcXG4rXFx0ICAgICAgIChyeCA9PSBIU1JfUFRfU0xBVkVfQiBcXHUwMDI2XFx1MDAyNiBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKTtcXG4rfVxcbitcXG4gYm9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuIHtcXG4tXFx0cmV0dXJuICgoZnJhbWUtXFx1MDAzZXBvcnRfcmN2LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKSB8fFxcbi1cXHRcXHQoZnJhbWUtXFx1MDAzZXBvcnRfcmN2LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKSk7XFxuK1xcdGVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZTtcXG4rXFxuK1xcdC8qIFN1cGVydmlzaW9uIGZyYW1lcyBhcmUgbm90IGRlbGl2ZXJlZCB0byBhIFNBTiBvbiB0aGUgaW50ZXJsaW5rLiAqL1xcbitcXHRpZiAoZnJhbWUtXFx1MDAzZWlzX3N1cGVydmlzaW9uIFxcdTAwMjZcXHUwMDI2IHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAocHJwX2lzX2xhbl9kdXAocngsIHBvcnQpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIExBTiB0byBpbnRlcmxpbms6IGtlZXAgUFJQLW5ldHdvcmsgdW5pY2FzdCBvZmYgdGhlIFNBTiBzZWdtZW50LiAqL1xcbitcXHRpZiAoKHJ4ID09IEhTUl9QVF9TTEFWRV9BIHx8IHJ4ID09IEhTUl9QVF9TTEFWRV9CKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKVxcbitcXHRcXHRyZXR1cm4gZnJhbWUtXFx1MDAzZWRzdF9pbl9ub2RlX2RiO1xcbitcXG4rXFx0LyogSW50ZXJsaW5rIHRvIExBTjoga2VlcCBTQU4tdG8tU0FOIHVuaWNhc3QgbG9jYWwuICovXFxuK1xcdGlmICgocG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSB8fCBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcnggPT0gSFNSX1BUX0lOVEVSTElOSylcXG4rXFx0XFx0cmV0dXJuIGZyYW1lLVxcdTAwM2Vkc3RfaW5fcHJveHlfbm9kZV9kYjtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4gYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuQEAgLTQ1Myw3ICs0NzUsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuIFxcdGlmIChwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19IU1JfRldEKVxcbi1cXHRcXHRyZXR1cm4gcHJwX2Ryb3BfZnJhbWUoZnJhbWUsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gcHJwX2lzX2xhbl9kdXAoZnJhbWUtXFx1MDAzZXBvcnRfcmN2LVxcdTAwM2V0eXBlLCBwb3J0KTtcXG4gXFxuIFxcdC8qIFJlZEJveCBzcGVjaWZpYyBmcmFtZXMgZHJvcHBpbmcgcG9saWNpZXNcXG4gXFx0ICpcXG5AQCAtNDY2LDcgKzQ4OCw3IEBAIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbiBcXHQgKiBhcmUgYWRkcmVzc2VkIHRvIGludGVybGluayBwb3J0IChhbmQgYXJlIGluIHRoZSBQcm94eU5vZGVUYWJsZSkuXFxuIFxcdCAqL1xcbiBcXHRza2IgPSBmcmFtZS1cXHUwMDNlc2tiX2hzcjtcXG4tXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBwcnBfZHJvcF9mcmFtZShmcmFtZSwgcG9ydCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBwcnBfaXNfbGFuX2R1cChmcmFtZS1cXHUwMDNlcG9ydF9yY3YtXFx1MDAzZXR5cGUsIHBvcnQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVxcdTAwM2VoX2Rlc3QpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBoc3JfaXNfbm9kZV9pbl9kYihcXHUwMDI2cG9ydC1cXHUwMDNlaHNyLVxcdTAwM2Vwcm94eV9ub2RlX2RiLFxcbiBcXHRcXHRcXHQgICAgICBldGhfaGRyKHNrYiktXFx1MDAzZWhfZGVzdCkpIHtcXG5AQCAtNzA2LDYgKzcyOCwxOCBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbiBcXHRmcmFtZS1cXHUwMDNlaXNfdmxhbiA9IGZhbHNlO1xcbiBcXHRwcm90byA9IGV0aGhkci1cXHUwMDNlaF9wcm90bztcXG4gXFxuK1xcdC8qIFBSUCBSZWRCb3ggb25seTogY2xhc3NpZnkgdGhlIHVuaWNhc3QgZGVzdGluYXRpb24gb25jZSBzbyB0aGVcXG4rXFx0ICogcGVyLWVncmVzcy1wb3J0IGRlY2lzaW9uIGluIHBycF9kcm9wX2ZyYW1lKCkgc3RheXMgTygxKS4gSFNSIFJlZEJveFxcbitcXHQgKiBkb2VzIGl0cyBvd24gY2xhc3NpZmljYXRpb24gYW5kIG11c3Qgbm90IHBheSB0aGVzZSBub2RlLXRhYmxlIHdhbGtzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGhzci1cXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSBcXHUwMDI2XFx1MDAyNiBoc3ItXFx1MDAzZXJlZGJveCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aGhkci1cXHUwMDNlaF9kZXN0KSkge1xcbitcXHRcXHRmcmFtZS1cXHUwMDNlZHN0X2luX25vZGVfZGIgPVxcbitcXHRcXHRcXHRoc3JfaXNfbm9kZV9pbl9kYihcXHUwMDI2aHNyLVxcdTAwM2Vub2RlX2RiLCBldGhoZHItXFx1MDAzZWhfZGVzdCk7XFxuK1xcdFxcdGZyYW1lLVxcdTAwM2Vkc3RfaW5fcHJveHlfbm9kZV9kYiA9XFxuK1xcdFxcdFxcdGhzcl9pc19ub2RlX2luX2RiKFxcdTAwMjZoc3ItXFx1MDAzZXByb3h5X25vZGVfZGIsIGV0aGhkci1cXHUwMDNlaF9kZXN0KTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHByb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSlcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZWlzX3ZsYW4gPSB0cnVlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuYyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmNcXG5pbmRleCBlNDQ5Mjk4NzEyNzQ0NS4uYjNiMTA2YmU2OTJlYWYgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmNcXG5AQCAtMTk5LDcgKzE5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHNyX25vZGUgKmhzcl9hZGRfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcixcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm5ld19ub2RlLVxcdTAwM2VzZXFfb3V0X2xvY2spO1xcbiBcXG4gXFx0aWYgKGhzci1cXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSlcXG4tXFx0XFx0bmV3X25vZGUtXFx1MDAzZXNlcV9wb3J0X2NudCA9IDE7XFxuK1xcdFxcdG5ld19ub2RlLVxcdTAwM2VzZXFfcG9ydF9jbnQgPSBoc3ItXFx1MDAzZXJlZGJveCA/IDIgOiAxO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG5ld19ub2RlLVxcdTAwM2VzZXFfcG9ydF9jbnQgPSBIU1JfUFRfUE9SVFMgLSAxO1xcbiBcXG5AQCAtMjkzLDggKzI5MywxNyBAQCBzdHJ1Y3QgaHNyX25vZGUgKmhzcl9nZXRfbm9kZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsXFxuIFxcdCAqL1xcbiBcXHRpZiAoZXRoaGRyLVxcdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1BSUCkgfHxcXG4gXFx0ICAgIGV0aGhkci1cXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9IU1IpKSB7XFxuLVxcdFxcdC8qIENoZWNrIGlmIHNrYiBjb250YWlucyBoc3JfZXRoaGRyICovXFxuLVxcdFxcdGlmIChza2ItXFx1MDAzZW1hY19sZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IGhzcl9ldGhoZHIpKVxcbitcXHRcXHRib29sIHBycF9zdXA7XFxuK1xcbitcXHRcXHQvKiBBIFBSUCBzdXBlcnZpc2lvbiBmcmFtZSBpcyBhbiB1bnRhZ2dlZCBFVEhfUF9QUlAgZnJhbWVcXG4rXFx0XFx0ICogKG1hY19sZW4gPT0gRVRIX0hMRU4pOyBpdHMgUkNUIGlzIGFwcGVuZGVkIG9ubHkgb24gZWdyZXNzLlxcbitcXHRcXHQgKiBIU1IgKEVUSF9QX0hTUikgc3VwZXJ2aXNpb24gaXMgZnJvbnQtdGFnZ2VkIGFuZCBzdGlsbCBtdXN0XFxuK1xcdFxcdCAqIGNvbnRhaW4gYSBzdHJ1Y3QgaHNyX2V0aGhkci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBycF9zdXAgPSBoc3ItXFx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICBldGhoZHItXFx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSBcXHUwMDI2XFx1MDAyNiBpc19zdXA7XFxuK1xcbitcXHRcXHRpZiAoIXBycF9zdXAgXFx1MDAyNlxcdTAwMjYgc2tiLVxcdTAwM2VtYWNfbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJjdCA9IHNrYl9nZXRfUFJQX3JjdChza2IpO1xcbkBAIC0zODEsNiArMzkwLDcgQEAgdm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbiBcXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XFxuIFxcdHVuc2lnbmVkIGludCB0b3RhbF9wdWxsX3NpemUgPSAwO1xcbiBcXHR1bnNpZ25lZCBpbnQgcHVsbF9zaXplID0gMDtcXG4rXFx0dW5zaWduZWQgaW50IHNlcV9wb3J0X2NudDtcXG4gXFx0dW5zaWduZWQgbG9uZyBpZHg7XFxuIFxcdGludCBpO1xcbiBcXG5AQCAtNDc0LDYgKzQ4NCw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRzZXFfcG9ydF9jbnQgPSBtaW4obm9kZV9yZWFsLVxcdTAwM2VzZXFfcG9ydF9jbnQsIG5vZGVfY3Vyci1cXHUwMDNlc2VxX3BvcnRfY250KTtcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNm5vZGVfY3Vyci1cXHUwMDNlc2VxX2Jsb2NrcywgaWR4LCBzcmNfYmxrKSB7XFxuIFxcdFxcdGlmIChoc3Jfc2VxX2Jsb2NrX2lzX29sZChzcmNfYmxrKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTQ4Miw3ICs0OTMsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuIFxcdFxcdGlmICghbWVyZ2VfYmxrKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0bWVyZ2VfYmxrLVxcdTAwM2V0aW1lID0gbWluKG1lcmdlX2Jsay1cXHUwMDNldGltZSwgc3JjX2Jsay1cXHUwMDNldGltZSk7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBub2RlX3JlYWwtXFx1MDAzZXNlcV9wb3J0X2NudDsgaSsrKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzZXFfcG9ydF9jbnQ7IGkrKykge1xcbiBcXHRcXHRcXHRiaXRtYXBfb3IobWVyZ2VfYmxrLVxcdTAwM2VzZXFfbnJzW2ldLCBtZXJnZV9ibGstXFx1MDAzZXNlcV9ucnNbaV0sXFxuIFxcdFxcdFxcdFxcdCAgc3JjX2Jsay1cXHUwMDNlc2VxX25yc1tpXSwgSFNSX1NFUV9CTE9DS19TSVpFKTtcXG4gXFx0XFx0fVxcbkBAIC02NDksOSArNjYwLDEzIEBAIGludCBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4gXFx0aWYgKGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qIGZvciBQUlAgd2Ugc2hvdWxkIG9ubHkgZm9yd2FyZCBmcmFtZXMgZnJvbSB0aGUgc2xhdmUgcG9ydHNcXG4tXFx0ICogdG8gdGhlIG1hc3RlciBwb3J0XFxuK1xcdC8qIFJlZEJveDogZm9yd2FyZCBMQU4gZnJhbWVzIG91dCB0aGUgaW50ZXJsaW5rIHRvIGEgU0FOLCBkZWR1cGluZyB0aGVcXG4rXFx0ICogdHdvIExBTiBjb3BpZXMgb24gYSBkZWRpY2F0ZWQgc2xvdC5cXG4gXFx0ICovXFxuK1xcdGlmIChwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXFxuK1xcdFxcdHJldHVybiBoc3JfY2hlY2tfZHVwbGljYXRlKGZyYW1lLCAxKTtcXG4rXFxuK1xcdC8qIEZvciBQUlAgb25seSBzbGF2ZS10by1tYXN0ZXIgZnJhbWVzIGFyZSBmb3J3YXJkZWQuICovXFxuIFxcdGlmIChwb3J0LVxcdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaCBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmhcXG5pbmRleCBjNjVlY2I5MjU3MzQ4OS4uMTI3YTNmYjY0ZDVmMDMgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxcbisrKyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmhcXG5AQCAtMjcsNiArMjcsOCBAQCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8ge1xcbiBcXHRib29sIGlzX2xvY2FsX2Rlc3Q7XFxuIFxcdGJvb2wgaXNfbG9jYWxfZXhjbHVzaXZlO1xcbiBcXHRib29sIGlzX2Zyb21fc2FuO1xcbitcXHRib29sIGRzdF9pbl9ub2RlX2RiO1xcbitcXHRib29sIGRzdF9pbl9wcm94eV9ub2RlX2RiO1xcbiB9O1xcbiBcXG4gdm9pZCBoc3JfZGVsX3NlbGZfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcik7XFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX21haW4uaCBiL25ldC9oc3IvaHNyX21haW4uaFxcbmluZGV4IDEzNGU0ZjNmZmY2MDM2Li41M2U5NWJhZTBlZTI3NiAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9tYWluLmhcXG4rKysgYi9uZXQvaHNyL2hzcl9tYWluLmhcXG5AQCAtMjExLDcgKzIxMSw3IEBAIHN0cnVjdCBoc3JfcHJpdiB7XFxuIFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRib29sIGZ3ZF9vZmZsb2FkZWQ7XFx0LyogRm9yd2FyZGluZyBvZmZsb2FkZWQgdG8gSFcgKi9cXG4gXFx0Ym9vbCByZWRib3g7ICAgICAgICAgICAgLyogRGV2aWNlIHN1cHBvcnRzIEhTUiBSZWRCb3ggKi9cXG4tXFx0dW5zaWduZWQgY2hhclxcdFxcdG1hY2FkZHJlc3NfcmVkYm94W0VUSF9BTEVOXTtcXG4rXFx0dW5zaWduZWQgY2hhclxcdFxcdG1hY2FkZHJlc3NfcmVkYm94W0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpO1xcbiBcXHR1bnNpZ25lZCBjaGFyXFx0XFx0c3VwX211bHRpY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpO1xcbiBcXHRcXHRcXHRcXHQvKiBBbGlnbiB0byB1MTYgYm91bmRhcnkgdG8gYXZvaWQgdW5hbGlnbmVkIGFjY2Vzc1xcbiBcXHRcXHRcXHRcXHQgKiBpbiBldGhlcl9hZGRyX2VxdWFsXFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX25ldGxpbmsuYyBiL25ldC9oc3IvaHNyX25ldGxpbmsuY1xcbmluZGV4IDgwOTlmMjA2OWE3NDhlLi44ODk0MGU4MDE0YjI0ZiAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcXG4rKysgYi9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcXG5AQCAtMTIxLDE0ICsxMjEsOCBAQCBzdGF0aWMgaW50IGhzcl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApIHtcXG4rXFx0aWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApXFxuIFxcdFxcdHByb3RvX3ZlcnNpb24gPSBQUlBfVjE7XFxuLVxcdFxcdGlmIChpbnRlcmxpbmspIHtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSXFxcIik7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4gXFxuIFxcdHJldHVybiBoc3JfZGV2X2ZpbmFsaXplKGRldiwgbGluaywgaW50ZXJsaW5rLCBtdWx0aWNhc3Rfc3BlYyxcXG4gXFx0XFx0XFx0XFx0cHJvdG9fdmVyc2lvbiwgZXh0YWNrKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMjE1MGU0ODdhYzdkN2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG5AQCAtNCw2ICs0LDcgQEAgdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXFxuIFxcbiBURVNUX1BST0dTIDo9IFxcXFxcXG4gXFx0aHNyX3Bpbmcuc2ggXFxcXFxcbitcXHRoc3JfcHJwX3JlZGJveC5zaCBcXFxcXFxuIFxcdGhzcl9yZWRib3guc2ggXFxcXFxcbiBcXHRsaW5rX2ZhdWx0cy5zaCBcXFxcXFxuIFxcdHBycF9waW5nLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NzljODkyMjI1YjFmM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoXFxuQEAgLTAsMCArMSw5OSBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBUZXN0IGEgUFJQIFJlZEJveCAoUFJQLVNBTik6IGEgU0FOIHRoYXQgc2l0cyBiZWhpbmQgdGhlIGludGVybGluayBwb3J0IG11c3RcXG4rIyByZWFjaCwgYW5kIGJlIHJlYWNoZWQgYnksIGEgcGVlciBEQU5QIG9uIHRoZSBQUlAgbmV0d29yayB3aXRoIGl0cyBvd24gTUFDXFxuKyMgcHJlc2VydmVkIG9uIHRoZSB3aXJlLCBhbmQgdGhlIFJlZEJveCBtdXN0IGFubm91bmNlIHRoZSBTQU4gd2l0aCBhIFJlZEJveC1NQUNcXG4rIyBUTFYgKHRlcm1pbmF0ZWQgYnkgYW4gRU9UIG1hcmtlcikgaW4gaXRzIFBSUCBzdXBlcnZpc2lvbiBmcmFtZXMuXFxuKyNcXG4rIyAgIFJCICAgIFBSUCBSZWRCb3g6IHBycDAgb3ZlciByYl9hL3JiX2IgKExBTiBBL0IpICsgaW50ZXJsaW5rIHJiX2lsXFxuKyMgICBQRUVSICBwZWVyIERBTlAgOiBwcnAwIG92ZXIgcGVfYS9wZV9iLCAxMDAuNjQuMC4yXFxuKyMgICBTQU4gICBTQU4gICAgICAgOiBzYW5faWwsIG93biBNQUMsIDEwMC42NC4wLjUxIChiZWhpbmQgdGhlIGludGVybGluaylcXG4rXFxuK2lwdjY9ZmFsc2VcXG4rXFxuK3NvdXJjZSAuL2hzcl9jb21tb24uc2hcXG4rXFxuK2NoZWNrX3ByZXJlcXVpc2l0ZXNcXG4rXFxuK2lmICEgY29tbWFuZCAtdiB0Y3BkdW1wIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MTsgdGhlblxcbitcXHRlY2hvIFxcXCJTS0lQOiBUaGlzIHRlc3QgcmVxdWlyZXMgdGNwZHVtcFxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK2ZpXFxuK1xcbitpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlxcdTAwM2VcXHUwMDI2MSB8IGdyZXAgLXEgaW50ZXJsaW5rOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IGlwcm91dGUyIHRvbyBvbGQgKG5vIGhzciBpbnRlcmxpbmsgc3VwcG9ydClcXFwiXFxuK1xcdGV4aXQgJGtzZnRfc2tpcFxcbitmaVxcbitcXG4rc2V0dXBfbnMgUkIgUEVFUiBTQU5cXG4rdHJhcCAnY2xlYW51cF9ucyBcXFwiJFJCXFxcIiBcXFwiJFBFRVJcXFwiIFxcXCIkU0FOXFxcIicgRVhJVFxcbitcXG4raXAgbGluayBhZGQgcmJfYSBuZXRucyBcXFwiJFJCXFxcIiB0eXBlIHZldGggcGVlciBuYW1lIHBlX2EgbmV0bnMgXFxcIiRQRUVSXFxcIlxcbitpcCBsaW5rIGFkZCByYl9iIG5ldG5zIFxcXCIkUkJcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYiBuZXRucyBcXFwiJFBFRVJcXFwiXFxuK2lwIGxpbmsgYWRkIHJiX2lsIG5ldG5zIFxcXCIkUkJcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgc2FuX2lsIG5ldG5zIFxcXCIkU0FOXFxcIlxcbitcXG4raXAgLW4gXFxcIiRSQlxcXCIgICBsaW5rIHNldCByYl9hIHVwXFxuK2lwIC1uIFxcXCIkUkJcXFwiICAgbGluayBzZXQgcmJfYiB1cFxcbitpcCAtbiBcXFwiJFJCXFxcIiAgIGxpbmsgc2V0IHJiX2lsIHVwXFxuK2lwIC1uIFxcXCIkUEVFUlxcXCIgbGluayBzZXQgcGVfYSB1cFxcbitpcCAtbiBcXFwiJFBFRVJcXFwiIGxpbmsgc2V0IHBlX2IgdXBcXG4raXAgLW4gXFxcIiRTQU5cXFwiICBsaW5rIHNldCBzYW5faWwgdXBcXG4raXAgLW4gXFxcIiRTQU5cXFwiICBhZGRyIGFkZCAxMDAuNjQuMC41MS8yNCBkZXYgc2FuX2lsXFxuK1xcbisjIEZlYXR1cmUgZ2F0ZTogUFJQIGludGVybGluayAoUmVkQm94KSBjcmVhdGlvbi4gQSBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94XFxuKyMgc3VwcG9ydCByZWplY3RzIHRoaXMgd2l0aCAtRUlOVkFMLCBzbyBTS0lQIHJhdGhlciB0aGFuIEZBSUwuXFxuK2lmICEgaXAgLW4gXFxcIiRSQlxcXCIgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSByYl9hIHNsYXZlMiByYl9iIFxcXFxcXG4rICAgICBpbnRlcmxpbmsgcmJfaWwgcHJvdG8gMSAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRlY2hvIFxcXCJTS0lQOiBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94IChpbnRlcmxpbmspIHN1cHBvcnRcXFwiXFxuK1xcdGV4aXQgJGtzZnRfc2tpcFxcbitmaVxcbitpcCAtbiBcXFwiJFJCXFxcIiAgIGxpbmsgc2V0IHBycDAgdXBcXG4raXAgLW4gXFxcIiRQRUVSXFxcIiBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHBlX2Egc2xhdmUyIHBlX2IgcHJvdG8gMVxcbitpcCAtbiBcXFwiJFBFRVJcXFwiIGxpbmsgc2V0IHBycDAgdXBcXG4raXAgLW4gXFxcIiRQRUVSXFxcIiBhZGRyIGFkZCAxMDAuNjQuMC4yLzI0IGRldiBwcnAwXFxuK3NsZWVwIDFcXG4rXFxuK3Nhbl9tYWM9JChpcCAtbiBcXFwiJFNBTlxcXCIgLWJyIGxpbmsgc2hvdyBzYW5faWwgfCBhd2sgJ3twcmludCAkM30nKVxcbityYl9tYWM9JChpcCAtbiBcXFwiJFJCXFxcIiAtYnIgbGluayBzaG93IHJiX2lsIHwgYXdrICd7cHJpbnQgJDN9JylcXG4rXFxuKyMgQmlkaXJlY3Rpb25hbCB1bmljYXN0IGFjcm9zcyB0aGUgaW50ZXJsaW5rLlxcbitkb19waW5nIFxcXCIkUEVFUlxcXCIgMTAwLjY0LjAuNTFcXG4rZG9fcGluZyBcXFwiJFNBTlxcXCIgIDEwMC42NC4wLjJcXG4rc3RvcF9pZl9lcnJvciBcXFwiUFJQIFJlZEJveCBiaWRpcmVjdGlvbmFsIHVuaWNhc3QgZmFpbGVkXFxcIlxcbitcXG4rIyBUaGUgU0FOIHNvdXJjZSBNQUMgbXVzdCBiZSBwcmVzZXJ2ZWQgb24gdGhlIFBSUCBuZXR3b3JrLCBub3QgbGF1bmRlcmVkIHRvIHRoZVxcbisjIFJlZEJveCBNQUM6IHRoZSBwZWVyIHJlc29sdmVzIHRoZSBTQU4gSVAgdG8gdGhlIFNBTidzIG93biBNQUMuXFxuK25laWdoPSQoaXAgLW4gXFxcIiRQRUVSXFxcIiBuZWlnaCBzaG93IDEwMC42NC4wLjUxIHwgYXdrICd7cHJpbnQgJDV9JylcXG4raWYgWyBcXFwiJG5laWdoXFxcIiAhPSBcXFwiJHNhbl9tYWNcXFwiIF07IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0FOIE1BQyBwcmVzZXJ2YXRpb24gWyBGQUlMIF06IHBlZXIgcmVzb2x2ZWQgMTAwLjY0LjAuNTEgdG9cXFwiIFxcXFxcXG4rXFx0ICAgICBcXFwiJyRuZWlnaCcsIGV4cGVjdGVkICRzYW5fbWFjXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdHJldD0xXFxuK2ZpXFxuK3N0b3BfaWZfZXJyb3IgXFxcIlNBTiBNQUMgbm90IHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmtcXFwiXFxuK1xcbisjIFRoZSBwcm94eS1hbm5vdW5jZSBzdXBlcnZpc2lvbiBmcmFtZSBtdXN0IGNhcnJ5LCBpbiBvcmRlciwgdGhlIGxpZmUtY2hlY2sgVExWXFxuKyMgKHR5cGUgMHgxNCwgbGVuIDYpICsgTWFjQWRkcmVzc0EgPT0gU0FOIE1BQyArIHRoZSBSZWRCb3gtTUFDIFRMViAodHlwZSAweDFlLFxcbisjIGxlbiA2KSArIE1hY0FkZHJlc3NSZWRCb3ggPT0gUmVkQm94IE1BQyArIHRoZSBFT1QgbWFya2VyICgweDAwMDApLlxcbitpcCBuZXRucyBleGVjIFxcXCIkU0FOXFxcIiBwaW5nIC1pIDAuMiAtcSAxMDAuNjQuMC4yIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDI2XFxuK3BpbmdfcGlkPSQhXFxuK2NhcD0kKGlwIG5ldG5zIGV4ZWMgXFxcIiRQRUVSXFxcIiB0aW1lb3V0IDUgdGNwZHVtcCAtaSBwZV9hIC1ubiAteCBcXFxcXFxuK1xcdFxcXCJldGhlciBwcm90byAweDg4ZmIgYW5kIGV0aGVyIHNyYyAkcmJfbWFjXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlKVxcbitraWxsIFxcXCIkcGluZ19waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcXG4rd2FpdCBcXFwiJHBpbmdfcGlkXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXFxuK1xcbitzYW5faGV4PSQoZWNobyBcXFwiJHNhbl9tYWNcXFwiIHwgdHIgLWQgJzonKVxcbityYl9oZXg9JChlY2hvIFxcXCIkcmJfbWFjXFxcIiB8IHRyIC1kICc6JylcXG4rIyBSZWFzc2VtYmxlIGNvbnRpZ3VvdXMgZnJhbWUgaGV4OiBkcm9wIHRoZSBcXFwiMHgwMDEwOlxcXCIgb2Zmc2V0IGxhYmVscyBhbmQgc3BhY2VzLlxcbitmcmFtZV9oZXg9JChlY2hvIFxcXCIkY2FwXFxcIiB8IGF3ayAnL15bWzpzcGFjZTpdXSoweFswLTlhLWZdKzovIHtcXG4rXFx0c3ViKC9eW1s6c3BhY2U6XV0qMHhbMC05YS1mXSs6W1s6c3BhY2U6XV0qLywgXFxcIlxcXCIpO1xcbitcXHRnc3ViKC8gLywgXFxcIlxcXCIpOyBwcmludGYgXFxcIiVzXFxcIiwgJDAgfScpXFxuK2lmICEgZWNobyBcXFwiJGZyYW1lX2hleFxcXCIgfCBncmVwIC1xIFxcXCIxNDA2JHtzYW5faGV4fTFlMDYke3JiX2hleH0wMDAwXFxcIjsgdGhlblxcbitcXHRlY2hvIFxcXCJzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMViBbIEZBSUwgXTogbWlzc2luZyBTQU4gTUFDLCBUeXBlLTMwXFxcIiBcXFxcXFxuK1xcdCAgICAgXFxcInBheWxvYWQsIG9yIEVPVFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRyZXQ9MVxcbitmaVxcbitzdG9wX2lmX2Vycm9yIFxcXCJQUlAgUmVkQm94IHN1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWL0VPVCBjaGVjayBmYWlsZWRcXFwiXFxuK1xcbitlY2hvIFxcXCJJTkZPOiBQUlAgUmVkQm94IChQUlAtU0FOKSBjb25mb3JtYW5jZSBjaGVja3MgcGFzc2VkXFxcIlxcbitleGl0ICRyZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDA6Mzc6MjYuMjY2NjM3NTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMDc2NTY1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lXCIsXG4gICAgXCJwcnBfZHJvcF9mcmFtZVwiLFxuICAgIFwiaHNyX2Ryb3BfZnJhbWVcIixcbiAgICBcImZpbGxfZnJhbWVfaW5mb1wiLFxuICAgIFwiaHNyX2FkZF9ub2RlXCIsXG4gICAgXCJoc3JfZ2V0X25vZGVcIixcbiAgICBcImhzcl9oYW5kbGVfc3VwX2ZyYW1lXCIsXG4gICAgXCJwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0XCIsXG4gICAgXCJoc3JfbmV3bGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciBQUlAgKFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wpIFJlZEJveCAoaW50ZXJsaW5rKS4gVGhpcyBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIHBhY2tldCBmb3J3YXJkaW5nLCBkcm9wcGluZyBsb2dpYywgbm9kZSBtYW5hZ2VtZW50LCBhbmQgc3VwZXJ2aXNpb24gZnJhbWUgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM1MGJkMDBlMWI1Y2JjZTY5MmY3OWYxNWY0NzI4OGMzZjhhY2E1ZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMDozNzoyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4wOTczZjlhOTRmNGQ0OCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4rKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTM3MiwxMCArMzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIHtcbiBcdHN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLVx1MDAzZWhzcjtcbiBcdHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQgKmhzcl9zcDtcbitcdHN0cnVjdCBoc3Jfc3VwX3RsdiAqaHNyX3N0bHY7XG4gXHRzdHJ1Y3QgaHNyX3N1cF90YWcgKmhzcl9zdGFnO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGJvb2wgcmVkYm94X3Byb3h5O1xuK1x0aW50IGV4dHJhID0gMDtcbiBcbi1cdHNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIDApO1xuK1x0cmVkYm94X3Byb3h5ID0gaHNyLVx1MDAzZXJlZGJveCBcdTAwMjZcdTAwMjYgbWFzdGVyLVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSztcbitcbitcdC8qIEEgcHJveHktYW5ub3VuY2UgY2FycmllcyBhIFJlZEJveC1NQUMgVExWIGFuZCBhbiBFT1QgbWFya2VyLiAqL1xuK1x0aWYgKHJlZGJveF9wcm94eSlcbitcdFx0ZXh0cmEgPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSArXG4rXHRcdFx0c2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpICtcbitcdFx0XHRzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KTtcbitcbitcdHNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIGV4dHJhKTtcbiBcdGlmICghc2tiKSB7XG4gXHRcdG5ldGRldl93YXJuX29uY2UobWFzdGVyLVx1MDAzZWRldiwgXCJQUlA6IENvdWxkIG5vdCBzZW5kIHN1cGVydmlzaW9uIGZyYW1lXFxuXCIpO1xuIFx0XHRyZXR1cm47XG5AQCAtMzkzLDkgKzQwNCwyNSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG4tXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSAqL1xuK1x0LyogUGF5bG9hZDogTWFjQWRkcmVzc0EsIHRoZSBhbm5vdW5jZWQgbm9kZS4gKi9cbiBcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xuLVx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIGFkZHIpO1xuK1xuK1x0LyogUHJveHktYW5ub3VuY2U6IGFwcGVuZCB0aGUgUmVkQm94LU1BQyBUTFYgKFR5cGUgMzApIGFuZCBhbiBleHBsaWNpdFxuK1x0ICogRU9UIHRvIHRlcm1pbmF0ZSB0aGUgVExWIGNoYWluIGJlZm9yZSB6ZXJvIHBhZGRpbmcuXG4rXHQgKi9cbitcdGlmIChyZWRib3hfcHJveHkpIHtcbitcdFx0aHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpO1xuK1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX3R5cGUgPSBQUlBfVExWX1JFREJPWF9NQUM7XG4rXHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuK1xuK1x0XHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbitcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XG4rXG4rXHRcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcbitcdFx0aHNyX3N0bHYtXHUwMDNlSFNSX1RMVl90eXBlID0gSFNSX1RMVl9FT1Q7XG4rXHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfbGVuZ3RoID0gMDtcbitcdH1cbiBcbiBcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbkBAIC03NjgsNiArNzk1LDE1IEBAIGludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sXG4gXHQvKiBNYWtlIHN1cmUgdGhlIDFzdCBjYWxsIHRvIG5ldGlmX2NhcnJpZXJfb24oKSBnZXRzIHRocm91Z2ggKi9cbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKGhzcl9kZXYpO1xuIFxuK1x0LyogUHVibGlzaCB0aGUgUmVkQm94IHN0YXRlIGJlZm9yZSBhbnkgcG9ydCBpcyBhdHRhY2hlZDogdGhlIHJ4XG4rXHQgKiBoYW5kbGVycyBhcmUgbGl2ZSBmcm9tIGhzcl9hZGRfcG9ydCgpIG9uLCBhbmQgaHNyX2FkZF9ub2RlKClcbitcdCAqIHNpemVzIGVhY2ggbm9kZSdzIHBlci1wb3J0IHNlcXVlbmNlIHN0YXRlIGZyb20gaHNyLVx1MDAzZXJlZGJveC5cbitcdCAqL1xuK1x0aWYgKGludGVybGluaykge1xuK1x0XHRoc3ItXHUwMDNlcmVkYm94ID0gdHJ1ZTtcbitcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCwgaW50ZXJsaW5rLVx1MDAzZWRldl9hZGRyKTtcbitcdH1cbitcbiBcdHJlcyA9IGhzcl9hZGRfcG9ydChoc3IsIGhzcl9kZXYsIEhTUl9QVF9NQVNURVIsIGV4dGFjayk7XG4gXHRpZiAocmVzKVxuIFx0XHRnb3RvIGVycl9hZGRfbWFzdGVyO1xuQEAgLTgwNSw4ICs4NDEsNiBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxuIFx0XHRpZiAocmVzKVxuIFx0XHRcdGdvdG8gZXJyX3VucmVnaXN0ZXI7XG4gXG4tXHRcdGhzci1cdTAwM2VyZWRib3ggPSB0cnVlO1xuLVx0XHRldGhlcl9hZGRyX2NvcHkoaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94LCBpbnRlcmxpbmstXHUwMDNlZGV2X2FkZHIpO1xuIFx0XHRtb2RfdGltZXIoXHUwMDI2aHNyLVx1MDAzZXBydW5lX3Byb3h5X3RpbWVyLFxuIFx0XHRcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUFJVTkVfUFJPWFlfUEVSSU9EKSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5pbmRleCAwNzc0OTgxYTY1YzE2NC4uNzczNGE1MjFhOTZjMjMgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTQ0MCwxMiArNDQwLDM0IEBAIHN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0cmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7XG4gfVxuIFxuK3N0YXRpYyBib29sIHBycF9pc19sYW5fZHVwKGVudW0gaHNyX3BvcnRfdHlwZSByeCwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuK3tcbitcdHJldHVybiAocnggPT0gSFNSX1BUX1NMQVZFX0EgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHxcbitcdCAgICAgICAocnggPT0gSFNSX1BUX1NMQVZFX0IgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSk7XG4rfVxuK1xuIGJvb2wgcHJwX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIHtcbi1cdHJldHVybiAoKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgXHUwMDI2XHUwMDI2XG4tXHRcdCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8XG4tXHRcdChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CIFx1MDAyNlx1MDAyNlxuLVx0XHQgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKSk7XG4rXHRlbnVtIGhzcl9wb3J0X3R5cGUgcnggPSBmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlO1xuK1xuK1x0LyogU3VwZXJ2aXNpb24gZnJhbWVzIGFyZSBub3QgZGVsaXZlcmVkIHRvIGEgU0FOIG9uIHRoZSBpbnRlcmxpbmsuICovXG4rXHRpZiAoZnJhbWUtXHUwMDNlaXNfc3VwZXJ2aXNpb24gXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGlmIChwcnBfaXNfbGFuX2R1cChyeCwgcG9ydCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0LyogTEFOIHRvIGludGVybGluazoga2VlcCBQUlAtbmV0d29yayB1bmljYXN0IG9mZiB0aGUgU0FOIHNlZ21lbnQuICovXG4rXHRpZiAoKHJ4ID09IEhTUl9QVF9TTEFWRV9BIHx8IHJ4ID09IEhTUl9QVF9TTEFWRV9CKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcbitcdFx0cmV0dXJuIGZyYW1lLVx1MDAzZWRzdF9pbl9ub2RlX2RiO1xuK1xuK1x0LyogSW50ZXJsaW5rIHRvIExBTjoga2VlcCBTQU4tdG8tU0FOIHVuaWNhc3QgbG9jYWwuICovXG4rXHRpZiAoKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSB8fCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHJ4ID09IEhTUl9QVF9JTlRFUkxJTkspXG4rXHRcdHJldHVybiBmcmFtZS1cdTAwM2Vkc3RfaW5fcHJveHlfbm9kZV9kYjtcbitcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5AQCAtNDUzLDcgKzQ3NSw3IEBAIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfRldEKVxuLVx0XHRyZXR1cm4gcHJwX2Ryb3BfZnJhbWUoZnJhbWUsIHBvcnQpO1xuK1x0XHRyZXR1cm4gcHJwX2lzX2xhbl9kdXAoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSwgcG9ydCk7XG4gXG4gXHQvKiBSZWRCb3ggc3BlY2lmaWMgZnJhbWVzIGRyb3BwaW5nIHBvbGljaWVzXG4gXHQgKlxuQEAgLTQ2Niw3ICs0ODgsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIGFyZSBhZGRyZXNzZWQgdG8gaW50ZXJsaW5rIHBvcnQgKGFuZCBhcmUgaW4gdGhlIFByb3h5Tm9kZVRhYmxlKS5cbiBcdCAqL1xuIFx0c2tiID0gZnJhbWUtXHUwMDNlc2tiX2hzcjtcbi1cdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KSBcdTAwMjZcdTAwMjZcbitcdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9pc19sYW5fZHVwKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUsIHBvcnQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlzX3VuaWNhc3RfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICBoc3JfaXNfbm9kZV9pbl9kYihcdTAwMjZwb3J0LVx1MDAzZWhzci1cdTAwM2Vwcm94eV9ub2RlX2RiLFxuIFx0XHRcdCAgICAgIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QpKSB7XG5AQCAtNzA2LDYgKzcyOCwxOCBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0ZnJhbWUtXHUwMDNlaXNfdmxhbiA9IGZhbHNlO1xuIFx0cHJvdG8gPSBldGhoZHItXHUwMDNlaF9wcm90bztcbiBcbitcdC8qIFBSUCBSZWRCb3ggb25seTogY2xhc3NpZnkgdGhlIHVuaWNhc3QgZGVzdGluYXRpb24gb25jZSBzbyB0aGVcbitcdCAqIHBlci1lZ3Jlc3MtcG9ydCBkZWNpc2lvbiBpbiBwcnBfZHJvcF9mcmFtZSgpIHN0YXlzIE8oMSkuIEhTUiBSZWRCb3hcbitcdCAqIGRvZXMgaXRzIG93biBjbGFzc2lmaWNhdGlvbiBhbmQgbXVzdCBub3QgcGF5IHRoZXNlIG5vZGUtdGFibGUgd2Fsa3MuXG4rXHQgKi9cbitcdGlmIChoc3ItXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSBcdTAwMjZcdTAwMjYgaHNyLVx1MDAzZXJlZGJveCBcdTAwMjZcdTAwMjZcbitcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoaGRyLVx1MDAzZWhfZGVzdCkpIHtcbitcdFx0ZnJhbWUtXHUwMDNlZHN0X2luX25vZGVfZGIgPVxuK1x0XHRcdGhzcl9pc19ub2RlX2luX2RiKFx1MDAyNmhzci1cdTAwM2Vub2RlX2RiLCBldGhoZHItXHUwMDNlaF9kZXN0KTtcbitcdFx0ZnJhbWUtXHUwMDNlZHN0X2luX3Byb3h5X25vZGVfZGIgPVxuK1x0XHRcdGhzcl9pc19ub2RlX2luX2RiKFx1MDAyNmhzci1cdTAwM2Vwcm94eV9ub2RlX2RiLCBldGhoZHItXHUwMDNlaF9kZXN0KTtcbitcdH1cbitcbiBcdGlmIChwcm90byA9PSBodG9ucyhFVEhfUF84MDIxUSkpXG4gXHRcdGZyYW1lLVx1MDAzZWlzX3ZsYW4gPSB0cnVlO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmMgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG5pbmRleCBlNDQ5Mjk4NzEyNzQ0NS4uYjNiMTA2YmU2OTJlYWYgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG4rKysgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG5AQCAtMTk5LDcgKzE5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHNyX25vZGUgKmhzcl9hZGRfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcixcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5ld19ub2RlLVx1MDAzZXNlcV9vdXRfbG9jayk7XG4gXG4gXHRpZiAoaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEpXG4tXHRcdG5ld19ub2RlLVx1MDAzZXNlcV9wb3J0X2NudCA9IDE7XG4rXHRcdG5ld19ub2RlLVx1MDAzZXNlcV9wb3J0X2NudCA9IGhzci1cdTAwM2VyZWRib3ggPyAyIDogMTtcbiBcdGVsc2VcbiBcdFx0bmV3X25vZGUtXHUwMDNlc2VxX3BvcnRfY250ID0gSFNSX1BUX1BPUlRTIC0gMTtcbiBcbkBAIC0yOTMsOCArMjkzLDE3IEBAIHN0cnVjdCBoc3Jfbm9kZSAqaHNyX2dldF9ub2RlKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcbiBcdCAqL1xuIFx0aWYgKGV0aGhkci1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1BSUCkgfHxcbiBcdCAgICBldGhoZHItXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9IU1IpKSB7XG4tXHRcdC8qIENoZWNrIGlmIHNrYiBjb250YWlucyBoc3JfZXRoaGRyICovXG4tXHRcdGlmIChza2ItXHUwMDNlbWFjX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSlcbitcdFx0Ym9vbCBwcnBfc3VwO1xuK1xuK1x0XHQvKiBBIFBSUCBzdXBlcnZpc2lvbiBmcmFtZSBpcyBhbiB1bnRhZ2dlZCBFVEhfUF9QUlAgZnJhbWVcbitcdFx0ICogKG1hY19sZW4gPT0gRVRIX0hMRU4pOyBpdHMgUkNUIGlzIGFwcGVuZGVkIG9ubHkgb24gZWdyZXNzLlxuK1x0XHQgKiBIU1IgKEVUSF9QX0hTUikgc3VwZXJ2aXNpb24gaXMgZnJvbnQtdGFnZ2VkIGFuZCBzdGlsbCBtdXN0XG4rXHRcdCAqIGNvbnRhaW4gYSBzdHJ1Y3QgaHNyX2V0aGhkci5cbitcdFx0ICovXG4rXHRcdHBycF9zdXAgPSBoc3ItXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgIGV0aGhkci1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1BSUCkgXHUwMDI2XHUwMDI2IGlzX3N1cDtcbitcbitcdFx0aWYgKCFwcnBfc3VwIFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlbWFjX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSlcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH0gZWxzZSB7XG4gXHRcdHJjdCA9IHNrYl9nZXRfUFJQX3JjdChza2IpO1xuQEAgLTM4MSw2ICszOTAsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfcHVsbF9zaXplID0gMDtcbiBcdHVuc2lnbmVkIGludCBwdWxsX3NpemUgPSAwO1xuK1x0dW5zaWduZWQgaW50IHNlcV9wb3J0X2NudDtcbiBcdHVuc2lnbmVkIGxvbmcgaWR4O1xuIFx0aW50IGk7XG4gXG5AQCAtNDc0LDYgKzQ4NCw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdFx0fVxuIFx0fVxuIFxuK1x0c2VxX3BvcnRfY250ID0gbWluKG5vZGVfcmVhbC1cdTAwM2VzZXFfcG9ydF9jbnQsIG5vZGVfY3Vyci1cdTAwM2VzZXFfcG9ydF9jbnQpO1xuIFx0eGFfZm9yX2VhY2goXHUwMDI2bm9kZV9jdXJyLVx1MDAzZXNlcV9ibG9ja3MsIGlkeCwgc3JjX2Jsaykge1xuIFx0XHRpZiAoaHNyX3NlcV9ibG9ja19pc19vbGQoc3JjX2JsaykpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtNDgyLDcgKzQ5Myw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdFx0aWYgKCFtZXJnZV9ibGspXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdG1lcmdlX2Jsay1cdTAwM2V0aW1lID0gbWluKG1lcmdlX2Jsay1cdTAwM2V0aW1lLCBzcmNfYmxrLVx1MDAzZXRpbWUpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBub2RlX3JlYWwtXHUwMDNlc2VxX3BvcnRfY250OyBpKyspIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2VxX3BvcnRfY250OyBpKyspIHtcbiBcdFx0XHRiaXRtYXBfb3IobWVyZ2VfYmxrLVx1MDAzZXNlcV9ucnNbaV0sIG1lcmdlX2Jsay1cdTAwM2VzZXFfbnJzW2ldLFxuIFx0XHRcdFx0ICBzcmNfYmxrLVx1MDAzZXNlcV9ucnNbaV0sIEhTUl9TRVFfQkxPQ0tfU0laRSk7XG4gXHRcdH1cbkBAIC02NDksOSArNjYwLDEzIEBAIGludCBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdGlmIChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogZm9yIFBSUCB3ZSBzaG91bGQgb25seSBmb3J3YXJkIGZyYW1lcyBmcm9tIHRoZSBzbGF2ZSBwb3J0c1xuLVx0ICogdG8gdGhlIG1hc3RlciBwb3J0XG4rXHQvKiBSZWRCb3g6IGZvcndhcmQgTEFOIGZyYW1lcyBvdXQgdGhlIGludGVybGluayB0byBhIFNBTiwgZGVkdXBpbmcgdGhlXG4rXHQgKiB0d28gTEFOIGNvcGllcyBvbiBhIGRlZGljYXRlZCBzbG90LlxuIFx0ICovXG4rXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXG4rXHRcdHJldHVybiBoc3JfY2hlY2tfZHVwbGljYXRlKGZyYW1lLCAxKTtcbitcbitcdC8qIEZvciBQUlAgb25seSBzbGF2ZS10by1tYXN0ZXIgZnJhbWVzIGFyZSBmb3J3YXJkZWQuICovXG4gXHRpZiAocG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmggYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG5pbmRleCBjNjVlY2I5MjU3MzQ4OS4uMTI3YTNmYjY0ZDVmMDMgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG4rKysgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG5AQCAtMjcsNiArMjcsOCBAQCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8ge1xuIFx0Ym9vbCBpc19sb2NhbF9kZXN0O1xuIFx0Ym9vbCBpc19sb2NhbF9leGNsdXNpdmU7XG4gXHRib29sIGlzX2Zyb21fc2FuO1xuK1x0Ym9vbCBkc3RfaW5fbm9kZV9kYjtcbitcdGJvb2wgZHN0X2luX3Byb3h5X25vZGVfZGI7XG4gfTtcbiBcbiB2b2lkIGhzcl9kZWxfc2VsZl9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyKTtcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9tYWluLmggYi9uZXQvaHNyL2hzcl9tYWluLmhcbmluZGV4IDEzNGU0ZjNmZmY2MDM2Li41M2U5NWJhZTBlZTI3NiAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX21haW4uaFxuKysrIGIvbmV0L2hzci9oc3JfbWFpbi5oXG5AQCAtMjExLDcgKzIxMSw3IEBAIHN0cnVjdCBoc3JfcHJpdiB7XG4gXHRcdFx0XHQgKi9cbiBcdGJvb2wgZndkX29mZmxvYWRlZDtcdC8qIEZvcndhcmRpbmcgb2ZmbG9hZGVkIHRvIEhXICovXG4gXHRib29sIHJlZGJveDsgICAgICAgICAgICAvKiBEZXZpY2Ugc3VwcG9ydHMgSFNSIFJlZEJveCAqL1xuLVx0dW5zaWduZWQgY2hhclx0XHRtYWNhZGRyZXNzX3JlZGJveFtFVEhfQUxFTl07XG4rXHR1bnNpZ25lZCBjaGFyXHRcdG1hY2FkZHJlc3NfcmVkYm94W0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpO1xuIFx0dW5zaWduZWQgY2hhclx0XHRzdXBfbXVsdGljYXN0X2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XG4gXHRcdFx0XHQvKiBBbGlnbiB0byB1MTYgYm91bmRhcnkgdG8gYXZvaWQgdW5hbGlnbmVkIGFjY2Vzc1xuIFx0XHRcdFx0ICogaW4gZXRoZXJfYWRkcl9lcXVhbFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX25ldGxpbmsuYyBiL25ldC9oc3IvaHNyX25ldGxpbmsuY1xuaW5kZXggODA5OWYyMDY5YTc0OGUuLjg4OTQwZTgwMTRiMjRmIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfbmV0bGluay5jXG4rKysgYi9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcbkBAIC0xMjEsMTQgKzEyMSw4IEBAIHN0YXRpYyBpbnQgaHNyX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApIHtcbitcdGlmIChwcm90byA9PSBIU1JfUFJPVE9DT0xfUFJQKVxuIFx0XHRwcm90b192ZXJzaW9uID0gUFJQX1YxO1xuLVx0XHRpZiAoaW50ZXJsaW5rKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCJJbnRlcmxpbmsgb25seSB3b3JrcyB3aXRoIEhTUlwiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0fVxuIFxuIFx0cmV0dXJuIGhzcl9kZXZfZmluYWxpemUoZGV2LCBsaW5rLCBpbnRlcmxpbmssIG11bHRpY2FzdF9zcGVjLFxuIFx0XHRcdFx0cHJvdG9fdmVyc2lvbiwgZXh0YWNrKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuaW5kZXggMzFmYjkzMjZjZjUzM2QuLjIxNTBlNDg3YWM3ZDdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuQEAgLTQsNiArNCw3IEBAIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFxuIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4rXHRoc3JfcHJwX3JlZGJveC5zaCBcXFxuIFx0aHNyX3JlZGJveC5zaCBcXFxuIFx0bGlua19mYXVsdHMuc2ggXFxcbiBcdHBycF9waW5nLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDc5Yzg5MjIyNWIxZjNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2hcbkBAIC0wLDAgKzEsOTkgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBUZXN0IGEgUFJQIFJlZEJveCAoUFJQLVNBTik6IGEgU0FOIHRoYXQgc2l0cyBiZWhpbmQgdGhlIGludGVybGluayBwb3J0IG11c3RcbisjIHJlYWNoLCBhbmQgYmUgcmVhY2hlZCBieSwgYSBwZWVyIERBTlAgb24gdGhlIFBSUCBuZXR3b3JrIHdpdGggaXRzIG93biBNQUNcbisjIHByZXNlcnZlZCBvbiB0aGUgd2lyZSwgYW5kIHRoZSBSZWRCb3ggbXVzdCBhbm5vdW5jZSB0aGUgU0FOIHdpdGggYSBSZWRCb3gtTUFDXG4rIyBUTFYgKHRlcm1pbmF0ZWQgYnkgYW4gRU9UIG1hcmtlcikgaW4gaXRzIFBSUCBzdXBlcnZpc2lvbiBmcmFtZXMuXG4rI1xuKyMgICBSQiAgICBQUlAgUmVkQm94OiBwcnAwIG92ZXIgcmJfYS9yYl9iIChMQU4gQS9CKSArIGludGVybGluayByYl9pbFxuKyMgICBQRUVSICBwZWVyIERBTlAgOiBwcnAwIG92ZXIgcGVfYS9wZV9iLCAxMDAuNjQuMC4yXG4rIyAgIFNBTiAgIFNBTiAgICAgICA6IHNhbl9pbCwgb3duIE1BQywgMTAwLjY0LjAuNTEgKGJlaGluZCB0aGUgaW50ZXJsaW5rKVxuK1xuK2lwdjY9ZmFsc2Vcbitcbitzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4rXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xuK1xuK2lmICEgY29tbWFuZCAtdiB0Y3BkdW1wIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IFRoaXMgdGVzdCByZXF1aXJlcyB0Y3BkdW1wXCJcbitcdGV4aXQgJGtzZnRfc2tpcFxuK2ZpXG4rXG4raWYgISBpcCBsaW5rIGhlbHAgaHNyIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtcSBpbnRlcmxpbms7IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBpcHJvdXRlMiB0b28gb2xkIChubyBoc3IgaW50ZXJsaW5rIHN1cHBvcnQpXCJcbitcdGV4aXQgJGtzZnRfc2tpcFxuK2ZpXG4rXG4rc2V0dXBfbnMgUkIgUEVFUiBTQU5cbit0cmFwICdjbGVhbnVwX25zIFwiJFJCXCIgXCIkUEVFUlwiIFwiJFNBTlwiJyBFWElUXG4rXG4raXAgbGluayBhZGQgcmJfYSBuZXRucyBcIiRSQlwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYSBuZXRucyBcIiRQRUVSXCJcbitpcCBsaW5rIGFkZCByYl9iIG5ldG5zIFwiJFJCXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9iIG5ldG5zIFwiJFBFRVJcIlxuK2lwIGxpbmsgYWRkIHJiX2lsIG5ldG5zIFwiJFJCXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzYW5faWwgbmV0bnMgXCIkU0FOXCJcbitcbitpcCAtbiBcIiRSQlwiICAgbGluayBzZXQgcmJfYSB1cFxuK2lwIC1uIFwiJFJCXCIgICBsaW5rIHNldCByYl9iIHVwXG4raXAgLW4gXCIkUkJcIiAgIGxpbmsgc2V0IHJiX2lsIHVwXG4raXAgLW4gXCIkUEVFUlwiIGxpbmsgc2V0IHBlX2EgdXBcbitpcCAtbiBcIiRQRUVSXCIgbGluayBzZXQgcGVfYiB1cFxuK2lwIC1uIFwiJFNBTlwiICBsaW5rIHNldCBzYW5faWwgdXBcbitpcCAtbiBcIiRTQU5cIiAgYWRkciBhZGQgMTAwLjY0LjAuNTEvMjQgZGV2IHNhbl9pbFxuK1xuKyMgRmVhdHVyZSBnYXRlOiBQUlAgaW50ZXJsaW5rIChSZWRCb3gpIGNyZWF0aW9uLiBBIGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3hcbisjIHN1cHBvcnQgcmVqZWN0cyB0aGlzIHdpdGggLUVJTlZBTCwgc28gU0tJUCByYXRoZXIgdGhhbiBGQUlMLlxuK2lmICEgaXAgLW4gXCIkUkJcIiBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHJiX2Egc2xhdmUyIHJiX2IgXFxcbisgICAgIGludGVybGluayByYl9pbCBwcm90byAxIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94IChpbnRlcmxpbmspIHN1cHBvcnRcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rZmlcbitpcCAtbiBcIiRSQlwiICAgbGluayBzZXQgcHJwMCB1cFxuK2lwIC1uIFwiJFBFRVJcIiBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHBlX2Egc2xhdmUyIHBlX2IgcHJvdG8gMVxuK2lwIC1uIFwiJFBFRVJcIiBsaW5rIHNldCBwcnAwIHVwXG4raXAgLW4gXCIkUEVFUlwiIGFkZHIgYWRkIDEwMC42NC4wLjIvMjQgZGV2IHBycDBcbitzbGVlcCAxXG4rXG4rc2FuX21hYz0kKGlwIC1uIFwiJFNBTlwiIC1iciBsaW5rIHNob3cgc2FuX2lsIHwgYXdrICd7cHJpbnQgJDN9JylcbityYl9tYWM9JChpcCAtbiBcIiRSQlwiIC1iciBsaW5rIHNob3cgcmJfaWwgfCBhd2sgJ3twcmludCAkM30nKVxuK1xuKyMgQmlkaXJlY3Rpb25hbCB1bmljYXN0IGFjcm9zcyB0aGUgaW50ZXJsaW5rLlxuK2RvX3BpbmcgXCIkUEVFUlwiIDEwMC42NC4wLjUxXG4rZG9fcGluZyBcIiRTQU5cIiAgMTAwLjY0LjAuMlxuK3N0b3BfaWZfZXJyb3IgXCJQUlAgUmVkQm94IGJpZGlyZWN0aW9uYWwgdW5pY2FzdCBmYWlsZWRcIlxuK1xuKyMgVGhlIFNBTiBzb3VyY2UgTUFDIG11c3QgYmUgcHJlc2VydmVkIG9uIHRoZSBQUlAgbmV0d29yaywgbm90IGxhdW5kZXJlZCB0byB0aGVcbisjIFJlZEJveCBNQUM6IHRoZSBwZWVyIHJlc29sdmVzIHRoZSBTQU4gSVAgdG8gdGhlIFNBTidzIG93biBNQUMuXG4rbmVpZ2g9JChpcCAtbiBcIiRQRUVSXCIgbmVpZ2ggc2hvdyAxMDAuNjQuMC41MSB8IGF3ayAne3ByaW50ICQ1fScpXG4raWYgWyBcIiRuZWlnaFwiICE9IFwiJHNhbl9tYWNcIiBdOyB0aGVuXG4rXHRlY2hvIFwiU0FOIE1BQyBwcmVzZXJ2YXRpb24gWyBGQUlMIF06IHBlZXIgcmVzb2x2ZWQgMTAwLjY0LjAuNTEgdG9cIiBcXFxuK1x0ICAgICBcIickbmVpZ2gnLCBleHBlY3RlZCAkc2FuX21hY1wiIDFcdTAwM2VcdTAwMjYyXG4rXHRyZXQ9MVxuK2ZpXG4rc3RvcF9pZl9lcnJvciBcIlNBTiBNQUMgbm90IHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmtcIlxuK1xuKyMgVGhlIHByb3h5LWFubm91bmNlIHN1cGVydmlzaW9uIGZyYW1lIG11c3QgY2FycnksIGluIG9yZGVyLCB0aGUgbGlmZS1jaGVjayBUTFZcbisjICh0eXBlIDB4MTQsIGxlbiA2KSArIE1hY0FkZHJlc3NBID09IFNBTiBNQUMgKyB0aGUgUmVkQm94LU1BQyBUTFYgKHR5cGUgMHgxZSxcbisjIGxlbiA2KSArIE1hY0FkZHJlc3NSZWRCb3ggPT0gUmVkQm94IE1BQyArIHRoZSBFT1QgbWFya2VyICgweDAwMDApLlxuK2lwIG5ldG5zIGV4ZWMgXCIkU0FOXCIgcGluZyAtaSAwLjIgLXEgMTAwLjY0LjAuMiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4rcGluZ19waWQ9JCFcbitjYXA9JChpcCBuZXRucyBleGVjIFwiJFBFRVJcIiB0aW1lb3V0IDUgdGNwZHVtcCAtaSBwZV9hIC1ubiAteCBcXFxuK1x0XCJldGhlciBwcm90byAweDg4ZmIgYW5kIGV0aGVyIHNyYyAkcmJfbWFjXCIgMlx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlKVxuK2tpbGwgXCIkcGluZ19waWRcIiAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcbit3YWl0IFwiJHBpbmdfcGlkXCIgMlx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXG4rXG4rc2FuX2hleD0kKGVjaG8gXCIkc2FuX21hY1wiIHwgdHIgLWQgJzonKVxuK3JiX2hleD0kKGVjaG8gXCIkcmJfbWFjXCIgfCB0ciAtZCAnOicpXG4rIyBSZWFzc2VtYmxlIGNvbnRpZ3VvdXMgZnJhbWUgaGV4OiBkcm9wIHRoZSBcIjB4MDAxMDpcIiBvZmZzZXQgbGFiZWxzIGFuZCBzcGFjZXMuXG4rZnJhbWVfaGV4PSQoZWNobyBcIiRjYXBcIiB8IGF3ayAnL15bWzpzcGFjZTpdXSoweFswLTlhLWZdKzovIHtcbitcdHN1YigvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0rOltbOnNwYWNlOl1dKi8sIFwiXCIpO1xuK1x0Z3N1YigvIC8sIFwiXCIpOyBwcmludGYgXCIlc1wiLCAkMCB9JylcbitpZiAhIGVjaG8gXCIkZnJhbWVfaGV4XCIgfCBncmVwIC1xIFwiMTQwNiR7c2FuX2hleH0xZTA2JHtyYl9oZXh9MDAwMFwiOyB0aGVuXG4rXHRlY2hvIFwic3VwZXJ2aXNpb24gUmVkQm94LU1BQyBUTFYgWyBGQUlMIF06IG1pc3NpbmcgU0FOIE1BQywgVHlwZS0zMFwiIFxcXG4rXHQgICAgIFwicGF5bG9hZCwgb3IgRU9UXCIgMVx1MDAzZVx1MDAyNjJcbitcdHJldD0xXG4rZmlcbitzdG9wX2lmX2Vycm9yIFwiUFJQIFJlZEJveCBzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMVi9FT1QgY2hlY2sgZmFpbGVkXCJcbitcbitlY2hvIFwiSU5GTzogUFJQIFJlZEJveCAoUFJQLVNBTikgY29uZm9ybWFuY2UgY2hlY2tzIHBhc3NlZFwiXG4rZXhpdCAkcmV0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMDozNzoyNi4yNjY2NDAyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNzU2ODI4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSFNSIFBSUCBSZWRCb3ggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBIU1IgZHJpdmVyIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgZm9yIFBSUCBSZWRCb3ggaW50ZXJsaW5raW5nLiBJIHNlZSBpdCdzIHRvdWNoaW5nIGBoc3JfZGV2aWNlLmNgLCBgaHNyX2ZvcndhcmQuY2AsIGBoc3JfZnJhbWVyZWcuY2AsIGFuZCBgaHNyX25ldGxpbmsuY2AsIHdoaWNoIGlzIHRoZSB0eXBpY2FsIGFyZWEgZm9yIG5ldHdvcmsgZHJpdmVyIG1vZGlmaWNhdGlvbnMsIGFuZCBpbmNsdWRlcyBhIHNlbGZ0ZXN0LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjayByZWxhdGVkIHRvIGhpZ2ggYXZhaWxhYmlsaXR5LiBHaXZlbiB0aGF0IGl0IGRlYWxzIHdpdGggYWRkaW5nIFBSUCBSZWRCb3ggZnVuY3Rpb25hbGl0eSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLiBGdW5jdGlvbnMgbGlrZSBgaHNyX3htaXRgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBhbmQgYHBycF9kcm9wX2ZyYW1lYCBhcmUgZ29pbmcgdG8gYmUgYWZmZWN0ZWQuXG5cblRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhhdCB0aGlzIGRlbWFuZHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSwgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgcGFja2V0IGhhbmRsaW5nLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0byBiZSBoYW5kbGluZyBpbmNvbWluZyBvciBvdXRnb2luZyBmcmFtZXMsIG9yIHdoZXJlIFBSUCBwcm90b2NvbCBsb2dpYyBpcyBpbXBsZW1lbnRlZDpcblxuKiAgIGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWBcbiogICBgaHNyX2Rldl9maW5hbGl6ZWBcbiogICBgcHJwX2Ryb3BfZnJhbWVgXG4qICAgYGhzcl9kcm9wX2ZyYW1lYFxuKiAgIGBmaWxsX2ZyYW1lX2luZm9gXG4qICAgYGhzcl9hZGRfbm9kZWBcbiogICBgaHNyX2dldF9ub2RlYFxuKiAgIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWBcbiogICBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGBcbiogICBgaHNyX25ld2xpbmtgXG5cbkJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGZ1enppbmcsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gdmVyaWZ5IHRoYXQgSFNSIGlzIGVuYWJsZWQgYW5kIHRvIHNlZSBpZiBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpYyB0byBQUlAgaGF2ZSBiZWVuIGludHJvZHVjZWQuIEknbGwgdXNlIGBncmVwcGVyYCB0byBsb29rIGZvciBgQ09ORklHX0hTUmAgYW5kIGFueSByZWxhdGVkIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAwOjM3OjMyLjM0MjMyNDc4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzYwNzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFNSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDA6Mzc6MzIuNDM1OTQwNDU2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1OTkzNjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEhTUiBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGFraW5nIGEgbG9vayBhdCBgbmV0L2hzci9LY29uZmlnYC4gVGhpcyBtZWFucyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IpIHByb3RvY29sIHN1cHBvcnQgd2l0aGluIHRoaXMgc3BlY2lmaWMgbmV0d29yayBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGltcGxlbWVudGVkLCB3aGF0IGtub2JzIGFyZSBhdmFpbGFibGUgdG8gZmluZS10dW5lIGl0cyBiZWhhdmlvciwgYW5kIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlci5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEknbGwgYmUgbG9va2luZyBmb3IgYGNvbmZpZ2AgZW50cmllcywgYG1lbnVjb25maWdgLCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgYHNlbGVjdGAgc3RhdGVtZW50cywgYW5kIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBkZWZpbml0aW9ucyBhbmQgaGVscCB0ZXh0LiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgYXJlYXMgd2hlcmUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gY2hhbmdlcyBtaWdodCByZXF1aXJlIHNwZWNpYWwgY29uc2lkZXJhdGlvbi4gSSdtIGFsc28gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGlzIGEgY29yZSBIU1IgaW1wbGVtZW50YXRpb24gb3IgYW4gZXh0ZW5zaW9uLCBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgbmV0d29ya2luZyBmZWF0dXJlcyAoZS5nLiwgVkxBTnMsIGJyaWRnaW5nLCBRb1MpIGFuZCBoYXJkd2FyZSBwbGF0Zm9ybXMuIEkgbmVlZCB0byBlbnN1cmUgYSBjb3JyZWN0IGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTM1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDA6Mzc6MzYuMzk1ODc5MTI5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDMzNjQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG4tLVxcbm5ldC9oc3IvS2NvbmZpZz00Mj1pZiBIU1JcXG5uZXQvaHNyL0tjb25maWctNDMtXFxubmV0L2hzci9LY29uZmlnOjQ0OmNvbmZpZyBQUlBfRFVQX0RJU0NBUkRfS1VOSVRfVEVTVFxcbm5ldC9oc3IvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiUFJQIGR1cGxpY2F0ZSBkaXNjYXJkIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAwOjM3OjM2LjUyMDIyNTU5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzg0MTE4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIU1IgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgSFNSYCBjb25maWd1cmF0aW9uIGlzIHRoZSBjZW50cmFsIHBpZWNlIGhlcmUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQsIHNvIGxldCdzIHN0YXJ0IHdpdGggdGhvc2UuIEkndmUgZ290IHRvIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmc6IGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAsIGBwcnBfZHJvcF9mcmFtZWAsIGBoc3JfZHJvcF9mcmFtZWAsIGBmaWxsX2ZyYW1lX2luZm9gLCBgaHNyX2FkZF9ub2RlYCwgYGhzcl9nZXRfbm9kZWAsIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAsIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCwgYW5kIGBoc3JfbmV3bGlua2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQsIGJ1dCBpdCBzZWVtcyB0aGVyZSdzIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiwgYHBycF9pc19sYW5fZHVwYCwgYW5kIGEgbW9kaWZpZWQgZnVuY3Rpb24sIGBoc3JfZGV2X2ZpbmFsaXplYCwgdGhhdCBJIG5lZWQgdG8gZmFjdG9yIGluLlxuXG5Ob3csIEknbGwgc3dpdGNoIG15IGZvY3VzIHRvIGBuZXQvaHNyL2hzcl9kZXZpY2UuY2AgdG8gZXhhbWluZSBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMDozNzo0MC40NTg2NDA3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzE3MzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9kZXZpY2UuYz0yOTM9c3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY4LVxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjM2OTpzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNzAtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmludGVydmFsLFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHNyX3Byb3RvX29wcyBwcnBfb3BzID0ge1xcbm5ldC9oc3IvaHNyX2RldmljZS5jOjY1OTpcXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2MC1cXHQuY3JlYXRlX3RhZ2dlZF9mcmFtZSA9IHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMDozNzo0MC41NTE4MTgwNjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU1NDE1MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUFJQIFJlZEJveCBQYXRjaCBhbmQgSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgY2VudGVycyBvbiBpZGVudGlmeWluZyBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBQUlAgUmVkQm94IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIU1IgZHJpdmVyLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIHBpbnBvaW50IHRoZSBiZXN0IGFyZWFzIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCwgYmFzZWQgb24gdGhlIGNvZGUgYW5hbHlzaXMgc28gZmFyLCBhcmU6IGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAsIGBwcnBfZHJvcF9mcmFtZWAsIGBoc3JfZHJvcF9mcmFtZWAsIGBmaWxsX2ZyYW1lX2luZm9gLCBgaHNyX2FkZF9ub2RlYCwgYGhzcl9nZXRfbm9kZWAsIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAsIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCwgYW5kIGBoc3JfbmV3bGlua2AuIEknbGwgd2FudCB0byByZXZpc2l0IHRob3NlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBIU1IgY29uZmlnLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgaW5saW5pbmcgc3RhdHVzIG9mIGBwcnBfaXNfbGFuX2R1cGAsIGFsdGhvdWdoIEkgdGhpbmsgSSBjYW4gYXZvaWQgaXQgYnkganVzdCB1c2luZyB0aGUgYHBycF9kcm9wX2ZyYW1lYCBhbmQgYGhzcl9kcm9wX2ZyYW1lYCBmdW5jdGlvbnMuXG5cblRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhZGRzIHN1cHBvcnQgZm9yIFBSUCBSZWRCb3ggaW50ZXJsaW5rIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGhvdyB0aGUgSFNSIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gVGhlcmVmb3JlLCBpdCdzIGFic29sdXRlbHkgY3J1Y2lhbCB0byBmdXp6IHRoaXMgaW1wbGVtZW50YXRpb24uXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdC4gYGhzcl9uZXdsaW5rYCBhcHBlYXJzIHRvIGJlIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50IGZvciBpbnRlcmZhY2UgY3JlYXRpb24uIGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAgc2VlbXMgdG8gYmUgY2FsbGVkIHBlcmlvZGljYWxseSBvciB0cmlnZ2VyZWQgb24gZGVtYW5kLiAgYHBycF9kcm9wX2ZyYW1lYCBhbmQgYGhzcl9kcm9wX2ZyYW1lYCBhcmUgY3JpdGljYWwgZm9yIHBhY2tldCByZWNlcHRpb24gYW5kIGZvcndhcmRpbmcuIGBmaWxsX2ZyYW1lX2luZm9gIGlzIGFsc28gZGlyZWN0bHkgcmVsYXRlZCB0byByZWNlcHRpb24uIFRoZSBgaHNyX2FkZF9ub2RlYCBhbmQgYGhzcl9nZXRfbm9kZWAgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBpbiB0aGUgbWFuYWdlbWVudCBvZiB0aGUgbm9kZSB0YWJsZSwgZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIEZpbmFsbHksIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAgaGFuZGxlcyB0aGUgc3VwZXJ2aXNpb24gZnJhbWUgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCBpcyBjYWxsZWQgb24gdHJhbnNtaXNzaW9uLlxuXG5ZZXMsIHRoaXMgaXMgYSBzb2xpZCBsaXN0IG9mIHRhcmdldHMuIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGNvdmVycyB0aGUgbW9zdCBjcml0aWNhbCBhcmVhcyBmb3IgZnV6emluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA0NSwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDA6Mzc6NDguMjA3MjM1NzkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1OTYzNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZVwiLFxuICAgIFwicHJwX2Ryb3BfZnJhbWVcIixcbiAgICBcImhzcl9kcm9wX2ZyYW1lXCIsXG4gICAgXCJmaWxsX2ZyYW1lX2luZm9cIixcbiAgICBcImhzcl9hZGRfbm9kZVwiLFxuICAgIFwiaHNyX2dldF9ub2RlXCIsXG4gICAgXCJoc3JfaGFuZGxlX3N1cF9mcmFtZVwiLFxuICAgIFwicHJwX3JlZ2lzdGVyX2ZyYW1lX291dFwiLFxuICAgIFwiaHNyX25ld2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUFJQIChQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sKSBSZWRCb3ggKGludGVybGluaykuIFRoaXMgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBwYWNrZXQgZm9yd2FyZGluZywgZHJvcHBpbmcgbG9naWMsIG5vZGUgbWFuYWdlbWVudCwgYW5kIHN1cGVydmlzaW9uIGZyYW1lIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZVwiLFxuICAgIFwicHJwX2Ryb3BfZnJhbWVcIixcbiAgICBcImhzcl9kcm9wX2ZyYW1lXCIsXG4gICAgXCJmaWxsX2ZyYW1lX2luZm9cIixcbiAgICBcImhzcl9hZGRfbm9kZVwiLFxuICAgIFwiaHNyX2dldF9ub2RlXCIsXG4gICAgXCJoc3JfaGFuZGxlX3N1cF9mcmFtZVwiLFxuICAgIFwicHJwX3JlZ2lzdGVyX2ZyYW1lX291dFwiLFxuICAgIFwiaHNyX25ld2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUFJQIChQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sKSBSZWRCb3ggKGludGVybGluaykuIFRoaXMgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBwYWNrZXQgZm9yd2FyZGluZywgZHJvcHBpbmcgbG9naWMsIG5vZGUgbWFuYWdlbWVudCwgYW5kIHN1cGVydmlzaW9uIGZyYW1lIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvvqrb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-18 00:01:37 +0000 UTC FinishedAt: 2026-07-18 00:37:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "6c683acd-d1c3-4be0-8b5f-4c313b76236b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "send_prp_supervision_frame", "prp_drop_frame", "hsr_drop_frame", "fill_frame_info", "hsr_add_node", "hsr_get_node", "hsr_handle_sup_frame", "prp_register_frame_out", "hsr_newlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAwOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O2ZpbGxfZnJhbWVfaW5mbyYjMzQ7LAogICAgJiMzNDtoc3JfYWRkX25vZGUmIzM0OywKICAgICYjMzQ7aHNyX2dldF9ub2RlJiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfc3VwX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9yZWdpc3Rlcl9mcmFtZV9vdXQmIzM0OywKICAgICYjMzQ7aHNyX25ld2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgZm9yIFBSUCAoUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCkgUmVkQm94IChpbnRlcmxpbmspLiBUaGlzIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gcGFja2V0IGZvcndhcmRpbmcsIGRyb3BwaW5nIGxvZ2ljLCBub2RlIG1hbmFnZW1lbnQsIGFuZCBzdXBlcnZpc2lvbiBmcmFtZSBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0d29yayB0cmFmZmljIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDA6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNTBiZDAwZTFiNWNiY2U2OTJmNzlmMTVmNDcyODhjM2Y4YWNhNWQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMDA6Mzc6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuaW5kZXggNTU1NWI3MWFiMTliNTkuLjA5NzNmOWE5NGY0ZDQ4IDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2RldmljZS5jXG5AQCAtMzcyLDEwICYjNDM7MzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIHtcbiBcdHN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLVx1MDAzZWhzcjtcbiBcdHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQgKmhzcl9zcDtcbiYjNDM7XHRzdHJ1Y3QgaHNyX3N1cF90bHYgKmhzcl9zdGx2O1xuIFx0c3RydWN0IGhzcl9zdXBfdGFnICpoc3Jfc3RhZztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0Ym9vbCByZWRib3hfcHJveHk7XG4mIzQzO1x0aW50IGV4dHJhID0gMDtcbiBcbi1cdHNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIDApO1xuJiM0MztcdHJlZGJveF9wcm94eSA9IGhzci1cdTAwM2VyZWRib3ggXHUwMDI2XHUwMDI2IG1hc3Rlci1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTks7XG4mIzQzO1xuJiM0MztcdC8qIEEgcHJveHktYW5ub3VuY2UgY2FycmllcyBhIFJlZEJveC1NQUMgVExWIGFuZCBhbiBFT1QgbWFya2VyLiAqL1xuJiM0MztcdGlmIChyZWRib3hfcHJveHkpXG4mIzQzO1x0XHRleHRyYSA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpICYjNDM7XG4mIzQzO1x0XHRcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSAmIzQzO1xuJiM0MztcdFx0XHRzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KTtcbiYjNDM7XG4mIzQzO1x0c2tiID0gaHNyX2luaXRfc2tiKG1hc3RlciwgZXh0cmEpO1xuIFx0aWYgKCFza2IpIHtcbiBcdFx0bmV0ZGV2X3dhcm5fb25jZShtYXN0ZXItXHUwMDNlZGV2LCBcJiMzNDtQUlA6IENvdWxkIG5vdCBzZW5kIHN1cGVydmlzaW9uIGZyYW1lXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuO1xuQEAgLTM5Myw5ICYjNDM7NDA0LDI1IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IFBSUF9UTFZfTElGRV9DSEVDS19ERDtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcbiBcbi1cdC8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBICovXG4mIzQzO1x0LyogUGF5bG9hZDogTWFjQWRkcmVzc0EsIHRoZSBhbm5vdW5jZWQgbm9kZS4gKi9cbiBcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xuLVx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0LyogUHJveHktYW5ub3VuY2U6IGFwcGVuZCB0aGUgUmVkQm94LU1BQyBUTFYgKFR5cGUgMzApIGFuZCBhbiBleHBsaWNpdFxuJiM0MztcdCAqIEVPVCB0byB0ZXJtaW5hdGUgdGhlIFRMViBjaGFpbiBiZWZvcmUgemVybyBwYWRkaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZWRib3hfcHJveHkpIHtcbiYjNDM7XHRcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcbiYjNDM7XHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfdHlwZSA9IFBSUF9UTFZfUkVEQk9YX01BQztcbiYjNDM7XHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuJiM0MztcbiYjNDM7XHRcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xuJiM0MztcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XG4mIzQzO1xuJiM0MztcdFx0aHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpO1xuJiM0MztcdFx0aHNyX3N0bHYtXHUwMDNlSFNSX1RMVl90eXBlID0gSFNSX1RMVl9FT1Q7XG4mIzQzO1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX2xlbmd0aCA9IDA7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuQEAgLTc2OCw2ICYjNDM7Nzk1LDE1IEBAIGludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sXG4gXHQvKiBNYWtlIHN1cmUgdGhlIDFzdCBjYWxsIHRvIG5ldGlmX2NhcnJpZXJfb24oKSBnZXRzIHRocm91Z2ggKi9cbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKGhzcl9kZXYpO1xuIFxuJiM0MztcdC8qIFB1Ymxpc2ggdGhlIFJlZEJveCBzdGF0ZSBiZWZvcmUgYW55IHBvcnQgaXMgYXR0YWNoZWQ6IHRoZSByeFxuJiM0MztcdCAqIGhhbmRsZXJzIGFyZSBsaXZlIGZyb20gaHNyX2FkZF9wb3J0KCkgb24sIGFuZCBoc3JfYWRkX25vZGUoKVxuJiM0MztcdCAqIHNpemVzIGVhY2ggbm9kZSYjMzk7cyBwZXItcG9ydCBzZXF1ZW5jZSBzdGF0ZSBmcm9tIGhzci1cdTAwM2VyZWRib3guXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGludGVybGluaykge1xuJiM0MztcdFx0aHNyLVx1MDAzZXJlZGJveCA9IHRydWU7XG4mIzQzO1x0XHRldGhlcl9hZGRyX2NvcHkoaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94LCBpbnRlcmxpbmstXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXMgPSBoc3JfYWRkX3BvcnQoaHNyLCBoc3JfZGV2LCBIU1JfUFRfTUFTVEVSLCBleHRhY2spO1xuIFx0aWYgKHJlcylcbiBcdFx0Z290byBlcnJfYWRkX21hc3RlcjtcbkBAIC04MDUsOCAmIzQzOzg0MSw2IEBAIGludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sXG4gXHRcdGlmIChyZXMpXG4gXHRcdFx0Z290byBlcnJfdW5yZWdpc3RlcjtcbiBcbi1cdFx0aHNyLVx1MDAzZXJlZGJveCA9IHRydWU7XG4tXHRcdGV0aGVyX2FkZHJfY29weShoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cdTAwM2VkZXZfYWRkcik7XG4gXHRcdG1vZF90aW1lcihcdTAwMjZoc3ItXHUwMDNlcHJ1bmVfcHJveHlfdGltZXIsXG4gXHRcdFx0ICBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoUFJVTkVfUFJPWFlfUEVSSU9EKSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5pbmRleCAwNzc0OTgxYTY1YzE2NC4uNzczNGE1MjFhOTZjMjMgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTQ0MCwxMiAmIzQzOzQ0MCwzNCBAQCBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdHJldHVybiBkZXZfcXVldWVfeG1pdChza2IpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgcHJwX2lzX2xhbl9kdXAoZW51bSBoc3JfcG9ydF90eXBlIHJ4LCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHJ4ID09IEhTUl9QVF9TTEFWRV9BIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8XG4mIzQzO1x0ICAgICAgIChyeCA9PSBIU1JfUFRfU0xBVkVfQiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKTtcbiYjNDM7fVxuJiM0MztcbiBib29sIHBycF9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiB7XG4tXHRyZXR1cm4gKChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BIFx1MDAyNlx1MDAyNlxuLVx0XHQgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKSB8fFxuLVx0XHQoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQiBcdTAwMjZcdTAwMjZcbi1cdFx0IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSkpO1xuJiM0MztcdGVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGU7XG4mIzQzO1xuJiM0MztcdC8qIFN1cGVydmlzaW9uIGZyYW1lcyBhcmUgbm90IGRlbGl2ZXJlZCB0byBhIFNBTiBvbiB0aGUgaW50ZXJsaW5rLiAqL1xuJiM0MztcdGlmIChmcmFtZS1cdTAwM2Vpc19zdXBlcnZpc2lvbiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBycF9pc19sYW5fZHVwKHJ4LCBwb3J0KSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBMQU4gdG8gaW50ZXJsaW5rOiBrZWVwIFBSUC1uZXR3b3JrIHVuaWNhc3Qgb2ZmIHRoZSBTQU4gc2VnbWVudC4gKi9cbiYjNDM7XHRpZiAoKHJ4ID09IEhTUl9QVF9TTEFWRV9BIHx8IHJ4ID09IEhTUl9QVF9TTEFWRV9CKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXG4mIzQzO1x0XHRyZXR1cm4gZnJhbWUtXHUwMDNlZHN0X2luX25vZGVfZGI7XG4mIzQzO1xuJiM0MztcdC8qIEludGVybGluayB0byBMQU46IGtlZXAgU0FOLXRvLVNBTiB1bmljYXN0IGxvY2FsLiAqL1xuJiM0MztcdGlmICgocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BIHx8IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJ4ID09IEhTUl9QVF9JTlRFUkxJTkspXG4mIzQzO1x0XHRyZXR1cm4gZnJhbWUtXHUwMDNlZHN0X2luX3Byb3h5X25vZGVfZGI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5AQCAtNDUzLDcgJiM0Mzs0NzUsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRpZiAocG9ydC1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfSFNSX0ZXRClcbi1cdFx0cmV0dXJuIHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybiBwcnBfaXNfbGFuX2R1cChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlLCBwb3J0KTtcbiBcbiBcdC8qIFJlZEJveCBzcGVjaWZpYyBmcmFtZXMgZHJvcHBpbmcgcG9saWNpZXNcbiBcdCAqXG5AQCAtNDY2LDcgJiM0Mzs0ODgsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIGFyZSBhZGRyZXNzZWQgdG8gaW50ZXJsaW5rIHBvcnQgKGFuZCBhcmUgaW4gdGhlIFByb3h5Tm9kZVRhYmxlKS5cbiBcdCAqL1xuIFx0c2tiID0gZnJhbWUtXHUwMDNlc2tiX2hzcjtcbi1cdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiBwcnBfaXNfbGFuX2R1cChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlLCBwb3J0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVx1MDAzZWhfZGVzdCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaHNyX2lzX25vZGVfaW5fZGIoXHUwMDI2cG9ydC1cdTAwM2Voc3ItXHUwMDNlcHJveHlfbm9kZV9kYixcbiBcdFx0XHQgICAgICBldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0KSkge1xuQEAgLTcwNiw2ICYjNDM7NzI4LDE4IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gXHRmcmFtZS1cdTAwM2Vpc192bGFuID0gZmFsc2U7XG4gXHRwcm90byA9IGV0aGhkci1cdTAwM2VoX3Byb3RvO1xuIFxuJiM0MztcdC8qIFBSUCBSZWRCb3ggb25seTogY2xhc3NpZnkgdGhlIHVuaWNhc3QgZGVzdGluYXRpb24gb25jZSBzbyB0aGVcbiYjNDM7XHQgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94XG4mIzQzO1x0ICogZG9lcyBpdHMgb3duIGNsYXNzaWZpY2F0aW9uIGFuZCBtdXN0IG5vdCBwYXkgdGhlc2Ugbm9kZS10YWJsZSB3YWxrcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgXHUwMDI2XHUwMDI2IGhzci1cdTAwM2VyZWRib3ggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGlzX3VuaWNhc3RfZXRoZXJfYWRkcihldGhoZHItXHUwMDNlaF9kZXN0KSkge1xuJiM0MztcdFx0ZnJhbWUtXHUwMDNlZHN0X2luX25vZGVfZGIgPVxuJiM0MztcdFx0XHRoc3JfaXNfbm9kZV9pbl9kYihcdTAwMjZoc3ItXHUwMDNlbm9kZV9kYiwgZXRoaGRyLVx1MDAzZWhfZGVzdCk7XG4mIzQzO1x0XHRmcmFtZS1cdTAwM2Vkc3RfaW5fcHJveHlfbm9kZV9kYiA9XG4mIzQzO1x0XHRcdGhzcl9pc19ub2RlX2luX2RiKFx1MDAyNmhzci1cdTAwM2Vwcm94eV9ub2RlX2RiLCBldGhoZHItXHUwMDNlaF9kZXN0KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHByb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSlcbiBcdFx0ZnJhbWUtXHUwMDNlaXNfdmxhbiA9IHRydWU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuYyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmNcbmluZGV4IGU0NDkyOTg3MTI3NDQ1Li5iM2IxMDZiZTY5MmVhZiAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmNcbkBAIC0xOTksNyAmIzQzOzE5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHNyX25vZGUgKmhzcl9hZGRfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcixcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5ld19ub2RlLVx1MDAzZXNlcV9vdXRfbG9jayk7XG4gXG4gXHRpZiAoaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEpXG4tXHRcdG5ld19ub2RlLVx1MDAzZXNlcV9wb3J0X2NudCA9IDE7XG4mIzQzO1x0XHRuZXdfbm9kZS1cdTAwM2VzZXFfcG9ydF9jbnQgPSBoc3ItXHUwMDNlcmVkYm94ID8gMiA6IDE7XG4gXHRlbHNlXG4gXHRcdG5ld19ub2RlLVx1MDAzZXNlcV9wb3J0X2NudCA9IEhTUl9QVF9QT1JUUyAtIDE7XG4gXG5AQCAtMjkzLDggJiM0MzsyOTMsMTcgQEAgc3RydWN0IGhzcl9ub2RlICpoc3JfZ2V0X25vZGUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLFxuIFx0ICovXG4gXHRpZiAoZXRoaGRyLVx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSB8fFxuIFx0ICAgIGV0aGhkci1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX0hTUikpIHtcbi1cdFx0LyogQ2hlY2sgaWYgc2tiIGNvbnRhaW5zIGhzcl9ldGhoZHIgKi9cbi1cdFx0aWYgKHNrYi1cdTAwM2VtYWNfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IGhzcl9ldGhoZHIpKVxuJiM0MztcdFx0Ym9vbCBwcnBfc3VwO1xuJiM0MztcbiYjNDM7XHRcdC8qIEEgUFJQIHN1cGVydmlzaW9uIGZyYW1lIGlzIGFuIHVudGFnZ2VkIEVUSF9QX1BSUCBmcmFtZVxuJiM0MztcdFx0ICogKG1hY19sZW4gPT0gRVRIX0hMRU4pOyBpdHMgUkNUIGlzIGFwcGVuZGVkIG9ubHkgb24gZWdyZXNzLlxuJiM0MztcdFx0ICogSFNSIChFVEhfUF9IU1IpIHN1cGVydmlzaW9uIGlzIGZyb250LXRhZ2dlZCBhbmQgc3RpbGwgbXVzdFxuJiM0MztcdFx0ICogY29udGFpbiBhIHN0cnVjdCBoc3JfZXRoaGRyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwcnBfc3VwID0gaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgZXRoaGRyLVx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSBcdTAwMjZcdTAwMjYgaXNfc3VwO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcHJwX3N1cCBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZW1hY19sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaHNyX2V0aGhkcikpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9IGVsc2Uge1xuIFx0XHRyY3QgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcbkBAIC0zODEsNiAmIzQzOzM5MCw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdHN0cnVjdCBldGhoZHIgKmV0aGhkcjtcbiBcdHVuc2lnbmVkIGludCB0b3RhbF9wdWxsX3NpemUgPSAwO1xuIFx0dW5zaWduZWQgaW50IHB1bGxfc2l6ZSA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNlcV9wb3J0X2NudDtcbiBcdHVuc2lnbmVkIGxvbmcgaWR4O1xuIFx0aW50IGk7XG4gXG5AQCAtNDc0LDYgJiM0Mzs0ODQsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRzZXFfcG9ydF9jbnQgPSBtaW4obm9kZV9yZWFsLVx1MDAzZXNlcV9wb3J0X2NudCwgbm9kZV9jdXJyLVx1MDAzZXNlcV9wb3J0X2NudCk7XG4gXHR4YV9mb3JfZWFjaChcdTAwMjZub2RlX2N1cnItXHUwMDNlc2VxX2Jsb2NrcywgaWR4LCBzcmNfYmxrKSB7XG4gXHRcdGlmIChoc3Jfc2VxX2Jsb2NrX2lzX29sZChzcmNfYmxrKSlcbiBcdFx0XHRjb250aW51ZTtcbkBAIC00ODIsNyAmIzQzOzQ5Myw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdFx0aWYgKCFtZXJnZV9ibGspXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdG1lcmdlX2Jsay1cdTAwM2V0aW1lID0gbWluKG1lcmdlX2Jsay1cdTAwM2V0aW1lLCBzcmNfYmxrLVx1MDAzZXRpbWUpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBub2RlX3JlYWwtXHUwMDNlc2VxX3BvcnRfY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2VxX3BvcnRfY250OyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGJpdG1hcF9vcihtZXJnZV9ibGstXHUwMDNlc2VxX25yc1tpXSwgbWVyZ2VfYmxrLVx1MDAzZXNlcV9ucnNbaV0sXG4gXHRcdFx0XHQgIHNyY19ibGstXHUwMDNlc2VxX25yc1tpXSwgSFNSX1NFUV9CTE9DS19TSVpFKTtcbiBcdFx0fVxuQEAgLTY0OSw5ICYjNDM7NjYwLDEzIEBAIGludCBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdGlmIChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogZm9yIFBSUCB3ZSBzaG91bGQgb25seSBmb3J3YXJkIGZyYW1lcyBmcm9tIHRoZSBzbGF2ZSBwb3J0c1xuLVx0ICogdG8gdGhlIG1hc3RlciBwb3J0XG4mIzQzO1x0LyogUmVkQm94OiBmb3J3YXJkIExBTiBmcmFtZXMgb3V0IHRoZSBpbnRlcmxpbmsgdG8gYSBTQU4sIGRlZHVwaW5nIHRoZVxuJiM0MztcdCAqIHR3byBMQU4gY29waWVzIG9uIGEgZGVkaWNhdGVkIHNsb3QuXG4gXHQgKi9cbiYjNDM7XHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXG4mIzQzO1x0XHRyZXR1cm4gaHNyX2NoZWNrX2R1cGxpY2F0ZShmcmFtZSwgMSk7XG4mIzQzO1xuJiM0MztcdC8qIEZvciBQUlAgb25seSBzbGF2ZS10by1tYXN0ZXIgZnJhbWVzIGFyZSBmb3J3YXJkZWQuICovXG4gXHRpZiAocG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmggYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG5pbmRleCBjNjVlY2I5MjU3MzQ4OS4uMTI3YTNmYjY0ZDVmMDMgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG5AQCAtMjcsNiAmIzQzOzI3LDggQEAgc3RydWN0IGhzcl9mcmFtZV9pbmZvIHtcbiBcdGJvb2wgaXNfbG9jYWxfZGVzdDtcbiBcdGJvb2wgaXNfbG9jYWxfZXhjbHVzaXZlO1xuIFx0Ym9vbCBpc19mcm9tX3NhbjtcbiYjNDM7XHRib29sIGRzdF9pbl9ub2RlX2RiO1xuJiM0MztcdGJvb2wgZHN0X2luX3Byb3h5X25vZGVfZGI7XG4gfTtcbiBcbiB2b2lkIGhzcl9kZWxfc2VsZl9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyKTtcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9tYWluLmggYi9uZXQvaHNyL2hzcl9tYWluLmhcbmluZGV4IDEzNGU0ZjNmZmY2MDM2Li41M2U5NWJhZTBlZTI3NiAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX21haW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfbWFpbi5oXG5AQCAtMjExLDcgJiM0MzsyMTEsNyBAQCBzdHJ1Y3QgaHNyX3ByaXYge1xuIFx0XHRcdFx0ICovXG4gXHRib29sIGZ3ZF9vZmZsb2FkZWQ7XHQvKiBGb3J3YXJkaW5nIG9mZmxvYWRlZCB0byBIVyAqL1xuIFx0Ym9vbCByZWRib3g7ICAgICAgICAgICAgLyogRGV2aWNlIHN1cHBvcnRzIEhTUiBSZWRCb3ggKi9cbi1cdHVuc2lnbmVkIGNoYXJcdFx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dO1xuJiM0MztcdHVuc2lnbmVkIGNoYXJcdFx0bWFjYWRkcmVzc19yZWRib3hbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XG4gXHR1bnNpZ25lZCBjaGFyXHRcdHN1cF9tdWx0aWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKHNpemVvZih1MTYpKTtcbiBcdFx0XHRcdC8qIEFsaWduIHRvIHUxNiBib3VuZGFyeSB0byBhdm9pZCB1bmFsaWduZWQgYWNjZXNzXG4gXHRcdFx0XHQgKiBpbiBldGhlcl9hZGRyX2VxdWFsXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfbmV0bGluay5jIGIvbmV0L2hzci9oc3JfbmV0bGluay5jXG5pbmRleCA4MDk5ZjIwNjlhNzQ4ZS4uODg5NDBlODAxNGIyNGYgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX25ldGxpbmsuY1xuQEAgLTEyMSwxNCAmIzQzOzEyMSw4IEBAIHN0YXRpYyBpbnQgaHNyX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApIHtcbiYjNDM7XHRpZiAocHJvdG8gPT0gSFNSX1BST1RPQ09MX1BSUClcbiBcdFx0cHJvdG9fdmVyc2lvbiA9IFBSUF9WMTtcbi1cdFx0aWYgKGludGVybGluaykge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4tXHRcdFx0XHRcdCAgIFwmIzM0O0ludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0fVxuIFxuIFx0cmV0dXJuIGhzcl9kZXZfZmluYWxpemUoZGV2LCBsaW5rLCBpbnRlcmxpbmssIG11bHRpY2FzdF9zcGVjLFxuIFx0XHRcdFx0cHJvdG9fdmVyc2lvbiwgZXh0YWNrKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuaW5kZXggMzFmYjkzMjZjZjUzM2QuLjIxNTBlNDg3YWM3ZDdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuQEAgLTQsNiAmIzQzOzQsNyBAQCB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi5cbiBcbiBURVNUX1BST0dTIDo9IFxcXG4gXHRoc3JfcGluZy5zaCBcXFxuJiM0MztcdGhzcl9wcnBfcmVkYm94LnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuIFx0cHJwX3Bpbmcuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NzljODkyMjI1YjFmM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaFxuQEAgLTAsMCAmIzQzOzEsOTkgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgVGVzdCBhIFBSUCBSZWRCb3ggKFBSUC1TQU4pOiBhIFNBTiB0aGF0IHNpdHMgYmVoaW5kIHRoZSBpbnRlcmxpbmsgcG9ydCBtdXN0XG4mIzQzOyMgcmVhY2gsIGFuZCBiZSByZWFjaGVkIGJ5LCBhIHBlZXIgREFOUCBvbiB0aGUgUFJQIG5ldHdvcmsgd2l0aCBpdHMgb3duIE1BQ1xuJiM0MzsjIHByZXNlcnZlZCBvbiB0aGUgd2lyZSwgYW5kIHRoZSBSZWRCb3ggbXVzdCBhbm5vdW5jZSB0aGUgU0FOIHdpdGggYSBSZWRCb3gtTUFDXG4mIzQzOyMgVExWICh0ZXJtaW5hdGVkIGJ5IGFuIEVPVCBtYXJrZXIpIGluIGl0cyBQUlAgc3VwZXJ2aXNpb24gZnJhbWVzLlxuJiM0MzsjXG4mIzQzOyMgICBSQiAgICBQUlAgUmVkQm94OiBwcnAwIG92ZXIgcmJfYS9yYl9iIChMQU4gQS9CKSAmIzQzOyBpbnRlcmxpbmsgcmJfaWxcbiYjNDM7IyAgIFBFRVIgIHBlZXIgREFOUCA6IHBycDAgb3ZlciBwZV9hL3BlX2IsIDEwMC42NC4wLjJcbiYjNDM7IyAgIFNBTiAgIFNBTiAgICAgICA6IHNhbl9pbCwgb3duIE1BQywgMTAwLjY0LjAuNTEgKGJlaGluZCB0aGUgaW50ZXJsaW5rKVxuJiM0MztcbiYjNDM7aXB2Nj1mYWxzZVxuJiM0MztcbiYjNDM7c291cmNlIC4vaHNyX2NvbW1vbi5zaFxuJiM0MztcbiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlc1xuJiM0MztcbiYjNDM7aWYgISBjb21tYW5kIC12IHRjcGR1bXAgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTS0lQOiBUaGlzIHRlc3QgcmVxdWlyZXMgdGNwZHVtcFwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0MztmaVxuJiM0MztcbiYjNDM7aWYgISBpcCBsaW5rIGhlbHAgaHNyIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtcSBpbnRlcmxpbms7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IGlwcm91dGUyIHRvbyBvbGQgKG5vIGhzciBpbnRlcmxpbmsgc3VwcG9ydClcJiMzNDtcbiYjNDM7XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3NldHVwX25zIFJCIFBFRVIgU0FOXG4mIzQzO3RyYXAgJiMzOTtjbGVhbnVwX25zIFwmIzM0OyRSQlwmIzM0OyBcJiMzNDskUEVFUlwmIzM0OyBcJiMzNDskU0FOXCYjMzQ7JiMzOTsgRVhJVFxuJiM0MztcbiYjNDM7aXAgbGluayBhZGQgcmJfYSBuZXRucyBcJiMzNDskUkJcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9hIG5ldG5zIFwmIzM0OyRQRUVSXCYjMzQ7XG4mIzQzO2lwIGxpbmsgYWRkIHJiX2IgbmV0bnMgXCYjMzQ7JFJCXCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYiBuZXRucyBcJiMzNDskUEVFUlwmIzM0O1xuJiM0MztpcCBsaW5rIGFkZCByYl9pbCBuZXRucyBcJiMzNDskUkJcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzYW5faWwgbmV0bnMgXCYjMzQ7JFNBTlwmIzM0O1xuJiM0MztcbiYjNDM7aXAgLW4gXCYjMzQ7JFJCXCYjMzQ7ICAgbGluayBzZXQgcmJfYSB1cFxuJiM0MztpcCAtbiBcJiMzNDskUkJcJiMzNDsgICBsaW5rIHNldCByYl9iIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRSQlwmIzM0OyAgIGxpbmsgc2V0IHJiX2lsIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRQRUVSXCYjMzQ7IGxpbmsgc2V0IHBlX2EgdXBcbiYjNDM7aXAgLW4gXCYjMzQ7JFBFRVJcJiMzNDsgbGluayBzZXQgcGVfYiB1cFxuJiM0MztpcCAtbiBcJiMzNDskU0FOXCYjMzQ7ICBsaW5rIHNldCBzYW5faWwgdXBcbiYjNDM7aXAgLW4gXCYjMzQ7JFNBTlwmIzM0OyAgYWRkciBhZGQgMTAwLjY0LjAuNTEvMjQgZGV2IHNhbl9pbFxuJiM0MztcbiYjNDM7IyBGZWF0dXJlIGdhdGU6IFBSUCBpbnRlcmxpbmsgKFJlZEJveCkgY3JlYXRpb24uIEEga2VybmVsIHdpdGhvdXQgUFJQIFJlZEJveFxuJiM0MzsjIHN1cHBvcnQgcmVqZWN0cyB0aGlzIHdpdGggLUVJTlZBTCwgc28gU0tJUCByYXRoZXIgdGhhbiBGQUlMLlxuJiM0MztpZiAhIGlwIC1uIFwmIzM0OyRSQlwmIzM0OyBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHJiX2Egc2xhdmUyIHJiX2IgXFxcbiYjNDM7ICAgICBpbnRlcmxpbmsgcmJfaWwgcHJvdG8gMSAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtTS0lQOiBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94IChpbnRlcmxpbmspIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7ZmlcbiYjNDM7aXAgLW4gXCYjMzQ7JFJCXCYjMzQ7ICAgbGluayBzZXQgcHJwMCB1cFxuJiM0MztpcCAtbiBcJiMzNDskUEVFUlwmIzM0OyBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHBlX2Egc2xhdmUyIHBlX2IgcHJvdG8gMVxuJiM0MztpcCAtbiBcJiMzNDskUEVFUlwmIzM0OyBsaW5rIHNldCBwcnAwIHVwXG4mIzQzO2lwIC1uIFwmIzM0OyRQRUVSXCYjMzQ7IGFkZHIgYWRkIDEwMC42NC4wLjIvMjQgZGV2IHBycDBcbiYjNDM7c2xlZXAgMVxuJiM0MztcbiYjNDM7c2FuX21hYz0kKGlwIC1uIFwmIzM0OyRTQU5cJiMzNDsgLWJyIGxpbmsgc2hvdyBzYW5faWwgfCBhd2sgJiMzOTt7cHJpbnQgJDN9JiMzOTspXG4mIzQzO3JiX21hYz0kKGlwIC1uIFwmIzM0OyRSQlwmIzM0OyAtYnIgbGluayBzaG93IHJiX2lsIHwgYXdrICYjMzk7e3ByaW50ICQzfSYjMzk7KVxuJiM0MztcbiYjNDM7IyBCaWRpcmVjdGlvbmFsIHVuaWNhc3QgYWNyb3NzIHRoZSBpbnRlcmxpbmsuXG4mIzQzO2RvX3BpbmcgXCYjMzQ7JFBFRVJcJiMzNDsgMTAwLjY0LjAuNTFcbiYjNDM7ZG9fcGluZyBcJiMzNDskU0FOXCYjMzQ7ICAxMDAuNjQuMC4yXG4mIzQzO3N0b3BfaWZfZXJyb3IgXCYjMzQ7UFJQIFJlZEJveCBiaWRpcmVjdGlvbmFsIHVuaWNhc3QgZmFpbGVkXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIFRoZSBTQU4gc291cmNlIE1BQyBtdXN0IGJlIHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmssIG5vdCBsYXVuZGVyZWQgdG8gdGhlXG4mIzQzOyMgUmVkQm94IE1BQzogdGhlIHBlZXIgcmVzb2x2ZXMgdGhlIFNBTiBJUCB0byB0aGUgU0FOJiMzOTtzIG93biBNQUMuXG4mIzQzO25laWdoPSQoaXAgLW4gXCYjMzQ7JFBFRVJcJiMzNDsgbmVpZ2ggc2hvdyAxMDAuNjQuMC41MSB8IGF3ayAmIzM5O3twcmludCAkNX0mIzM5OylcbiYjNDM7aWYgWyBcJiMzNDskbmVpZ2hcJiMzNDsgIT0gXCYjMzQ7JHNhbl9tYWNcJiMzNDsgXTsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7U0FOIE1BQyBwcmVzZXJ2YXRpb24gWyBGQUlMIF06IHBlZXIgcmVzb2x2ZWQgMTAwLjY0LjAuNTEgdG9cJiMzNDsgXFxcbiYjNDM7XHQgICAgIFwmIzM0OyYjMzk7JG5laWdoJiMzOTssIGV4cGVjdGVkICRzYW5fbWFjXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0cmV0PTFcbiYjNDM7ZmlcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtTQU4gTUFDIG5vdCBwcmVzZXJ2ZWQgb24gdGhlIFBSUCBuZXR3b3JrXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIFRoZSBwcm94eS1hbm5vdW5jZSBzdXBlcnZpc2lvbiBmcmFtZSBtdXN0IGNhcnJ5LCBpbiBvcmRlciwgdGhlIGxpZmUtY2hlY2sgVExWXG4mIzQzOyMgKHR5cGUgMHgxNCwgbGVuIDYpICYjNDM7IE1hY0FkZHJlc3NBID09IFNBTiBNQUMgJiM0MzsgdGhlIFJlZEJveC1NQUMgVExWICh0eXBlIDB4MWUsXG4mIzQzOyMgbGVuIDYpICYjNDM7IE1hY0FkZHJlc3NSZWRCb3ggPT0gUmVkQm94IE1BQyAmIzQzOyB0aGUgRU9UIG1hcmtlciAoMHgwMDAwKS5cbiYjNDM7aXAgbmV0bnMgZXhlYyBcJiMzNDskU0FOXCYjMzQ7IHBpbmcgLWkgMC4yIC1xIDEwMC42NC4wLjIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuJiM0MztwaW5nX3BpZD0kIVxuJiM0MztjYXA9JChpcCBuZXRucyBleGVjIFwmIzM0OyRQRUVSXCYjMzQ7IHRpbWVvdXQgNSB0Y3BkdW1wIC1pIHBlX2EgLW5uIC14IFxcXG4mIzQzO1x0XCYjMzQ7ZXRoZXIgcHJvdG8gMHg4OGZiIGFuZCBldGhlciBzcmMgJHJiX21hY1wmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWUpXG4mIzQzO2tpbGwgXCYjMzQ7JHBpbmdfcGlkXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuJiM0Mzt3YWl0IFwmIzM0OyRwaW5nX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcbiYjNDM7XG4mIzQzO3Nhbl9oZXg9JChlY2hvIFwmIzM0OyRzYW5fbWFjXCYjMzQ7IHwgdHIgLWQgJiMzOTs6JiMzOTspXG4mIzQzO3JiX2hleD0kKGVjaG8gXCYjMzQ7JHJiX21hY1wmIzM0OyB8IHRyIC1kICYjMzk7OiYjMzk7KVxuJiM0MzsjIFJlYXNzZW1ibGUgY29udGlndW91cyBmcmFtZSBoZXg6IGRyb3AgdGhlIFwmIzM0OzB4MDAxMDpcJiMzNDsgb2Zmc2V0IGxhYmVscyBhbmQgc3BhY2VzLlxuJiM0MztmcmFtZV9oZXg9JChlY2hvIFwmIzM0OyRjYXBcJiMzNDsgfCBhd2sgJiMzOTsvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0mIzQzOzovIHtcbiYjNDM7XHRzdWIoL15bWzpzcGFjZTpdXSoweFswLTlhLWZdJiM0Mzs6W1s6c3BhY2U6XV0qLywgXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XHRnc3ViKC8gLywgXCYjMzQ7XCYjMzQ7KTsgcHJpbnRmIFwmIzM0OyVzXCYjMzQ7LCAkMCB9JiMzOTspXG4mIzQzO2lmICEgZWNobyBcJiMzNDskZnJhbWVfaGV4XCYjMzQ7IHwgZ3JlcCAtcSBcJiMzNDsxNDA2JHtzYW5faGV4fTFlMDYke3JiX2hleH0wMDAwXCYjMzQ7OyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDtzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMViBbIEZBSUwgXTogbWlzc2luZyBTQU4gTUFDLCBUeXBlLTMwXCYjMzQ7IFxcXG4mIzQzO1x0ICAgICBcJiMzNDtwYXlsb2FkLCBvciBFT1RcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRyZXQ9MVxuJiM0MztmaVxuJiM0MztzdG9wX2lmX2Vycm9yIFwmIzM0O1BSUCBSZWRCb3ggc3VwZXJ2aXNpb24gUmVkQm94LU1BQyBUTFYvRU9UIGNoZWNrIGZhaWxlZFwmIzM0O1xuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtJTkZPOiBQUlAgUmVkQm94IChQUlAtU0FOKSBjb25mb3JtYW5jZSBjaGVja3MgcGFzc2VkXCYjMzQ7XG4mIzQzO2V4aXQgJHJldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAwOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9kcm9wX2ZyYW1lJiMzNDssCiAgICAmIzM0O2ZpbGxfZnJhbWVfaW5mbyYjMzQ7LAogICAgJiMzNDtoc3JfYWRkX25vZGUmIzM0OywKICAgICYjMzQ7aHNyX2dldF9ub2RlJiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfc3VwX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9yZWdpc3Rlcl9mcmFtZV9vdXQmIzM0OywKICAgICYjMzQ7aHNyX25ld2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgZm9yIFBSUCAoUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCkgUmVkQm94IChpbnRlcmxpbmspLiBUaGlzIGludm9sdmVzIG1vZGlmaWNhdGlvbnMgdG8gcGFja2V0IGZvcndhcmRpbmcsIGRyb3BwaW5nIGxvZ2ljLCBub2RlIG1hbmFnZW1lbnQsIGFuZCBzdXBlcnZpc2lvbiBmcmFtZSBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgbmV0d29yayB0cmFmZmljIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM1MGJkMDBlMWI1Y2JjZTY5MmY3OWYxNWY0NzI4OGMzZjhhY2E1ZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxOCAwMDozNzoyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmMKaW5kZXggNTU1NWI3MWFiMTliNTkuLjA5NzNmOWE5NGY0ZDQ4IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMzcyLDEwICYjNDM7MzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogewogCXN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLSZndDtoc3I7CiAJc3RydWN0IGhzcl9zdXBfcGF5bG9hZCAqaHNyX3NwOwomIzQzOwlzdHJ1Y3QgaHNyX3N1cF90bHYgKmhzcl9zdGx2OwogCXN0cnVjdCBoc3Jfc3VwX3RhZyAqaHNyX3N0YWc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJYm9vbCByZWRib3hfcHJveHk7CiYjNDM7CWludCBleHRyYSA9IDA7CiAKLQlza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTsKJiM0MzsJcmVkYm94X3Byb3h5ID0gaHNyLSZndDtyZWRib3ggJmFtcDsmYW1wOyBtYXN0ZXItJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSzsKJiM0MzsKJiM0MzsJLyogQSBwcm94eS1hbm5vdW5jZSBjYXJyaWVzIGEgUmVkQm94LU1BQyBUTFYgYW5kIGFuIEVPVCBtYXJrZXIuICovCiYjNDM7CWlmIChyZWRib3hfcHJveHkpCiYjNDM7CQlleHRyYSA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpICYjNDM7CiYjNDM7CQkJc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpICYjNDM7CiYjNDM7CQkJc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3Rsdik7CiYjNDM7CiYjNDM7CXNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIGV4dHJhKTsKIAlpZiAoIXNrYikgewogCQluZXRkZXZfd2Fybl9vbmNlKG1hc3Rlci0mZ3Q7ZGV2LCAmIzM0O1BSUDogQ291bGQgbm90IHNlbmQgc3VwZXJ2aXNpb24gZnJhbWVcbiYjMzQ7KTsKIAkJcmV0dXJuOwpAQCAtMzkzLDkgJiM0Mzs0MDQsMjUgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7CiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTsKIAotCS8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBICovCiYjNDM7CS8qIFBheWxvYWQ6IE1hY0FkZHJlc3NBLCB0aGUgYW5ub3VuY2VkIG5vZGUuICovCiAJaHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7Ci0JZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBtYXN0ZXItJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIGFkZHIpOwomIzQzOwomIzQzOwkvKiBQcm94eS1hbm5vdW5jZTogYXBwZW5kIHRoZSBSZWRCb3gtTUFDIFRMViAoVHlwZSAzMCkgYW5kIGFuIGV4cGxpY2l0CiYjNDM7CSAqIEVPVCB0byB0ZXJtaW5hdGUgdGhlIFRMViBjaGFpbiBiZWZvcmUgemVybyBwYWRkaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJlZGJveF9wcm94eSkgewomIzQzOwkJaHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpOwomIzQzOwkJaHNyX3N0bHYtJmd0O0hTUl9UTFZfdHlwZSA9IFBSUF9UTFZfUkVEQk9YX01BQzsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTsKJiM0MzsKJiM0MzsJCWhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpOwomIzQzOwkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKJiM0MzsKJiM0MzsJCWhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX3R5cGUgPSBIU1JfVExWX0VPVDsKJiM0MzsJCWhzcl9zdGx2LSZndDtIU1JfVExWX2xlbmd0aCA9IDA7CiYjNDM7CX0KIAogCWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKQEAgLTc2OCw2ICYjNDM7Nzk1LDE1IEBAIGludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sCiAJLyogTWFrZSBzdXJlIHRoZSAxc3QgY2FsbCB0byBuZXRpZl9jYXJyaWVyX29uKCkgZ2V0cyB0aHJvdWdoICovCiAJbmV0aWZfY2Fycmllcl9vZmYoaHNyX2Rldik7CiAKJiM0MzsJLyogUHVibGlzaCB0aGUgUmVkQm94IHN0YXRlIGJlZm9yZSBhbnkgcG9ydCBpcyBhdHRhY2hlZDogdGhlIHJ4CiYjNDM7CSAqIGhhbmRsZXJzIGFyZSBsaXZlIGZyb20gaHNyX2FkZF9wb3J0KCkgb24sIGFuZCBoc3JfYWRkX25vZGUoKQomIzQzOwkgKiBzaXplcyBlYWNoIG5vZGUmIzM5O3MgcGVyLXBvcnQgc2VxdWVuY2Ugc3RhdGUgZnJvbSBoc3ItJmd0O3JlZGJveC4KJiM0MzsJICovCiYjNDM7CWlmIChpbnRlcmxpbmspIHsKJiM0MzsJCWhzci0mZ3Q7cmVkYm94ID0gdHJ1ZTsKJiM0MzsJCWV0aGVyX2FkZHJfY29weShoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94LCBpbnRlcmxpbmstJmd0O2Rldl9hZGRyKTsKJiM0MzsJfQomIzQzOwogCXJlcyA9IGhzcl9hZGRfcG9ydChoc3IsIGhzcl9kZXYsIEhTUl9QVF9NQVNURVIsIGV4dGFjayk7CiAJaWYgKHJlcykKIAkJZ290byBlcnJfYWRkX21hc3RlcjsKQEAgLTgwNSw4ICYjNDM7ODQxLDYgQEAgaW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSwKIAkJaWYgKHJlcykKIAkJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CiAKLQkJaHNyLSZndDtyZWRib3ggPSB0cnVlOwotCQlldGhlcl9hZGRyX2NvcHkoaHNyLSZndDttYWNhZGRyZXNzX3JlZGJveCwgaW50ZXJsaW5rLSZndDtkZXZfYWRkcik7CiAJCW1vZF90aW1lcigmYW1wO2hzci0mZ3Q7cHJ1bmVfcHJveHlfdGltZXIsCiAJCQkgIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhQUlVORV9QUk9YWV9QRVJJT0QpKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKaW5kZXggMDc3NDk4MWE2NWMxNjQuLjc3MzRhNTIxYTk2YzIzIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCkBAIC00NDAsMTIgJiM0Mzs0NDAsMzQgQEAgc3RhdGljIGludCBoc3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJcmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBwcnBfaXNfbGFuX2R1cChlbnVtIGhzcl9wb3J0X3R5cGUgcngsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXJldHVybiAocnggPT0gSFNSX1BUX1NMQVZFX0EgJmFtcDsmYW1wOyBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9TTEFWRV9CKSB8fAomIzQzOwkgICAgICAgKHJ4ID09IEhTUl9QVF9TTEFWRV9CICZhbXA7JmFtcDsgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQSk7CiYjNDM7fQomIzQzOwogYm9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiB7Ci0JcmV0dXJuICgoZnJhbWUtJmd0O3BvcnRfcmN2LSZndDt0eXBlID09IEhTUl9QVF9TTEFWRV9BICZhbXA7JmFtcDsKLQkJIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8Ci0JCShmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX1NMQVZFX0IgJmFtcDsmYW1wOwotCQkgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQSkpOwomIzQzOwllbnVtIGhzcl9wb3J0X3R5cGUgcnggPSBmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGU7CiYjNDM7CiYjNDM7CS8qIFN1cGVydmlzaW9uIGZyYW1lcyBhcmUgbm90IGRlbGl2ZXJlZCB0byBhIFNBTiBvbiB0aGUgaW50ZXJsaW5rLiAqLwomIzQzOwlpZiAoZnJhbWUtJmd0O2lzX3N1cGVydmlzaW9uICZhbXA7JmFtcDsgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWlmIChwcnBfaXNfbGFuX2R1cChyeCwgcG9ydCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJLyogTEFOIHRvIGludGVybGluazoga2VlcCBQUlAtbmV0d29yayB1bmljYXN0IG9mZiB0aGUgU0FOIHNlZ21lbnQuICovCiYjNDM7CWlmICgocnggPT0gSFNSX1BUX1NMQVZFX0EgfHwgcnggPT0gSFNSX1BUX1NMQVZFX0IpICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykKJiM0MzsJCXJldHVybiBmcmFtZS0mZ3Q7ZHN0X2luX25vZGVfZGI7CiYjNDM7CiYjNDM7CS8qIEludGVybGluayB0byBMQU46IGtlZXAgU0FOLXRvLVNBTiB1bmljYXN0IGxvY2FsLiAqLwomIzQzOwlpZiAoKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX1NMQVZFX0EgfHwgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgJmFtcDsmYW1wOwomIzQzOwkgICAgcnggPT0gSFNSX1BUX0lOVEVSTElOSykKJiM0MzsJCXJldHVybiBmcmFtZS0mZ3Q7ZHN0X2luX3Byb3h5X25vZGVfZGI7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCkBAIC00NTMsNyAmIzQzOzQ3NSw3IEBAIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZiAocG9ydC0mZ3Q7ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX0hTUl9GV0QpCi0JCXJldHVybiBwcnBfZHJvcF9mcmFtZShmcmFtZSwgcG9ydCk7CiYjNDM7CQlyZXR1cm4gcHJwX2lzX2xhbl9kdXAoZnJhbWUtJmd0O3BvcnRfcmN2LSZndDt0eXBlLCBwb3J0KTsKIAogCS8qIFJlZEJveCBzcGVjaWZpYyBmcmFtZXMgZHJvcHBpbmcgcG9saWNpZXMKIAkgKgpAQCAtNDY2LDcgJiM0Mzs0ODgsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIAkgKiBhcmUgYWRkcmVzc2VkIHRvIGludGVybGluayBwb3J0IChhbmQgYXJlIGluIHRoZSBQcm94eU5vZGVUYWJsZSkuCiAJICovCiAJc2tiID0gZnJhbWUtJmd0O3NrYl9oc3I7Ci0JaWYgKHNrYiAmYW1wOyZhbXA7IHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KSAmYW1wOyZhbXA7CiYjNDM7CWlmIChza2IgJmFtcDsmYW1wOyBwcnBfaXNfbGFuX2R1cChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUsIHBvcnQpICZhbXA7JmFtcDsKIAkgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0mZ3Q7aF9kZXN0KSAmYW1wOyZhbXA7CiAJICAgIGhzcl9pc19ub2RlX2luX2RiKCZhbXA7cG9ydC0mZ3Q7aHNyLSZndDtwcm94eV9ub2RlX2RiLAogCQkJICAgICAgZXRoX2hkcihza2IpLSZndDtoX2Rlc3QpKSB7CkBAIC03MDYsNiAmIzQzOzcyOCwxOCBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAogCWZyYW1lLSZndDtpc192bGFuID0gZmFsc2U7CiAJcHJvdG8gPSBldGhoZHItJmd0O2hfcHJvdG87CiAKJiM0MzsJLyogUFJQIFJlZEJveCBvbmx5OiBjbGFzc2lmeSB0aGUgdW5pY2FzdCBkZXN0aW5hdGlvbiBvbmNlIHNvIHRoZQomIzQzOwkgKiBwZXItZWdyZXNzLXBvcnQgZGVjaXNpb24gaW4gcHJwX2Ryb3BfZnJhbWUoKSBzdGF5cyBPKDEpLiBIU1IgUmVkQm94CiYjNDM7CSAqIGRvZXMgaXRzIG93biBjbGFzc2lmaWNhdGlvbiBhbmQgbXVzdCBub3QgcGF5IHRoZXNlIG5vZGUtdGFibGUgd2Fsa3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHNyLSZndDtwcm90X3ZlcnNpb24gPT0gUFJQX1YxICZhbXA7JmFtcDsgaHNyLSZndDtyZWRib3ggJmFtcDsmYW1wOwomIzQzOwkgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aGhkci0mZ3Q7aF9kZXN0KSkgewomIzQzOwkJZnJhbWUtJmd0O2RzdF9pbl9ub2RlX2RiID0KJiM0MzsJCQloc3JfaXNfbm9kZV9pbl9kYigmYW1wO2hzci0mZ3Q7bm9kZV9kYiwgZXRoaGRyLSZndDtoX2Rlc3QpOwomIzQzOwkJZnJhbWUtJmd0O2RzdF9pbl9wcm94eV9ub2RlX2RiID0KJiM0MzsJCQloc3JfaXNfbm9kZV9pbl9kYigmYW1wO2hzci0mZ3Q7cHJveHlfbm9kZV9kYiwgZXRoaGRyLSZndDtoX2Rlc3QpOwomIzQzOwl9CiYjNDM7CiAJaWYgKHByb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSkKIAkJZnJhbWUtJmd0O2lzX3ZsYW4gPSB0cnVlOwogCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jIGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuYwppbmRleCBlNDQ5Mjk4NzEyNzQ0NS4uYjNiMTA2YmU2OTJlYWYgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZnJhbWVyZWcuYwpAQCAtMTk5LDcgJiM0MzsxOTksNyBAQCBzdGF0aWMgc3RydWN0IGhzcl9ub2RlICpoc3JfYWRkX25vZGUoc3RydWN0IGhzcl9wcml2ICpoc3IsCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtuZXdfbm9kZS0mZ3Q7c2VxX291dF9sb2NrKTsKIAogCWlmIChoc3ItJmd0O3Byb3RfdmVyc2lvbiA9PSBQUlBfVjEpCi0JCW5ld19ub2RlLSZndDtzZXFfcG9ydF9jbnQgPSAxOwomIzQzOwkJbmV3X25vZGUtJmd0O3NlcV9wb3J0X2NudCA9IGhzci0mZ3Q7cmVkYm94ID8gMiA6IDE7CiAJZWxzZQogCQluZXdfbm9kZS0mZ3Q7c2VxX3BvcnRfY250ID0gSFNSX1BUX1BPUlRTIC0gMTsKIApAQCAtMjkzLDggJiM0MzsyOTMsMTcgQEAgc3RydWN0IGhzcl9ub2RlICpoc3JfZ2V0X25vZGUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLAogCSAqLwogCWlmIChldGhoZHItJmd0O2hfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSB8fAogCSAgICBldGhoZHItJmd0O2hfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSkgewotCQkvKiBDaGVjayBpZiBza2IgY29udGFpbnMgaHNyX2V0aGhkciAqLwotCQlpZiAoc2tiLSZndDttYWNfbGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSkKJiM0MzsJCWJvb2wgcHJwX3N1cDsKJiM0MzsKJiM0MzsJCS8qIEEgUFJQIHN1cGVydmlzaW9uIGZyYW1lIGlzIGFuIHVudGFnZ2VkIEVUSF9QX1BSUCBmcmFtZQomIzQzOwkJICogKG1hY19sZW4gPT0gRVRIX0hMRU4pOyBpdHMgUkNUIGlzIGFwcGVuZGVkIG9ubHkgb24gZWdyZXNzLgomIzQzOwkJICogSFNSIChFVEhfUF9IU1IpIHN1cGVydmlzaW9uIGlzIGZyb250LXRhZ2dlZCBhbmQgc3RpbGwgbXVzdAomIzQzOwkJICogY29udGFpbiBhIHN0cnVjdCBoc3JfZXRoaGRyLgomIzQzOwkJICovCiYjNDM7CQlwcnBfc3VwID0gaHNyLSZndDtwcm90X3ZlcnNpb24gPT0gUFJQX1YxICZhbXA7JmFtcDsKJiM0MzsJCQkgIGV0aGhkci0mZ3Q7aF9wcm90byA9PSBodG9ucyhFVEhfUF9QUlApICZhbXA7JmFtcDsgaXNfc3VwOwomIzQzOwomIzQzOwkJaWYgKCFwcnBfc3VwICZhbXA7JmFtcDsgc2tiLSZndDttYWNfbGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSkKIAkJCXJldHVybiBOVUxMOwogCX0gZWxzZSB7CiAJCXJjdCA9IHNrYl9nZXRfUFJQX3JjdChza2IpOwpAQCAtMzgxLDYgJiM0MzszOTAsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCXVuc2lnbmVkIGludCB0b3RhbF9wdWxsX3NpemUgPSAwOwogCXVuc2lnbmVkIGludCBwdWxsX3NpemUgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgc2VxX3BvcnRfY250OwogCXVuc2lnbmVkIGxvbmcgaWR4OwogCWludCBpOwogCkBAIC00NzQsNiAmIzQzOzQ4NCw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSkKIAkJfQogCX0KIAomIzQzOwlzZXFfcG9ydF9jbnQgPSBtaW4obm9kZV9yZWFsLSZndDtzZXFfcG9ydF9jbnQsIG5vZGVfY3Vyci0mZ3Q7c2VxX3BvcnRfY250KTsKIAl4YV9mb3JfZWFjaCgmYW1wO25vZGVfY3Vyci0mZ3Q7c2VxX2Jsb2NrcywgaWR4LCBzcmNfYmxrKSB7CiAJCWlmIChoc3Jfc2VxX2Jsb2NrX2lzX29sZChzcmNfYmxrKSkKIAkJCWNvbnRpbnVlOwpAQCAtNDgyLDcgJiM0Mzs0OTMsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiAJCWlmICghbWVyZ2VfYmxrKQogCQkJY29udGludWU7CiAJCW1lcmdlX2Jsay0mZ3Q7dGltZSA9IG1pbihtZXJnZV9ibGstJmd0O3RpbWUsIHNyY19ibGstJmd0O3RpbWUpOwotCQlmb3IgKGkgPSAwOyBpICZsdDsgbm9kZV9yZWFsLSZndDtzZXFfcG9ydF9jbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgc2VxX3BvcnRfY250OyBpJiM0MzsmIzQzOykgewogCQkJYml0bWFwX29yKG1lcmdlX2Jsay0mZ3Q7c2VxX25yc1tpXSwgbWVyZ2VfYmxrLSZndDtzZXFfbnJzW2ldLAogCQkJCSAgc3JjX2Jsay0mZ3Q7c2VxX25yc1tpXSwgSFNSX1NFUV9CTE9DS19TSVpFKTsKIAkJfQpAQCAtNjQ5LDkgJiM0Mzs2NjAsMTMgQEAgaW50IHBycF9yZWdpc3Rlcl9mcmFtZV9vdXQoc3RydWN0IGhzcl9wb3J0ICpwb3J0LCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKQogCWlmIChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUikKIAkJcmV0dXJuIDA7CiAKLQkvKiBmb3IgUFJQIHdlIHNob3VsZCBvbmx5IGZvcndhcmQgZnJhbWVzIGZyb20gdGhlIHNsYXZlIHBvcnRzCi0JICogdG8gdGhlIG1hc3RlciBwb3J0CiYjNDM7CS8qIFJlZEJveDogZm9yd2FyZCBMQU4gZnJhbWVzIG91dCB0aGUgaW50ZXJsaW5rIHRvIGEgU0FOLCBkZWR1cGluZyB0aGUKJiM0MzsJICogdHdvIExBTiBjb3BpZXMgb24gYSBkZWRpY2F0ZWQgc2xvdC4KIAkgKi8KJiM0MzsJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykKJiM0MzsJCXJldHVybiBoc3JfY2hlY2tfZHVwbGljYXRlKGZyYW1lLCAxKTsKJiM0MzsKJiM0MzsJLyogRm9yIFBSUCBvbmx5IHNsYXZlLXRvLW1hc3RlciBmcmFtZXMgYXJlIGZvcndhcmRlZC4gKi8KIAlpZiAocG9ydC0mZ3Q7dHlwZSAhPSBIU1JfUFRfTUFTVEVSKQogCQlyZXR1cm4gMTsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaCBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmgKaW5kZXggYzY1ZWNiOTI1NzM0ODkuLjEyN2EzZmI2NGQ1ZjAzIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmgKQEAgLTI3LDYgJiM0MzsyNyw4IEBAIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyB7CiAJYm9vbCBpc19sb2NhbF9kZXN0OwogCWJvb2wgaXNfbG9jYWxfZXhjbHVzaXZlOwogCWJvb2wgaXNfZnJvbV9zYW47CiYjNDM7CWJvb2wgZHN0X2luX25vZGVfZGI7CiYjNDM7CWJvb2wgZHN0X2luX3Byb3h5X25vZGVfZGI7CiB9OwogCiB2b2lkIGhzcl9kZWxfc2VsZl9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyKTsKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX21haW4uaCBiL25ldC9oc3IvaHNyX21haW4uaAppbmRleCAxMzRlNGYzZmZmNjAzNi4uNTNlOTViYWUwZWUyNzYgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX21haW4uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9tYWluLmgKQEAgLTIxMSw3ICYjNDM7MjExLDcgQEAgc3RydWN0IGhzcl9wcml2IHsKIAkJCQkgKi8KIAlib29sIGZ3ZF9vZmZsb2FkZWQ7CS8qIEZvcndhcmRpbmcgb2ZmbG9hZGVkIHRvIEhXICovCiAJYm9vbCByZWRib3g7ICAgICAgICAgICAgLyogRGV2aWNlIHN1cHBvcnRzIEhTUiBSZWRCb3ggKi8KLQl1bnNpZ25lZCBjaGFyCQltYWNhZGRyZXNzX3JlZGJveFtFVEhfQUxFTl07CiYjNDM7CXVuc2lnbmVkIGNoYXIJCW1hY2FkZHJlc3NfcmVkYm94W0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpOwogCXVuc2lnbmVkIGNoYXIJCXN1cF9tdWx0aWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKHNpemVvZih1MTYpKTsKIAkJCQkvKiBBbGlnbiB0byB1MTYgYm91bmRhcnkgdG8gYXZvaWQgdW5hbGlnbmVkIGFjY2VzcwogCQkJCSAqIGluIGV0aGVyX2FkZHJfZXF1YWwKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX25ldGxpbmsuYyBiL25ldC9oc3IvaHNyX25ldGxpbmsuYwppbmRleCA4MDk5ZjIwNjlhNzQ4ZS4uODg5NDBlODAxNGIyNGYgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9uZXRsaW5rLmMKQEAgLTEyMSwxNCAmIzQzOzEyMSw4IEBAIHN0YXRpYyBpbnQgaHNyX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJfQogCX0KIAotCWlmIChwcm90byA9PSBIU1JfUFJPVE9DT0xfUFJQKSB7CiYjNDM7CWlmIChwcm90byA9PSBIU1JfUFJPVE9DT0xfUFJQKQogCQlwcm90b192ZXJzaW9uID0gUFJQX1YxOwotCQlpZiAoaW50ZXJsaW5rKSB7Ci0JCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAotCQkJCQkgICAmIzM0O0ludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSJiMzNDspOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9CiAKIAlyZXR1cm4gaHNyX2Rldl9maW5hbGl6ZShkZXYsIGxpbmssIGludGVybGluaywgbXVsdGljYXN0X3NwZWMsCiAJCQkJcHJvdG9fdmVyc2lvbiwgZXh0YWNrKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCmluZGV4IDMxZmI5MzI2Y2Y1MzNkLi4yMTUwZTQ4N2FjN2Q3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCkBAIC00LDYgJiM0Mzs0LDcgQEAgdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uCiAKIFRFU1RfUFJPR1MgOj0gXAogCWhzcl9waW5nLnNoIFwKJiM0MzsJaHNyX3BycF9yZWRib3guc2ggXAogCWhzcl9yZWRib3guc2ggXAogCWxpbmtfZmF1bHRzLnNoIFwKIAlwcnBfcGluZy5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uNDc5Yzg5MjIyNWIxZjMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoCkBAIC0wLDAgJiM0MzsxLDk5IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgVGVzdCBhIFBSUCBSZWRCb3ggKFBSUC1TQU4pOiBhIFNBTiB0aGF0IHNpdHMgYmVoaW5kIHRoZSBpbnRlcmxpbmsgcG9ydCBtdXN0CiYjNDM7IyByZWFjaCwgYW5kIGJlIHJlYWNoZWQgYnksIGEgcGVlciBEQU5QIG9uIHRoZSBQUlAgbmV0d29yayB3aXRoIGl0cyBvd24gTUFDCiYjNDM7IyBwcmVzZXJ2ZWQgb24gdGhlIHdpcmUsIGFuZCB0aGUgUmVkQm94IG11c3QgYW5ub3VuY2UgdGhlIFNBTiB3aXRoIGEgUmVkQm94LU1BQwomIzQzOyMgVExWICh0ZXJtaW5hdGVkIGJ5IGFuIEVPVCBtYXJrZXIpIGluIGl0cyBQUlAgc3VwZXJ2aXNpb24gZnJhbWVzLgomIzQzOyMKJiM0MzsjICAgUkIgICAgUFJQIFJlZEJveDogcHJwMCBvdmVyIHJiX2EvcmJfYiAoTEFOIEEvQikgJiM0MzsgaW50ZXJsaW5rIHJiX2lsCiYjNDM7IyAgIFBFRVIgIHBlZXIgREFOUCA6IHBycDAgb3ZlciBwZV9hL3BlX2IsIDEwMC42NC4wLjIKJiM0MzsjICAgU0FOICAgU0FOICAgICAgIDogc2FuX2lsLCBvd24gTUFDLCAxMDAuNjQuMC41MSAoYmVoaW5kIHRoZSBpbnRlcmxpbmspCiYjNDM7CiYjNDM7aXB2Nj1mYWxzZQomIzQzOwomIzQzO3NvdXJjZSAuL2hzcl9jb21tb24uc2gKJiM0MzsKJiM0MztjaGVja19wcmVyZXF1aXNpdGVzCiYjNDM7CiYjNDM7aWYgISBjb21tYW5kIC12IHRjcGR1bXAgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogVGhpcyB0ZXN0IHJlcXVpcmVzIHRjcGR1bXAmIzM0OwomIzQzOwlleGl0ICRrc2Z0X3NraXAKJiM0MztmaQomIzQzOwomIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyJmd0OyZhbXA7MSB8IGdyZXAgLXEgaW50ZXJsaW5rOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBpcHJvdXRlMiB0b28gb2xkIChubyBoc3IgaW50ZXJsaW5rIHN1cHBvcnQpJiMzNDsKJiM0MzsJZXhpdCAka3NmdF9za2lwCiYjNDM7ZmkKJiM0MzsKJiM0MztzZXR1cF9ucyBSQiBQRUVSIFNBTgomIzQzO3RyYXAgJiMzOTtjbGVhbnVwX25zICYjMzQ7JFJCJiMzNDsgJiMzNDskUEVFUiYjMzQ7ICYjMzQ7JFNBTiYjMzQ7JiMzOTsgRVhJVAomIzQzOwomIzQzO2lwIGxpbmsgYWRkIHJiX2EgbmV0bnMgJiMzNDskUkImIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBlX2EgbmV0bnMgJiMzNDskUEVFUiYjMzQ7CiYjNDM7aXAgbGluayBhZGQgcmJfYiBuZXRucyAmIzM0OyRSQiYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYiBuZXRucyAmIzM0OyRQRUVSJiMzNDsKJiM0MztpcCBsaW5rIGFkZCByYl9pbCBuZXRucyAmIzM0OyRSQiYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgc2FuX2lsIG5ldG5zICYjMzQ7JFNBTiYjMzQ7CiYjNDM7CiYjNDM7aXAgLW4gJiMzNDskUkImIzM0OyAgIGxpbmsgc2V0IHJiX2EgdXAKJiM0MztpcCAtbiAmIzM0OyRSQiYjMzQ7ICAgbGluayBzZXQgcmJfYiB1cAomIzQzO2lwIC1uICYjMzQ7JFJCJiMzNDsgICBsaW5rIHNldCByYl9pbCB1cAomIzQzO2lwIC1uICYjMzQ7JFBFRVImIzM0OyBsaW5rIHNldCBwZV9hIHVwCiYjNDM7aXAgLW4gJiMzNDskUEVFUiYjMzQ7IGxpbmsgc2V0IHBlX2IgdXAKJiM0MztpcCAtbiAmIzM0OyRTQU4mIzM0OyAgbGluayBzZXQgc2FuX2lsIHVwCiYjNDM7aXAgLW4gJiMzNDskU0FOJiMzNDsgIGFkZHIgYWRkIDEwMC42NC4wLjUxLzI0IGRldiBzYW5faWwKJiM0MzsKJiM0MzsjIEZlYXR1cmUgZ2F0ZTogUFJQIGludGVybGluayAoUmVkQm94KSBjcmVhdGlvbi4gQSBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94CiYjNDM7IyBzdXBwb3J0IHJlamVjdHMgdGhpcyB3aXRoIC1FSU5WQUwsIHNvIFNLSVAgcmF0aGVyIHRoYW4gRkFJTC4KJiM0MztpZiAhIGlwIC1uICYjMzQ7JFJCJiMzNDsgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSByYl9hIHNsYXZlMiByYl9iIFwKJiM0MzsgICAgIGludGVybGluayByYl9pbCBwcm90byAxIDImZ3Q7L2Rldi9udWxsOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94IChpbnRlcmxpbmspIHN1cHBvcnQmIzM0OwomIzQzOwlleGl0ICRrc2Z0X3NraXAKJiM0MztmaQomIzQzO2lwIC1uICYjMzQ7JFJCJiMzNDsgICBsaW5rIHNldCBwcnAwIHVwCiYjNDM7aXAgLW4gJiMzNDskUEVFUiYjMzQ7IGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgcGVfYSBzbGF2ZTIgcGVfYiBwcm90byAxCiYjNDM7aXAgLW4gJiMzNDskUEVFUiYjMzQ7IGxpbmsgc2V0IHBycDAgdXAKJiM0MztpcCAtbiAmIzM0OyRQRUVSJiMzNDsgYWRkciBhZGQgMTAwLjY0LjAuMi8yNCBkZXYgcHJwMAomIzQzO3NsZWVwIDEKJiM0MzsKJiM0MztzYW5fbWFjPSQoaXAgLW4gJiMzNDskU0FOJiMzNDsgLWJyIGxpbmsgc2hvdyBzYW5faWwgfCBhd2sgJiMzOTt7cHJpbnQgJDN9JiMzOTspCiYjNDM7cmJfbWFjPSQoaXAgLW4gJiMzNDskUkImIzM0OyAtYnIgbGluayBzaG93IHJiX2lsIHwgYXdrICYjMzk7e3ByaW50ICQzfSYjMzk7KQomIzQzOwomIzQzOyMgQmlkaXJlY3Rpb25hbCB1bmljYXN0IGFjcm9zcyB0aGUgaW50ZXJsaW5rLgomIzQzO2RvX3BpbmcgJiMzNDskUEVFUiYjMzQ7IDEwMC42NC4wLjUxCiYjNDM7ZG9fcGluZyAmIzM0OyRTQU4mIzM0OyAgMTAwLjY0LjAuMgomIzQzO3N0b3BfaWZfZXJyb3IgJiMzNDtQUlAgUmVkQm94IGJpZGlyZWN0aW9uYWwgdW5pY2FzdCBmYWlsZWQmIzM0OwomIzQzOwomIzQzOyMgVGhlIFNBTiBzb3VyY2UgTUFDIG11c3QgYmUgcHJlc2VydmVkIG9uIHRoZSBQUlAgbmV0d29yaywgbm90IGxhdW5kZXJlZCB0byB0aGUKJiM0MzsjIFJlZEJveCBNQUM6IHRoZSBwZWVyIHJlc29sdmVzIHRoZSBTQU4gSVAgdG8gdGhlIFNBTiYjMzk7cyBvd24gTUFDLgomIzQzO25laWdoPSQoaXAgLW4gJiMzNDskUEVFUiYjMzQ7IG5laWdoIHNob3cgMTAwLjY0LjAuNTEgfCBhd2sgJiMzOTt7cHJpbnQgJDV9JiMzOTspCiYjNDM7aWYgWyAmIzM0OyRuZWlnaCYjMzQ7ICE9ICYjMzQ7JHNhbl9tYWMmIzM0OyBdOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTQU4gTUFDIHByZXNlcnZhdGlvbiBbIEZBSUwgXTogcGVlciByZXNvbHZlZCAxMDAuNjQuMC41MSB0byYjMzQ7IFwKJiM0MzsJICAgICAmIzM0OyYjMzk7JG5laWdoJiMzOTssIGV4cGVjdGVkICRzYW5fbWFjJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJcmV0PTEKJiM0MztmaQomIzQzO3N0b3BfaWZfZXJyb3IgJiMzNDtTQU4gTUFDIG5vdCBwcmVzZXJ2ZWQgb24gdGhlIFBSUCBuZXR3b3JrJiMzNDsKJiM0MzsKJiM0MzsjIFRoZSBwcm94eS1hbm5vdW5jZSBzdXBlcnZpc2lvbiBmcmFtZSBtdXN0IGNhcnJ5LCBpbiBvcmRlciwgdGhlIGxpZmUtY2hlY2sgVExWCiYjNDM7IyAodHlwZSAweDE0LCBsZW4gNikgJiM0MzsgTWFjQWRkcmVzc0EgPT0gU0FOIE1BQyAmIzQzOyB0aGUgUmVkQm94LU1BQyBUTFYgKHR5cGUgMHgxZSwKJiM0MzsjIGxlbiA2KSAmIzQzOyBNYWNBZGRyZXNzUmVkQm94ID09IFJlZEJveCBNQUMgJiM0MzsgdGhlIEVPVCBtYXJrZXIgKDB4MDAwMCkuCiYjNDM7aXAgbmV0bnMgZXhlYyAmIzM0OyRTQU4mIzM0OyBwaW5nIC1pIDAuMiAtcSAxMDAuNjQuMC4yICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgJmFtcDsKJiM0MztwaW5nX3BpZD0kIQomIzQzO2NhcD0kKGlwIG5ldG5zIGV4ZWMgJiMzNDskUEVFUiYjMzQ7IHRpbWVvdXQgNSB0Y3BkdW1wIC1pIHBlX2EgLW5uIC14IFwKJiM0MzsJJiMzNDtldGhlciBwcm90byAweDg4ZmIgYW5kIGV0aGVyIHNyYyAkcmJfbWFjJiMzNDsgMiZndDsvZGV2L251bGwgfHwgdHJ1ZSkKJiM0MztraWxsICYjMzQ7JHBpbmdfcGlkJiMzNDsgMiZndDsvZGV2L251bGwgfHwgdHJ1ZQomIzQzO3dhaXQgJiMzNDskcGluZ19waWQmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7CiYjNDM7c2FuX2hleD0kKGVjaG8gJiMzNDskc2FuX21hYyYjMzQ7IHwgdHIgLWQgJiMzOTs6JiMzOTspCiYjNDM7cmJfaGV4PSQoZWNobyAmIzM0OyRyYl9tYWMmIzM0OyB8IHRyIC1kICYjMzk7OiYjMzk7KQomIzQzOyMgUmVhc3NlbWJsZSBjb250aWd1b3VzIGZyYW1lIGhleDogZHJvcCB0aGUgJiMzNDsweDAwMTA6JiMzNDsgb2Zmc2V0IGxhYmVscyBhbmQgc3BhY2VzLgomIzQzO2ZyYW1lX2hleD0kKGVjaG8gJiMzNDskY2FwJiMzNDsgfCBhd2sgJiMzOTsvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0mIzQzOzovIHsKJiM0MzsJc3ViKC9eW1s6c3BhY2U6XV0qMHhbMC05YS1mXSYjNDM7OltbOnNwYWNlOl1dKi8sICYjMzQ7JiMzNDspOwomIzQzOwlnc3ViKC8gLywgJiMzNDsmIzM0Oyk7IHByaW50ZiAmIzM0OyVzJiMzNDssICQwIH0mIzM5OykKJiM0MztpZiAhIGVjaG8gJiMzNDskZnJhbWVfaGV4JiMzNDsgfCBncmVwIC1xICYjMzQ7MTQwNiR7c2FuX2hleH0xZTA2JHtyYl9oZXh9MDAwMCYjMzQ7OyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMViBbIEZBSUwgXTogbWlzc2luZyBTQU4gTUFDLCBUeXBlLTMwJiMzNDsgXAomIzQzOwkgICAgICYjMzQ7cGF5bG9hZCwgb3IgRU9UJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJcmV0PTEKJiM0MztmaQomIzQzO3N0b3BfaWZfZXJyb3IgJiMzNDtQUlAgUmVkQm94IHN1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWL0VPVCBjaGVjayBmYWlsZWQmIzM0OwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBQUlAgUmVkQm94IChQUlAtU0FOKSBjb25mb3JtYW5jZSBjaGVja3MgcGFzc2VkJiMzNDsKJiM0MztleGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAyOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIU1IgUFJQIFJlZEJveCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgdG8gdGhlIEhTUiBkcml2ZXIgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUFJQIFJlZEJveCBpbnRlcmxpbmtpbmcuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBoc3JfZGV2aWNlLmNgLCBgaHNyX2ZvcndhcmQuY2AsIGBoc3JfZnJhbWVyZWcuY2AsIGFuZCBgaHNyX25ldGxpbmsuY2AsIHdoaWNoIGlzIHRoZSB0eXBpY2FsIGFyZWEgZm9yIG5ldHdvcmsgZHJpdmVyIG1vZGlmaWNhdGlvbnMsIGFuZCBpbmNsdWRlcyBhIHNlbGZ0ZXN0LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjayByZWxhdGVkIHRvIGhpZ2ggYXZhaWxhYmlsaXR5LiBHaXZlbiB0aGF0IGl0IGRlYWxzIHdpdGggYWRkaW5nIFBSUCBSZWRCb3ggZnVuY3Rpb25hbGl0eSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgY29yZSBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYy4gRnVuY3Rpb25zIGxpa2UgYGhzcl94bWl0YCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYW5kIGBwcnBfZHJvcF9mcmFtZWAgYXJlIGdvaW5nIHRvIGJlIGFmZmVjdGVkLgoKVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0aGF0IHRoaXMgZGVtYW5kcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlLCBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBwYWNrZXQgaGFuZGxpbmcuCgpJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgaGFuZGxpbmcgaW5jb21pbmcgb3Igb3V0Z29pbmcgZnJhbWVzLCBvciB3aGVyZSBQUlAgcHJvdG9jb2wgbG9naWMgaXMgaW1wbGVtZW50ZWQ6CgoqICAgYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYAoqICAgYGhzcl9kZXZfZmluYWxpemVgCiogICBgcHJwX2Ryb3BfZnJhbWVgCiogICBgaHNyX2Ryb3BfZnJhbWVgCiogICBgZmlsbF9mcmFtZV9pbmZvYAoqICAgYGhzcl9hZGRfbm9kZWAKKiAgIGBoc3JfZ2V0X25vZGVgCiogICBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgCiogICBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAKKiAgIGBoc3JfbmV3bGlua2AKCkJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGZ1enppbmcsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIHZlcmlmeSB0aGF0IEhTUiBpcyBlbmFibGVkIGFuZCB0byBzZWUgaWYgYW55IG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWMgdG8gUFJQIGhhdmUgYmVlbiBpbnRyb2R1Y2VkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGxvb2sgZm9yIGBDT05GSUdfSFNSYCBhbmQgYW55IHJlbGF0ZWQgb3B0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIU1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBIU1IgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgbmV0L2hzci9LY29uZmlnYC4gVGhpcyBtZWFucyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSKSBwcm90b2NvbCBzdXBwb3J0IHdpdGhpbiB0aGlzIHNwZWNpZmljIG5ldHdvcmsgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gaW1wbGVtZW50ZWQsIHdoYXQga25vYnMgYXJlIGF2YWlsYWJsZSB0byBmaW5lLXR1bmUgaXRzIGJlaGF2aW9yLCBhbmQgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSBLY29uZmlnIGZpbGUgaXRzZWxmLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBgY29uZmlnYCBlbnRyaWVzLCBgbWVudWNvbmZpZ2AsIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIGRlZmluaXRpb25zIGFuZCBoZWxwIHRleHQuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgYXJlYXMgd2hlcmUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gY2hhbmdlcyBtaWdodCByZXF1aXJlIHNwZWNpYWwgY29uc2lkZXJhdGlvbi4gSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgdGhpcyBpcyBhIGNvcmUgSFNSIGltcGxlbWVudGF0aW9uIG9yIGFuIGV4dGVuc2lvbiwgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIG5ldHdvcmtpbmcgZmVhdHVyZXMgKGUuZy4sIFZMQU5zLCBicmlkZ2luZywgUW9TKSBhbmQgaGFyZHdhcmUgcGxhdGZvcm1zLiBJIG5lZWQgdG8gZW5zdXJlIGEgY29ycmVjdCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnLTUtXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXG5uZXQvaHNyL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0hpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcdTAwMjYgUFJQKVwmIzM0O1xuLS1cbm5ldC9oc3IvS2NvbmZpZz00Mj1pZiBIU1Jcbm5ldC9oc3IvS2NvbmZpZy00My1cbm5ldC9oc3IvS2NvbmZpZzo0NDpjb25maWcgUFJQX0RVUF9ESVNDQVJEX0tVTklUX1RFU1Rcbm5ldC9oc3IvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O1BSUCBkdXBsaWNhdGUgZGlzY2FyZCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhTUiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBgSFNSYCBjb25maWd1cmF0aW9uIGlzIHRoZSBjZW50cmFsIHBpZWNlIGhlcmUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRob3NlLiBJJiMzOTt2ZSBnb3QgdG8gZm9jdXMgb24gdGhlIGZvbGxvd2luZzogYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYHBycF9kcm9wX2ZyYW1lYCwgYGhzcl9kcm9wX2ZyYW1lYCwgYGZpbGxfZnJhbWVfaW5mb2AsIGBoc3JfYWRkX25vZGVgLCBgaHNyX2dldF9ub2RlYCwgYGhzcl9oYW5kbGVfc3VwX2ZyYW1lYCwgYHBycF9yZWdpc3Rlcl9mcmFtZV9vdXRgLCBhbmQgYGhzcl9uZXdsaW5rYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQsIGJ1dCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIGBwcnBfaXNfbGFuX2R1cGAsIGFuZCBhIG1vZGlmaWVkIGZ1bmN0aW9uLCBgaHNyX2Rldl9maW5hbGl6ZWAsIHRoYXQgSSBuZWVkIHRvIGZhY3RvciBpbi4KCk5vdywgSSYjMzk7bGwgc3dpdGNoIG15IGZvY3VzIHRvIGBuZXQvaHNyL2hzcl9kZXZpY2UuY2AgdG8gZXhhbWluZSBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2RldmljZS5jPTI5Mz1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY4LVxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzY5OnN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzcwLVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmludGVydmFsLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTY1OD1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcbm5ldC9oc3IvaHNyX2RldmljZS5jOjY1OTpcdC5zZW5kX3N2X2ZyYW1lID0gc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUsXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjAtXHQuY3JlYXRlX3RhZ2dlZF9mcmFtZSA9IHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDQ1CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBSUCBSZWRCb3ggUGF0Y2ggYW5kIElkZW50aWZ5aW5nIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgY2VudGVycyBvbiBpZGVudGlmeWluZyBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBQUlAgUmVkQm94IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIU1IgZHJpdmVyLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIHBpbnBvaW50IHRoZSBiZXN0IGFyZWFzIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QsIGJhc2VkIG9uIHRoZSBjb2RlIGFuYWx5c2lzIHNvIGZhciwgYXJlOiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgLCBgcHJwX2Ryb3BfZnJhbWVgLCBgaHNyX2Ryb3BfZnJhbWVgLCBgZmlsbF9mcmFtZV9pbmZvYCwgYGhzcl9hZGRfbm9kZWAsIGBoc3JfZ2V0X25vZGVgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAsIGFuZCBgaHNyX25ld2xpbmtgLiBJJiMzOTtsbCB3YW50IHRvIHJldmlzaXQgdGhvc2UsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIEhTUiBjb25maWcuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgaW5saW5pbmcgc3RhdHVzIG9mIGBwcnBfaXNfbGFuX2R1cGAsIGFsdGhvdWdoIEkgdGhpbmsgSSBjYW4gYXZvaWQgaXQgYnkganVzdCB1c2luZyB0aGUgYHBycF9kcm9wX2ZyYW1lYCBhbmQgYGhzcl9kcm9wX2ZyYW1lYCBmdW5jdGlvbnMuCgpUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWRkcyBzdXBwb3J0IGZvciBQUlAgUmVkQm94IGludGVybGluayBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBob3cgdGhlIEhTUiBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIFRoZXJlZm9yZSwgaXQmIzM5O3MgYWJzb2x1dGVseSBjcnVjaWFsIHRvIGZ1enogdGhpcyBpbXBsZW1lbnRhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHJlZmluZSB0aGlzIGxpc3QuIGBoc3JfbmV3bGlua2AgYXBwZWFycyB0byBiZSB0aGUgbmV0bGluayBlbnRyeSBwb2ludCBmb3IgaW50ZXJmYWNlIGNyZWF0aW9uLiBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIHNlZW1zIHRvIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgb3IgdHJpZ2dlcmVkIG9uIGRlbWFuZC4gIGBwcnBfZHJvcF9mcmFtZWAgYW5kIGBoc3JfZHJvcF9mcmFtZWAgYXJlIGNyaXRpY2FsIGZvciBwYWNrZXQgcmVjZXB0aW9uIGFuZCBmb3J3YXJkaW5nLiBgZmlsbF9mcmFtZV9pbmZvYCBpcyBhbHNvIGRpcmVjdGx5IHJlbGF0ZWQgdG8gcmVjZXB0aW9uLiBUaGUgYGhzcl9hZGRfbm9kZWAgYW5kIGBoc3JfZ2V0X25vZGVgIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgaW4gdGhlIG1hbmFnZW1lbnQgb2YgdGhlIG5vZGUgdGFibGUsIGR1cmluZyBwYWNrZXQgcmVjZXB0aW9uLiBGaW5hbGx5LCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgIGhhbmRsZXMgdGhlIHN1cGVydmlzaW9uIGZyYW1lIGFuZCBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGAgaXMgY2FsbGVkIG9uIHRyYW5zbWlzc2lvbi4KClllcywgdGhpcyBpcyBhIHNvbGlkIGxpc3Qgb2YgdGFyZ2V0cy4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGNvdmVycyB0aGUgbW9zdCBjcml0aWNhbCBhcmVhcyBmb3IgZnV6emluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7ZmlsbF9mcmFtZV9pbmZvJiMzNDssCiAgICAmIzM0O2hzcl9hZGRfbm9kZSYjMzQ7LAogICAgJiMzNDtoc3JfZ2V0X25vZGUmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9zdXBfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX3JlZ2lzdGVyX2ZyYW1lX291dCYjMzQ7LAogICAgJiMzNDtoc3JfbmV3bGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUFJQIChQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sKSBSZWRCb3ggKGludGVybGluaykuIFRoaXMgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBwYWNrZXQgZm9yd2FyZGluZywgZHJvcHBpbmcgbG9naWMsIG5vZGUgbWFuYWdlbWVudCwgYW5kIHN1cGVydmlzaW9uIGZyYW1lIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2Ryb3BfZnJhbWUmIzM0OywKICAgICYjMzQ7ZmlsbF9mcmFtZV9pbmZvJiMzNDssCiAgICAmIzM0O2hzcl9hZGRfbm9kZSYjMzQ7LAogICAgJiMzNDtoc3JfZ2V0X25vZGUmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9zdXBfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX3JlZ2lzdGVyX2ZyYW1lX291dCYjMzQ7LAogICAgJiMzNDtoc3JfbmV3bGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUFJQIChQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sKSBSZWRCb3ggKGludGVybGluaykuIFRoaXMgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBwYWNrZXQgZm9yd2FyZGluZywgZHJvcHBpbmcgbG9naWMsIG5vZGUgbWFuYWdlbWVudCwgYW5kIHN1cGVydmlzaW9uIGZyYW1lIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAwOjM3OjI1LjYzNTM3OTM2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzA3ODMyMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lXCIsXG4gICAgXCJwcnBfZHJvcF9mcmFtZVwiLFxuICAgIFwiaHNyX2Ryb3BfZnJhbWVcIixcbiAgICBcImZpbGxfZnJhbWVfaW5mb1wiLFxuICAgIFwiaHNyX2FkZF9ub2RlXCIsXG4gICAgXCJoc3JfZ2V0X25vZGVcIixcbiAgICBcImhzcl9oYW5kbGVfc3VwX2ZyYW1lXCIsXG4gICAgXCJwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0XCIsXG4gICAgXCJoc3JfbmV3bGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciBQUlAgKFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wpIFJlZEJveCAoaW50ZXJsaW5rKS4gVGhpcyBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIHBhY2tldCBmb3J3YXJkaW5nLCBkcm9wcGluZyBsb2dpYywgbm9kZSBtYW5hZ2VtZW50LCBhbmQgc3VwZXJ2aXNpb24gZnJhbWUgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMDozNzoyNS42MzUzODMyNDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODIzMDk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM1MGJkMDBlMWI1Y2JjZTY5MmY3OWYxNWY0NzI4OGMzZjhhY2E1ZDBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTggMDA6Mzc6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4wOTczZjlhOTRmNGQ0OCAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jXFxuQEAgLTM3MiwxMCArMzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbiB7XFxuIFxcdHN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLVxcdTAwM2Voc3I7XFxuIFxcdHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQgKmhzcl9zcDtcXG4rXFx0c3RydWN0IGhzcl9zdXBfdGx2ICpoc3Jfc3RsdjtcXG4gXFx0c3RydWN0IGhzcl9zdXBfdGFnICpoc3Jfc3RhZztcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0Ym9vbCByZWRib3hfcHJveHk7XFxuK1xcdGludCBleHRyYSA9IDA7XFxuIFxcbi1cXHRza2IgPSBoc3JfaW5pdF9za2IobWFzdGVyLCAwKTtcXG4rXFx0cmVkYm94X3Byb3h5ID0gaHNyLVxcdTAwM2VyZWRib3ggXFx1MDAyNlxcdTAwMjYgbWFzdGVyLVxcdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTks7XFxuK1xcbitcXHQvKiBBIHByb3h5LWFubm91bmNlIGNhcnJpZXMgYSBSZWRCb3gtTUFDIFRMViBhbmQgYW4gRU9UIG1hcmtlci4gKi9cXG4rXFx0aWYgKHJlZGJveF9wcm94eSlcXG4rXFx0XFx0ZXh0cmEgPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSArXFxuK1xcdFxcdFxcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSArXFxuK1xcdFxcdFxcdHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpO1xcbitcXG4rXFx0c2tiID0gaHNyX2luaXRfc2tiKG1hc3RlciwgZXh0cmEpO1xcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHRuZXRkZXZfd2Fybl9vbmNlKG1hc3Rlci1cXHUwMDNlZGV2LCBcXFwiUFJQOiBDb3VsZCBub3Qgc2VuZCBzdXBlcnZpc2lvbiBmcmFtZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMzkzLDkgKzQwNCwyNSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XFxuIFxcdGhzcl9zdGFnLVxcdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XFxuIFxcbi1cXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSAqL1xcbitcXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSwgdGhlIGFubm91bmNlZCBub2RlLiAqL1xcbiBcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4tXFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVxcdTAwM2VtYWNhZGRyZXNzX0EsIGFkZHIpO1xcbitcXG4rXFx0LyogUHJveHktYW5ub3VuY2U6IGFwcGVuZCB0aGUgUmVkQm94LU1BQyBUTFYgKFR5cGUgMzApIGFuZCBhbiBleHBsaWNpdFxcbitcXHQgKiBFT1QgdG8gdGVybWluYXRlIHRoZSBUTFYgY2hhaW4gYmVmb3JlIHplcm8gcGFkZGluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChyZWRib3hfcHJveHkpIHtcXG4rXFx0XFx0aHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl90eXBlID0gUFJQX1RMVl9SRURCT1hfTUFDO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XFxuK1xcbitcXHRcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4rXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXFx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcXG4rXFxuK1xcdFxcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcXG4rXFx0XFx0aHNyX3N0bHYtXFx1MDAzZUhTUl9UTFZfdHlwZSA9IEhTUl9UTFZfRU9UO1xcbitcXHRcXHRoc3Jfc3Rsdi1cXHUwMDNlSFNSX1RMVl9sZW5ndGggPSAwO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG5AQCAtNzY4LDYgKzc5NSwxNSBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxcbiBcXHQvKiBNYWtlIHN1cmUgdGhlIDFzdCBjYWxsIHRvIG5ldGlmX2NhcnJpZXJfb24oKSBnZXRzIHRocm91Z2ggKi9cXG4gXFx0bmV0aWZfY2Fycmllcl9vZmYoaHNyX2Rldik7XFxuIFxcbitcXHQvKiBQdWJsaXNoIHRoZSBSZWRCb3ggc3RhdGUgYmVmb3JlIGFueSBwb3J0IGlzIGF0dGFjaGVkOiB0aGUgcnhcXG4rXFx0ICogaGFuZGxlcnMgYXJlIGxpdmUgZnJvbSBoc3JfYWRkX3BvcnQoKSBvbiwgYW5kIGhzcl9hZGRfbm9kZSgpXFxuK1xcdCAqIHNpemVzIGVhY2ggbm9kZSdzIHBlci1wb3J0IHNlcXVlbmNlIHN0YXRlIGZyb20gaHNyLVxcdTAwM2VyZWRib3guXFxuK1xcdCAqL1xcbitcXHRpZiAoaW50ZXJsaW5rKSB7XFxuK1xcdFxcdGhzci1cXHUwMDNlcmVkYm94ID0gdHJ1ZTtcXG4rXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cXHUwMDNlZGV2X2FkZHIpO1xcbitcXHR9XFxuK1xcbiBcXHRyZXMgPSBoc3JfYWRkX3BvcnQoaHNyLCBoc3JfZGV2LCBIU1JfUFRfTUFTVEVSLCBleHRhY2spO1xcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRnb3RvIGVycl9hZGRfbWFzdGVyO1xcbkBAIC04MDUsOCArODQxLDYgQEAgaW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSxcXG4gXFx0XFx0aWYgKHJlcylcXG4gXFx0XFx0XFx0Z290byBlcnJfdW5yZWdpc3RlcjtcXG4gXFxuLVxcdFxcdGhzci1cXHUwMDNlcmVkYm94ID0gdHJ1ZTtcXG4tXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cXHUwMDNlbWFjYWRkcmVzc19yZWRib3gsIGludGVybGluay1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmhzci1cXHUwMDNlcHJ1bmVfcHJveHlfdGltZXIsXFxuIFxcdFxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUFJVTkVfUFJPWFlfUEVSSU9EKSk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXFxuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjc3MzRhNTIxYTk2YzIzIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC00NDAsMTIgKzQ0MCwzNCBAQCBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4gXFx0cmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHBycF9pc19sYW5fZHVwKGVudW0gaHNyX3BvcnRfdHlwZSByeCwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHJldHVybiAocnggPT0gSFNSX1BUX1NMQVZFX0EgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHxcXG4rXFx0ICAgICAgIChyeCA9PSBIU1JfUFRfU0xBVkVfQiBcXHUwMDI2XFx1MDAyNiBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKTtcXG4rfVxcbitcXG4gYm9vbCBwcnBfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuIHtcXG4tXFx0cmV0dXJuICgoZnJhbWUtXFx1MDAzZXBvcnRfcmN2LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKSB8fFxcbi1cXHRcXHQoZnJhbWUtXFx1MDAzZXBvcnRfcmN2LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKSk7XFxuK1xcdGVudW0gaHNyX3BvcnRfdHlwZSByeCA9IGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZTtcXG4rXFxuK1xcdC8qIFN1cGVydmlzaW9uIGZyYW1lcyBhcmUgbm90IGRlbGl2ZXJlZCB0byBhIFNBTiBvbiB0aGUgaW50ZXJsaW5rLiAqL1xcbitcXHRpZiAoZnJhbWUtXFx1MDAzZWlzX3N1cGVydmlzaW9uIFxcdTAwMjZcXHUwMDI2IHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAocHJwX2lzX2xhbl9kdXAocngsIHBvcnQpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdC8qIExBTiB0byBpbnRlcmxpbms6IGtlZXAgUFJQLW5ldHdvcmsgdW5pY2FzdCBvZmYgdGhlIFNBTiBzZWdtZW50LiAqL1xcbitcXHRpZiAoKHJ4ID09IEhTUl9QVF9TTEFWRV9BIHx8IHJ4ID09IEhTUl9QVF9TTEFWRV9CKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKVxcbitcXHRcXHRyZXR1cm4gZnJhbWUtXFx1MDAzZWRzdF9pbl9ub2RlX2RiO1xcbitcXG4rXFx0LyogSW50ZXJsaW5rIHRvIExBTjoga2VlcCBTQU4tdG8tU0FOIHVuaWNhc3QgbG9jYWwuICovXFxuK1xcdGlmICgocG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSB8fCBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcnggPT0gSFNSX1BUX0lOVEVSTElOSylcXG4rXFx0XFx0cmV0dXJuIGZyYW1lLVxcdTAwM2Vkc3RfaW5fcHJveHlfbm9kZV9kYjtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4gYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuQEAgLTQ1Myw3ICs0NzUsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuIFxcdGlmIChwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19IU1JfRldEKVxcbi1cXHRcXHRyZXR1cm4gcHJwX2Ryb3BfZnJhbWUoZnJhbWUsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gcHJwX2lzX2xhbl9kdXAoZnJhbWUtXFx1MDAzZXBvcnRfcmN2LVxcdTAwM2V0eXBlLCBwb3J0KTtcXG4gXFxuIFxcdC8qIFJlZEJveCBzcGVjaWZpYyBmcmFtZXMgZHJvcHBpbmcgcG9saWNpZXNcXG4gXFx0ICpcXG5AQCAtNDY2LDcgKzQ4OCw3IEBAIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbiBcXHQgKiBhcmUgYWRkcmVzc2VkIHRvIGludGVybGluayBwb3J0IChhbmQgYXJlIGluIHRoZSBQcm94eU5vZGVUYWJsZSkuXFxuIFxcdCAqL1xcbiBcXHRza2IgPSBmcmFtZS1cXHUwMDNlc2tiX2hzcjtcXG4tXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBwcnBfZHJvcF9mcmFtZShmcmFtZSwgcG9ydCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBwcnBfaXNfbGFuX2R1cChmcmFtZS1cXHUwMDNlcG9ydF9yY3YtXFx1MDAzZXR5cGUsIHBvcnQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVxcdTAwM2VoX2Rlc3QpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBoc3JfaXNfbm9kZV9pbl9kYihcXHUwMDI2cG9ydC1cXHUwMDNlaHNyLVxcdTAwM2Vwcm94eV9ub2RlX2RiLFxcbiBcXHRcXHRcXHQgICAgICBldGhfaGRyKHNrYiktXFx1MDAzZWhfZGVzdCkpIHtcXG5AQCAtNzA2LDYgKzcyOCwxOCBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbiBcXHRmcmFtZS1cXHUwMDNlaXNfdmxhbiA9IGZhbHNlO1xcbiBcXHRwcm90byA9IGV0aGhkci1cXHUwMDNlaF9wcm90bztcXG4gXFxuK1xcdC8qIFBSUCBSZWRCb3ggb25seTogY2xhc3NpZnkgdGhlIHVuaWNhc3QgZGVzdGluYXRpb24gb25jZSBzbyB0aGVcXG4rXFx0ICogcGVyLWVncmVzcy1wb3J0IGRlY2lzaW9uIGluIHBycF9kcm9wX2ZyYW1lKCkgc3RheXMgTygxKS4gSFNSIFJlZEJveFxcbitcXHQgKiBkb2VzIGl0cyBvd24gY2xhc3NpZmljYXRpb24gYW5kIG11c3Qgbm90IHBheSB0aGVzZSBub2RlLXRhYmxlIHdhbGtzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGhzci1cXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSBcXHUwMDI2XFx1MDAyNiBoc3ItXFx1MDAzZXJlZGJveCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGV0aGhkci1cXHUwMDNlaF9kZXN0KSkge1xcbitcXHRcXHRmcmFtZS1cXHUwMDNlZHN0X2luX25vZGVfZGIgPVxcbitcXHRcXHRcXHRoc3JfaXNfbm9kZV9pbl9kYihcXHUwMDI2aHNyLVxcdTAwM2Vub2RlX2RiLCBldGhoZHItXFx1MDAzZWhfZGVzdCk7XFxuK1xcdFxcdGZyYW1lLVxcdTAwM2Vkc3RfaW5fcHJveHlfbm9kZV9kYiA9XFxuK1xcdFxcdFxcdGhzcl9pc19ub2RlX2luX2RiKFxcdTAwMjZoc3ItXFx1MDAzZXByb3h5X25vZGVfZGIsIGV0aGhkci1cXHUwMDNlaF9kZXN0KTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHByb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSlcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZWlzX3ZsYW4gPSB0cnVlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuYyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmNcXG5pbmRleCBlNDQ5Mjk4NzEyNzQ0NS4uYjNiMTA2YmU2OTJlYWYgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmNcXG5AQCAtMTk5LDcgKzE5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHNyX25vZGUgKmhzcl9hZGRfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcixcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm5ld19ub2RlLVxcdTAwM2VzZXFfb3V0X2xvY2spO1xcbiBcXG4gXFx0aWYgKGhzci1cXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSlcXG4tXFx0XFx0bmV3X25vZGUtXFx1MDAzZXNlcV9wb3J0X2NudCA9IDE7XFxuK1xcdFxcdG5ld19ub2RlLVxcdTAwM2VzZXFfcG9ydF9jbnQgPSBoc3ItXFx1MDAzZXJlZGJveCA/IDIgOiAxO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG5ld19ub2RlLVxcdTAwM2VzZXFfcG9ydF9jbnQgPSBIU1JfUFRfUE9SVFMgLSAxO1xcbiBcXG5AQCAtMjkzLDggKzI5MywxNyBAQCBzdHJ1Y3QgaHNyX25vZGUgKmhzcl9nZXRfbm9kZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsIHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsXFxuIFxcdCAqL1xcbiBcXHRpZiAoZXRoaGRyLVxcdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1BSUCkgfHxcXG4gXFx0ICAgIGV0aGhkci1cXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9IU1IpKSB7XFxuLVxcdFxcdC8qIENoZWNrIGlmIHNrYiBjb250YWlucyBoc3JfZXRoaGRyICovXFxuLVxcdFxcdGlmIChza2ItXFx1MDAzZW1hY19sZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IGhzcl9ldGhoZHIpKVxcbitcXHRcXHRib29sIHBycF9zdXA7XFxuK1xcbitcXHRcXHQvKiBBIFBSUCBzdXBlcnZpc2lvbiBmcmFtZSBpcyBhbiB1bnRhZ2dlZCBFVEhfUF9QUlAgZnJhbWVcXG4rXFx0XFx0ICogKG1hY19sZW4gPT0gRVRIX0hMRU4pOyBpdHMgUkNUIGlzIGFwcGVuZGVkIG9ubHkgb24gZWdyZXNzLlxcbitcXHRcXHQgKiBIU1IgKEVUSF9QX0hTUikgc3VwZXJ2aXNpb24gaXMgZnJvbnQtdGFnZ2VkIGFuZCBzdGlsbCBtdXN0XFxuK1xcdFxcdCAqIGNvbnRhaW4gYSBzdHJ1Y3QgaHNyX2V0aGhkci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBycF9zdXAgPSBoc3ItXFx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICBldGhoZHItXFx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUFJQKSBcXHUwMDI2XFx1MDAyNiBpc19zdXA7XFxuK1xcbitcXHRcXHRpZiAoIXBycF9zdXAgXFx1MDAyNlxcdTAwMjYgc2tiLVxcdTAwM2VtYWNfbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJjdCA9IHNrYl9nZXRfUFJQX3JjdChza2IpO1xcbkBAIC0zODEsNiArMzkwLDcgQEAgdm9pZCBoc3JfaGFuZGxlX3N1cF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxcbiBcXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XFxuIFxcdHVuc2lnbmVkIGludCB0b3RhbF9wdWxsX3NpemUgPSAwO1xcbiBcXHR1bnNpZ25lZCBpbnQgcHVsbF9zaXplID0gMDtcXG4rXFx0dW5zaWduZWQgaW50IHNlcV9wb3J0X2NudDtcXG4gXFx0dW5zaWduZWQgbG9uZyBpZHg7XFxuIFxcdGludCBpO1xcbiBcXG5AQCAtNDc0LDYgKzQ4NCw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRzZXFfcG9ydF9jbnQgPSBtaW4obm9kZV9yZWFsLVxcdTAwM2VzZXFfcG9ydF9jbnQsIG5vZGVfY3Vyci1cXHUwMDNlc2VxX3BvcnRfY250KTtcXG4gXFx0eGFfZm9yX2VhY2goXFx1MDAyNm5vZGVfY3Vyci1cXHUwMDNlc2VxX2Jsb2NrcywgaWR4LCBzcmNfYmxrKSB7XFxuIFxcdFxcdGlmIChoc3Jfc2VxX2Jsb2NrX2lzX29sZChzcmNfYmxrKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTQ4Miw3ICs0OTMsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuIFxcdFxcdGlmICghbWVyZ2VfYmxrKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0bWVyZ2VfYmxrLVxcdTAwM2V0aW1lID0gbWluKG1lcmdlX2Jsay1cXHUwMDNldGltZSwgc3JjX2Jsay1cXHUwMDNldGltZSk7XFxuLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBub2RlX3JlYWwtXFx1MDAzZXNlcV9wb3J0X2NudDsgaSsrKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzZXFfcG9ydF9jbnQ7IGkrKykge1xcbiBcXHRcXHRcXHRiaXRtYXBfb3IobWVyZ2VfYmxrLVxcdTAwM2VzZXFfbnJzW2ldLCBtZXJnZV9ibGstXFx1MDAzZXNlcV9ucnNbaV0sXFxuIFxcdFxcdFxcdFxcdCAgc3JjX2Jsay1cXHUwMDNlc2VxX25yc1tpXSwgSFNSX1NFUV9CTE9DS19TSVpFKTtcXG4gXFx0XFx0fVxcbkBAIC02NDksOSArNjYwLDEzIEBAIGludCBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcXG4gXFx0aWYgKGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qIGZvciBQUlAgd2Ugc2hvdWxkIG9ubHkgZm9yd2FyZCBmcmFtZXMgZnJvbSB0aGUgc2xhdmUgcG9ydHNcXG4tXFx0ICogdG8gdGhlIG1hc3RlciBwb3J0XFxuK1xcdC8qIFJlZEJveDogZm9yd2FyZCBMQU4gZnJhbWVzIG91dCB0aGUgaW50ZXJsaW5rIHRvIGEgU0FOLCBkZWR1cGluZyB0aGVcXG4rXFx0ICogdHdvIExBTiBjb3BpZXMgb24gYSBkZWRpY2F0ZWQgc2xvdC5cXG4gXFx0ICovXFxuK1xcdGlmIChwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXFxuK1xcdFxcdHJldHVybiBoc3JfY2hlY2tfZHVwbGljYXRlKGZyYW1lLCAxKTtcXG4rXFxuK1xcdC8qIEZvciBQUlAgb25seSBzbGF2ZS10by1tYXN0ZXIgZnJhbWVzIGFyZSBmb3J3YXJkZWQuICovXFxuIFxcdGlmIChwb3J0LVxcdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaCBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmhcXG5pbmRleCBjNjVlY2I5MjU3MzQ4OS4uMTI3YTNmYjY0ZDVmMDMgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3JfZnJhbWVyZWcuaFxcbisrKyBiL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmhcXG5AQCAtMjcsNiArMjcsOCBAQCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8ge1xcbiBcXHRib29sIGlzX2xvY2FsX2Rlc3Q7XFxuIFxcdGJvb2wgaXNfbG9jYWxfZXhjbHVzaXZlO1xcbiBcXHRib29sIGlzX2Zyb21fc2FuO1xcbitcXHRib29sIGRzdF9pbl9ub2RlX2RiO1xcbitcXHRib29sIGRzdF9pbl9wcm94eV9ub2RlX2RiO1xcbiB9O1xcbiBcXG4gdm9pZCBoc3JfZGVsX3NlbGZfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcik7XFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX21haW4uaCBiL25ldC9oc3IvaHNyX21haW4uaFxcbmluZGV4IDEzNGU0ZjNmZmY2MDM2Li41M2U5NWJhZTBlZTI3NiAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9tYWluLmhcXG4rKysgYi9uZXQvaHNyL2hzcl9tYWluLmhcXG5AQCAtMjExLDcgKzIxMSw3IEBAIHN0cnVjdCBoc3JfcHJpdiB7XFxuIFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRib29sIGZ3ZF9vZmZsb2FkZWQ7XFx0LyogRm9yd2FyZGluZyBvZmZsb2FkZWQgdG8gSFcgKi9cXG4gXFx0Ym9vbCByZWRib3g7ICAgICAgICAgICAgLyogRGV2aWNlIHN1cHBvcnRzIEhTUiBSZWRCb3ggKi9cXG4tXFx0dW5zaWduZWQgY2hhclxcdFxcdG1hY2FkZHJlc3NfcmVkYm94W0VUSF9BTEVOXTtcXG4rXFx0dW5zaWduZWQgY2hhclxcdFxcdG1hY2FkZHJlc3NfcmVkYm94W0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpO1xcbiBcXHR1bnNpZ25lZCBjaGFyXFx0XFx0c3VwX211bHRpY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpO1xcbiBcXHRcXHRcXHRcXHQvKiBBbGlnbiB0byB1MTYgYm91bmRhcnkgdG8gYXZvaWQgdW5hbGlnbmVkIGFjY2Vzc1xcbiBcXHRcXHRcXHRcXHQgKiBpbiBldGhlcl9hZGRyX2VxdWFsXFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX25ldGxpbmsuYyBiL25ldC9oc3IvaHNyX25ldGxpbmsuY1xcbmluZGV4IDgwOTlmMjA2OWE3NDhlLi44ODk0MGU4MDE0YjI0ZiAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcXG4rKysgYi9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcXG5AQCAtMTIxLDE0ICsxMjEsOCBAQCBzdGF0aWMgaW50IGhzcl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApIHtcXG4rXFx0aWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApXFxuIFxcdFxcdHByb3RvX3ZlcnNpb24gPSBQUlBfVjE7XFxuLVxcdFxcdGlmIChpbnRlcmxpbmspIHtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkludGVybGluayBvbmx5IHdvcmtzIHdpdGggSFNSXFxcIik7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4gXFxuIFxcdHJldHVybiBoc3JfZGV2X2ZpbmFsaXplKGRldiwgbGluaywgaW50ZXJsaW5rLCBtdWx0aWNhc3Rfc3BlYyxcXG4gXFx0XFx0XFx0XFx0cHJvdG9fdmVyc2lvbiwgZXh0YWNrKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMjE1MGU0ODdhYzdkN2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG5AQCAtNCw2ICs0LDcgQEAgdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXFxuIFxcbiBURVNUX1BST0dTIDo9IFxcXFxcXG4gXFx0aHNyX3Bpbmcuc2ggXFxcXFxcbitcXHRoc3JfcHJwX3JlZGJveC5zaCBcXFxcXFxuIFxcdGhzcl9yZWRib3guc2ggXFxcXFxcbiBcXHRsaW5rX2ZhdWx0cy5zaCBcXFxcXFxuIFxcdHBycF9waW5nLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NzljODkyMjI1YjFmM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9wcnBfcmVkYm94LnNoXFxuQEAgLTAsMCArMSw5OSBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBUZXN0IGEgUFJQIFJlZEJveCAoUFJQLVNBTik6IGEgU0FOIHRoYXQgc2l0cyBiZWhpbmQgdGhlIGludGVybGluayBwb3J0IG11c3RcXG4rIyByZWFjaCwgYW5kIGJlIHJlYWNoZWQgYnksIGEgcGVlciBEQU5QIG9uIHRoZSBQUlAgbmV0d29yayB3aXRoIGl0cyBvd24gTUFDXFxuKyMgcHJlc2VydmVkIG9uIHRoZSB3aXJlLCBhbmQgdGhlIFJlZEJveCBtdXN0IGFubm91bmNlIHRoZSBTQU4gd2l0aCBhIFJlZEJveC1NQUNcXG4rIyBUTFYgKHRlcm1pbmF0ZWQgYnkgYW4gRU9UIG1hcmtlcikgaW4gaXRzIFBSUCBzdXBlcnZpc2lvbiBmcmFtZXMuXFxuKyNcXG4rIyAgIFJCICAgIFBSUCBSZWRCb3g6IHBycDAgb3ZlciByYl9hL3JiX2IgKExBTiBBL0IpICsgaW50ZXJsaW5rIHJiX2lsXFxuKyMgICBQRUVSICBwZWVyIERBTlAgOiBwcnAwIG92ZXIgcGVfYS9wZV9iLCAxMDAuNjQuMC4yXFxuKyMgICBTQU4gICBTQU4gICAgICAgOiBzYW5faWwsIG93biBNQUMsIDEwMC42NC4wLjUxIChiZWhpbmQgdGhlIGludGVybGluaylcXG4rXFxuK2lwdjY9ZmFsc2VcXG4rXFxuK3NvdXJjZSAuL2hzcl9jb21tb24uc2hcXG4rXFxuK2NoZWNrX3ByZXJlcXVpc2l0ZXNcXG4rXFxuK2lmICEgY29tbWFuZCAtdiB0Y3BkdW1wIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MTsgdGhlblxcbitcXHRlY2hvIFxcXCJTS0lQOiBUaGlzIHRlc3QgcmVxdWlyZXMgdGNwZHVtcFxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK2ZpXFxuK1xcbitpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlxcdTAwM2VcXHUwMDI2MSB8IGdyZXAgLXEgaW50ZXJsaW5rOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IGlwcm91dGUyIHRvbyBvbGQgKG5vIGhzciBpbnRlcmxpbmsgc3VwcG9ydClcXFwiXFxuK1xcdGV4aXQgJGtzZnRfc2tpcFxcbitmaVxcbitcXG4rc2V0dXBfbnMgUkIgUEVFUiBTQU5cXG4rdHJhcCAnY2xlYW51cF9ucyBcXFwiJFJCXFxcIiBcXFwiJFBFRVJcXFwiIFxcXCIkU0FOXFxcIicgRVhJVFxcbitcXG4raXAgbGluayBhZGQgcmJfYSBuZXRucyBcXFwiJFJCXFxcIiB0eXBlIHZldGggcGVlciBuYW1lIHBlX2EgbmV0bnMgXFxcIiRQRUVSXFxcIlxcbitpcCBsaW5rIGFkZCByYl9iIG5ldG5zIFxcXCIkUkJcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYiBuZXRucyBcXFwiJFBFRVJcXFwiXFxuK2lwIGxpbmsgYWRkIHJiX2lsIG5ldG5zIFxcXCIkUkJcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgc2FuX2lsIG5ldG5zIFxcXCIkU0FOXFxcIlxcbitcXG4raXAgLW4gXFxcIiRSQlxcXCIgICBsaW5rIHNldCByYl9hIHVwXFxuK2lwIC1uIFxcXCIkUkJcXFwiICAgbGluayBzZXQgcmJfYiB1cFxcbitpcCAtbiBcXFwiJFJCXFxcIiAgIGxpbmsgc2V0IHJiX2lsIHVwXFxuK2lwIC1uIFxcXCIkUEVFUlxcXCIgbGluayBzZXQgcGVfYSB1cFxcbitpcCAtbiBcXFwiJFBFRVJcXFwiIGxpbmsgc2V0IHBlX2IgdXBcXG4raXAgLW4gXFxcIiRTQU5cXFwiICBsaW5rIHNldCBzYW5faWwgdXBcXG4raXAgLW4gXFxcIiRTQU5cXFwiICBhZGRyIGFkZCAxMDAuNjQuMC41MS8yNCBkZXYgc2FuX2lsXFxuK1xcbisjIEZlYXR1cmUgZ2F0ZTogUFJQIGludGVybGluayAoUmVkQm94KSBjcmVhdGlvbi4gQSBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94XFxuKyMgc3VwcG9ydCByZWplY3RzIHRoaXMgd2l0aCAtRUlOVkFMLCBzbyBTS0lQIHJhdGhlciB0aGFuIEZBSUwuXFxuK2lmICEgaXAgLW4gXFxcIiRSQlxcXCIgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSByYl9hIHNsYXZlMiByYl9iIFxcXFxcXG4rICAgICBpbnRlcmxpbmsgcmJfaWwgcHJvdG8gMSAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRlY2hvIFxcXCJTS0lQOiBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94IChpbnRlcmxpbmspIHN1cHBvcnRcXFwiXFxuK1xcdGV4aXQgJGtzZnRfc2tpcFxcbitmaVxcbitpcCAtbiBcXFwiJFJCXFxcIiAgIGxpbmsgc2V0IHBycDAgdXBcXG4raXAgLW4gXFxcIiRQRUVSXFxcIiBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHBlX2Egc2xhdmUyIHBlX2IgcHJvdG8gMVxcbitpcCAtbiBcXFwiJFBFRVJcXFwiIGxpbmsgc2V0IHBycDAgdXBcXG4raXAgLW4gXFxcIiRQRUVSXFxcIiBhZGRyIGFkZCAxMDAuNjQuMC4yLzI0IGRldiBwcnAwXFxuK3NsZWVwIDFcXG4rXFxuK3Nhbl9tYWM9JChpcCAtbiBcXFwiJFNBTlxcXCIgLWJyIGxpbmsgc2hvdyBzYW5faWwgfCBhd2sgJ3twcmludCAkM30nKVxcbityYl9tYWM9JChpcCAtbiBcXFwiJFJCXFxcIiAtYnIgbGluayBzaG93IHJiX2lsIHwgYXdrICd7cHJpbnQgJDN9JylcXG4rXFxuKyMgQmlkaXJlY3Rpb25hbCB1bmljYXN0IGFjcm9zcyB0aGUgaW50ZXJsaW5rLlxcbitkb19waW5nIFxcXCIkUEVFUlxcXCIgMTAwLjY0LjAuNTFcXG4rZG9fcGluZyBcXFwiJFNBTlxcXCIgIDEwMC42NC4wLjJcXG4rc3RvcF9pZl9lcnJvciBcXFwiUFJQIFJlZEJveCBiaWRpcmVjdGlvbmFsIHVuaWNhc3QgZmFpbGVkXFxcIlxcbitcXG4rIyBUaGUgU0FOIHNvdXJjZSBNQUMgbXVzdCBiZSBwcmVzZXJ2ZWQgb24gdGhlIFBSUCBuZXR3b3JrLCBub3QgbGF1bmRlcmVkIHRvIHRoZVxcbisjIFJlZEJveCBNQUM6IHRoZSBwZWVyIHJlc29sdmVzIHRoZSBTQU4gSVAgdG8gdGhlIFNBTidzIG93biBNQUMuXFxuK25laWdoPSQoaXAgLW4gXFxcIiRQRUVSXFxcIiBuZWlnaCBzaG93IDEwMC42NC4wLjUxIHwgYXdrICd7cHJpbnQgJDV9JylcXG4raWYgWyBcXFwiJG5laWdoXFxcIiAhPSBcXFwiJHNhbl9tYWNcXFwiIF07IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0FOIE1BQyBwcmVzZXJ2YXRpb24gWyBGQUlMIF06IHBlZXIgcmVzb2x2ZWQgMTAwLjY0LjAuNTEgdG9cXFwiIFxcXFxcXG4rXFx0ICAgICBcXFwiJyRuZWlnaCcsIGV4cGVjdGVkICRzYW5fbWFjXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdHJldD0xXFxuK2ZpXFxuK3N0b3BfaWZfZXJyb3IgXFxcIlNBTiBNQUMgbm90IHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmtcXFwiXFxuK1xcbisjIFRoZSBwcm94eS1hbm5vdW5jZSBzdXBlcnZpc2lvbiBmcmFtZSBtdXN0IGNhcnJ5LCBpbiBvcmRlciwgdGhlIGxpZmUtY2hlY2sgVExWXFxuKyMgKHR5cGUgMHgxNCwgbGVuIDYpICsgTWFjQWRkcmVzc0EgPT0gU0FOIE1BQyArIHRoZSBSZWRCb3gtTUFDIFRMViAodHlwZSAweDFlLFxcbisjIGxlbiA2KSArIE1hY0FkZHJlc3NSZWRCb3ggPT0gUmVkQm94IE1BQyArIHRoZSBFT1QgbWFya2VyICgweDAwMDApLlxcbitpcCBuZXRucyBleGVjIFxcXCIkU0FOXFxcIiBwaW5nIC1pIDAuMiAtcSAxMDAuNjQuMC4yIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDI2XFxuK3BpbmdfcGlkPSQhXFxuK2NhcD0kKGlwIG5ldG5zIGV4ZWMgXFxcIiRQRUVSXFxcIiB0aW1lb3V0IDUgdGNwZHVtcCAtaSBwZV9hIC1ubiAteCBcXFxcXFxuK1xcdFxcXCJldGhlciBwcm90byAweDg4ZmIgYW5kIGV0aGVyIHNyYyAkcmJfbWFjXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlKVxcbitraWxsIFxcXCIkcGluZ19waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcXG4rd2FpdCBcXFwiJHBpbmdfcGlkXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXFxuK1xcbitzYW5faGV4PSQoZWNobyBcXFwiJHNhbl9tYWNcXFwiIHwgdHIgLWQgJzonKVxcbityYl9oZXg9JChlY2hvIFxcXCIkcmJfbWFjXFxcIiB8IHRyIC1kICc6JylcXG4rIyBSZWFzc2VtYmxlIGNvbnRpZ3VvdXMgZnJhbWUgaGV4OiBkcm9wIHRoZSBcXFwiMHgwMDEwOlxcXCIgb2Zmc2V0IGxhYmVscyBhbmQgc3BhY2VzLlxcbitmcmFtZV9oZXg9JChlY2hvIFxcXCIkY2FwXFxcIiB8IGF3ayAnL15bWzpzcGFjZTpdXSoweFswLTlhLWZdKzovIHtcXG4rXFx0c3ViKC9eW1s6c3BhY2U6XV0qMHhbMC05YS1mXSs6W1s6c3BhY2U6XV0qLywgXFxcIlxcXCIpO1xcbitcXHRnc3ViKC8gLywgXFxcIlxcXCIpOyBwcmludGYgXFxcIiVzXFxcIiwgJDAgfScpXFxuK2lmICEgZWNobyBcXFwiJGZyYW1lX2hleFxcXCIgfCBncmVwIC1xIFxcXCIxNDA2JHtzYW5faGV4fTFlMDYke3JiX2hleH0wMDAwXFxcIjsgdGhlblxcbitcXHRlY2hvIFxcXCJzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMViBbIEZBSUwgXTogbWlzc2luZyBTQU4gTUFDLCBUeXBlLTMwXFxcIiBcXFxcXFxuK1xcdCAgICAgXFxcInBheWxvYWQsIG9yIEVPVFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRyZXQ9MVxcbitmaVxcbitzdG9wX2lmX2Vycm9yIFxcXCJQUlAgUmVkQm94IHN1cGVydmlzaW9uIFJlZEJveC1NQUMgVExWL0VPVCBjaGVjayBmYWlsZWRcXFwiXFxuK1xcbitlY2hvIFxcXCJJTkZPOiBQUlAgUmVkQm94IChQUlAtU0FOKSBjb25mb3JtYW5jZSBjaGVja3MgcGFzc2VkXFxcIlxcbitleGl0ICRyZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDA6Mzc6MjYuMjY2NjM3NTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMDc2NTY1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lXCIsXG4gICAgXCJwcnBfZHJvcF9mcmFtZVwiLFxuICAgIFwiaHNyX2Ryb3BfZnJhbWVcIixcbiAgICBcImZpbGxfZnJhbWVfaW5mb1wiLFxuICAgIFwiaHNyX2FkZF9ub2RlXCIsXG4gICAgXCJoc3JfZ2V0X25vZGVcIixcbiAgICBcImhzcl9oYW5kbGVfc3VwX2ZyYW1lXCIsXG4gICAgXCJwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0XCIsXG4gICAgXCJoc3JfbmV3bGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGZvciBQUlAgKFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wpIFJlZEJveCAoaW50ZXJsaW5rKS4gVGhpcyBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIHBhY2tldCBmb3J3YXJkaW5nLCBkcm9wcGluZyBsb2dpYywgbm9kZSBtYW5hZ2VtZW50LCBhbmQgc3VwZXJ2aXNpb24gZnJhbWUgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM1MGJkMDBlMWI1Y2JjZTY5MmY3OWYxNWY0NzI4OGMzZjhhY2E1ZDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMDozNzoyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4wOTczZjlhOTRmNGQ0OCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4rKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTM3MiwxMCArMzcyLDIxIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIHtcbiBcdHN0cnVjdCBoc3JfcHJpdiAqaHNyID0gbWFzdGVyLVx1MDAzZWhzcjtcbiBcdHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQgKmhzcl9zcDtcbitcdHN0cnVjdCBoc3Jfc3VwX3RsdiAqaHNyX3N0bHY7XG4gXHRzdHJ1Y3QgaHNyX3N1cF90YWcgKmhzcl9zdGFnO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGJvb2wgcmVkYm94X3Byb3h5O1xuK1x0aW50IGV4dHJhID0gMDtcbiBcbi1cdHNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIDApO1xuK1x0cmVkYm94X3Byb3h5ID0gaHNyLVx1MDAzZXJlZGJveCBcdTAwMjZcdTAwMjYgbWFzdGVyLVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSztcbitcbitcdC8qIEEgcHJveHktYW5ub3VuY2UgY2FycmllcyBhIFJlZEJveC1NQUMgVExWIGFuZCBhbiBFT1QgbWFya2VyLiAqL1xuK1x0aWYgKHJlZGJveF9wcm94eSlcbitcdFx0ZXh0cmEgPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KSArXG4rXHRcdFx0c2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpICtcbitcdFx0XHRzaXplb2Yoc3RydWN0IGhzcl9zdXBfdGx2KTtcbitcbitcdHNrYiA9IGhzcl9pbml0X3NrYihtYXN0ZXIsIGV4dHJhKTtcbiBcdGlmICghc2tiKSB7XG4gXHRcdG5ldGRldl93YXJuX29uY2UobWFzdGVyLVx1MDAzZWRldiwgXCJQUlA6IENvdWxkIG5vdCBzZW5kIHN1cGVydmlzaW9uIGZyYW1lXFxuXCIpO1xuIFx0XHRyZXR1cm47XG5AQCAtMzkzLDkgKzQwNCwyNSBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG4tXHQvKiBQYXlsb2FkOiBNYWNBZGRyZXNzQSAqL1xuK1x0LyogUGF5bG9hZDogTWFjQWRkcmVzc0EsIHRoZSBhbm5vdW5jZWQgbm9kZS4gKi9cbiBcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xuLVx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIGFkZHIpO1xuK1xuK1x0LyogUHJveHktYW5ub3VuY2U6IGFwcGVuZCB0aGUgUmVkQm94LU1BQyBUTFYgKFR5cGUgMzApIGFuZCBhbiBleHBsaWNpdFxuK1x0ICogRU9UIHRvIHRlcm1pbmF0ZSB0aGUgVExWIGNoYWluIGJlZm9yZSB6ZXJvIHBhZGRpbmcuXG4rXHQgKi9cbitcdGlmIChyZWRib3hfcHJveHkpIHtcbitcdFx0aHNyX3N0bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3RsdikpO1xuK1x0XHRoc3Jfc3Rsdi1cdTAwM2VIU1JfVExWX3R5cGUgPSBQUlBfVExWX1JFREJPWF9NQUM7XG4rXHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuK1xuK1x0XHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbitcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XG4rXG4rXHRcdGhzcl9zdGx2ID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF90bHYpKTtcbitcdFx0aHNyX3N0bHYtXHUwMDNlSFNSX1RMVl90eXBlID0gSFNSX1RMVl9FT1Q7XG4rXHRcdGhzcl9zdGx2LVx1MDAzZUhTUl9UTFZfbGVuZ3RoID0gMDtcbitcdH1cbiBcbiBcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbkBAIC03NjgsNiArNzk1LDE1IEBAIGludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sXG4gXHQvKiBNYWtlIHN1cmUgdGhlIDFzdCBjYWxsIHRvIG5ldGlmX2NhcnJpZXJfb24oKSBnZXRzIHRocm91Z2ggKi9cbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKGhzcl9kZXYpO1xuIFxuK1x0LyogUHVibGlzaCB0aGUgUmVkQm94IHN0YXRlIGJlZm9yZSBhbnkgcG9ydCBpcyBhdHRhY2hlZDogdGhlIHJ4XG4rXHQgKiBoYW5kbGVycyBhcmUgbGl2ZSBmcm9tIGhzcl9hZGRfcG9ydCgpIG9uLCBhbmQgaHNyX2FkZF9ub2RlKClcbitcdCAqIHNpemVzIGVhY2ggbm9kZSdzIHBlci1wb3J0IHNlcXVlbmNlIHN0YXRlIGZyb20gaHNyLVx1MDAzZXJlZGJveC5cbitcdCAqL1xuK1x0aWYgKGludGVybGluaykge1xuK1x0XHRoc3ItXHUwMDNlcmVkYm94ID0gdHJ1ZTtcbitcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCwgaW50ZXJsaW5rLVx1MDAzZWRldl9hZGRyKTtcbitcdH1cbitcbiBcdHJlcyA9IGhzcl9hZGRfcG9ydChoc3IsIGhzcl9kZXYsIEhTUl9QVF9NQVNURVIsIGV4dGFjayk7XG4gXHRpZiAocmVzKVxuIFx0XHRnb3RvIGVycl9hZGRfbWFzdGVyO1xuQEAgLTgwNSw4ICs4NDEsNiBAQCBpbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxuIFx0XHRpZiAocmVzKVxuIFx0XHRcdGdvdG8gZXJyX3VucmVnaXN0ZXI7XG4gXG4tXHRcdGhzci1cdTAwM2VyZWRib3ggPSB0cnVlO1xuLVx0XHRldGhlcl9hZGRyX2NvcHkoaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94LCBpbnRlcmxpbmstXHUwMDNlZGV2X2FkZHIpO1xuIFx0XHRtb2RfdGltZXIoXHUwMDI2aHNyLVx1MDAzZXBydW5lX3Byb3h5X3RpbWVyLFxuIFx0XHRcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUFJVTkVfUFJPWFlfUEVSSU9EKSk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5pbmRleCAwNzc0OTgxYTY1YzE2NC4uNzczNGE1MjFhOTZjMjMgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTQ0MCwxMiArNDQwLDM0IEBAIHN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0cmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7XG4gfVxuIFxuK3N0YXRpYyBib29sIHBycF9pc19sYW5fZHVwKGVudW0gaHNyX3BvcnRfdHlwZSByeCwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuK3tcbitcdHJldHVybiAocnggPT0gSFNSX1BUX1NMQVZFX0EgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQikgfHxcbitcdCAgICAgICAocnggPT0gSFNSX1BUX1NMQVZFX0IgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSk7XG4rfVxuK1xuIGJvb2wgcHJwX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIHtcbi1cdHJldHVybiAoKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgXHUwMDI2XHUwMDI2XG4tXHRcdCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIHx8XG4tXHRcdChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CIFx1MDAyNlx1MDAyNlxuLVx0XHQgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9BKSk7XG4rXHRlbnVtIGhzcl9wb3J0X3R5cGUgcnggPSBmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlO1xuK1xuK1x0LyogU3VwZXJ2aXNpb24gZnJhbWVzIGFyZSBub3QgZGVsaXZlcmVkIHRvIGEgU0FOIG9uIHRoZSBpbnRlcmxpbmsuICovXG4rXHRpZiAoZnJhbWUtXHUwMDNlaXNfc3VwZXJ2aXNpb24gXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGlmIChwcnBfaXNfbGFuX2R1cChyeCwgcG9ydCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0LyogTEFOIHRvIGludGVybGluazoga2VlcCBQUlAtbmV0d29yayB1bmljYXN0IG9mZiB0aGUgU0FOIHNlZ21lbnQuICovXG4rXHRpZiAoKHJ4ID09IEhTUl9QVF9TTEFWRV9BIHx8IHJ4ID09IEhTUl9QVF9TTEFWRV9CKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSylcbitcdFx0cmV0dXJuIGZyYW1lLVx1MDAzZWRzdF9pbl9ub2RlX2RiO1xuK1xuK1x0LyogSW50ZXJsaW5rIHRvIExBTjoga2VlcCBTQU4tdG8tU0FOIHVuaWNhc3QgbG9jYWwuICovXG4rXHRpZiAoKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSB8fCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0IpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHJ4ID09IEhTUl9QVF9JTlRFUkxJTkspXG4rXHRcdHJldHVybiBmcmFtZS1cdTAwM2Vkc3RfaW5fcHJveHlfbm9kZV9kYjtcbitcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gYm9vbCBoc3JfZHJvcF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5AQCAtNDUzLDcgKzQ3NSw3IEBAIGJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfRldEKVxuLVx0XHRyZXR1cm4gcHJwX2Ryb3BfZnJhbWUoZnJhbWUsIHBvcnQpO1xuK1x0XHRyZXR1cm4gcHJwX2lzX2xhbl9kdXAoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSwgcG9ydCk7XG4gXG4gXHQvKiBSZWRCb3ggc3BlY2lmaWMgZnJhbWVzIGRyb3BwaW5nIHBvbGljaWVzXG4gXHQgKlxuQEAgLTQ2Niw3ICs0ODgsNyBAQCBib29sIGhzcl9kcm9wX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIGFyZSBhZGRyZXNzZWQgdG8gaW50ZXJsaW5rIHBvcnQgKGFuZCBhcmUgaW4gdGhlIFByb3h5Tm9kZVRhYmxlKS5cbiBcdCAqL1xuIFx0c2tiID0gZnJhbWUtXHUwMDNlc2tiX2hzcjtcbi1cdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9kcm9wX2ZyYW1lKGZyYW1lLCBwb3J0KSBcdTAwMjZcdTAwMjZcbitcdGlmIChza2IgXHUwMDI2XHUwMDI2IHBycF9pc19sYW5fZHVwKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUsIHBvcnQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlzX3VuaWNhc3RfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktXHUwMDNlaF9kZXN0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICBoc3JfaXNfbm9kZV9pbl9kYihcdTAwMjZwb3J0LVx1MDAzZWhzci1cdTAwM2Vwcm94eV9ub2RlX2RiLFxuIFx0XHRcdCAgICAgIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QpKSB7XG5AQCAtNzA2LDYgKzcyOCwxOCBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0ZnJhbWUtXHUwMDNlaXNfdmxhbiA9IGZhbHNlO1xuIFx0cHJvdG8gPSBldGhoZHItXHUwMDNlaF9wcm90bztcbiBcbitcdC8qIFBSUCBSZWRCb3ggb25seTogY2xhc3NpZnkgdGhlIHVuaWNhc3QgZGVzdGluYXRpb24gb25jZSBzbyB0aGVcbitcdCAqIHBlci1lZ3Jlc3MtcG9ydCBkZWNpc2lvbiBpbiBwcnBfZHJvcF9mcmFtZSgpIHN0YXlzIE8oMSkuIEhTUiBSZWRCb3hcbitcdCAqIGRvZXMgaXRzIG93biBjbGFzc2lmaWNhdGlvbiBhbmQgbXVzdCBub3QgcGF5IHRoZXNlIG5vZGUtdGFibGUgd2Fsa3MuXG4rXHQgKi9cbitcdGlmIChoc3ItXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSBcdTAwMjZcdTAwMjYgaHNyLVx1MDAzZXJlZGJveCBcdTAwMjZcdTAwMjZcbitcdCAgICBpc191bmljYXN0X2V0aGVyX2FkZHIoZXRoaGRyLVx1MDAzZWhfZGVzdCkpIHtcbitcdFx0ZnJhbWUtXHUwMDNlZHN0X2luX25vZGVfZGIgPVxuK1x0XHRcdGhzcl9pc19ub2RlX2luX2RiKFx1MDAyNmhzci1cdTAwM2Vub2RlX2RiLCBldGhoZHItXHUwMDNlaF9kZXN0KTtcbitcdFx0ZnJhbWUtXHUwMDNlZHN0X2luX3Byb3h5X25vZGVfZGIgPVxuK1x0XHRcdGhzcl9pc19ub2RlX2luX2RiKFx1MDAyNmhzci1cdTAwM2Vwcm94eV9ub2RlX2RiLCBldGhoZHItXHUwMDNlaF9kZXN0KTtcbitcdH1cbitcbiBcdGlmIChwcm90byA9PSBodG9ucyhFVEhfUF84MDIxUSkpXG4gXHRcdGZyYW1lLVx1MDAzZWlzX3ZsYW4gPSB0cnVlO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmMgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG5pbmRleCBlNDQ5Mjk4NzEyNzQ0NS4uYjNiMTA2YmU2OTJlYWYgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG4rKysgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5jXG5AQCAtMTk5LDcgKzE5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHNyX25vZGUgKmhzcl9hZGRfbm9kZShzdHJ1Y3QgaHNyX3ByaXYgKmhzcixcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5ld19ub2RlLVx1MDAzZXNlcV9vdXRfbG9jayk7XG4gXG4gXHRpZiAoaHNyLVx1MDAzZXByb3RfdmVyc2lvbiA9PSBQUlBfVjEpXG4tXHRcdG5ld19ub2RlLVx1MDAzZXNlcV9wb3J0X2NudCA9IDE7XG4rXHRcdG5ld19ub2RlLVx1MDAzZXNlcV9wb3J0X2NudCA9IGhzci1cdTAwM2VyZWRib3ggPyAyIDogMTtcbiBcdGVsc2VcbiBcdFx0bmV3X25vZGUtXHUwMDNlc2VxX3BvcnRfY250ID0gSFNSX1BUX1BPUlRTIC0gMTtcbiBcbkBAIC0yOTMsOCArMjkzLDE3IEBAIHN0cnVjdCBoc3Jfbm9kZSAqaHNyX2dldF9ub2RlKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcbiBcdCAqL1xuIFx0aWYgKGV0aGhkci1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1BSUCkgfHxcbiBcdCAgICBldGhoZHItXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9IU1IpKSB7XG4tXHRcdC8qIENoZWNrIGlmIHNrYiBjb250YWlucyBoc3JfZXRoaGRyICovXG4tXHRcdGlmIChza2ItXHUwMDNlbWFjX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSlcbitcdFx0Ym9vbCBwcnBfc3VwO1xuK1xuK1x0XHQvKiBBIFBSUCBzdXBlcnZpc2lvbiBmcmFtZSBpcyBhbiB1bnRhZ2dlZCBFVEhfUF9QUlAgZnJhbWVcbitcdFx0ICogKG1hY19sZW4gPT0gRVRIX0hMRU4pOyBpdHMgUkNUIGlzIGFwcGVuZGVkIG9ubHkgb24gZWdyZXNzLlxuK1x0XHQgKiBIU1IgKEVUSF9QX0hTUikgc3VwZXJ2aXNpb24gaXMgZnJvbnQtdGFnZ2VkIGFuZCBzdGlsbCBtdXN0XG4rXHRcdCAqIGNvbnRhaW4gYSBzdHJ1Y3QgaHNyX2V0aGhkci5cbitcdFx0ICovXG4rXHRcdHBycF9zdXAgPSBoc3ItXHUwMDNlcHJvdF92ZXJzaW9uID09IFBSUF9WMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgIGV0aGhkci1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1BSUCkgXHUwMDI2XHUwMDI2IGlzX3N1cDtcbitcbitcdFx0aWYgKCFwcnBfc3VwIFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlbWFjX2xlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoc3JfZXRoaGRyKSlcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH0gZWxzZSB7XG4gXHRcdHJjdCA9IHNrYl9nZXRfUFJQX3JjdChza2IpO1xuQEAgLTM4MSw2ICszOTAsNyBAQCB2b2lkIGhzcl9oYW5kbGVfc3VwX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XG4gXHR1bnNpZ25lZCBpbnQgdG90YWxfcHVsbF9zaXplID0gMDtcbiBcdHVuc2lnbmVkIGludCBwdWxsX3NpemUgPSAwO1xuK1x0dW5zaWduZWQgaW50IHNlcV9wb3J0X2NudDtcbiBcdHVuc2lnbmVkIGxvbmcgaWR4O1xuIFx0aW50IGk7XG4gXG5AQCAtNDc0LDYgKzQ4NCw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdFx0fVxuIFx0fVxuIFxuK1x0c2VxX3BvcnRfY250ID0gbWluKG5vZGVfcmVhbC1cdTAwM2VzZXFfcG9ydF9jbnQsIG5vZGVfY3Vyci1cdTAwM2VzZXFfcG9ydF9jbnQpO1xuIFx0eGFfZm9yX2VhY2goXHUwMDI2bm9kZV9jdXJyLVx1MDAzZXNlcV9ibG9ja3MsIGlkeCwgc3JjX2Jsaykge1xuIFx0XHRpZiAoaHNyX3NlcV9ibG9ja19pc19vbGQoc3JjX2JsaykpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtNDgyLDcgKzQ5Myw3IEBAIHZvaWQgaHNyX2hhbmRsZV9zdXBfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdFx0aWYgKCFtZXJnZV9ibGspXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdG1lcmdlX2Jsay1cdTAwM2V0aW1lID0gbWluKG1lcmdlX2Jsay1cdTAwM2V0aW1lLCBzcmNfYmxrLVx1MDAzZXRpbWUpO1xuLVx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBub2RlX3JlYWwtXHUwMDNlc2VxX3BvcnRfY250OyBpKyspIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2VxX3BvcnRfY250OyBpKyspIHtcbiBcdFx0XHRiaXRtYXBfb3IobWVyZ2VfYmxrLVx1MDAzZXNlcV9ucnNbaV0sIG1lcmdlX2Jsay1cdTAwM2VzZXFfbnJzW2ldLFxuIFx0XHRcdFx0ICBzcmNfYmxrLVx1MDAzZXNlcV9ucnNbaV0sIEhTUl9TRVFfQkxPQ0tfU0laRSk7XG4gXHRcdH1cbkBAIC02NDksOSArNjYwLDEzIEBAIGludCBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0KHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiBcdGlmIChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogZm9yIFBSUCB3ZSBzaG91bGQgb25seSBmb3J3YXJkIGZyYW1lcyBmcm9tIHRoZSBzbGF2ZSBwb3J0c1xuLVx0ICogdG8gdGhlIG1hc3RlciBwb3J0XG4rXHQvKiBSZWRCb3g6IGZvcndhcmQgTEFOIGZyYW1lcyBvdXQgdGhlIGludGVybGluayB0byBhIFNBTiwgZGVkdXBpbmcgdGhlXG4rXHQgKiB0d28gTEFOIGNvcGllcyBvbiBhIGRlZGljYXRlZCBzbG90LlxuIFx0ICovXG4rXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspXG4rXHRcdHJldHVybiBoc3JfY2hlY2tfZHVwbGljYXRlKGZyYW1lLCAxKTtcbitcbitcdC8qIEZvciBQUlAgb25seSBzbGF2ZS10by1tYXN0ZXIgZnJhbWVzIGFyZSBmb3J3YXJkZWQuICovXG4gXHRpZiAocG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZyYW1lcmVnLmggYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG5pbmRleCBjNjVlY2I5MjU3MzQ4OS4uMTI3YTNmYjY0ZDVmMDMgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG4rKysgYi9uZXQvaHNyL2hzcl9mcmFtZXJlZy5oXG5AQCAtMjcsNiArMjcsOCBAQCBzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8ge1xuIFx0Ym9vbCBpc19sb2NhbF9kZXN0O1xuIFx0Ym9vbCBpc19sb2NhbF9leGNsdXNpdmU7XG4gXHRib29sIGlzX2Zyb21fc2FuO1xuK1x0Ym9vbCBkc3RfaW5fbm9kZV9kYjtcbitcdGJvb2wgZHN0X2luX3Byb3h5X25vZGVfZGI7XG4gfTtcbiBcbiB2b2lkIGhzcl9kZWxfc2VsZl9ub2RlKHN0cnVjdCBoc3JfcHJpdiAqaHNyKTtcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9tYWluLmggYi9uZXQvaHNyL2hzcl9tYWluLmhcbmluZGV4IDEzNGU0ZjNmZmY2MDM2Li41M2U5NWJhZTBlZTI3NiAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX21haW4uaFxuKysrIGIvbmV0L2hzci9oc3JfbWFpbi5oXG5AQCAtMjExLDcgKzIxMSw3IEBAIHN0cnVjdCBoc3JfcHJpdiB7XG4gXHRcdFx0XHQgKi9cbiBcdGJvb2wgZndkX29mZmxvYWRlZDtcdC8qIEZvcndhcmRpbmcgb2ZmbG9hZGVkIHRvIEhXICovXG4gXHRib29sIHJlZGJveDsgICAgICAgICAgICAvKiBEZXZpY2Ugc3VwcG9ydHMgSFNSIFJlZEJveCAqL1xuLVx0dW5zaWduZWQgY2hhclx0XHRtYWNhZGRyZXNzX3JlZGJveFtFVEhfQUxFTl07XG4rXHR1bnNpZ25lZCBjaGFyXHRcdG1hY2FkZHJlc3NfcmVkYm94W0VUSF9BTEVOXSBfX2FsaWduZWQoc2l6ZW9mKHUxNikpO1xuIFx0dW5zaWduZWQgY2hhclx0XHRzdXBfbXVsdGljYXN0X2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZChzaXplb2YodTE2KSk7XG4gXHRcdFx0XHQvKiBBbGlnbiB0byB1MTYgYm91bmRhcnkgdG8gYXZvaWQgdW5hbGlnbmVkIGFjY2Vzc1xuIFx0XHRcdFx0ICogaW4gZXRoZXJfYWRkcl9lcXVhbFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX25ldGxpbmsuYyBiL25ldC9oc3IvaHNyX25ldGxpbmsuY1xuaW5kZXggODA5OWYyMDY5YTc0OGUuLjg4OTQwZTgwMTRiMjRmIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfbmV0bGluay5jXG4rKysgYi9uZXQvaHNyL2hzcl9uZXRsaW5rLmNcbkBAIC0xMjEsMTQgKzEyMSw4IEBAIHN0YXRpYyBpbnQgaHNyX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKHByb3RvID09IEhTUl9QUk9UT0NPTF9QUlApIHtcbitcdGlmIChwcm90byA9PSBIU1JfUFJPVE9DT0xfUFJQKVxuIFx0XHRwcm90b192ZXJzaW9uID0gUFJQX1YxO1xuLVx0XHRpZiAoaW50ZXJsaW5rKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCJJbnRlcmxpbmsgb25seSB3b3JrcyB3aXRoIEhTUlwiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0fVxuIFxuIFx0cmV0dXJuIGhzcl9kZXZfZmluYWxpemUoZGV2LCBsaW5rLCBpbnRlcmxpbmssIG11bHRpY2FzdF9zcGVjLFxuIFx0XHRcdFx0cHJvdG9fdmVyc2lvbiwgZXh0YWNrKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuaW5kZXggMzFmYjkzMjZjZjUzM2QuLjIxNTBlNDg3YWM3ZDdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuQEAgLTQsNiArNCw3IEBAIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFxuIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4rXHRoc3JfcHJwX3JlZGJveC5zaCBcXFxuIFx0aHNyX3JlZGJveC5zaCBcXFxuIFx0bGlua19mYXVsdHMuc2ggXFxcbiBcdHBycF9waW5nLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfcHJwX3JlZGJveC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDc5Yzg5MjIyNWIxZjNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3BycF9yZWRib3guc2hcbkBAIC0wLDAgKzEsOTkgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBUZXN0IGEgUFJQIFJlZEJveCAoUFJQLVNBTik6IGEgU0FOIHRoYXQgc2l0cyBiZWhpbmQgdGhlIGludGVybGluayBwb3J0IG11c3RcbisjIHJlYWNoLCBhbmQgYmUgcmVhY2hlZCBieSwgYSBwZWVyIERBTlAgb24gdGhlIFBSUCBuZXR3b3JrIHdpdGggaXRzIG93biBNQUNcbisjIHByZXNlcnZlZCBvbiB0aGUgd2lyZSwgYW5kIHRoZSBSZWRCb3ggbXVzdCBhbm5vdW5jZSB0aGUgU0FOIHdpdGggYSBSZWRCb3gtTUFDXG4rIyBUTFYgKHRlcm1pbmF0ZWQgYnkgYW4gRU9UIG1hcmtlcikgaW4gaXRzIFBSUCBzdXBlcnZpc2lvbiBmcmFtZXMuXG4rI1xuKyMgICBSQiAgICBQUlAgUmVkQm94OiBwcnAwIG92ZXIgcmJfYS9yYl9iIChMQU4gQS9CKSArIGludGVybGluayByYl9pbFxuKyMgICBQRUVSICBwZWVyIERBTlAgOiBwcnAwIG92ZXIgcGVfYS9wZV9iLCAxMDAuNjQuMC4yXG4rIyAgIFNBTiAgIFNBTiAgICAgICA6IHNhbl9pbCwgb3duIE1BQywgMTAwLjY0LjAuNTEgKGJlaGluZCB0aGUgaW50ZXJsaW5rKVxuK1xuK2lwdjY9ZmFsc2Vcbitcbitzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4rXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xuK1xuK2lmICEgY29tbWFuZCAtdiB0Y3BkdW1wIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IFRoaXMgdGVzdCByZXF1aXJlcyB0Y3BkdW1wXCJcbitcdGV4aXQgJGtzZnRfc2tpcFxuK2ZpXG4rXG4raWYgISBpcCBsaW5rIGhlbHAgaHNyIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtcSBpbnRlcmxpbms7IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBpcHJvdXRlMiB0b28gb2xkIChubyBoc3IgaW50ZXJsaW5rIHN1cHBvcnQpXCJcbitcdGV4aXQgJGtzZnRfc2tpcFxuK2ZpXG4rXG4rc2V0dXBfbnMgUkIgUEVFUiBTQU5cbit0cmFwICdjbGVhbnVwX25zIFwiJFJCXCIgXCIkUEVFUlwiIFwiJFNBTlwiJyBFWElUXG4rXG4raXAgbGluayBhZGQgcmJfYSBuZXRucyBcIiRSQlwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcGVfYSBuZXRucyBcIiRQRUVSXCJcbitpcCBsaW5rIGFkZCByYl9iIG5ldG5zIFwiJFJCXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwZV9iIG5ldG5zIFwiJFBFRVJcIlxuK2lwIGxpbmsgYWRkIHJiX2lsIG5ldG5zIFwiJFJCXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzYW5faWwgbmV0bnMgXCIkU0FOXCJcbitcbitpcCAtbiBcIiRSQlwiICAgbGluayBzZXQgcmJfYSB1cFxuK2lwIC1uIFwiJFJCXCIgICBsaW5rIHNldCByYl9iIHVwXG4raXAgLW4gXCIkUkJcIiAgIGxpbmsgc2V0IHJiX2lsIHVwXG4raXAgLW4gXCIkUEVFUlwiIGxpbmsgc2V0IHBlX2EgdXBcbitpcCAtbiBcIiRQRUVSXCIgbGluayBzZXQgcGVfYiB1cFxuK2lwIC1uIFwiJFNBTlwiICBsaW5rIHNldCBzYW5faWwgdXBcbitpcCAtbiBcIiRTQU5cIiAgYWRkciBhZGQgMTAwLjY0LjAuNTEvMjQgZGV2IHNhbl9pbFxuK1xuKyMgRmVhdHVyZSBnYXRlOiBQUlAgaW50ZXJsaW5rIChSZWRCb3gpIGNyZWF0aW9uLiBBIGtlcm5lbCB3aXRob3V0IFBSUCBSZWRCb3hcbisjIHN1cHBvcnQgcmVqZWN0cyB0aGlzIHdpdGggLUVJTlZBTCwgc28gU0tJUCByYXRoZXIgdGhhbiBGQUlMLlxuK2lmICEgaXAgLW4gXCIkUkJcIiBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHJiX2Egc2xhdmUyIHJiX2IgXFxcbisgICAgIGludGVybGluayByYl9pbCBwcm90byAxIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBrZXJuZWwgd2l0aG91dCBQUlAgUmVkQm94IChpbnRlcmxpbmspIHN1cHBvcnRcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rZmlcbitpcCAtbiBcIiRSQlwiICAgbGluayBzZXQgcHJwMCB1cFxuK2lwIC1uIFwiJFBFRVJcIiBsaW5rIGFkZCBuYW1lIHBycDAgdHlwZSBoc3Igc2xhdmUxIHBlX2Egc2xhdmUyIHBlX2IgcHJvdG8gMVxuK2lwIC1uIFwiJFBFRVJcIiBsaW5rIHNldCBwcnAwIHVwXG4raXAgLW4gXCIkUEVFUlwiIGFkZHIgYWRkIDEwMC42NC4wLjIvMjQgZGV2IHBycDBcbitzbGVlcCAxXG4rXG4rc2FuX21hYz0kKGlwIC1uIFwiJFNBTlwiIC1iciBsaW5rIHNob3cgc2FuX2lsIHwgYXdrICd7cHJpbnQgJDN9JylcbityYl9tYWM9JChpcCAtbiBcIiRSQlwiIC1iciBsaW5rIHNob3cgcmJfaWwgfCBhd2sgJ3twcmludCAkM30nKVxuK1xuKyMgQmlkaXJlY3Rpb25hbCB1bmljYXN0IGFjcm9zcyB0aGUgaW50ZXJsaW5rLlxuK2RvX3BpbmcgXCIkUEVFUlwiIDEwMC42NC4wLjUxXG4rZG9fcGluZyBcIiRTQU5cIiAgMTAwLjY0LjAuMlxuK3N0b3BfaWZfZXJyb3IgXCJQUlAgUmVkQm94IGJpZGlyZWN0aW9uYWwgdW5pY2FzdCBmYWlsZWRcIlxuK1xuKyMgVGhlIFNBTiBzb3VyY2UgTUFDIG11c3QgYmUgcHJlc2VydmVkIG9uIHRoZSBQUlAgbmV0d29yaywgbm90IGxhdW5kZXJlZCB0byB0aGVcbisjIFJlZEJveCBNQUM6IHRoZSBwZWVyIHJlc29sdmVzIHRoZSBTQU4gSVAgdG8gdGhlIFNBTidzIG93biBNQUMuXG4rbmVpZ2g9JChpcCAtbiBcIiRQRUVSXCIgbmVpZ2ggc2hvdyAxMDAuNjQuMC41MSB8IGF3ayAne3ByaW50ICQ1fScpXG4raWYgWyBcIiRuZWlnaFwiICE9IFwiJHNhbl9tYWNcIiBdOyB0aGVuXG4rXHRlY2hvIFwiU0FOIE1BQyBwcmVzZXJ2YXRpb24gWyBGQUlMIF06IHBlZXIgcmVzb2x2ZWQgMTAwLjY0LjAuNTEgdG9cIiBcXFxuK1x0ICAgICBcIickbmVpZ2gnLCBleHBlY3RlZCAkc2FuX21hY1wiIDFcdTAwM2VcdTAwMjYyXG4rXHRyZXQ9MVxuK2ZpXG4rc3RvcF9pZl9lcnJvciBcIlNBTiBNQUMgbm90IHByZXNlcnZlZCBvbiB0aGUgUFJQIG5ldHdvcmtcIlxuK1xuKyMgVGhlIHByb3h5LWFubm91bmNlIHN1cGVydmlzaW9uIGZyYW1lIG11c3QgY2FycnksIGluIG9yZGVyLCB0aGUgbGlmZS1jaGVjayBUTFZcbisjICh0eXBlIDB4MTQsIGxlbiA2KSArIE1hY0FkZHJlc3NBID09IFNBTiBNQUMgKyB0aGUgUmVkQm94LU1BQyBUTFYgKHR5cGUgMHgxZSxcbisjIGxlbiA2KSArIE1hY0FkZHJlc3NSZWRCb3ggPT0gUmVkQm94IE1BQyArIHRoZSBFT1QgbWFya2VyICgweDAwMDApLlxuK2lwIG5ldG5zIGV4ZWMgXCIkU0FOXCIgcGluZyAtaSAwLjIgLXEgMTAwLjY0LjAuMiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4rcGluZ19waWQ9JCFcbitjYXA9JChpcCBuZXRucyBleGVjIFwiJFBFRVJcIiB0aW1lb3V0IDUgdGNwZHVtcCAtaSBwZV9hIC1ubiAteCBcXFxuK1x0XCJldGhlciBwcm90byAweDg4ZmIgYW5kIGV0aGVyIHNyYyAkcmJfbWFjXCIgMlx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlKVxuK2tpbGwgXCIkcGluZ19waWRcIiAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcbit3YWl0IFwiJHBpbmdfcGlkXCIgMlx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXG4rXG4rc2FuX2hleD0kKGVjaG8gXCIkc2FuX21hY1wiIHwgdHIgLWQgJzonKVxuK3JiX2hleD0kKGVjaG8gXCIkcmJfbWFjXCIgfCB0ciAtZCAnOicpXG4rIyBSZWFzc2VtYmxlIGNvbnRpZ3VvdXMgZnJhbWUgaGV4OiBkcm9wIHRoZSBcIjB4MDAxMDpcIiBvZmZzZXQgbGFiZWxzIGFuZCBzcGFjZXMuXG4rZnJhbWVfaGV4PSQoZWNobyBcIiRjYXBcIiB8IGF3ayAnL15bWzpzcGFjZTpdXSoweFswLTlhLWZdKzovIHtcbitcdHN1YigvXltbOnNwYWNlOl1dKjB4WzAtOWEtZl0rOltbOnNwYWNlOl1dKi8sIFwiXCIpO1xuK1x0Z3N1YigvIC8sIFwiXCIpOyBwcmludGYgXCIlc1wiLCAkMCB9JylcbitpZiAhIGVjaG8gXCIkZnJhbWVfaGV4XCIgfCBncmVwIC1xIFwiMTQwNiR7c2FuX2hleH0xZTA2JHtyYl9oZXh9MDAwMFwiOyB0aGVuXG4rXHRlY2hvIFwic3VwZXJ2aXNpb24gUmVkQm94LU1BQyBUTFYgWyBGQUlMIF06IG1pc3NpbmcgU0FOIE1BQywgVHlwZS0zMFwiIFxcXG4rXHQgICAgIFwicGF5bG9hZCwgb3IgRU9UXCIgMVx1MDAzZVx1MDAyNjJcbitcdHJldD0xXG4rZmlcbitzdG9wX2lmX2Vycm9yIFwiUFJQIFJlZEJveCBzdXBlcnZpc2lvbiBSZWRCb3gtTUFDIFRMVi9FT1QgY2hlY2sgZmFpbGVkXCJcbitcbitlY2hvIFwiSU5GTzogUFJQIFJlZEJveCAoUFJQLVNBTikgY29uZm9ybWFuY2UgY2hlY2tzIHBhc3NlZFwiXG4rZXhpdCAkcmV0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMDozNzoyNi4yNjY2NDAyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNzU2ODI4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSFNSIFBSUCBSZWRCb3ggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBIU1IgZHJpdmVyIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgZm9yIFBSUCBSZWRCb3ggaW50ZXJsaW5raW5nLiBJIHNlZSBpdCdzIHRvdWNoaW5nIGBoc3JfZGV2aWNlLmNgLCBgaHNyX2ZvcndhcmQuY2AsIGBoc3JfZnJhbWVyZWcuY2AsIGFuZCBgaHNyX25ldGxpbmsuY2AsIHdoaWNoIGlzIHRoZSB0eXBpY2FsIGFyZWEgZm9yIG5ldHdvcmsgZHJpdmVyIG1vZGlmaWNhdGlvbnMsIGFuZCBpbmNsdWRlcyBhIHNlbGZ0ZXN0LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjayByZWxhdGVkIHRvIGhpZ2ggYXZhaWxhYmlsaXR5LiBHaXZlbiB0aGF0IGl0IGRlYWxzIHdpdGggYWRkaW5nIFBSUCBSZWRCb3ggZnVuY3Rpb25hbGl0eSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLiBGdW5jdGlvbnMgbGlrZSBgaHNyX3htaXRgLCBgaHNyX2hhbmRsZV9zdXBfZnJhbWVgLCBhbmQgYHBycF9kcm9wX2ZyYW1lYCBhcmUgZ29pbmcgdG8gYmUgYWZmZWN0ZWQuXG5cblRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhhdCB0aGlzIGRlbWFuZHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSwgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgcGFja2V0IGhhbmRsaW5nLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0byBiZSBoYW5kbGluZyBpbmNvbWluZyBvciBvdXRnb2luZyBmcmFtZXMsIG9yIHdoZXJlIFBSUCBwcm90b2NvbCBsb2dpYyBpcyBpbXBsZW1lbnRlZDpcblxuKiAgIGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWBcbiogICBgaHNyX2Rldl9maW5hbGl6ZWBcbiogICBgcHJwX2Ryb3BfZnJhbWVgXG4qICAgYGhzcl9kcm9wX2ZyYW1lYFxuKiAgIGBmaWxsX2ZyYW1lX2luZm9gXG4qICAgYGhzcl9hZGRfbm9kZWBcbiogICBgaHNyX2dldF9ub2RlYFxuKiAgIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWBcbiogICBgcHJwX3JlZ2lzdGVyX2ZyYW1lX291dGBcbiogICBgaHNyX25ld2xpbmtgXG5cbkJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGZ1enppbmcsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdG8gdmVyaWZ5IHRoYXQgSFNSIGlzIGVuYWJsZWQgYW5kIHRvIHNlZSBpZiBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpYyB0byBQUlAgaGF2ZSBiZWVuIGludHJvZHVjZWQuIEknbGwgdXNlIGBncmVwcGVyYCB0byBsb29rIGZvciBgQ09ORklHX0hTUmAgYW5kIGFueSByZWxhdGVkIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAwOjM3OjMyLjM0MjMyNDc4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzYwNzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFNSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDA6Mzc6MzIuNDM1OTQwNDU2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1OTkzNjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEhTUiBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGFraW5nIGEgbG9vayBhdCBgbmV0L2hzci9LY29uZmlnYC4gVGhpcyBtZWFucyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IpIHByb3RvY29sIHN1cHBvcnQgd2l0aGluIHRoaXMgc3BlY2lmaWMgbmV0d29yayBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGltcGxlbWVudGVkLCB3aGF0IGtub2JzIGFyZSBhdmFpbGFibGUgdG8gZmluZS10dW5lIGl0cyBiZWhhdmlvciwgYW5kIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlci5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEknbGwgYmUgbG9va2luZyBmb3IgYGNvbmZpZ2AgZW50cmllcywgYG1lbnVjb25maWdgLCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cywgYHNlbGVjdGAgc3RhdGVtZW50cywgYW5kIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBkZWZpbml0aW9ucyBhbmQgaGVscCB0ZXh0LiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgYXJlYXMgd2hlcmUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gY2hhbmdlcyBtaWdodCByZXF1aXJlIHNwZWNpYWwgY29uc2lkZXJhdGlvbi4gSSdtIGFsc28gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGlzIGEgY29yZSBIU1IgaW1wbGVtZW50YXRpb24gb3IgYW4gZXh0ZW5zaW9uLCBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgbmV0d29ya2luZyBmZWF0dXJlcyAoZS5nLiwgVkxBTnMsIGJyaWRnaW5nLCBRb1MpIGFuZCBoYXJkd2FyZSBwbGF0Zm9ybXMuIEkgbmVlZCB0byBlbnN1cmUgYSBjb3JyZWN0IGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTM1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDA6Mzc6MzYuMzk1ODc5MTI5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDMzNjQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG4tLVxcbm5ldC9oc3IvS2NvbmZpZz00Mj1pZiBIU1JcXG5uZXQvaHNyL0tjb25maWctNDMtXFxubmV0L2hzci9LY29uZmlnOjQ0OmNvbmZpZyBQUlBfRFVQX0RJU0NBUkRfS1VOSVRfVEVTVFxcbm5ldC9oc3IvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiUFJQIGR1cGxpY2F0ZSBkaXNjYXJkIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAwOjM3OjM2LjUyMDIyNTU5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzg0MTE4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIU1IgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBgSFNSYCBjb25maWd1cmF0aW9uIGlzIHRoZSBjZW50cmFsIHBpZWNlIGhlcmUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQsIHNvIGxldCdzIHN0YXJ0IHdpdGggdGhvc2UuIEkndmUgZ290IHRvIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmc6IGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAsIGBwcnBfZHJvcF9mcmFtZWAsIGBoc3JfZHJvcF9mcmFtZWAsIGBmaWxsX2ZyYW1lX2luZm9gLCBgaHNyX2FkZF9ub2RlYCwgYGhzcl9nZXRfbm9kZWAsIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAsIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCwgYW5kIGBoc3JfbmV3bGlua2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQsIGJ1dCBpdCBzZWVtcyB0aGVyZSdzIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiwgYHBycF9pc19sYW5fZHVwYCwgYW5kIGEgbW9kaWZpZWQgZnVuY3Rpb24sIGBoc3JfZGV2X2ZpbmFsaXplYCwgdGhhdCBJIG5lZWQgdG8gZmFjdG9yIGluLlxuXG5Ob3csIEknbGwgc3dpdGNoIG15IGZvY3VzIHRvIGBuZXQvaHNyL2hzcl9kZXZpY2UuY2AgdG8gZXhhbWluZSBgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWVgIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMDozNzo0MC40NTg2NDA3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzE3MzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9kZXZpY2UuYz0yOTM9c3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzY4LVxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjM2OTpzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNzAtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmludGVydmFsLFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9NjU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHNyX3Byb3RvX29wcyBwcnBfb3BzID0ge1xcbm5ldC9oc3IvaHNyX2RldmljZS5jOjY1OTpcXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2MC1cXHQuY3JlYXRlX3RhZ2dlZF9mcmFtZSA9IHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMDozNzo0MC41NTE4MTgwNjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU1NDE1MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUFJQIFJlZEJveCBQYXRjaCBhbmQgSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgY2VudGVycyBvbiBpZGVudGlmeWluZyBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBQUlAgUmVkQm94IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBIU1IgZHJpdmVyLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIHBpbnBvaW50IHRoZSBiZXN0IGFyZWFzIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCwgYmFzZWQgb24gdGhlIGNvZGUgYW5hbHlzaXMgc28gZmFyLCBhcmU6IGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAsIGBwcnBfZHJvcF9mcmFtZWAsIGBoc3JfZHJvcF9mcmFtZWAsIGBmaWxsX2ZyYW1lX2luZm9gLCBgaHNyX2FkZF9ub2RlYCwgYGhzcl9nZXRfbm9kZWAsIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAsIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCwgYW5kIGBoc3JfbmV3bGlua2AuIEknbGwgd2FudCB0byByZXZpc2l0IHRob3NlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBIU1IgY29uZmlnLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgaW5saW5pbmcgc3RhdHVzIG9mIGBwcnBfaXNfbGFuX2R1cGAsIGFsdGhvdWdoIEkgdGhpbmsgSSBjYW4gYXZvaWQgaXQgYnkganVzdCB1c2luZyB0aGUgYHBycF9kcm9wX2ZyYW1lYCBhbmQgYGhzcl9kcm9wX2ZyYW1lYCBmdW5jdGlvbnMuXG5cblRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhZGRzIHN1cHBvcnQgZm9yIFBSUCBSZWRCb3ggaW50ZXJsaW5rIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGhvdyB0aGUgSFNSIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gVGhlcmVmb3JlLCBpdCdzIGFic29sdXRlbHkgY3J1Y2lhbCB0byBmdXp6IHRoaXMgaW1wbGVtZW50YXRpb24uXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdC4gYGhzcl9uZXdsaW5rYCBhcHBlYXJzIHRvIGJlIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50IGZvciBpbnRlcmZhY2UgY3JlYXRpb24uIGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAgc2VlbXMgdG8gYmUgY2FsbGVkIHBlcmlvZGljYWxseSBvciB0cmlnZ2VyZWQgb24gZGVtYW5kLiAgYHBycF9kcm9wX2ZyYW1lYCBhbmQgYGhzcl9kcm9wX2ZyYW1lYCBhcmUgY3JpdGljYWwgZm9yIHBhY2tldCByZWNlcHRpb24gYW5kIGZvcndhcmRpbmcuIGBmaWxsX2ZyYW1lX2luZm9gIGlzIGFsc28gZGlyZWN0bHkgcmVsYXRlZCB0byByZWNlcHRpb24uIFRoZSBgaHNyX2FkZF9ub2RlYCBhbmQgYGhzcl9nZXRfbm9kZWAgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBpbiB0aGUgbWFuYWdlbWVudCBvZiB0aGUgbm9kZSB0YWJsZSwgZHVyaW5nIHBhY2tldCByZWNlcHRpb24uIEZpbmFsbHksIGBoc3JfaGFuZGxlX3N1cF9mcmFtZWAgaGFuZGxlcyB0aGUgc3VwZXJ2aXNpb24gZnJhbWUgYW5kIGBwcnBfcmVnaXN0ZXJfZnJhbWVfb3V0YCBpcyBjYWxsZWQgb24gdHJhbnNtaXNzaW9uLlxuXG5ZZXMsIHRoaXMgaXMgYSBzb2xpZCBsaXN0IG9mIHRhcmdldHMuIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGNvdmVycyB0aGUgbW9zdCBjcml0aWNhbCBhcmVhcyBmb3IgZnV6emluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA0NSwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDA6Mzc6NDguMjA3MjM1NzkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1OTYzNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZVwiLFxuICAgIFwicHJwX2Ryb3BfZnJhbWVcIixcbiAgICBcImhzcl9kcm9wX2ZyYW1lXCIsXG4gICAgXCJmaWxsX2ZyYW1lX2luZm9cIixcbiAgICBcImhzcl9hZGRfbm9kZVwiLFxuICAgIFwiaHNyX2dldF9ub2RlXCIsXG4gICAgXCJoc3JfaGFuZGxlX3N1cF9mcmFtZVwiLFxuICAgIFwicHJwX3JlZ2lzdGVyX2ZyYW1lX291dFwiLFxuICAgIFwiaHNyX25ld2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUFJQIChQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sKSBSZWRCb3ggKGludGVybGluaykuIFRoaXMgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBwYWNrZXQgZm9yd2FyZGluZywgZHJvcHBpbmcgbG9naWMsIG5vZGUgbWFuYWdlbWVudCwgYW5kIHN1cGVydmlzaW9uIGZyYW1lIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZVwiLFxuICAgIFwicHJwX2Ryb3BfZnJhbWVcIixcbiAgICBcImhzcl9kcm9wX2ZyYW1lXCIsXG4gICAgXCJmaWxsX2ZyYW1lX2luZm9cIixcbiAgICBcImhzcl9hZGRfbm9kZVwiLFxuICAgIFwiaHNyX2dldF9ub2RlXCIsXG4gICAgXCJoc3JfaGFuZGxlX3N1cF9mcmFtZVwiLFxuICAgIFwicHJwX3JlZ2lzdGVyX2ZyYW1lX291dFwiLFxuICAgIFwiaHNyX25ld2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBmb3IgUFJQIChQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sKSBSZWRCb3ggKGludGVybGluaykuIFRoaXMgaW52b2x2ZXMgbW9kaWZpY2F0aW9ucyB0byBwYWNrZXQgZm9yd2FyZGluZywgZHJvcHBpbmcgbG9naWMsIG5vZGUgbWFuYWdlbWVudCwgYW5kIHN1cGVydmlzaW9uIGZyYW1lIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvvqrb[1] Phase: Succeeded StartedAt: 2026-07-18 00:37:59 +0000 UTC FinishedAt: 2026-07-18 00:37:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-18 00:37:59 +0000 UTC FinishedAt: 2026-07-18 00:37:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2] Phase: Succeeded StartedAt: 2026-07-18 00:37:59 +0000 UTC FinishedAt: 2026-07-18 05:10:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-18 00:37:59 +0000 UTC FinishedAt: 2026-07-18 05:10:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-18 00:37:59 +0000 UTC FinishedAt: 2026-07-18 00:38:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-18 00:37:59 +0000 UTC FinishedAt: 2026-07-18 00:38:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvvqrb/series-workflowvvqrb-convert-artifact-1802552758/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-18 00:38:09 +0000 UTC FinishedAt: 2026-07-18 01:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-18 00:38:09 +0000 UTC FinishedAt: 2026-07-18 01:18:41 +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:*608bf074-a319-40de-b6a7-cb671d31ed64,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-workflowvvqrb/series-workflowvvqrb-convert-artifact-1802552758/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": "1d75170c-f3a1-492c-b18d-a139beb34d2c", "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-workflowvvqrb/series-workflowvvqrb-build-action-1723985100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-18 00:38:09 +0000 UTC FinishedAt: 2026-07-18 01:18:31 +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:*608bf074-a319-40de-b6a7-cb671d31ed64,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-workflowvvqrb/series-workflowvvqrb-convert-artifact-1802552758/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": "1d75170c-f3a1-492c-b18d-a139beb34d2c", "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-workflowvvqrb/series-workflowvvqrb-build-action-1723985100/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-18 01:18:41 +0000 UTC FinishedAt: 2026-07-18 01:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-18 01:18:41 +0000 UTC FinishedAt: 2026-07-18 01:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-18 01:18:41 +0000 UTC FinishedAt: 2026-07-18 01:18:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-18 01:18:41 +0000 UTC FinishedAt: 2026-07-18 01:18:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvvqrb/series-workflowvvqrb-convert-artifact-3194388297/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-18 01:18:52 +0000 UTC FinishedAt: 2026-07-18 01:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-18 01:18:52 +0000 UTC FinishedAt: 2026-07-18 01:20:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1d75170c-f3a1-492c-b18d-a139beb34d2c,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-workflowvvqrb/series-workflowvvqrb-build-action-1723985100/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-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-18 01:20:59 +0000 UTC FinishedAt: 2026-07-18 01:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-18 01:20:59 +0000 UTC FinishedAt: 2026-07-18 01:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-18 01:20:59 +0000 UTC FinishedAt: 2026-07-18 02:04:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-18 01:20:59 +0000 UTC FinishedAt: 2026-07-18 02:04:21 +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:*608bf074-a319-40de-b6a7-cb671d31ed64,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-workflowvvqrb/series-workflowvvqrb-convert-artifact-3194388297/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": "3e10d9da-4741-40e1-860c-295f6eb5913a", "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-workflowvvqrb/series-workflowvvqrb-build-action-812387877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-18 01:20:59 +0000 UTC FinishedAt: 2026-07-18 02:04:11 +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:*608bf074-a319-40de-b6a7-cb671d31ed64,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-workflowvvqrb/series-workflowvvqrb-convert-artifact-3194388297/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": "3e10d9da-4741-40e1-860c-295f6eb5913a", "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-workflowvvqrb/series-workflowvvqrb-build-action-812387877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-18 02:04:21 +0000 UTC FinishedAt: 2026-07-18 02:04:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-18 02:04:21 +0000 UTC FinishedAt: 2026-07-18 02:04:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-18 02:04:21 +0000 UTC FinishedAt: 2026-07-18 02:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-18 02:04:21 +0000 UTC FinishedAt: 2026-07-18 02:06:31 +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:*3e10d9da-4741-40e1-860c-295f6eb5913a,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-workflowvvqrb/series-workflowvvqrb-build-action-812387877/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-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-18 02:06:41 +0000 UTC FinishedAt: 2026-07-18 05:10:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-18 02:06:41 +0000 UTC FinishedAt: 2026-07-18 05:10:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"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:*1d75170c-f3a1-492c-b18d-a139beb34d2c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e10d9da-4741-40e1-860c-295f6eb5913a,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-workflowvvqrb/series-workflowvvqrb-build-action-1723985100/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-workflowvvqrb/series-workflowvvqrb-build-action-812387877/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-18 02:06:41 +0000 UTC FinishedAt: 2026-07-18 02:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-18 02:06:41 +0000 UTC FinishedAt: 2026-07-18 02:06:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"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-workflowvvqrb/series-workflowvvqrb-convert-artifact-979106974/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-18 02:06:41 +0000 UTC FinishedAt: 2026-07-18 02:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-18 02:06:41 +0000 UTC FinishedAt: 2026-07-18 02:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-18 02:06:41 +0000 UTC FinishedAt: 2026-07-18 02:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-18 02:06:51 +0000 UTC FinishedAt: 2026-07-18 05:10:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvvqrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["send_prp_supervision_frame","prp_drop_frame","hsr_drop_frame","fill_frame_info","hsr_add_node","hsr_get_node","hsr_handle_sup_frame","prp_register_frame_out","hsr_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"6c683acd-d1c3-4be0-8b5f-4c313b76236b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-18 02:06:51 +0000 UTC FinishedAt: 2026-07-18 05:09:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1d75170c-f3a1-492c-b18d-a139beb34d2c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e10d9da-4741-40e1-860c-295f6eb5913a,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-workflowvvqrb/series-workflowvvqrb-build-action-1723985100/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-workflowvvqrb/series-workflowvvqrb-build-action-812387877/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-workflowvvqrb/series-workflowvvqrb-convert-artifact-979106974/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,}