Name: series-workflowp46hx Phase: Succeeded StartedAt: 2026-07-06 20:30:01 +0000 UTC FinishedAt: 2026-07-06 22:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[0] Phase: Succeeded StartedAt: 2026-07-06 20:30:01 +0000 UTC FinishedAt: 2026-07-06 20:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 20:30:01 +0000 UTC FinishedAt: 2026-07-06 20:46:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATA_GENERIC", "AGP", "AGP_AMD", "AGP_VIA", "IPACK_BUS", "BOARD_TPCI200", "MLXSW_PCI", "SCSI_NSP32" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATA_GENERIC", "AGP", "AGP_AMD", "AGP_VIA", "IPACK_BUS", "BOARD_TPCI200", "MLXSW_PCI", "SCSI_NSP32" ], "series_id": "c8ad27ae-4632-4771-9d93-b3b4069c723f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "do_pci_add_dynid", "new_id_store", "pci_match_device", "do_pci_match_id", "__pci_device_probe", "pci_add_dynid", "pci_match_id", "ata_generic_init_one", "agp_amdk7_probe", "agp_via_probe", "tpci200_pci_probe", "mlxsw_pci_probe", "nsp32_probe" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUQV9HRU5FUklDJiMzNDssCiAgICAmIzM0O0FHUCYjMzQ7LAogICAgJiMzNDtBR1BfQU1EJiMzNDssCiAgICAmIzM0O0FHUF9WSUEmIzM0OywKICAgICYjMzQ7SVBBQ0tfQlVTJiMzNDssCiAgICAmIzM0O0JPQVJEX1RQQ0kyMDAmIzM0OywKICAgICYjMzQ7TUxYU1dfUENJJiMzNDssCiAgICAmIzM0O1NDU0lfTlNQMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19wY2lfYWRkX2R5bmlkJiMzNDssCiAgICAmIzM0O25ld19pZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfZGV2aWNlJiMzNDssCiAgICAmIzM0O2RvX3BjaV9tYXRjaF9pZCYjMzQ7LAogICAgJiMzNDtfX3BjaV9kZXZpY2VfcHJvYmUmIzM0OywKICAgICYjMzQ7cGNpX2FkZF9keW5pZCYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfaWQmIzM0OywKICAgICYjMzQ7YXRhX2dlbmVyaWNfaW5pdF9vbmUmIzM0OywKICAgICYjMzQ7YWdwX2FtZGs3X3Byb2JlJiMzNDssCiAgICAmIzM0O2FncF92aWFfcHJvYmUmIzM0OywKICAgICYjMzQ7dHBjaTIwMF9wY2lfcHJvYmUmIzM0OywKICAgICYjMzQ7bWx4c3dfcGNpX3Byb2JlJiMzNDssCiAgICAmIzM0O25zcDMyX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgY29yZSB0byBwYXNzIGEgY29weSBvZiB0aGUgZHluYW1pYyBwY2lfZGV2aWNlX2lkIHRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gdGhlIGhlYXAtYWxsb2NhdGVkIGR5bmFtaWMgSUQsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGR5bmFtaWMgSUQgaXMgcmVtb3ZlZCB2aWEgc3lzZnMuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHNhdmluZyB0aGUgcGNpX2RldmljZV9pZCBwb2ludGVyIHRvIGluc3RlYWQgc2F2ZSB0aGUgZHJpdmVyX2RhdGEgb3Igb3RoZXIgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFBDSSBjb3JlIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gUENJIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGR5bmFtaWMgSURzIHZpYSBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU4YmU1ODE5ZmZmZGQ1ZjNjMTFkZDFhMjZhYTUyZGNhNTBlMDI0MDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDIwOjQ0OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jXG5pbmRleCBlNzBiNmMwODljZjE3OS4uMThlYTc0MGNhNTgyOTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jXG5AQCAtNTEsMTEgJiM0Mzs1MSwxMSBAQCBlbnVtIHtcbiBzdGF0aWMgaW50IGdlbmVyaWNfc2V0X21vZGUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnVudXNlZClcbiB7XG4gXHRzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay1cdTAwM2VhcDtcbi1cdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCA9IGFwLVx1MDAzZWhvc3QtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZylhcC1cdTAwM2Vob3N0LVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdGludCBkbWFfZW5hYmxlZCA9IDA7XG4gXHRzdHJ1Y3QgYXRhX2RldmljZSAqZGV2O1xuIFxuLVx0aWYgKGlkLVx1MDAzZWRyaXZlcl9kYXRhIFx1MDAyNiBBVEFfR0VOX0ZPUkNFX0RNQSkge1xuJiM0MztcdGlmIChkcml2ZXJfZGF0YSBcdTAwMjYgQVRBX0dFTl9GT1JDRV9ETUEpIHtcbiBcdFx0ZG1hX2VuYWJsZWQgPSAweGZmO1xuIFx0fSBlbHNlIGlmIChhcC1cdTAwM2Vpb2FkZHIuYm1kbWFfYWRkcikge1xuIFx0XHQvKiBCaXRzIDUgYW5kIDYgaW5kaWNhdGUgaWYgRE1BIGlzIGFjdGl2ZSBvbiBtYXN0ZXIvc2xhdmUgKi9cbkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIHN0YXRpYyBpbnQgYXRhX2dlbmVyaWNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWRcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdHBjaW1fcGluX2RldmljZShkZXYpO1xuIFx0fVxuLVx0cmV0dXJuIGF0YV9wY2lfYm1kbWFfaW5pdF9vbmUoZGV2LCBwcGksIFx1MDAyNmdlbmVyaWNfc2h0LCAodm9pZCAqKWlkLCAwKTtcbiYjNDM7XHRyZXR1cm4gYXRhX3BjaV9ibWRtYV9pbml0X29uZShkZXYsIHBwaSwgXHUwMDI2Z2VuZXJpY19zaHQsICh2b2lkICopaWQtXHUwMDNlZHJpdmVyX2RhdGEsIDApO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRhX2dlbmVyaWNbXSA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jXG5pbmRleCA4OThmZjMwZmZkNDZiMi4uNGQyMDFlNzFjNTE3NzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmNcbkBAIC0zODcsMzcgJiM0MzszODcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbWRfaXJvbmdhdGVfZHJpdmVyID0ge1xuIFx0LmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgYWdwX2RldmljZV9pZHMgYW1kX2FncF9kZXZpY2VfaWRzW10gPVxuLXtcbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMDYsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7SXJvbmdhdGVcJiMzNDssXG4tXHR9LFxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwRSxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDs3NjFcJiMzNDssXG4tXHR9LFxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQyxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDs3NjBNUFwmIzM0Oyxcbi1cdH0sXG4tXHR7IH0sIC8qIGR1bW15IGZpbmFsIGVudHJ5LCBhbHdheXMgcHJlc2VudCAqL1xuLX07XG4tXG4gc3RhdGljIGludCBhZ3BfYW1kazdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4gXHRzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7XG4gXHR1OCBjYXBfcHRyO1xuLVx0aW50IGo7XG4gXG4gXHRjYXBfcHRyID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0FHUCk7XG4gXHRpZiAoIWNhcF9wdHIpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0aiA9IGVudCAtIGFncF9hbWRrN19wY2lfdGFibGU7XG4tXHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7QU1EICVzIGNoaXBzZXRcXG5cJiMzNDssXG4tXHRcdCBhbWRfYWdwX2RldmljZV9pZHNbal0uY2hpcHNldF9uYW1lKTtcbiYjNDM7XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7QU1EICVzIGNoaXBzZXRcXG5cJiMzNDssIChjb25zdCBjaGFyICopZW50LVx1MDAzZWRyaXZlcl9kYXRhKTtcbiBcbiBcdGJyaWRnZSA9IGFncF9hbGxvY19icmlkZ2UoKTtcbiBcdGlmICghYnJpZGdlKVxuQEAgLTQ5Miw3ICYjNDM7NDcyLDYgQEAgc3RhdGljIGludCBhZ3BfYW1kazdfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiBhbWRfaXJvbmdhdGVfZHJpdmVyLmNvbmZpZ3VyZSgpO1xuIH1cbiBcbi0vKiBtdXN0IGJlIHRoZSBzYW1lIG9yZGVyIGFzIG5hbWUgdGFibGUgYWJvdmUgKi9cbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xuIFx0e1xuIFx0LmNsYXNzXHRcdD0gKFBDSV9DTEFTU19CUklER0VfSE9TVCBcdTAwM2NcdTAwM2MgOCksXG5AQCAtNTAxLDYgJiM0Mzs0ODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xuIFx0LmRldmljZVx0XHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwNixcbiBcdC5zdWJ2ZW5kb3JcdD0gUENJX0FOWV9JRCxcbiBcdC5zdWJkZXZpY2VcdD0gUENJX0FOWV9JRCxcbiYjNDM7XHQuZHJpdmVyX2RhdGFcdD0gKGtlcm5lbF91bG9uZ190KVwmIzM0O0lyb25nYXRlXCYjMzQ7LFxuIFx0fSxcbiBcdHtcbiBcdC5jbGFzc1x0XHQ9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgXHUwMDNjXHUwMDNjIDgpLFxuQEAgLTUwOSw2ICYjNDM7NDg5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF9hbWRrN19wY2lfdGFibGVbXSA9IHtcbiBcdC5kZXZpY2VcdFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEUsXG4gXHQuc3VidmVuZG9yXHQ9IFBDSV9BTllfSUQsXG4gXHQuc3ViZGV2aWNlXHQ9IFBDSV9BTllfSUQsXG4mIzQzO1x0LmRyaXZlcl9kYXRhXHQ9IChrZXJuZWxfdWxvbmdfdClcJiMzNDs3NjFcJiMzNDssXG4gXHR9LFxuIFx0e1xuIFx0LmNsYXNzXHRcdD0gKFBDSV9DTEFTU19CUklER0VfSE9TVCBcdTAwM2NcdTAwM2MgOCksXG5AQCAtNTE3LDYgJiM0Mzs0OTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xuIFx0LmRldmljZVx0XHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQyxcbiBcdC5zdWJ2ZW5kb3JcdD0gUENJX0FOWV9JRCxcbiBcdC5zdWJkZXZpY2VcdD0gUENJX0FOWV9JRCxcbiYjNDM7XHQuZHJpdmVyX2RhdGFcdD0gKGtlcm5lbF91bG9uZ190KVwmIzM0Ozc2ME1QXCYjMzQ7LFxuIFx0fSxcbiBcdHsgfVxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuY1xuaW5kZXggOGIxOWE1ZDFhMDliNDkuLmFiM2I3M2RkMDgwYWZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jXG5AQCAtMjIxLDIwNCAmIzQzOzIyMSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgdmlhX2RyaXZlciA9IHtcbiBcdC5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGFncF9kZXZpY2VfaWRzIHZpYV9hZ3BfZGV2aWNlX2lkc1tdID1cbi17XG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7QXBvbGxvIFZQM1wmIzM0Oyxcbi1cdH0sXG4tXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7QXBvbGxvIE1WUDNcJiMzNDssXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtBcG9sbG8gTVZQNFwmIzM0Oyxcbi1cdH0sXG4tXG4tXHQvKiBWVDg2MDEgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7QXBvbGxvIFByb01lZGlhL1BMRTEzM1RhXCYjMzQ7LFxuLVx0fSxcbi1cbi1cdC8qIFZUODJDNjkzQSAvIFZUMjhDNjk0VCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgyQzY5MV8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O0Fwb2xsbyBQcm8gMTMzXCYjMzQ7LFxuLVx0fSxcbi1cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7S1gxMzNcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4NjMzICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODYzM18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1BybyAyNjZcJiMzNDssXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2LFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O0Fwb2xsbyBQcm8yNjZcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4MzYxICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2MSxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtLTEUxMzNcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4MzY1IC8gVlQ4MzYyICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1R3aXN0ZXItSy9LVDEzM3gvS00xMzNcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4NzUzQSAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtQNFgyNjZcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4MzY2ICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2N18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O0tUMjY2L0tZMjY2eC9LVDMzM1wmIzM0Oyxcbi1cdH0sXG4tXG4tXHQvKiBWVDg2MzMgKGZvciBDdU1pbmUvIENlbGVyb24pICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODY1M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1BybzI2NlRcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogS00yNjYgLyBQTTI2NiAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2LFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1BNMjY2L0tNMjY2XCYjMzQ7LFxuLVx0fSxcbi1cbi1cdC8qIENMRTI2NiAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg2MlhfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtDTEUyNjZcJiMzNDssXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtLVDQwMC9LVDQwMEEvS1Q2MDBcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4NjA0IC8gVlQ4NjA1IC8gVlQ4NjAzXG4tXHQgKiAoQXBvbGxvIFBybzEzM0EgY2hpcHNldCB3aXRoIFMzIFNhdmFnZTQpICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODYwNV8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1Byb1NhdmFnZSBQTTEzMy9QTDEzMy9QTjEzM1wmIzM0O1xuLVx0fSxcbi1cbi1cdC8qIFA0TTI2NngvUDROMjY2ICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODcwM181MV8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1A0TTI2NngvUDROMjY2XCYjMzQ7LFxuLVx0fSxcbi1cbi1cdC8qIFZUODc1NCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7UFQ4MDBcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogUDRYNjAwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODc2M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1A0WDYwMFwmIzM0O1xuLVx0fSxcbi1cbi1cdC8qIEtNNDAwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODM3OF8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O0tNNDAwL0tNNDAwQVwmIzM0Oyxcbi1cdH0sXG4tXG4tXHQvKiBQVDg4MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BUODgwLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1BUODgwXCYjMzQ7LFxuLVx0fSxcbi1cbi1cdC8qIFBUODgwIFVsdHJhICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtQVDg4MCBVbHRyYVwmIzM0Oyxcbi1cdH0sXG4tXG4tXHQvKiBQVDg5MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtQVDg5MFwmIzM0Oyxcbi1cdH0sXG4tXG4tXHQvKiBQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7UE04MDAvUE44MDAvUE04ODAvUE44ODBcJiMzNDssXG4tXHR9LFxuLVx0LyogS1Q4ODAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7S1Q4ODBcJiMzNDssXG4tXHR9LFxuLVx0LyogS1R4eHgvUHg4eHggKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84M184N1hYXzEsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7VlQ4M3h4L1ZUODd4eC9LVHh4eC9QeDh4eFwmIzM0Oyxcbi1cdH0sXG4tXHQvKiBQNE04MDAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjk2XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7UDRNODAwXCYjMzQ7LFxuLVx0fSxcbi1cdC8qIFA0TTgwMENFICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7VlQzMzE0XCYjMzQ7LFxuLVx0fSxcbi1cdC8qIFZUMzMyNCAvIENYNzAwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0LFxuLVx0XHQuY2hpcHNldF9uYW1lICAgPSBcJiMzNDtDWDcwMFwmIzM0Oyxcbi1cdH0sXG4tXHQvKiBWVDMzMzYgLSB0aGlzIGlzIGEgY2hpcHNldCBmb3IgQU1EIEF0aGxvbi9LOCBDUFUuIER1ZSB0byBLOCYjMzk7cyB1bmlxdWVcbi1cdCAqIGFyY2hpdGVjdHVyZSwgdGhlIEFHUCByZXNvdXJjZSBhbmQgYmVoYXZpb3IgYXJlIGRpZmZlcmVudCBmcm9tXG4tXHQgKiB0aGUgdHJhZGl0aW9uYWwgQUdQIHdoaWNoIHJlc2lkZXMgb25seSBpbiBjaGlwc2V0LiBBR1AgaXMgdXNlZFxuLVx0ICogYnkgM0QgZHJpdmVyIHdoaWNoIHdhc24mIzM5O3QgYXZhaWxhYmxlIGZvciB0aGUgVlQzMzM2IGFuZCBWVDMzNjRcbi1cdCAqIGdlbmVyYXRpb24gdW50aWwgbm93LiAgVW5mb3J0dW5hdGVseSwgYnkgdGVzdGluZywgVlQzMzY0IHdvcmtzXG4tXHQgKiBidXQgVlQzMzM2IGRvZXNuJiMzOTt0LiAtIGV4cGxhbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXNcbi1cdCAqIGFzIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uXG4tXHQgKi9cbi0jaWYgMFxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMzNixcbi1cdFx0LmNoaXBzZXRfbmFtZSAgID0gXCYjMzQ7VlQzMzM2XCYjMzQ7LFxuLVx0fSxcbi0jZW5kaWZcbi1cdC8qIFA0TTg5MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1A0TTg5MCxcbi1cdFx0LmNoaXBzZXRfbmFtZSAgID0gXCYjMzQ7UDRNODkwXCYjMzQ7LFxuLVx0fSxcbi1cdC8qIFA0TTkwMCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzM2NCxcbi1cdFx0LmNoaXBzZXRfbmFtZSAgID0gXCYjMzQ7UDRNOTAwXCYjMzQ7LFxuLVx0fSxcbi1cdHsgfSwgLyogZHVtbXkgZmluYWwgZW50cnksIGFsd2F5cyBwcmVzZW50ICovXG4tfTtcbi1cbiBcbiAvKlxuICAqIFZJQSYjMzk7cyBBR1AzIGNoaXBzZXRzIGRvIG1hZ2ljayB0byBwdXQgdGhlIEFHUCBicmlkZ2UgY29tcGxpYW50XG5AQCAtNDM3LDE3ICYjNDM7MjM5LDE0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3ZpYV9hZ3AzIChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpXG4gXG4gc3RhdGljIGludCBhZ3BfdmlhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbi1cdHN0cnVjdCBhZ3BfZGV2aWNlX2lkcyAqZGV2cyA9IHZpYV9hZ3BfZGV2aWNlX2lkcztcbiBcdHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZTtcbi1cdGludCBqID0gMDtcbiBcdHU4IGNhcF9wdHI7XG4gXG4gXHRjYXBfcHRyID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0FHUCk7XG4gXHRpZiAoIWNhcF9wdHIpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0aiA9IGVudCAtIGFncF92aWFfcGNpX3RhYmxlO1xuLVx0cHJpbnRrIChLRVJOX0lORk8gUEZYIFwmIzM0O0RldGVjdGVkIFZJQSAlcyBjaGlwc2V0XFxuXCYjMzQ7LCBkZXZzW2pdLmNoaXBzZXRfbmFtZSk7XG4mIzQzO1x0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0RldGVjdGVkIFZJQSAlcyBjaGlwc2V0XFxuXCYjMzQ7LCAoY29uc3QgY2hhciAqKWVudC1cdTAwM2Vkcml2ZXJfZGF0YSk7XG4gXG4gXHRicmlkZ2UgPSBhZ3BfYWxsb2NfYnJpZGdlKCk7XG4gXHRpZiAoIWJyaWRnZSlcbkBAIC01MDEsOSAmIzQzOzMwMCw4IEBAIHN0YXRpYyBpbnQgYWdwX3ZpYV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qIG11c3QgYmUgdGhlIHNhbWUgb3JkZXIgYXMgbmFtZSB0YWJsZSBhYm92ZSAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfdmlhX3BjaV90YWJsZVtdID0ge1xuLSNkZWZpbmUgSUQoeCkgXFxcbiYjNDM7I2RlZmluZSBJRCh4LCBuYW1lKSBcXFxuIFx0e1x0XHRcdFx0XHRcdFxcXG4gXHQuY2xhc3NcdFx0PSAoUENJX0NMQVNTX0JSSURHRV9IT1NUIFx1MDAzY1x1MDAzYyA4KSxcdFxcXG4gXHQuY2xhc3NfbWFza1x0PSB+MCxcdFx0XHRcdFxcXG5AQCAtNTExLDM5ICYjNDM7MzA5LDc3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfdmlhX3BjaV90YWJsZVtdID0ge1xuIFx0LmRldmljZVx0XHQ9IHgsXHRcdFx0XHRcXFxuIFx0LnN1YnZlbmRvclx0PSBQQ0lfQU5ZX0lELFx0XHRcdFxcXG4gXHQuc3ViZGV2aWNlXHQ9IFBDSV9BTllfSUQsXHRcdFx0XFxcbiYjNDM7XHQuZHJpdmVyX2RhdGFcdD0gKGtlcm5lbF91bG9uZ190KW5hbWUsXHRcdFxcXG4gXHR9XG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OThfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYwMV8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzY5MV8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjMzXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfWE4yNjYpLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM2MSksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc1M18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjdfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfWE0yNjYpLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYyWF8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjA1XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODcwM181MV8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc2M18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzhfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MFVMVFJBKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QWDhYMF8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzMyNjlfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84M184N1hYXzEpLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfMzI5Nl8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMyNCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04OTApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0KSxcbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMCwgXCYjMzQ7QXBvbGxvIFZQM1wmIzM0OyksXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAsIFwmIzM0O0Fwb2xsbyBNVlAzXCYjMzQ7KSxcbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzAsIFwmIzM0O0Fwb2xsbyBNVlA0XCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDg2MDEgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsIFwmIzM0O0Fwb2xsbyBQcm9NZWRpYS9QTEUxMzNUYVwmIzM0OyksXG4mIzQzO1x0LyogVlQ4MkM2OTNBIC8gVlQyOEM2OTRUICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAsIFwmIzM0O0Fwb2xsbyBQcm8gMTMzXCYjMzQ7KSxcbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzAsIFwmIzM0O0tYMTMzXCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDg2MzMgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjMzXzAsIFwmIzM0O1BybyAyNjZcJiMzNDspLFxuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2LCBcJiMzNDtBcG9sbG8gUHJvMjY2XCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDgzNjEgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYxLCBcJiMzNDtLTEUxMzNcJiMzNDspLFxuJiM0MztcdC8qIFZUODM2NSAvIFZUODM2MiAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjNfMCwgXCYjMzQ7VHdpc3Rlci1LL0tUMTMzeC9LTTEzM1wmIzM0OyksXG4mIzQzO1x0LyogVlQ4NzUzQSAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCwgXCYjMzQ7UDRYMjY2XCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDgzNjYgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzY3XzAsIFwmIzM0O0tUMjY2L0tZMjY2eC9LVDMzM1wmIzM0OyksXG4mIzQzO1x0LyogVlQ4NjMzIChmb3IgQ3VNaW5lLyBDZWxlcm9uKSAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2NTNfMCwgXCYjMzQ7UHJvMjY2VFwmIzM0OyksXG4mIzQzO1x0LyogS00yNjYgLyBQTTI2NiAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2LCBcJiMzNDtQTTI2Ni9LTTI2NlwmIzM0OyksXG4mIzQzO1x0LyogQ0xFMjY2ICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODYyWF8wLCBcJiMzNDtDTEUyNjZcJiMzNDspLFxuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCwgXCYjMzQ7S1Q0MDAvS1Q0MDBBL0tUNjAwXCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDg2MDQgLyBWVDg2MDUgLyBWVDg2MDMgKEFwb2xsbyBQcm8xMzNBIGNoaXBzZXQgd2l0aCBTMyBTYXZhZ2U0KSAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCwgXCYjMzQ7UHJvU2F2YWdlIFBNMTMzL1BMMTMzL1BOMTMzXCYjMzQ7KSxcbiYjNDM7XHQvKiBQNE0yNjZ4L1A0TjI2NiAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCwgXCYjMzQ7UDRNMjY2eC9QNE4yNjZcJiMzNDspLFxuJiM0MztcdC8qIFZUODc1NCAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzAsIFwmIzM0O1BUODAwXCYjMzQ7KSxcbiYjNDM7XHQvKiBQNFg2MDAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzYzXzAsIFwmIzM0O1A0WDYwMFwmIzM0OyksXG4mIzQzO1x0LyogS000MDAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzAsIFwmIzM0O0tNNDAwL0tNNDAwQVwmIzM0OyksXG4mIzQzO1x0LyogUFQ4ODAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MCwgXCYjMzQ7UFQ4ODBcJiMzNDspLFxuJiM0MztcdC8qIFBUODgwIFVsdHJhICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSwgXCYjMzQ7UFQ4ODAgVWx0cmFcJiMzNDspLFxuJiM0MztcdC8qIFBUODkwICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODc4M18wLCBcJiMzNDtQVDg5MFwmIzM0OyksXG4mIzQzO1x0LyogUE04MDAvUE44MDAvUE04ODAvUE44ODAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QWDhYMF8wLCBcJiMzNDtQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MFwmIzM0OyksXG4mIzQzO1x0LyogS1Q4ODAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzAsIFwmIzM0O0tUODgwXCYjMzQ7KSxcbiYjNDM7XHQvKiBLVHh4eC9QeDh4eCAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSwgXCYjMzQ7VlQ4M3h4L1ZUODd4eC9LVHh4eC9QeDh4eFwmIzM0OyksXG4mIzQzO1x0LyogUDRNODAwICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfMzI5Nl8wLCBcJiMzNDtQNE04MDBcJiMzNDspLFxuJiM0MztcdC8qIFA0TTgwMENFICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UsIFwmIzM0O1ZUMzMxNFwmIzM0OyksXG4mIzQzO1x0LyogVlQzMzI0IC8gQ1g3MDAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMjQsIFwmIzM0O0NYNzAwXCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDMzMzYgLSB0aGlzIGlzIGEgY2hpcHNldCBmb3IgQU1EIEF0aGxvbi9LOCBDUFUuIER1ZSB0byBLOCYjMzk7cyB1bmlxdWVcbiYjNDM7XHQgKiBhcmNoaXRlY3R1cmUsIHRoZSBBR1AgcmVzb3VyY2UgYW5kIGJlaGF2aW9yIGFyZSBkaWZmZXJlbnQgZnJvbVxuJiM0MztcdCAqIHRoZSB0cmFkaXRpb25hbCBBR1Agd2hpY2ggcmVzaWRlcyBvbmx5IGluIGNoaXBzZXQuIEFHUCBpcyB1c2VkXG4mIzQzO1x0ICogYnkgM0QgZHJpdmVyIHdoaWNoIHdhc24mIzM5O3QgYXZhaWxhYmxlIGZvciB0aGUgVlQzMzM2IGFuZCBWVDMzNjRcbiYjNDM7XHQgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3Jrc1xuJiM0MztcdCAqIGJ1dCBWVDMzMzYgZG9lc24mIzM5O3QuIC0gZXhwbGFuYXRpb24gZnJvbSB2aWEsIGp1c3QgbGVhdmUgdGhpcyBhc1xuJiM0MztcdCAqIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uXG4mIzQzO1x0ICovXG4mIzQzOyNpZiAwXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LCBcJiMzNDtWVDMzMzZcJiMzNDspLFxuJiM0MzsjZW5kaWZcbiYjNDM7XHQvKiBQNE04OTAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04OTAsIFwmIzM0O1A0TTg5MFwmIzM0OyksXG4mIzQzO1x0LyogUDRNOTAwICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0LCBcJiMzNDtQNE05MDBcJiMzNDspLFxuIFx0eyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuYyBiL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jXG5pbmRleCAwNWRjYjY2NzVjZDY2MS4uMWNmNTFmNzYzMjkzMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmNcbkBAIC01NjIsNyAmIzQzOzU2Miw2IEBAIHN0YXRpYyBpbnQgdHBjaTIwMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXG4gXHQvKiBTYXZlIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgKi9cbiBcdHRwY2kyMDAtXHUwMDNlaW5mby1cdTAwM2VwZGV2ID0gcGRldjtcbi1cdHRwY2kyMDAtXHUwMDNlaW5mby1cdTAwM2VpZF90YWJsZSA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKWlkO1xuIFxuIFx0LyogcmVnaXN0ZXIgdGhlIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBpdCAqL1xuIFx0cmV0ID0gdHBjaTIwMF9pbnN0YWxsKHRwY2kyMDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oIGIvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmhcbmluZGV4IGU3OWFjNjRhYmNmZmFjLi5hMmJmMzEyNTc5NGI3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaFxuQEAgLTE0NSw3ICYjNDM7MTQ1LDYgQEAgc3RydWN0IHRwY2kyMDBfc2xvdCB7XG4gICovXG4gc3RydWN0IHRwY2kyMDBfaW5mb3Mge1xuIFx0c3RydWN0IHBjaV9kZXZcdFx0XHQqcGRldjtcbi1cdHN0cnVjdCBwY2lfZGV2aWNlX2lkXHRcdCppZF90YWJsZTtcbiBcdHN0cnVjdCB0cGNpMjAwX3JlZ3MgX19pb21lbVx0KmludGVyZmFjZV9yZWdzO1xuIFx0dm9pZCBfX2lvbWVtXHRcdFx0KmNmZ19yZWdzO1xuIFx0c3RydWN0IGlwYWNrX2J1c19kZXZpY2VcdFx0KmlwYWNrX2J1cztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jXG5pbmRleCAwZGE4NWQzNjY0N2Q5MS4uYmZlMzI2OGRmZGMxN2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmNcbkBAIC0xMzAsNyAmIzQzOzEzMCw2IEBAIHN0cnVjdCBtbHhzd19wY2kge1xuIFx0XHR9IGNvbXA7XG4gXHR9IGNtZDtcbiBcdHN0cnVjdCBtbHhzd19idXNfaW5mbyBidXNfaW5mbztcbi1cdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZDtcbiBcdGVudW0gbWx4c3dfcGNpX2NxZV92IG1heF9jcWVfdmVyOyAvKiBNYXhpbWFsIHN1cHBvcnRlZCBDUUUgdmVyc2lvbiAqL1xuIFx0dTggbnVtX2NxczsgLyogTnVtYmVyIG9mIENRcyAqL1xuIFx0dTggbnVtX3NkcXM7IC8qIE51bWJlciBvZiBTRFFzICovXG5AQCAtMTc2OCw3ICYjNDM7MTc2Nyw2IEBAIHN0YXRpYyB2b2lkIG1seHN3X3BjaV9tYm94X2ZyZWUoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLFxuIH1cbiBcbiBzdGF0aWMgaW50IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksXG4tXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkLFxuIFx0XHRcdFx0ICAgIHUzMiAqcF9zeXNfc3RhdHVzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kO1xuQEAgLTE4MzksNyAmIzQzOzE4MzcsNyBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9yZXNldF9zdyhzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2kpXG4gfVxuIFxuIHN0YXRpYyBpbnRcbi1tbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4mIzQzO21seHN3X3BjaV9yZXNldChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2kpXG4ge1xuIFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtbHhzd19wY2ktXHUwMDNlcGRldjtcbiBcdGJvb2wgcGNpX3Jlc2V0X3Nicl9zdXBwb3J0ZWQgPSBmYWxzZTtcbkBAIC0xODQ4LDcgJiM0MzsxODQ2LDcgQEAgbWx4c3dfcGNpX3Jlc2V0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0dTMyIHN5c19zdGF0dXM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KG1seHN3X3BjaSwgaWQsIFx1MDAyNnN5c19zdGF0dXMpO1xuJiM0MztcdGVyciA9IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChtbHhzd19wY2ksIFx1MDAyNnN5c19zdGF0dXMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhY2ggc3lzdGVtIHJlYWR5IHN0YXR1cyBiZWZvcmUgcmVzZXQuIFN0YXR1cyBpcyAweCV4XFxuXCYjMzQ7LFxuIFx0XHRcdHN5c19zdGF0dXMpO1xuQEAgLTE4ODAsNyAmIzQzOzE4NzgsNyBAQCBtbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZXJyID0gbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KG1seHN3X3BjaSwgaWQsIFx1MDAyNnN5c19zdGF0dXMpO1xuJiM0MztcdGVyciA9IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChtbHhzd19wY2ksIFx1MDAyNnN5c19zdGF0dXMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhY2ggc3lzdGVtIHJlYWR5IHN0YXR1cyBhZnRlciByZXNldC4gU3RhdHVzIGlzIDB4JXhcXG5cJiMzNDssXG4gXHRcdFx0c3lzX3N0YXR1cyk7XG5AQCAtMTkzMiw3ICYjNDM7MTkzMCw3IEBAIHN0YXRpYyBpbnQgbWx4c3dfcGNpX2luaXQodm9pZCAqYnVzX3ByaXYsIHN0cnVjdCBtbHhzd19jb3JlICptbHhzd19jb3JlLFxuIFx0aWYgKCFtYm94KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGVyciA9IG1seHN3X3BjaV9yZXNldChtbHhzd19wY2ksIG1seHN3X3BjaS1cdTAwM2VpZCk7XG4mIzQzO1x0ZXJyID0gbWx4c3dfcGNpX3Jlc2V0KG1seHN3X3BjaSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9yZXNldDtcbiBcbkBAIC0yNDY0LDcgJiM0MzsyNDYyLDYgQEAgc3RhdGljIGludCBtbHhzd19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdG1seHN3X3BjaS1cdTAwM2VidXNfaW5mby5kZXZpY2VfbmFtZSA9IHBjaV9uYW1lKG1seHN3X3BjaS1cdTAwM2VwZGV2KTtcbiBcdG1seHN3X3BjaS1cdTAwM2VidXNfaW5mby5kZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcdG1seHN3X3BjaS1cdTAwM2VidXNfaW5mby5yZWFkX2Nsb2NrX2NhcGFibGUgPSB0cnVlO1xuLVx0bWx4c3dfcGNpLVx1MDAzZWlkID0gaWQ7XG4gXG4gXHRlcnIgPSBtbHhzd19jb3JlX2J1c19kZXZpY2VfcmVnaXN0ZXIoXHUwMDI2bWx4c3dfcGNpLVx1MDAzZWJ1c19pbmZvLFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNm1seHN3X3BjaV9idXMsIG1seHN3X3BjaSwgZmFsc2UsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXG5pbmRleCBmMzY3NzhlNjJhYzFhNS4uNDg1MTA2MWJhYmNiNWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xuQEAgLTI5LDYgJiM0MzsyOSw0NyBAQCBzdHJ1Y3QgcGNpX2R5bmlkIHtcbiBcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkO1xuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkb19wY2lfYWRkX2R5bmlkIC0gYWRkIGEgbmV3IFBDSSBkZXZpY2UgSUQgdG8gdGhpcyBkcml2ZXIgYW5kIHJlLXByb2JlIGRldmljZXNcbiYjNDM7ICogQGRydjogdGFyZ2V0IHBjaSBkcml2ZXJcbiYjNDM7ICogQGlkOiBJRCB0byBiZSBhZGRlZFxuJiM0MzsgKiBAY2hlY2tfZHVwOiB3aGV0aGVyIHRvIGNoZWNrIGlmIG1hdGNoaW5nIElEIGlzIGFscmVhZHkgcHJlc2VudFxuJiM0MzsgKlxuJiM0MzsgKiBBZGRzIGEgbmV3IGR5bmFtaWMgcGNpIGRldmljZSBJRCB0byB0aGlzIGRyaXZlciBhbmQgY2F1c2VzIHRoZVxuJiM0MzsgKiBkcml2ZXIgdG8gcHJvYmUgZm9yIGFsbCBkZXZpY2VzIGFnYWluLiAgQGRydiBtdXN0IGhhdmUgYmVlblxuJiM0MzsgKiByZWdpc3RlcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogQ09OVEVYVDpcbiYjNDM7ICogRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJFVFVSTlM6XG4mIzQzOyAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRvX3BjaV9hZGRfZHluaWQoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkLCBib29sIGNoZWNrX2R1cClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZHluaWQgKmR5bmlkLCAqZXhpc3RpbmdfZHluaWQ7XG4mIzQzO1xuJiM0MztcdGR5bmlkID0ga3phbGxvY19vYmooKmR5bmlkKTtcbiYjNDM7XHRpZiAoIWR5bmlkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGR5bmlkLVx1MDAzZWlkID0gKmlkO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubG9jaykge1xuJiM0MztcdFx0aWYgKGNoZWNrX2R1cCkge1xuJiM0MztcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGV4aXN0aW5nX2R5bmlkLCBcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxpc3QsIG5vZGUpIHtcbiYjNDM7XHRcdFx0XHRpZiAocGNpX21hdGNoX29uZV9pZChcdTAwMjZleGlzdGluZ19keW5pZC1cdTAwM2VpZCwgaWQpKSB7XG4mIzQzO1x0XHRcdFx0XHRrZnJlZShkeW5pZCk7XG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZHluaWQtXHUwMDNlbm9kZSwgXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5saXN0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBkcml2ZXJfYXR0YWNoKFx1MDAyNmRydi1cdTAwM2Vkcml2ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHBjaV9hZGRfZHluaWQgLSBhZGQgYSBuZXcgUENJIGRldmljZSBJRCB0byB0aGlzIGRyaXZlciBhbmQgcmUtcHJvYmUgZGV2aWNlc1xuICAqIEBkcnY6IHRhcmdldCBwY2kgZHJpdmVyXG5AQCAtNTYsMjUgJiM0Mzs5NywxNyBAQCBpbnQgcGNpX2FkZF9keW5pZChzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LFxuIFx0XHQgIHVuc2lnbmVkIGludCBjbGFzcywgdW5zaWduZWQgaW50IGNsYXNzX21hc2ssXG4gXHRcdCAgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSlcbiB7XG4tXHRzdHJ1Y3QgcGNpX2R5bmlkICpkeW5pZDtcbi1cbi1cdGR5bmlkID0ga3phbGxvY19vYmooKmR5bmlkKTtcbi1cdGlmICghZHluaWQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0ZHluaWQtXHUwMDNlaWQudmVuZG9yID0gdmVuZG9yO1xuLVx0ZHluaWQtXHUwMDNlaWQuZGV2aWNlID0gZGV2aWNlO1xuLVx0ZHluaWQtXHUwMDNlaWQuc3VidmVuZG9yID0gc3VidmVuZG9yO1xuLVx0ZHluaWQtXHUwMDNlaWQuc3ViZGV2aWNlID0gc3ViZGV2aWNlO1xuLVx0ZHluaWQtXHUwMDNlaWQuY2xhc3MgPSBjbGFzcztcbi1cdGR5bmlkLVx1MDAzZWlkLmNsYXNzX21hc2sgPSBjbGFzc19tYXNrO1xuLVx0ZHluaWQtXHUwMDNlaWQuZHJpdmVyX2RhdGEgPSBkcml2ZXJfZGF0YTtcbi1cbi1cdHNwaW5fbG9jayhcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spO1xuLVx0bGlzdF9hZGRfdGFpbChcdTAwMjZkeW5pZC1cdTAwM2Vub2RlLCBcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxpc3QpO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5sb2NrKTtcbi1cbi1cdHJldHVybiBkcml2ZXJfYXR0YWNoKFx1MDAyNmRydi1cdTAwM2Vkcml2ZXIpO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkID0ge1xuJiM0MztcdFx0LnZlbmRvciA9IHZlbmRvcixcbiYjNDM7XHRcdC5kZXZpY2UgPSBkZXZpY2UsXG4mIzQzO1x0XHQuc3VidmVuZG9yID0gc3VidmVuZG9yLFxuJiM0MztcdFx0LnN1YmRldmljZSA9IHN1YmRldmljZSxcbiYjNDM7XHRcdC5jbGFzcyA9IGNsYXNzLFxuJiM0MztcdFx0LmNsYXNzX21hc2sgPSBjbGFzc19tYXNrLFxuJiM0MztcdFx0LmRyaXZlcl9kYXRhID0gZHJpdmVyX2RhdGEsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRvX3BjaV9hZGRfZHluaWQoZHJ2LCBcdTAwMjZpZCwgZmFsc2UpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfYWRkX2R5bmlkKTtcbiBcbkBAIC05MCw2ICYjNDM7MTIzLDMwIEBAIHN0YXRpYyB2b2lkIHBjaV9mcmVlX2R5bmlkcyhzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5sb2NrKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkb19wY2lfbWF0Y2hfaWQgLSBTZWUgaWYgYSBQQ0kgSUQgbWF0Y2hlcyBhIGdpdmVuIHBjaV9pZCB0YWJsZVxuJiM0MzsgKiBAaWRzOiBhcnJheSBvZiBQQ0kgZGV2aWNlIElEIHN0cnVjdHVyZXMgdG8gc2VhcmNoIGluXG4mIzQzOyAqIEBkZXZfaWQ6IHRoZSBhY3R1YWwgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdC5cbiYjNDM7ICogQGluY2x1ZGVfb3ZlcnJpZGVfb25seTogYWxzbyBtYXRjaCBhZ2FpbnN0IGRldmljZSBJRCBlbnRyaWVzIG1hcmtlZCBhcyBvdmVycmlkZSBvbmx5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIHRoZSBtYXRjaGluZyBwY2lfZGV2aWNlX2lkIHN0cnVjdHVyZSBvclxuJiM0MzsgKiAlTlVMTCBpZiB0aGVyZSBpcyBubyBtYXRjaC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZG9fcGNpX21hdGNoX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpkZXZfaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGJvb2wgaW5jbHVkZV9vdmVycmlkZV9vbmx5KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGlkcykge1xuJiM0MztcdFx0d2hpbGUgKGlkcy1cdTAwM2V2ZW5kb3IgfHwgaWRzLVx1MDAzZXN1YnZlbmRvciB8fCBpZHMtXHUwMDNlY2xhc3NfbWFzaykge1xuJiM0MztcdFx0XHRpZiAoKCFpZHMtXHUwMDNlb3ZlcnJpZGVfb25seSB8fCBpbmNsdWRlX292ZXJyaWRlX29ubHkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgcGNpX21hdGNoX29uZV9pZChpZHMsIGRldl9pZCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGlkcztcbiYjNDM7XHRcdFx0aWRzJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogcGNpX21hdGNoX2lkIC0gU2VlIGlmIGEgUENJIGRldmljZSBtYXRjaGVzIGEgZ2l2ZW4gcGNpX2lkIHRhYmxlXG4gICogQGlkczogYXJyYXkgb2YgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmVzIHRvIHNlYXJjaCBpblxuQEAgLTEwNSwxNCAmIzQzOzE2Miw5IEBAIHN0YXRpYyB2b2lkIHBjaV9mcmVlX2R5bmlkcyhzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KVxuIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfaWQoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcyxcbiBcdFx0XHRcdFx0IHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4ge1xuLVx0aWYgKGlkcykge1xuLVx0XHR3aGlsZSAoaWRzLVx1MDAzZXZlbmRvciB8fCBpZHMtXHUwMDNlc3VidmVuZG9yIHx8IGlkcy1cdTAwM2VjbGFzc19tYXNrKSB7XG4tXHRcdFx0aWYgKHBjaV9tYXRjaF9vbmVfZGV2aWNlKGlkcywgZGV2KSlcbi1cdFx0XHRcdHJldHVybiBpZHM7XG4tXHRcdFx0aWRzJiM0MzsmIzQzOztcbi1cdFx0fVxuLVx0fVxuLVx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkID0gcGNpX2lkX2Zyb21fZGV2aWNlKGRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkb19wY2lfbWF0Y2hfaWQoaWRzLCBcdTAwMjZkZXZfaWQsIHRydWUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBjaV9tYXRjaF9pZCk7XG4gXG5AQCAtMTI3LDYgJiM0MzsxNzksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2RldmljZV9pZF9hbnkgPSB7XG4gICogcGNpX21hdGNoX2RldmljZSAtIFNlZSBpZiBhIGRldmljZSBtYXRjaGVzIGEgZHJpdmVyJiMzOTtzIGxpc3Qgb2YgSURzXG4gICogQGRydjogdGhlIFBDSSBkcml2ZXIgdG8gbWF0Y2ggYWdhaW5zdFxuICAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0XG4mIzQzOyAqIEBpZF9jb3B5OiBQbGFjZSB0byBzdG9yZSBjb3B5IG9mIHBjaV9kZXZpY2VfaWQgZm9yIGR5bmFtaWMgSURcbiAgKlxuICAqIFVzZWQgYnkgYSBkcml2ZXIgdG8gY2hlY2sgd2hldGhlciBhIFBDSSBkZXZpY2UgaXMgaW4gaXRzIGxpc3Qgb2ZcbiAgKiBzdXBwb3J0ZWQgZGV2aWNlcyBvciBpbiB0aGUgZHluaWRzIGxpc3QsIHdoaWNoIG1heSBoYXZlIGJlZW4gYXVnbWVudGVkXG5AQCAtMTM0LDEwICYjNDM7MTg3LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfZGV2aWNlX2lkX2FueSA9IHtcbiAgKiBzdHJ1Y3R1cmUgb3IgJU5VTEwgaWYgdGhlcmUgaXMgbm8gbWF0Y2guXG4gICovXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsXG4tXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkX2NvcHkpXG4ge1xuLVx0c3RydWN0IHBjaV9keW5pZCAqZHluaWQ7XG4tXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmRfaWQgPSBOVUxMLCAqaWRzO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpmb3VuZF9pZCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qIFdoZW4gZHJpdmVyX292ZXJyaWRlIGlzIHNldCwgb25seSBiaW5kIHRvIHRoZSBtYXRjaGluZyBkcml2ZXIgKi9cbkBAIC0xNDUsNDUgJiM0MzsxOTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsXG4gXHRpZiAocmV0ID09IDApXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGRldl9pZCA9IHBjaV9pZF9mcm9tX2RldmljZShkZXYpO1xuIFx0LyogTG9vayBhdCB0aGUgZHluYW1pYyBpZHMgZmlyc3QsIGJlZm9yZSB0aGUgc3RhdGljIG9uZXMgKi9cbi1cdHNwaW5fbG9jayhcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5saXN0LCBub2RlKSB7XG4tXHRcdGlmIChwY2lfbWF0Y2hfb25lX2RldmljZShcdTAwMjZkeW5pZC1cdTAwM2VpZCwgZGV2KSkge1xuLVx0XHRcdGZvdW5kX2lkID0gXHUwMDI2ZHluaWQtXHUwMDNlaWQ7XG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spIHtcbiYjNDM7XHRcdHN0cnVjdCBwY2lfZHluaWQgKmR5bmlkO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xuJiM0MztcdFx0XHRpZiAocGNpX21hdGNoX29uZV9pZChcdTAwMjZkeW5pZC1cdTAwM2VpZCwgXHUwMDI2ZGV2X2lkKSkge1xuJiM0MztcdFx0XHRcdCppZF9jb3B5ID0gZHluaWQtXHUwMDNlaWQ7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGlkX2NvcHk7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5sb2NrKTtcbiBcbiYjNDM7XHRmb3VuZF9pZCA9IGRvX3BjaV9tYXRjaF9pZChkcnYtXHUwMDNlaWRfdGFibGUsIFx1MDAyNmRldl9pZCwgcmV0IFx1MDAzZSAwKTtcbiBcdGlmIChmb3VuZF9pZClcbiBcdFx0cmV0dXJuIGZvdW5kX2lkO1xuIFxuLVx0Zm9yIChpZHMgPSBkcnYtXHUwMDNlaWRfdGFibGU7IChmb3VuZF9pZCA9IHBjaV9tYXRjaF9pZChpZHMsIGRldikpO1xuLVx0ICAgICBpZHMgPSBmb3VuZF9pZCAmIzQzOyAxKSB7XG4tXHRcdC8qXG4tXHRcdCAqIFRoZSBtYXRjaCB0YWJsZSBpcyBzcGxpdCBiYXNlZCBvbiBkcml2ZXJfb3ZlcnJpZGUuXG4tXHRcdCAqIEluIGNhc2Ugb3ZlcnJpZGVfb25seSB3YXMgc2V0LCBlbmZvcmNlIGRyaXZlcl9vdmVycmlkZVxuLVx0XHQgKiBtYXRjaGluZy5cbi1cdFx0ICovXG4tXHRcdGlmIChmb3VuZF9pZC1cdTAwM2VvdmVycmlkZV9vbmx5KSB7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbi1cdFx0XHRcdHJldHVybiBmb3VuZF9pZDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXR1cm4gZm91bmRfaWQ7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdC8qIGRyaXZlcl9vdmVycmlkZSB3aWxsIGFsd2F5cyBtYXRjaCwgc2VuZCBhIGR1bW15IGlkICovXG4gXHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4gXHUwMDI2cGNpX2RldmljZV9pZF9hbnk7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX3BjaV9mcmVlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4te1xuLVx0a2ZyZWUodG9fcGNpX2RldihkZXYpKTtcbi19XG4tXG4gLyoqXG4gICogbmV3X2lkX3N0b3JlIC0gc3lzZnMgZnJvbnRlbmQgdG8gcGNpX2FkZF9keW5pZCgpXG4gICogQGRyaXZlcjogdGFyZ2V0IGRldmljZSBkcml2ZXJcbkBAIC0xOTcsMzggJiM0MzsyMzUsMjIgQEAgc3RhdGljIHNzaXplX3QgbmV3X2lkX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmJ1ZixcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RyaXZlciAqcGRydiA9IHRvX3BjaV9kcml2ZXIoZHJpdmVyKTtcbiBcdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMgPSBwZHJ2LVx1MDAzZWlkX3RhYmxlO1xuLVx0dTMyIHZlbmRvciwgZGV2aWNlLCBzdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELFxuLVx0XHRzdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELCBjbGFzcyA9IDAsIGNsYXNzX21hc2sgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSA9IDA7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXZpY2VfaWQgaWQgPSB7XG4mIzQzO1x0XHQuc3VidmVuZG9yID0gUENJX0FOWV9JRCxcbiYjNDM7XHRcdC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lEXG4mIzQzO1x0fTtcbiBcdGludCBmaWVsZHM7XG4gXHRpbnQgcmV0dmFsID0gMDtcbiBcbiBcdGZpZWxkcyA9IHNzY2FuZihidWYsIFwmIzM0OyV4ICV4ICV4ICV4ICV4ICV4ICVseFwmIzM0Oyxcbi1cdFx0XHRcdTAwMjZ2ZW5kb3IsIFx1MDAyNmRldmljZSwgXHUwMDI2c3VidmVuZG9yLCBcdTAwMjZzdWJkZXZpY2UsXG4tXHRcdFx0XHUwMDI2Y2xhc3MsIFx1MDAyNmNsYXNzX21hc2ssIFx1MDAyNmRyaXZlcl9kYXRhKTtcbiYjNDM7XHRcdFx0XHUwMDI2aWQudmVuZG9yLCBcdTAwMjZpZC5kZXZpY2UsIFx1MDAyNmlkLnN1YnZlbmRvciwgXHUwMDI2aWQuc3ViZGV2aWNlLFxuJiM0MztcdFx0XHRcdTAwMjZpZC5jbGFzcywgXHUwMDI2aWQuY2xhc3NfbWFzaywgXHUwMDI2aWQuZHJpdmVyX2RhdGEpO1xuIFx0aWYgKGZpZWxkcyBcdTAwM2MgMilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoZmllbGRzICE9IDcpIHtcbi1cdFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBremFsbG9jX29iaigqcGRldik7XG4tXHRcdGlmICghcGRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdFx0cGRldi1cdTAwM2V2ZW5kb3IgPSB2ZW5kb3I7XG4tXHRcdHBkZXYtXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xuLVx0XHRwZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3IgPSBzdWJ2ZW5kb3I7XG4tXHRcdHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZSA9IHN1YmRldmljZTtcbi1cdFx0cGRldi1cdTAwM2VjbGFzcyA9IGNsYXNzO1xuLVx0XHRwZGV2LVx1MDAzZWRldi5yZWxlYXNlID0gX3BjaV9mcmVlX2RldmljZTtcbi1cbi1cdFx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuLVx0XHRpZiAocGNpX21hdGNoX2RldmljZShwZHJ2LCBwZGV2KSlcbi1cdFx0XHRyZXR2YWwgPSAtRUVYSVNUO1xuLVxuLVx0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbi1cbi1cdFx0aWYgKHJldHZhbClcbi1cdFx0XHRyZXR1cm4gcmV0dmFsO1xuJiM0MztcdFx0aWYgKGRvX3BjaV9tYXRjaF9pZChwZHJ2LVx1MDAzZWlkX3RhYmxlLCBcdTAwMjZpZCwgZmFsc2UpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdH1cbiBcbiBcdC8qIE9ubHkgYWNjZXB0IGRyaXZlcl9kYXRhIHZhbHVlcyB0aGF0IG1hdGNoIGFuIGV4aXN0aW5nIGlkX3RhYmxlXG5AQCAtMjM2LDcgJiM0MzsyNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLFxuIFx0aWYgKGlkcykge1xuIFx0XHRyZXR2YWwgPSAtRUlOVkFMO1xuIFx0XHR3aGlsZSAoaWRzLVx1MDAzZXZlbmRvciB8fCBpZHMtXHUwMDNlc3VidmVuZG9yIHx8IGlkcy1cdTAwM2VjbGFzc19tYXNrKSB7XG4tXHRcdFx0aWYgKGRyaXZlcl9kYXRhID09IGlkcy1cdTAwM2Vkcml2ZXJfZGF0YSkge1xuJiM0MztcdFx0XHRpZiAoaWQuZHJpdmVyX2RhdGEgPT0gaWRzLVx1MDAzZWRyaXZlcl9kYXRhKSB7XG4gXHRcdFx0XHRyZXR2YWwgPSAwO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuQEAgLTI0Niw4ICYjNDM7MjY4LDcgQEAgc3RhdGljIHNzaXplX3QgbmV3X2lkX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIFx0fVxuIFxuLVx0cmV0dmFsID0gcGNpX2FkZF9keW5pZChwZHJ2LCB2ZW5kb3IsIGRldmljZSwgc3VidmVuZG9yLCBzdWJkZXZpY2UsXG4tXHRcdFx0ICAgICAgIGNsYXNzLCBjbGFzc19tYXNrLCBkcml2ZXJfZGF0YSk7XG4mIzQzO1x0cmV0dmFsID0gZG9fcGNpX2FkZF9keW5pZChwZHJ2LCBcdTAwMjZpZCwgZmllbGRzICE9IDcpO1xuIFx0aWYgKHJldHZhbClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcdHJldHVybiBjb3VudDtcbkBAIC00NDUsMTIgJiM0Mzs0NjYsMTMgQEAgdm9pZCBwY2lfcHJvYmVfZmx1c2hfd29ya3F1ZXVlKHZvaWQpXG4gc3RhdGljIGludCBfX3BjaV9kZXZpY2VfcHJvYmUoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkX2NvcHk7XG4gXHRpbnQgZXJyb3IgPSAwO1xuIFxuIFx0aWYgKGRydi1cdTAwM2Vwcm9iZSkge1xuIFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gXG4tXHRcdGlkID0gcGNpX21hdGNoX2RldmljZShkcnYsIHBjaV9kZXYpO1xuJiM0MztcdFx0aWQgPSBwY2lfbWF0Y2hfZGV2aWNlKGRydiwgcGNpX2RldiwgXHUwMDI2aWRfY29weSk7XG4gXHRcdGlmIChpZClcbiBcdFx0XHRlcnJvciA9IHBjaV9jYWxsX3Byb2JlKGRydiwgcGNpX2RldiwgaWQpO1xuIFx0fVxuQEAgLTE1MzgsMTIgJiM0MzsxNTYwLDEzIEBAIHN0YXRpYyBpbnQgcGNpX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTtcbiBcdHN0cnVjdCBwY2lfZHJpdmVyICpwY2lfZHJ2O1xuIFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkX2NvcHk7XG4gXG4gXHRpZiAocGNpX2Rldl9iaW5kaW5nX2Rpc2FsbG93ZWQocGNpX2RldikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cGNpX2RydiA9IChzdHJ1Y3QgcGNpX2RyaXZlciAqKXRvX3BjaV9kcml2ZXIoZHJ2KTtcbi1cdGZvdW5kX2lkID0gcGNpX21hdGNoX2RldmljZShwY2lfZHJ2LCBwY2lfZGV2KTtcbiYjNDM7XHRmb3VuZF9pZCA9IHBjaV9tYXRjaF9kZXZpY2UocGNpX2RydiwgcGNpX2RldiwgXHUwMDI2aWRfY29weSk7XG4gXHRpZiAoZm91bmRfaWQpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IDQ0NjllMWE3N2YzYzEzLi4wNTY3YTg3NjJiYWEwOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuaFxuQEAgLTQ0MiwyMSAmIzQzOzQ0MiwzNyBAQCBzdGF0aWMgaW5saW5lIGludCBwY2lfc2V0dXBfY2FyZGJ1cyhjaGFyICpzdHIpIHsgcmV0dXJuIC1FTk9FTlQ7IH1cbiAjZW5kaWYgLyogQ09ORklHX0NBUkRCVVMgKi9cbiBcbiAvKipcbi0gKiBwY2lfbWF0Y2hfb25lX2RldmljZSAtIFRlbGwgaWYgYSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSBoYXMgYSBtYXRjaGluZ1xuLSAqXHRcdFx0ICBQQ0kgZGV2aWNlIGlkIHN0cnVjdHVyZVxuLSAqIEBpZDogc2luZ2xlIFBDSSBkZXZpY2UgaWQgc3RydWN0dXJlIHRvIG1hdGNoXG4tICogQGRldjogdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3RcbiYjNDM7ICogcGNpX2lkX2Zyb21fZGV2aWNlIC0gT2J0YWluIGEgcGNpX2RldmljZV9pZCBmcm9tIGEgUENJIGRldmljZVxuJiM0MzsgKiBAZGV2OiB0aGUgUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIGEgcGNpX2RldmljZV9pZCBmaWxsZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZF9mcm9tX2RldmljZShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgcGNpX2RldmljZV9pZCkge1xuJiM0MztcdFx0LnZlbmRvciA9IGRldi1cdTAwM2V2ZW5kb3IsXG4mIzQzO1x0XHQuZGV2aWNlID0gZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdC5zdWJ2ZW5kb3IgPSBkZXYtXHUwMDNlc3Vic3lzdGVtX3ZlbmRvcixcbiYjNDM7XHRcdC5zdWJkZXZpY2UgPSBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZSxcbiYjNDM7XHRcdC5jbGFzcyA9IGRldi1cdTAwM2VjbGFzcyxcbiYjNDM7XHR9O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpX21hdGNoX29uZV9pZCAtIFRlbGwgaWYgYSBQQ0kgZGV2aWNlIElEIG1hdGNoZXMgYSBuZWVkbGUgUENJIGRldmljZSBpZFxuJiM0MzsgKiBAaWQ6IHNpbmdsZSBQQ0kgZGV2aWNlIGlkIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0IChuZWVkbGUpXG4mIzQzOyAqIEBkZXZfaWQ6IHRoZSBhY3R1YWwgSUQgZnJvbSB0aGUgUENJIGRldmljZSAoY2FuIGJlIGNyZWF0ZWQgdmlhIHBjaV9pZF9mcm9tX2RldmljZSlcbiAgKlxuICAqIFJldHVybnMgdGhlIG1hdGNoaW5nIHBjaV9kZXZpY2VfaWQgc3RydWN0dXJlIG9yICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKlxuLXBjaV9tYXRjaF9vbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7cGNpX21hdGNoX29uZV9pZChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpkZXZfaWQpXG4ge1xuLVx0aWYgKChpZC1cdTAwM2V2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC1cdTAwM2V2ZW5kb3IgPT0gZGV2LVx1MDAzZXZlbmRvcikgXHUwMDI2XHUwMDI2XG4tXHQgICAgKGlkLVx1MDAzZWRldmljZSA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVx1MDAzZWRldmljZSA9PSBkZXYtXHUwMDNlZGV2aWNlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoaWQtXHUwMDNlc3VidmVuZG9yID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlc3VidmVuZG9yID09IGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoaWQtXHUwMDNlc3ViZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlc3ViZGV2aWNlID09IGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKChpZC1cdTAwM2VjbGFzcyBeIGRldi1cdTAwM2VjbGFzcykgXHUwMDI2IGlkLVx1MDAzZWNsYXNzX21hc2spKVxuJiM0MztcdGlmICgoaWQtXHUwMDNldmVuZG9yID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNldmVuZG9yID09IGRldl9pZC1cdTAwM2V2ZW5kb3IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoaWQtXHUwMDNlZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlZGV2aWNlID09IGRldl9pZC1cdTAwM2VkZXZpY2UpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoaWQtXHUwMDNlc3VidmVuZG9yID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlc3VidmVuZG9yID09IGRldl9pZC1cdTAwM2VzdWJ2ZW5kb3IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoaWQtXHUwMDNlc3ViZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlc3ViZGV2aWNlID09IGRldl9pZC1cdTAwM2VzdWJkZXZpY2UpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhKChpZC1cdTAwM2VjbGFzcyBeIGRldl9pZC1cdTAwM2VjbGFzcykgXHUwMDI2IGlkLVx1MDAzZWNsYXNzX21hc2spKVxuIFx0XHRyZXR1cm4gaWQ7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guY1xuaW5kZXggZTNkMzE3N2ZjZTU0OWUuLmM4YzRiZmU3ODE3YjAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvc2VhcmNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jXG5AQCAtMjQ1LDggJiM0MzsyNDUsMTAgQEAgc3RhdGljIGludCBtYXRjaF9wY2lfZGV2X2J5X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcbiBcdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCA9IGRhdGE7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkO1xuIFxuLVx0aWYgKHBjaV9tYXRjaF9vbmVfZGV2aWNlKGlkLCBwZGV2KSlcbiYjNDM7XHRkZXZfaWQgPSBwY2lfaWRfZnJvbV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKHBjaV9tYXRjaF9vbmVfaWQoaWQsIFx1MDAyNmRldl9pZCkpXG4gXHRcdHJldHVybiAxO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQxOCw3ICYjNDM7NDIwLDcgQEAgRVhQT1JUX1NZTUJPTChwY2lfZ2V0X2NsYXNzKTtcbiAgKlxuICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuIElmIGEgUENJIGRldmljZSBpcyBmb3VuZFxuICAqIHdpdGggYSBtYXRjaGluZyBiYXNlIGNsYXNzIGNvZGUsIHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGhlIGRldmljZSBpc1xuLSAqIGluY3JlbWVudGVkLiBTZWUgcGNpX21hdGNoX29uZV9kZXZpY2UoKSB0byBmaWd1cmUgb3V0IGhvdyBkb2VzIHRoaXMgd29ya3MuXG4mIzQzOyAqIGluY3JlbWVudGVkLiBTZWUgcGNpX21hdGNoX29uZV9pZCgpIHRvIGZpZ3VyZSBvdXQgaG93IGRvZXMgdGhpcyB3b3Jrcy5cbiAgKiBBIG5ldyBzZWFyY2ggaXMgaW5pdGlhdGVkIGJ5IHBhc3NpbmcgJU5VTEwgYXMgdGhlIEBmcm9tIGFyZ3VtZW50LlxuICAqIE90aGVyd2lzZSBpZiBAZnJvbSBpcyBub3QgJU5VTEwsIHNlYXJjaGVzIGNvbnRpbnVlIGZyb20gbmV4dCBkZXZpY2Ugb24gdGhlXG4gICogZ2xvYmFsIGxpc3QuIFRoZSByZWZlcmVuY2UgY291bnQgZm9yIEBmcm9tIGlzIGFsd2F5cyBkZWNyZW1lbnRlZCBpZiBpdCBpc1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jIGIvZHJpdmVycy9zY3NpL25zcDMyLmNcbmluZGV4IGU4OTNkNTY3NzI0MTdhLi45YzkyODEyMjJhMGFjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvbnNwMzIuY1xuQEAgLTE0NzAsNyAmIzQzOzE0NzAsNyBAQCBzdGF0aWMgaW50IG5zcDMyX3Nob3dfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpXG4gXHRcdCAgIChuc3AzMl9yZWFkMihiYXNlLCBJTkRFWF9SRUcpIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZik7XG4gXG4gXHRtb2RlX3JlZyA9IG5zcDMyX2luZGV4X3JlYWQxKGJhc2UsIENISVBfTU9ERSk7XG4tXHRtb2RlbCAgICA9IGRhdGEtXHUwMDNlcGNpX2RldmlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuJiM0MztcdG1vZGVsICAgID0gZGF0YS1cdTAwM2Vtb2RlbDtcbiBcbiAjaWZkZWYgQ09ORklHX1BNXG4gXHRzZXFfcHJpbnRmKG0sIFwmIzM0O1Bvd2VyIE1hbmFnZW1lbnQ6ICAgICAgJXNcXG5cJiMzNDssXG5AQCAtMjkwNyw4ICYjNDM7MjkwNyw4IEBAIHN0YXRpYyBpbnQgbnNwMzJfZWhfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudClcbiAgKi9cbiBzdGF0aWMgaW50IG5zcDMyX2dldHByb21fcGFyYW0obnNwMzJfaHdfZGF0YSAqZGF0YSlcbiB7XG4tXHRpbnQgdmVuZG9yID0gZGF0YS1cdTAwM2VwY2lfZGV2aWQtXHUwMDNldmVuZG9yO1xuLVx0aW50IGRldmljZSA9IGRhdGEtXHUwMDNlcGNpX2RldmlkLVx1MDAzZWRldmljZTtcbiYjNDM7XHRpbnQgdmVuZG9yID0gZGF0YS1cdTAwM2VQY2ktXHUwMDNldmVuZG9yO1xuJiM0MztcdGludCBkZXZpY2UgPSBkYXRhLVx1MDAzZVBjaS1cdTAwM2VkZXZpY2U7XG4gXHRpbnQgcmV0LCBpO1xuIFx0aW50IF9fbWF5YmVfdW51c2VkIHZhbDtcbiBcbkBAIC0zMzQwLDcgJiM0MzszMzQwLDcgQEAgc3RhdGljIGludCBuc3AzMl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0fVxuIFxuIFx0ZGF0YS1cdTAwM2VQY2lcdCAgPSBwZGV2O1xuLVx0ZGF0YS1cdTAwM2VwY2lfZGV2aWQgICA9IGlkO1xuJiM0MztcdGRhdGEtXHUwMDNlbW9kZWwgICAgICAgPSBpZC1cdTAwM2Vkcml2ZXJfZGF0YTtcbiBcdGRhdGEtXHUwMDNlSXJxTnVtYmVyICAgPSBwZGV2LVx1MDAzZWlycTtcbiBcdGRhdGEtXHUwMDNlQmFzZUFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7XG4gXHRkYXRhLVx1MDAzZU51bUFkZHJlc3MgID0gcGNpX3Jlc291cmNlX2xlbiAgKHBkZXYsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oIGIvZHJpdmVycy9zY3NpL25zcDMyLmhcbmluZGV4IDkyNDg4OWY4YmQzN2U3Li45ZTY1NzcxY2I1OTI4NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvbnNwMzIuaFxuQEAgLTU2NCwxMCAmIzQzOzU2NCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfbnNwMzJfaHdfZGF0YSB7XG4gXG4gXHRzdHJ1Y3Qgc2NzaV9jbW5kICpDdXJyZW50U0M7XG4gXG4tXHRzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICAqUGNpO1xuLVx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXZpZDtcbi1cdHN0cnVjdCBTY3NpX0hvc3QgICAgICAgICAgICpIb3N0O1xuLVx0c3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgIExvY2s7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgICAgKlBjaTtcbiYjNDM7XHRpbnQgICAgICAgICAgICAgICAgbW9kZWw7XG4mIzQzO1x0c3RydWN0IFNjc2lfSG9zdCAgKkhvc3Q7XG4mIzQzO1x0c3BpbmxvY2tfdCAgICAgICAgIExvY2s7XG4gXG4gXHRjaGFyIGluZm9fc3RyWzEwMF07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li45MmMxN2MxMTZkZTZkMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC05NzksNiAmIzQzOzk3OSw3IEBAIHN0cnVjdCBtb2R1bGU7XG4gICpcdFx0ZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHdoZW4gdGhlIGRyaXZlciBjaG9vc2VzIHRvXG4gICpcdFx0dGFrZSBcJiMzNDtvd25lcnNoaXBcJiMzNDsgb2YgdGhlIGRldmljZSBvciBhbiBlcnJvciBjb2RlXG4gICpcdFx0KG5lZ2F0aXZlIG51bWJlcikgb3RoZXJ3aXNlLlxuJiM0MzsgKlx0XHRUaGUgcGNpX2RldmljZV9pZCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcgcHJvYmUuXG4gICpcdFx0VGhlIHByb2JlIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3NcbiAgKlx0XHRjb250ZXh0LCBzbyBpdCBjYW4gc2xlZXAuXG4gICogQHJlbW92ZTpcdFRoZSByZW1vdmUoKSBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuZXZlciBhIGRldmljZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUQV9HRU5FUklDJiMzNDssCiAgICAmIzM0O0FHUCYjMzQ7LAogICAgJiMzNDtBR1BfQU1EJiMzNDssCiAgICAmIzM0O0FHUF9WSUEmIzM0OywKICAgICYjMzQ7SVBBQ0tfQlVTJiMzNDssCiAgICAmIzM0O0JPQVJEX1RQQ0kyMDAmIzM0OywKICAgICYjMzQ7TUxYU1dfUENJJiMzNDssCiAgICAmIzM0O1NDU0lfTlNQMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19wY2lfYWRkX2R5bmlkJiMzNDssCiAgICAmIzM0O25ld19pZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfZGV2aWNlJiMzNDssCiAgICAmIzM0O2RvX3BjaV9tYXRjaF9pZCYjMzQ7LAogICAgJiMzNDtfX3BjaV9kZXZpY2VfcHJvYmUmIzM0OywKICAgICYjMzQ7cGNpX2FkZF9keW5pZCYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfaWQmIzM0OywKICAgICYjMzQ7YXRhX2dlbmVyaWNfaW5pdF9vbmUmIzM0OywKICAgICYjMzQ7YWdwX2FtZGs3X3Byb2JlJiMzNDssCiAgICAmIzM0O2FncF92aWFfcHJvYmUmIzM0OywKICAgICYjMzQ7dHBjaTIwMF9wY2lfcHJvYmUmIzM0OywKICAgICYjMzQ7bWx4c3dfcGNpX3Byb2JlJiMzNDssCiAgICAmIzM0O25zcDMyX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgY29yZSB0byBwYXNzIGEgY29weSBvZiB0aGUgZHluYW1pYyBwY2lfZGV2aWNlX2lkIHRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gdGhlIGhlYXAtYWxsb2NhdGVkIGR5bmFtaWMgSUQsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGR5bmFtaWMgSUQgaXMgcmVtb3ZlZCB2aWEgc3lzZnMuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHNhdmluZyB0aGUgcGNpX2RldmljZV9pZCBwb2ludGVyIHRvIGluc3RlYWQgc2F2ZSB0aGUgZHJpdmVyX2RhdGEgb3Igb3RoZXIgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFBDSSBjb3JlIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gUENJIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGR5bmFtaWMgSURzIHZpYSBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNThiZTU4MTlmZmZkZDVmM2MxMWRkMWEyNmFhNTJkY2E1MGUwMjQwOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMjA6NDQ6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwppbmRleCBlNzBiNmMwODljZjE3OS4uMThlYTc0MGNhNTgyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwpAQCAtNTEsMTEgJiM0Mzs1MSwxMSBAQCBlbnVtIHsKIHN0YXRpYyBpbnQgZ2VuZXJpY19zZXRfbW9kZShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHN0cnVjdCBhdGFfZGV2aWNlICoqdW51c2VkKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLSZndDthcDsKLQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQgPSBhcC0mZ3Q7aG9zdC0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwl1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpYXAtJmd0O2hvc3QtJmd0O3ByaXZhdGVfZGF0YTsKIAlpbnQgZG1hX2VuYWJsZWQgPSAwOwogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CiAKLQlpZiAoaWQtJmd0O2RyaXZlcl9kYXRhICZhbXA7IEFUQV9HRU5fRk9SQ0VfRE1BKSB7CiYjNDM7CWlmIChkcml2ZXJfZGF0YSAmYW1wOyBBVEFfR0VOX0ZPUkNFX0RNQSkgewogCQlkbWFfZW5hYmxlZCA9IDB4ZmY7CiAJfSBlbHNlIGlmIChhcC0mZ3Q7aW9hZGRyLmJtZG1hX2FkZHIpIHsKIAkJLyogQml0cyA1IGFuZCA2IGluZGljYXRlIGlmIERNQSBpcyBhY3RpdmUgb24gbWFzdGVyL3NsYXZlICovCkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIHN0YXRpYyBpbnQgYXRhX2dlbmVyaWNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQKIAkJCXJldHVybiByYzsKIAkJcGNpbV9waW5fZGV2aWNlKGRldik7CiAJfQotCXJldHVybiBhdGFfcGNpX2JtZG1hX2luaXRfb25lKGRldiwgcHBpLCAmYW1wO2dlbmVyaWNfc2h0LCAodm9pZCAqKWlkLCAwKTsKJiM0MzsJcmV0dXJuIGF0YV9wY2lfYm1kbWFfaW5pdF9vbmUoZGV2LCBwcGksICZhbXA7Z2VuZXJpY19zaHQsICh2b2lkICopaWQtJmd0O2RyaXZlcl9kYXRhLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0YV9nZW5lcmljW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCmluZGV4IDg5OGZmMzBmZmQ0NmIyLi40ZDIwMWU3MWM1MTc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKQEAgLTM4NywzNyAmIzQzOzM4NywxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGFtZF9pcm9uZ2F0ZV9kcml2ZXIgPSB7CiAJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYWdwX2RldmljZV9pZHMgYW1kX2FncF9kZXZpY2VfaWRzW10gPQotewotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwNiwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7SXJvbmdhdGUmIzM0OywKLQl9LAotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwRSwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7NzYxJiMzNDssCi0JfSwKLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEMsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0Ozc2ME1QJiMzNDssCi0JfSwKLQl7IH0sIC8qIGR1bW15IGZpbmFsIGVudHJ5LCBhbHdheXMgcHJlc2VudCAqLwotfTsKLQogc3RhdGljIGludCBhZ3BfYW1kazdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZTsKIAl1OCBjYXBfcHRyOwotCWludCBqOwogCiAJY2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApOwogCWlmICghY2FwX3B0cikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlqID0gZW50IC0gYWdwX2FtZGs3X3BjaV90YWJsZTsKLQlkZXZfaW5mbygmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtBTUQgJXMgY2hpcHNldFxuJiMzNDssCi0JCSBhbWRfYWdwX2RldmljZV9pZHNbal0uY2hpcHNldF9uYW1lKTsKJiM0MzsJZGV2X2luZm8oJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7QU1EICVzIGNoaXBzZXRcbiYjMzQ7LCAoY29uc3QgY2hhciAqKWVudC0mZ3Q7ZHJpdmVyX2RhdGEpOwogCiAJYnJpZGdlID0gYWdwX2FsbG9jX2JyaWRnZSgpOwogCWlmICghYnJpZGdlKQpAQCAtNDkyLDcgJiM0Mzs0NzIsNiBAQCBzdGF0aWMgaW50IGFncF9hbWRrN19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiBhbWRfaXJvbmdhdGVfZHJpdmVyLmNvbmZpZ3VyZSgpOwogfQogCi0vKiBtdXN0IGJlIHRoZSBzYW1lIG9yZGVyIGFzIG5hbWUgdGFibGUgYWJvdmUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfYW1kazdfcGNpX3RhYmxlW10gPSB7CiAJewogCS5jbGFzcwkJPSAoUENJX0NMQVNTX0JSSURHRV9IT1NUICZsdDsmbHQ7IDgpLApAQCAtNTAxLDYgJiM0Mzs0ODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0gewogCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDA2LAogCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAogCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAomIzQzOwkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJiMzNDtJcm9uZ2F0ZSYjMzQ7LAogCX0sCiAJewogCS5jbGFzcwkJPSAoUENJX0NMQVNTX0JSSURHRV9IT1NUICZsdDsmbHQ7IDgpLApAQCAtNTA5LDYgJiM0Mzs0ODksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0gewogCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDBFLAogCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAogCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAomIzQzOwkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJiMzNDs3NjEmIzM0OywKIAl9LAogCXsKIAkuY2xhc3MJCT0gKFBDSV9DTEFTU19CUklER0VfSE9TVCAmbHQ7Jmx0OyA4KSwKQEAgLTUxNyw2ICYjNDM7NDk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF9hbWRrN19wY2lfdGFibGVbXSA9IHsKIAkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQywKIAkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKIAkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKJiM0MzsJLmRyaXZlcl9kYXRhCT0gKGtlcm5lbF91bG9uZ190KSYjMzQ7NzYwTVAmIzM0OywKIAl9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKaW5kZXggOGIxOWE1ZDFhMDliNDkuLmFiM2I3M2RkMDgwYWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwpAQCAtMjIxLDIwNCAmIzQzOzIyMSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgdmlhX2RyaXZlciA9IHsKIAkuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlLAogfTsKIAotc3RhdGljIHN0cnVjdCBhZ3BfZGV2aWNlX2lkcyB2aWFfYWdwX2RldmljZV9pZHNbXSA9Ci17Ci0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0Fwb2xsbyBWUDMmIzM0OywKLQl9LAotCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0Fwb2xsbyBNVlAzJiMzNDssCi0JfSwKLQotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7QXBvbGxvIE1WUDQmIzM0OywKLQl9LAotCi0JLyogVlQ4NjAxICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODYwMV8wLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtBcG9sbG8gUHJvTWVkaWEvUExFMTMzVGEmIzM0OywKLQl9LAotCi0JLyogVlQ4MkM2OTNBIC8gVlQyOEM2OTRUICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0Fwb2xsbyBQcm8gMTMzJiMzNDssCi0JfSwKLQotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7S1gxMzMmIzM0OywKLQl9LAotCi0JLyogVlQ4NjMzICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODYzM18wLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtQcm8gMjY2JiMzNDssCi0JfSwKLQotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2LAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtBcG9sbG8gUHJvMjY2JiMzNDssCi0JfSwKLQotCS8qIFZUODM2MSAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzgzNjEsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0tMRTEzMyYjMzQ7LAotCX0sCi0KLQkvKiBWVDgzNjUgLyBWVDgzNjIgKi8KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O1R3aXN0ZXItSy9LVDEzM3gvS00xMzMmIzM0OywKLQl9LAotCi0JLyogVlQ4NzUzQSAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UDRYMjY2JiMzNDssCi0JfSwKLQotCS8qIFZUODM2NiAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzgzNjdfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7S1QyNjYvS1kyNjZ4L0tUMzMzJiMzNDssCi0JfSwKLQotCS8qIFZUODYzMyAoZm9yIEN1TWluZS8gQ2VsZXJvbikgKi8KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O1BybzI2NlQmIzM0OywKLQl9LAotCi0JLyogS00yNjYgLyBQTTI2NiAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2LAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtQTTI2Ni9LTTI2NiYjMzQ7LAotCX0sCi0KLQkvKiBDTEUyNjYgKi8KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0NMRTI2NiYjMzQ7LAotCX0sCi0KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84Mzc3XzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0tUNDAwL0tUNDAwQS9LVDYwMCYjMzQ7LAotCX0sCi0KLQkvKiBWVDg2MDQgLyBWVDg2MDUgLyBWVDg2MDMKLQkgKiAoQXBvbGxvIFBybzEzM0EgY2hpcHNldCB3aXRoIFMzIFNhdmFnZTQpICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODYwNV8wLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtQcm9TYXZhZ2UgUE0xMzMvUEwxMzMvUE4xMzMmIzM0OwotCX0sCi0KLQkvKiBQNE0yNjZ4L1A0TjI2NiAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UDRNMjY2eC9QNE4yNjYmIzM0OywKLQl9LAotCi0JLyogVlQ4NzU0ICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODc1NENfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UFQ4MDAmIzM0OywKLQl9LAotCi0JLyogUDRYNjAwICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODc2M18wLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtQNFg2MDAmIzM0OwotCX0sCi0KLQkvKiBLTTQwMCAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzhfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7S000MDAvS000MDBBJiMzNDssCi0JfSwKLQotCS8qIFBUODgwICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfUFQ4ODAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O1BUODgwJiMzNDssCi0JfSwKLQotCS8qIFBUODgwIFVsdHJhICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UFQ4ODAgVWx0cmEmIzM0OywKLQl9LAotCi0JLyogUFQ4OTAgKi8KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84NzgzXzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O1BUODkwJiMzNDssCi0JfSwKLQotCS8qIFBNODAwL1BOODAwL1BNODgwL1BOODgwICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UE04MDAvUE44MDAvUE04ODAvUE44ODAmIzM0OywKLQl9LAotCS8qIEtUODgwICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtLVDg4MCYjMzQ7LAotCX0sCi0JLyogS1R4eHgvUHg4eHggKi8KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84M184N1hYXzEsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O1ZUODN4eC9WVDg3eHgvS1R4eHgvUHg4eHgmIzM0OywKLQl9LAotCS8qIFA0TTgwMCAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UDRNODAwJiMzNDssCi0JfSwKLQkvKiBQNE04MDBDRSAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtWVDMzMTQmIzM0OywKLQl9LAotCS8qIFZUMzMyNCAvIENYNzAwICovCi0JewotCQkuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMyNCwKLQkJLmNoaXBzZXRfbmFtZSAgID0gJiMzNDtDWDcwMCYjMzQ7LAotCX0sCi0JLyogVlQzMzM2IC0gdGhpcyBpcyBhIGNoaXBzZXQgZm9yIEFNRCBBdGhsb24vSzggQ1BVLiBEdWUgdG8gSzgmIzM5O3MgdW5pcXVlCi0JICogYXJjaGl0ZWN0dXJlLCB0aGUgQUdQIHJlc291cmNlIGFuZCBiZWhhdmlvciBhcmUgZGlmZmVyZW50IGZyb20KLQkgKiB0aGUgdHJhZGl0aW9uYWwgQUdQIHdoaWNoIHJlc2lkZXMgb25seSBpbiBjaGlwc2V0LiBBR1AgaXMgdXNlZAotCSAqIGJ5IDNEIGRyaXZlciB3aGljaCB3YXNuJiMzOTt0IGF2YWlsYWJsZSBmb3IgdGhlIFZUMzMzNiBhbmQgVlQzMzY0Ci0JICogZ2VuZXJhdGlvbiB1bnRpbCBub3cuICBVbmZvcnR1bmF0ZWx5LCBieSB0ZXN0aW5nLCBWVDMzNjQgd29ya3MKLQkgKiBidXQgVlQzMzM2IGRvZXNuJiMzOTt0LiAtIGV4cGxhbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXMKLQkgKiBhcyBhIHBsYWNlaG9sZGVyIHRvIGF2b2lkIGZ1dHVyZSBwYXRjaGVzIGFkZGluZyBpdCBiYWNrIGluLgotCSAqLwotI2lmIDAKLQl7Ci0JCS5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LAotCQkuY2hpcHNldF9uYW1lICAgPSAmIzM0O1ZUMzMzNiYjMzQ7LAotCX0sCi0jZW5kaWYKLQkvKiBQNE04OTAgKi8KLQl7Ci0JCS5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfUDRNODkwLAotCQkuY2hpcHNldF9uYW1lICAgPSAmIzM0O1A0TTg5MCYjMzQ7LAotCX0sCi0JLyogUDRNOTAwICovCi0JewotCQkuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzM2NCwKLQkJLmNoaXBzZXRfbmFtZSAgID0gJiMzNDtQNE05MDAmIzM0OywKLQl9LAotCXsgfSwgLyogZHVtbXkgZmluYWwgZW50cnksIGFsd2F5cyBwcmVzZW50ICovCi19OwotCiAKIC8qCiAgKiBWSUEmIzM5O3MgQUdQMyBjaGlwc2V0cyBkbyBtYWdpY2sgdG8gcHV0IHRoZSBBR1AgYnJpZGdlIGNvbXBsaWFudApAQCAtNDM3LDE3ICYjNDM7MjM5LDE0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3ZpYV9hZ3AzIChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpCiAKIHN0YXRpYyBpbnQgYWdwX3ZpYV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdHJ1Y3QgYWdwX2RldmljZV9pZHMgKmRldnMgPSB2aWFfYWdwX2RldmljZV9pZHM7CiAJc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlOwotCWludCBqID0gMDsKIAl1OCBjYXBfcHRyOwogCiAJY2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApOwogCWlmICghY2FwX3B0cikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlqID0gZW50IC0gYWdwX3ZpYV9wY2lfdGFibGU7Ci0JcHJpbnRrIChLRVJOX0lORk8gUEZYICYjMzQ7RGV0ZWN0ZWQgVklBICVzIGNoaXBzZXRcbiYjMzQ7LCBkZXZzW2pdLmNoaXBzZXRfbmFtZSk7CiYjNDM7CWRldl9pbmZvKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O0RldGVjdGVkIFZJQSAlcyBjaGlwc2V0XG4mIzM0OywgKGNvbnN0IGNoYXIgKillbnQtJmd0O2RyaXZlcl9kYXRhKTsKIAogCWJyaWRnZSA9IGFncF9hbGxvY19icmlkZ2UoKTsKIAlpZiAoIWJyaWRnZSkKQEAgLTUwMSw5ICYjNDM7MzAwLDggQEAgc3RhdGljIGludCBhZ3BfdmlhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLS8qIG11c3QgYmUgdGhlIHNhbWUgb3JkZXIgYXMgbmFtZSB0YWJsZSBhYm92ZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF92aWFfcGNpX3RhYmxlW10gPSB7Ci0jZGVmaW5lIElEKHgpIFwKJiM0MzsjZGVmaW5lIElEKHgsIG5hbWUpIFwKIAl7CQkJCQkJXAogCS5jbGFzcwkJPSAoUENJX0NMQVNTX0JSSURHRV9IT1NUICZsdDsmbHQ7IDgpLAlcCiAJLmNsYXNzX21hc2sJPSB+MCwJCQkJXApAQCAtNTExLDM5ICYjNDM7MzA5LDc3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfdmlhX3BjaV90YWJsZVtdID0gewogCS5kZXZpY2UJCT0geCwJCQkJXAogCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAkJCVwKIAkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwJCQlcCiYjNDM7CS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCluYW1lLAkJXAogCX0KLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODYwMV8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM2OTFfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODM3MV8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjMzXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2KSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYxKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODM2N18wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2KSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODYwNV8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzAzXzUxXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3NjNfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODM3OF8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODc4M18wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QWDhYMF8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfMzI5Nl8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04MDBDRSksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0KSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04OTApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBX1ZUMzM2NCksCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5N18wLCAmIzM0O0Fwb2xsbyBWUDMmIzM0OyksCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8wLCAmIzM0O0Fwb2xsbyBNVlAzJiMzNDspLAomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzAsICYjMzQ7QXBvbGxvIE1WUDQmIzM0OyksCiYjNDM7CS8qIFZUODYwMSAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsICYjMzQ7QXBvbGxvIFByb01lZGlhL1BMRTEzM1RhJiMzNDspLAomIzQzOwkvKiBWVDgyQzY5M0EgLyBWVDI4QzY5NFQgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAsICYjMzQ7QXBvbGxvIFBybyAxMzMmIzM0OyksCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCwgJiMzNDtLWDEzMyYjMzQ7KSwKJiM0MzsJLyogVlQ4NjMzICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzg2MzNfMCwgJiMzNDtQcm8gMjY2JiMzNDspLAomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9YTjI2NiwgJiMzNDtBcG9sbG8gUHJvMjY2JiMzNDspLAomIzQzOwkvKiBWVDgzNjEgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfODM2MSwgJiMzNDtLTEUxMzMmIzM0OyksCiYjNDM7CS8qIFZUODM2NSAvIFZUODM2MiAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzAsICYjMzQ7VHdpc3Rlci1LL0tUMTMzeC9LTTEzMyYjMzQ7KSwKJiM0MzsJLyogVlQ4NzUzQSAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzUzXzAsICYjMzQ7UDRYMjY2JiMzNDspLAomIzQzOwkvKiBWVDgzNjYgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfODM2N18wLCAmIzM0O0tUMjY2L0tZMjY2eC9LVDMzMyYjMzQ7KSwKJiM0MzsJLyogVlQ4NjMzIChmb3IgQ3VNaW5lLyBDZWxlcm9uKSAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzAsICYjMzQ7UHJvMjY2VCYjMzQ7KSwKJiM0MzsJLyogS00yNjYgLyBQTTI2NiAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2NiwgJiMzNDtQTTI2Ni9LTTI2NiYjMzQ7KSwKJiM0MzsJLyogQ0xFMjY2ICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzg2MlhfMCwgJiMzNDtDTEUyNjYmIzM0OyksCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCwgJiMzNDtLVDQwMC9LVDQwMEEvS1Q2MDAmIzM0OyksCiYjNDM7CS8qIFZUODYwNCAvIFZUODYwNSAvIFZUODYwMyAoQXBvbGxvIFBybzEzM0EgY2hpcHNldCB3aXRoIFMzIFNhdmFnZTQpICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCwgJiMzNDtQcm9TYXZhZ2UgUE0xMzMvUEwxMzMvUE4xMzMmIzM0OyksCiYjNDM7CS8qIFA0TTI2NngvUDROMjY2ICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCwgJiMzNDtQNE0yNjZ4L1A0TjI2NiYjMzQ7KSwKJiM0MzsJLyogVlQ4NzU0ICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzAsICYjMzQ7UFQ4MDAmIzM0OyksCiYjNDM7CS8qIFA0WDYwMCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzYzXzAsICYjMzQ7UDRYNjAwJiMzNDspLAomIzQzOwkvKiBLTTQwMCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzAsICYjMzQ7S000MDAvS000MDBBJiMzNDspLAomIzQzOwkvKiBQVDg4MCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MCwgJiMzNDtQVDg4MCYjMzQ7KSwKJiM0MzsJLyogUFQ4ODAgVWx0cmEgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSwgJiMzNDtQVDg4MCBVbHRyYSYjMzQ7KSwKJiM0MzsJLyogUFQ4OTAgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfODc4M18wLCAmIzM0O1BUODkwJiMzNDspLAomIzQzOwkvKiBQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QWDhYMF8wLCAmIzM0O1BNODAwL1BOODAwL1BNODgwL1BOODgwJiMzNDspLAomIzQzOwkvKiBLVDg4MCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzAsICYjMzQ7S1Q4ODAmIzM0OyksCiYjNDM7CS8qIEtUeHh4L1B4OHh4ICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSwgJiMzNDtWVDgzeHgvVlQ4N3h4L0tUeHh4L1B4OHh4JiMzNDspLAomIzQzOwkvKiBQNE04MDAgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfMzI5Nl8wLCAmIzM0O1A0TTgwMCYjMzQ7KSwKJiM0MzsJLyogUDRNODAwQ0UgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UsICYjMzQ7VlQzMzE0JiMzNDspLAomIzQzOwkvKiBWVDMzMjQgLyBDWDcwMCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMjQsICYjMzQ7Q1g3MDAmIzM0OyksCiYjNDM7CS8qIFZUMzMzNiAtIHRoaXMgaXMgYSBjaGlwc2V0IGZvciBBTUQgQXRobG9uL0s4IENQVS4gRHVlIHRvIEs4JiMzOTtzIHVuaXF1ZQomIzQzOwkgKiBhcmNoaXRlY3R1cmUsIHRoZSBBR1AgcmVzb3VyY2UgYW5kIGJlaGF2aW9yIGFyZSBkaWZmZXJlbnQgZnJvbQomIzQzOwkgKiB0aGUgdHJhZGl0aW9uYWwgQUdQIHdoaWNoIHJlc2lkZXMgb25seSBpbiBjaGlwc2V0LiBBR1AgaXMgdXNlZAomIzQzOwkgKiBieSAzRCBkcml2ZXIgd2hpY2ggd2FzbiYjMzk7dCBhdmFpbGFibGUgZm9yIHRoZSBWVDMzMzYgYW5kIFZUMzM2NAomIzQzOwkgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3JrcwomIzQzOwkgKiBidXQgVlQzMzM2IGRvZXNuJiMzOTt0LiAtIGV4cGxhbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXMKJiM0MzsJICogYSBwbGFjZWhvbGRlciB0byBhdm9pZCBmdXR1cmUgcGF0Y2hlcyBhZGRpbmcgaXQgYmFjayBpbi4KJiM0MzsJICovCiYjNDM7I2lmIDAKJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LCAmIzM0O1ZUMzMzNiYjMzQ7KSwKJiM0MzsjZW5kaWYKJiM0MzsJLyogUDRNODkwICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTg5MCwgJiMzNDtQNE04OTAmIzM0OyksCiYjNDM7CS8qIFA0TTkwMCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzNjQsICYjMzQ7UDRNOTAwJiMzNDspLAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmMgYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuYwppbmRleCAwNWRjYjY2NzVjZDY2MS4uMWNmNTFmNzYzMjkzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jCkBAIC01NjIsNyAmIzQzOzU2Miw2IEBAIHN0YXRpYyBpbnQgdHBjaTIwMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAKIAkvKiBTYXZlIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgKi8KIAl0cGNpMjAwLSZndDtpbmZvLSZndDtwZGV2ID0gcGRldjsKLQl0cGNpMjAwLSZndDtpbmZvLSZndDtpZF90YWJsZSA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKWlkOwogCiAJLyogcmVnaXN0ZXIgdGhlIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwogCXJldCA9IHRwY2kyMDBfaW5zdGFsbCh0cGNpMjAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oIGIvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmgKaW5kZXggZTc5YWM2NGFiY2ZmYWMuLmEyYmYzMTI1Nzk0YjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaApAQCAtMTQ1LDcgJiM0MzsxNDUsNiBAQCBzdHJ1Y3QgdHBjaTIwMF9zbG90IHsKICAqLwogc3RydWN0IHRwY2kyMDBfaW5mb3MgewogCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXY7Ci0Jc3RydWN0IHBjaV9kZXZpY2VfaWQJCSppZF90YWJsZTsKIAlzdHJ1Y3QgdHBjaTIwMF9yZWdzIF9faW9tZW0JKmludGVyZmFjZV9yZWdzOwogCXZvaWQgX19pb21lbQkJCSpjZmdfcmVnczsKIAlzdHJ1Y3QgaXBhY2tfYnVzX2RldmljZQkJKmlwYWNrX2J1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmMKaW5kZXggMGRhODVkMzY2NDdkOTEuLmJmZTMyNjhkZmRjMTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYwpAQCAtMTMwLDcgJiM0MzsxMzAsNiBAQCBzdHJ1Y3QgbWx4c3dfcGNpIHsKIAkJfSBjb21wOwogCX0gY21kOwogCXN0cnVjdCBtbHhzd19idXNfaW5mbyBidXNfaW5mbzsKLQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQ7CiAJZW51bSBtbHhzd19wY2lfY3FlX3YgbWF4X2NxZV92ZXI7IC8qIE1heGltYWwgc3VwcG9ydGVkIENRRSB2ZXJzaW9uICovCiAJdTggbnVtX2NxczsgLyogTnVtYmVyIG9mIENRcyAqLwogCXU4IG51bV9zZHFzOyAvKiBOdW1iZXIgb2YgU0RRcyAqLwpAQCAtMTc2OCw3ICYjNDM7MTc2Nyw2IEBAIHN0YXRpYyB2b2lkIG1seHN3X3BjaV9tYm94X2ZyZWUoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLAogfQogCiBzdGF0aWMgaW50IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwKIAkJCQkgICAgdTMyICpwX3N5c19zdGF0dXMpCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CkBAIC0xODM5LDcgJiM0MzsxODM3LDcgQEAgc3RhdGljIGludCBtbHhzd19wY2lfcmVzZXRfc3coc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpKQogfQogCiBzdGF0aWMgaW50Ci1tbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiYjNDM7bWx4c3dfcGNpX3Jlc2V0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG1seHN3X3BjaS0mZ3Q7cGRldjsKIAlib29sIHBjaV9yZXNldF9zYnJfc3VwcG9ydGVkID0gZmFsc2U7CkBAIC0xODQ4LDcgJiM0MzsxODQ2LDcgQEAgbWx4c3dfcGNpX3Jlc2V0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCXUzMiBzeXNfc3RhdHVzOwogCWludCBlcnI7CiAKLQllcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCBpZCwgJmFtcDtzeXNfc3RhdHVzKTsKJiM0MzsJZXJyID0gbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KG1seHN3X3BjaSwgJmFtcDtzeXNfc3RhdHVzKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlYWNoIHN5c3RlbSByZWFkeSBzdGF0dXMgYmVmb3JlIHJlc2V0LiBTdGF0dXMgaXMgMHgleFxuJiMzNDssCiAJCQlzeXNfc3RhdHVzKTsKQEAgLTE4ODAsNyAmIzQzOzE4NzgsNyBAQCBtbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChtbHhzd19wY2ksIGlkLCAmYW1wO3N5c19zdGF0dXMpOwomIzQzOwllcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCAmYW1wO3N5c19zdGF0dXMpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVhY2ggc3lzdGVtIHJlYWR5IHN0YXR1cyBhZnRlciByZXNldC4gU3RhdHVzIGlzIDB4JXhcbiYjMzQ7LAogCQkJc3lzX3N0YXR1cyk7CkBAIC0xOTMyLDcgJiM0MzsxOTMwLDcgQEAgc3RhdGljIGludCBtbHhzd19wY2lfaW5pdCh2b2lkICpidXNfcHJpdiwgc3RydWN0IG1seHN3X2NvcmUgKm1seHN3X2NvcmUsCiAJaWYgKCFtYm94KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IG1seHN3X3BjaV9yZXNldChtbHhzd19wY2ksIG1seHN3X3BjaS0mZ3Q7aWQpOwomIzQzOwllcnIgPSBtbHhzd19wY2lfcmVzZXQobWx4c3dfcGNpKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZXNldDsKIApAQCAtMjQ2NCw3ICYjNDM7MjQ2Miw2IEBAIHN0YXRpYyBpbnQgbWx4c3dfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJbWx4c3dfcGNpLSZndDtidXNfaW5mby5kZXZpY2VfbmFtZSA9IHBjaV9uYW1lKG1seHN3X3BjaS0mZ3Q7cGRldik7CiAJbWx4c3dfcGNpLSZndDtidXNfaW5mby5kZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKIAltbHhzd19wY2ktJmd0O2J1c19pbmZvLnJlYWRfY2xvY2tfY2FwYWJsZSA9IHRydWU7Ci0JbWx4c3dfcGNpLSZndDtpZCA9IGlkOwogCiAJZXJyID0gbWx4c3dfY29yZV9idXNfZGV2aWNlX3JlZ2lzdGVyKCZhbXA7bWx4c3dfcGNpLSZndDtidXNfaW5mbywKIAkJCQkJICAgICAmYW1wO21seHN3X3BjaV9idXMsIG1seHN3X3BjaSwgZmFsc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZjM2Nzc4ZTYyYWMxYTUuLjQ4NTEwNjFiYWJjYjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC0yOSw2ICYjNDM7MjksNDcgQEAgc3RydWN0IHBjaV9keW5pZCB7CiAJc3RydWN0IHBjaV9kZXZpY2VfaWQgaWQ7CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogZG9fcGNpX2FkZF9keW5pZCAtIGFkZCBhIG5ldyBQQ0kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyIGFuZCByZS1wcm9iZSBkZXZpY2VzCiYjNDM7ICogQGRydjogdGFyZ2V0IHBjaSBkcml2ZXIKJiM0MzsgKiBAaWQ6IElEIHRvIGJlIGFkZGVkCiYjNDM7ICogQGNoZWNrX2R1cDogd2hldGhlciB0byBjaGVjayBpZiBtYXRjaGluZyBJRCBpcyBhbHJlYWR5IHByZXNlbnQKJiM0MzsgKgomIzQzOyAqIEFkZHMgYSBuZXcgZHluYW1pYyBwY2kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyIGFuZCBjYXVzZXMgdGhlCiYjNDM7ICogZHJpdmVyIHRvIHByb2JlIGZvciBhbGwgZGV2aWNlcyBhZ2Fpbi4gIEBkcnYgbXVzdCBoYXZlIGJlZW4KJiM0MzsgKiByZWdpc3RlcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KJiM0MzsgKgomIzQzOyAqIENPTlRFWFQ6CiYjNDM7ICogRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBSRVRVUk5TOgomIzQzOyAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkb19wY2lfYWRkX2R5bmlkKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgYm9vbCBjaGVja19kdXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2R5bmlkICpkeW5pZCwgKmV4aXN0aW5nX2R5bmlkOwomIzQzOwomIzQzOwlkeW5pZCA9IGt6YWxsb2Nfb2JqKCpkeW5pZCk7CiYjNDM7CWlmICghZHluaWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZHluaWQtJmd0O2lkID0gKmlkOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2ssICZhbXA7ZHJ2LSZndDtkeW5pZHMubG9jaykgewomIzQzOwkJaWYgKGNoZWNrX2R1cCkgewomIzQzOwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZXhpc3RpbmdfZHluaWQsICZhbXA7ZHJ2LSZndDtkeW5pZHMubGlzdCwgbm9kZSkgewomIzQzOwkJCQlpZiAocGNpX21hdGNoX29uZV9pZCgmYW1wO2V4aXN0aW5nX2R5bmlkLSZndDtpZCwgaWQpKSB7CiYjNDM7CQkJCQlrZnJlZShkeW5pZCk7CiYjNDM7CQkJCQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJCQkJfQomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtkeW5pZC0mZ3Q7bm9kZSwgJmFtcDtkcnYtJmd0O2R5bmlkcy5saXN0KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZHJpdmVyX2F0dGFjaCgmYW1wO2Rydi0mZ3Q7ZHJpdmVyKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHBjaV9hZGRfZHluaWQgLSBhZGQgYSBuZXcgUENJIGRldmljZSBJRCB0byB0aGlzIGRyaXZlciBhbmQgcmUtcHJvYmUgZGV2aWNlcwogICogQGRydjogdGFyZ2V0IHBjaSBkcml2ZXIKQEAgLTU2LDI1ICYjNDM7OTcsMTcgQEAgaW50IHBjaV9hZGRfZHluaWQoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwKIAkJICB1bnNpZ25lZCBpbnQgY2xhc3MsIHVuc2lnbmVkIGludCBjbGFzc19tYXNrLAogCQkgIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpCiB7Ci0Jc3RydWN0IHBjaV9keW5pZCAqZHluaWQ7Ci0KLQlkeW5pZCA9IGt6YWxsb2Nfb2JqKCpkeW5pZCk7Ci0JaWYgKCFkeW5pZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkeW5pZC0mZ3Q7aWQudmVuZG9yID0gdmVuZG9yOwotCWR5bmlkLSZndDtpZC5kZXZpY2UgPSBkZXZpY2U7Ci0JZHluaWQtJmd0O2lkLnN1YnZlbmRvciA9IHN1YnZlbmRvcjsKLQlkeW5pZC0mZ3Q7aWQuc3ViZGV2aWNlID0gc3ViZGV2aWNlOwotCWR5bmlkLSZndDtpZC5jbGFzcyA9IGNsYXNzOwotCWR5bmlkLSZndDtpZC5jbGFzc19tYXNrID0gY2xhc3NfbWFzazsKLQlkeW5pZC0mZ3Q7aWQuZHJpdmVyX2RhdGEgPSBkcml2ZXJfZGF0YTsKLQotCXNwaW5fbG9jaygmYW1wO2Rydi0mZ3Q7ZHluaWRzLmxvY2spOwotCWxpc3RfYWRkX3RhaWwoJmFtcDtkeW5pZC0mZ3Q7bm9kZSwgJmFtcDtkcnYtJmd0O2R5bmlkcy5saXN0KTsKLQlzcGluX3VubG9jaygmYW1wO2Rydi0mZ3Q7ZHluaWRzLmxvY2spOwotCi0JcmV0dXJuIGRyaXZlcl9hdHRhY2goJmFtcDtkcnYtJmd0O2RyaXZlcik7CiYjNDM7CXN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkID0gewomIzQzOwkJLnZlbmRvciA9IHZlbmRvciwKJiM0MzsJCS5kZXZpY2UgPSBkZXZpY2UsCiYjNDM7CQkuc3VidmVuZG9yID0gc3VidmVuZG9yLAomIzQzOwkJLnN1YmRldmljZSA9IHN1YmRldmljZSwKJiM0MzsJCS5jbGFzcyA9IGNsYXNzLAomIzQzOwkJLmNsYXNzX21hc2sgPSBjbGFzc19tYXNrLAomIzQzOwkJLmRyaXZlcl9kYXRhID0gZHJpdmVyX2RhdGEsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBkb19wY2lfYWRkX2R5bmlkKGRydiwgJmFtcDtpZCwgZmFsc2UpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX2FkZF9keW5pZCk7CiAKQEAgLTkwLDYgJiM0MzsxMjMsMzAgQEAgc3RhdGljIHZvaWQgcGNpX2ZyZWVfZHluaWRzKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpCiAJc3Bpbl91bmxvY2soJmFtcDtkcnYtJmd0O2R5bmlkcy5sb2NrKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGRvX3BjaV9tYXRjaF9pZCAtIFNlZSBpZiBhIFBDSSBJRCBtYXRjaGVzIGEgZ2l2ZW4gcGNpX2lkIHRhYmxlCiYjNDM7ICogQGlkczogYXJyYXkgb2YgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmVzIHRvIHNlYXJjaCBpbgomIzQzOyAqIEBkZXZfaWQ6IHRoZSBhY3R1YWwgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdC4KJiM0MzsgKiBAaW5jbHVkZV9vdmVycmlkZV9vbmx5OiBhbHNvIG1hdGNoIGFnYWluc3QgZGV2aWNlIElEIGVudHJpZXMgbWFya2VkIGFzIG92ZXJyaWRlIG9ubHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSBtYXRjaGluZyBwY2lfZGV2aWNlX2lkIHN0cnVjdHVyZSBvcgomIzQzOyAqICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZG9fcGNpX21hdGNoX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsCiYjNDM7CQkJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRldl9pZCwKJiM0MzsJCQkJCQkgICBib29sIGluY2x1ZGVfb3ZlcnJpZGVfb25seSkKJiM0Mzt7CiYjNDM7CWlmIChpZHMpIHsKJiM0MzsJCXdoaWxlIChpZHMtJmd0O3ZlbmRvciB8fCBpZHMtJmd0O3N1YnZlbmRvciB8fCBpZHMtJmd0O2NsYXNzX21hc2spIHsKJiM0MzsJCQlpZiAoKCFpZHMtJmd0O292ZXJyaWRlX29ubHkgfHwgaW5jbHVkZV9vdmVycmlkZV9vbmx5KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHBjaV9tYXRjaF9vbmVfaWQoaWRzLCBkZXZfaWQpKQomIzQzOwkJCQlyZXR1cm4gaWRzOwomIzQzOwkJCWlkcyYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBwY2lfbWF0Y2hfaWQgLSBTZWUgaWYgYSBQQ0kgZGV2aWNlIG1hdGNoZXMgYSBnaXZlbiBwY2lfaWQgdGFibGUKICAqIEBpZHM6IGFycmF5IG9mIFBDSSBkZXZpY2UgSUQgc3RydWN0dXJlcyB0byBzZWFyY2ggaW4KQEAgLTEwNSwxNCAmIzQzOzE2Miw5IEBAIHN0YXRpYyB2b2lkIHBjaV9mcmVlX2R5bmlkcyhzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KQogY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9pZChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLAogCQkJCQkgc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlpZiAoaWRzKSB7Ci0JCXdoaWxlIChpZHMtJmd0O3ZlbmRvciB8fCBpZHMtJmd0O3N1YnZlbmRvciB8fCBpZHMtJmd0O2NsYXNzX21hc2spIHsKLQkJCWlmIChwY2lfbWF0Y2hfb25lX2RldmljZShpZHMsIGRldikpCi0JCQkJcmV0dXJuIGlkczsKLQkJCWlkcyYjNDM7JiM0Mzs7Ci0JCX0KLQl9Ci0JcmV0dXJuIE5VTEw7CiYjNDM7CXN0cnVjdCBwY2lfZGV2aWNlX2lkIGRldl9pZCA9IHBjaV9pZF9mcm9tX2RldmljZShkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gZG9fcGNpX21hdGNoX2lkKGlkcywgJmFtcDtkZXZfaWQsIHRydWUpOwogfQogRVhQT1JUX1NZTUJPTChwY2lfbWF0Y2hfaWQpOwogCkBAIC0xMjcsNiAmIzQzOzE3OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfZGV2aWNlX2lkX2FueSA9IHsKICAqIHBjaV9tYXRjaF9kZXZpY2UgLSBTZWUgaWYgYSBkZXZpY2UgbWF0Y2hlcyBhIGRyaXZlciYjMzk7cyBsaXN0IG9mIElEcwogICogQGRydjogdGhlIFBDSSBkcml2ZXIgdG8gbWF0Y2ggYWdhaW5zdAogICogQGRldjogdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3QKJiM0MzsgKiBAaWRfY29weTogUGxhY2UgdG8gc3RvcmUgY29weSBvZiBwY2lfZGV2aWNlX2lkIGZvciBkeW5hbWljIElECiAgKgogICogVXNlZCBieSBhIGRyaXZlciB0byBjaGVjayB3aGV0aGVyIGEgUENJIGRldmljZSBpcyBpbiBpdHMgbGlzdCBvZgogICogc3VwcG9ydGVkIGRldmljZXMgb3IgaW4gdGhlIGR5bmlkcyBsaXN0LCB3aGljaCBtYXkgaGF2ZSBiZWVuIGF1Z21lbnRlZApAQCAtMTM0LDEwICYjNDM7MTg3LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfZGV2aWNlX2lkX2FueSA9IHsKICAqIHN0cnVjdHVyZSBvciAlTlVMTCBpZiB0aGVyZSBpcyBubyBtYXRjaC4KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsCi0JCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldikKJiM0MzsJCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldiwKJiM0MzsJCQkJCQkgICAgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkX2NvcHkpCiB7Ci0Jc3RydWN0IHBjaV9keW5pZCAqZHluaWQ7Ci0JY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkID0gTlVMTCwgKmlkczsKJiM0MzsJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkID0gTlVMTDsKJiM0MzsJc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkOwogCWludCByZXQ7CiAKIAkvKiBXaGVuIGRyaXZlcl9vdmVycmlkZSBpcyBzZXQsIG9ubHkgYmluZCB0byB0aGUgbWF0Y2hpbmcgZHJpdmVyICovCkBAIC0xNDUsNDUgJiM0MzsxOTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsCiAJaWYgKHJldCA9PSAwKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlkZXZfaWQgPSBwY2lfaWRfZnJvbV9kZXZpY2UoZGV2KTsKIAkvKiBMb29rIGF0IHRoZSBkeW5hbWljIGlkcyBmaXJzdCwgYmVmb3JlIHRoZSBzdGF0aWMgb25lcyAqLwotCXNwaW5fbG9jaygmYW1wO2Rydi0mZ3Q7ZHluaWRzLmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsICZhbXA7ZHJ2LSZndDtkeW5pZHMubGlzdCwgbm9kZSkgewotCQlpZiAocGNpX21hdGNoX29uZV9kZXZpY2UoJmFtcDtkeW5pZC0mZ3Q7aWQsIGRldikpIHsKLQkJCWZvdW5kX2lkID0gJmFtcDtkeW5pZC0mZ3Q7aWQ7Ci0JCQlicmVhazsKJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrLCAmYW1wO2Rydi0mZ3Q7ZHluaWRzLmxvY2spIHsKJiM0MzsJCXN0cnVjdCBwY2lfZHluaWQgKmR5bmlkOwomIzQzOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgJmFtcDtkcnYtJmd0O2R5bmlkcy5saXN0LCBub2RlKSB7CiYjNDM7CQkJaWYgKHBjaV9tYXRjaF9vbmVfaWQoJmFtcDtkeW5pZC0mZ3Q7aWQsICZhbXA7ZGV2X2lkKSkgewomIzQzOwkJCQkqaWRfY29weSA9IGR5bmlkLSZndDtpZDsKJiM0MzsJCQkJcmV0dXJuIGlkX2NvcHk7CiYjNDM7CQkJfQogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZhbXA7ZHJ2LSZndDtkeW5pZHMubG9jayk7CiAKJiM0MzsJZm91bmRfaWQgPSBkb19wY2lfbWF0Y2hfaWQoZHJ2LSZndDtpZF90YWJsZSwgJmFtcDtkZXZfaWQsIHJldCAmZ3Q7IDApOwogCWlmIChmb3VuZF9pZCkKIAkJcmV0dXJuIGZvdW5kX2lkOwogCi0JZm9yIChpZHMgPSBkcnYtJmd0O2lkX3RhYmxlOyAoZm91bmRfaWQgPSBwY2lfbWF0Y2hfaWQoaWRzLCBkZXYpKTsKLQkgICAgIGlkcyA9IGZvdW5kX2lkICYjNDM7IDEpIHsKLQkJLyoKLQkJICogVGhlIG1hdGNoIHRhYmxlIGlzIHNwbGl0IGJhc2VkIG9uIGRyaXZlcl9vdmVycmlkZS4KLQkJICogSW4gY2FzZSBvdmVycmlkZV9vbmx5IHdhcyBzZXQsIGVuZm9yY2UgZHJpdmVyX292ZXJyaWRlCi0JCSAqIG1hdGNoaW5nLgotCQkgKi8KLQkJaWYgKGZvdW5kX2lkLSZndDtvdmVycmlkZV9vbmx5KSB7Ci0JCQlpZiAocmV0ICZndDsgMCkKLQkJCQlyZXR1cm4gZm91bmRfaWQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gZm91bmRfaWQ7Ci0JCX0KLQl9Ci0KIAkvKiBkcml2ZXJfb3ZlcnJpZGUgd2lsbCBhbHdheXMgbWF0Y2gsIHNlbmQgYSBkdW1teSBpZCAqLwogCWlmIChyZXQgJmd0OyAwKQogCQlyZXR1cm4gJmFtcDtwY2lfZGV2aWNlX2lkX2FueTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgX3BjaV9mcmVlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Ja2ZyZWUodG9fcGNpX2RldihkZXYpKTsKLX0KLQogLyoqCiAgKiBuZXdfaWRfc3RvcmUgLSBzeXNmcyBmcm9udGVuZCB0byBwY2lfYWRkX2R5bmlkKCkKICAqIEBkcml2ZXI6IHRhcmdldCBkZXZpY2UgZHJpdmVyCkBAIC0xOTcsMzggJiM0MzsyMzUsMjIgQEAgc3RhdGljIHNzaXplX3QgbmV3X2lkX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmJ1ZiwKIHsKIAlzdHJ1Y3QgcGNpX2RyaXZlciAqcGRydiA9IHRvX3BjaV9kcml2ZXIoZHJpdmVyKTsKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzID0gcGRydi0mZ3Q7aWRfdGFibGU7Ci0JdTMyIHZlbmRvciwgZGV2aWNlLCBzdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAotCQlzdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELCBjbGFzcyA9IDAsIGNsYXNzX21hc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEgPSAwOwomIzQzOwlzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZCA9IHsKJiM0MzsJCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAomIzQzOwkJLnN1YmRldmljZSA9IFBDSV9BTllfSUQKJiM0MzsJfTsKIAlpbnQgZmllbGRzOwogCWludCByZXR2YWwgPSAwOwogCiAJZmllbGRzID0gc3NjYW5mKGJ1ZiwgJiMzNDsleCAleCAleCAleCAleCAleCAlbHgmIzM0OywKLQkJCSZhbXA7dmVuZG9yLCAmYW1wO2RldmljZSwgJmFtcDtzdWJ2ZW5kb3IsICZhbXA7c3ViZGV2aWNlLAotCQkJJmFtcDtjbGFzcywgJmFtcDtjbGFzc19tYXNrLCAmYW1wO2RyaXZlcl9kYXRhKTsKJiM0MzsJCQkmYW1wO2lkLnZlbmRvciwgJmFtcDtpZC5kZXZpY2UsICZhbXA7aWQuc3VidmVuZG9yLCAmYW1wO2lkLnN1YmRldmljZSwKJiM0MzsJCQkmYW1wO2lkLmNsYXNzLCAmYW1wO2lkLmNsYXNzX21hc2ssICZhbXA7aWQuZHJpdmVyX2RhdGEpOwogCWlmIChmaWVsZHMgJmx0OyAyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmaWVsZHMgIT0gNykgewotCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGt6YWxsb2Nfb2JqKCpwZGV2KTsKLQkJaWYgKCFwZGV2KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJcGRldi0mZ3Q7dmVuZG9yID0gdmVuZG9yOwotCQlwZGV2LSZndDtkZXZpY2UgPSBkZXZpY2U7Ci0JCXBkZXYtJmd0O3N1YnN5c3RlbV92ZW5kb3IgPSBzdWJ2ZW5kb3I7Ci0JCXBkZXYtJmd0O3N1YnN5c3RlbV9kZXZpY2UgPSBzdWJkZXZpY2U7Ci0JCXBkZXYtJmd0O2NsYXNzID0gY2xhc3M7Ci0JCXBkZXYtJmd0O2Rldi5yZWxlYXNlID0gX3BjaV9mcmVlX2RldmljZTsKLQotCQlkZXZpY2VfaW5pdGlhbGl6ZSgmYW1wO3BkZXYtJmd0O2Rldik7Ci0JCWlmIChwY2lfbWF0Y2hfZGV2aWNlKHBkcnYsIHBkZXYpKQotCQkJcmV0dmFsID0gLUVFWElTVDsKLQotCQlwdXRfZGV2aWNlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKLQotCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKJiM0MzsJCWlmIChkb19wY2lfbWF0Y2hfaWQocGRydi0mZ3Q7aWRfdGFibGUsICZhbXA7aWQsIGZhbHNlKSkKJiM0MzsJCQlyZXR1cm4gLUVFWElTVDsKIAl9CiAKIAkvKiBPbmx5IGFjY2VwdCBkcml2ZXJfZGF0YSB2YWx1ZXMgdGhhdCBtYXRjaCBhbiBleGlzdGluZyBpZF90YWJsZQpAQCAtMjM2LDcgJiM0MzsyNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLAogCWlmIChpZHMpIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJd2hpbGUgKGlkcy0mZ3Q7dmVuZG9yIHx8IGlkcy0mZ3Q7c3VidmVuZG9yIHx8IGlkcy0mZ3Q7Y2xhc3NfbWFzaykgewotCQkJaWYgKGRyaXZlcl9kYXRhID09IGlkcy0mZ3Q7ZHJpdmVyX2RhdGEpIHsKJiM0MzsJCQlpZiAoaWQuZHJpdmVyX2RhdGEgPT0gaWRzLSZndDtkcml2ZXJfZGF0YSkgewogCQkJCXJldHZhbCA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0yNDYsOCAmIzQzOzI2OCw3IEBAIHN0YXRpYyBzc2l6ZV90IG5ld19pZF9zdG9yZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLCBjb25zdCBjaGFyICpidWYsCiAJCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXJldHZhbCA9IHBjaV9hZGRfZHluaWQocGRydiwgdmVuZG9yLCBkZXZpY2UsIHN1YnZlbmRvciwgc3ViZGV2aWNlLAotCQkJICAgICAgIGNsYXNzLCBjbGFzc19tYXNrLCBkcml2ZXJfZGF0YSk7CiYjNDM7CXJldHZhbCA9IGRvX3BjaV9hZGRfZHluaWQocGRydiwgJmFtcDtpZCwgZmllbGRzICE9IDcpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAJcmV0dXJuIGNvdW50OwpAQCAtNDQ1LDEyICYjNDM7NDY2LDEzIEBAIHZvaWQgcGNpX3Byb2JlX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKQogc3RhdGljIGludCBfX3BjaV9kZXZpY2VfcHJvYmUoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CiAJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkOwomIzQzOwlzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF9jb3B5OwogCWludCBlcnJvciA9IDA7CiAKIAlpZiAoZHJ2LSZndDtwcm9iZSkgewogCQllcnJvciA9IC1FTk9ERVY7CiAKLQkJaWQgPSBwY2lfbWF0Y2hfZGV2aWNlKGRydiwgcGNpX2Rldik7CiYjNDM7CQlpZCA9IHBjaV9tYXRjaF9kZXZpY2UoZHJ2LCBwY2lfZGV2LCAmYW1wO2lkX2NvcHkpOwogCQlpZiAoaWQpCiAJCQllcnJvciA9IHBjaV9jYWxsX3Byb2JlKGRydiwgcGNpX2RldiwgaWQpOwogCX0KQEAgLTE1MzgsMTIgJiM0MzsxNTYwLDEzIEBAIHN0YXRpYyBpbnQgcGNpX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHBjaV9kcml2ZXIgKnBjaV9kcnY7CiAJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkOwomIzQzOwlzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF9jb3B5OwogCiAJaWYgKHBjaV9kZXZfYmluZGluZ19kaXNhbGxvd2VkKHBjaV9kZXYpKQogCQlyZXR1cm4gMDsKIAogCXBjaV9kcnYgPSAoc3RydWN0IHBjaV9kcml2ZXIgKil0b19wY2lfZHJpdmVyKGRydik7Ci0JZm91bmRfaWQgPSBwY2lfbWF0Y2hfZGV2aWNlKHBjaV9kcnYsIHBjaV9kZXYpOwomIzQzOwlmb3VuZF9pZCA9IHBjaV9tYXRjaF9kZXZpY2UocGNpX2RydiwgcGNpX2RldiwgJmFtcDtpZF9jb3B5KTsKIAlpZiAoZm91bmRfaWQpCiAJCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IDQ0NjllMWE3N2YzYzEzLi4wNTY3YTg3NjJiYWEwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTQ0MiwyMSAmIzQzOzQ0MiwzNyBAQCBzdGF0aWMgaW5saW5lIGludCBwY2lfc2V0dXBfY2FyZGJ1cyhjaGFyICpzdHIpIHsgcmV0dXJuIC1FTk9FTlQ7IH0KICNlbmRpZiAvKiBDT05GSUdfQ0FSREJVUyAqLwogCiAvKioKLSAqIHBjaV9tYXRjaF9vbmVfZGV2aWNlIC0gVGVsbCBpZiBhIFBDSSBkZXZpY2Ugc3RydWN0dXJlIGhhcyBhIG1hdGNoaW5nCi0gKgkJCSAgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmUKLSAqIEBpZDogc2luZ2xlIFBDSSBkZXZpY2UgaWQgc3RydWN0dXJlIHRvIG1hdGNoCi0gKiBAZGV2OiB0aGUgUENJIGRldmljZSBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdAomIzQzOyAqIHBjaV9pZF9mcm9tX2RldmljZSAtIE9idGFpbiBhIHBjaV9kZXZpY2VfaWQgZnJvbSBhIFBDSSBkZXZpY2UKJiM0MzsgKiBAZGV2OiB0aGUgUENJIGRldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJucyBhIHBjaV9kZXZpY2VfaWQgZmlsbGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkX2Zyb21fZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHN0cnVjdCBwY2lfZGV2aWNlX2lkKSB7CiYjNDM7CQkudmVuZG9yID0gZGV2LSZndDt2ZW5kb3IsCiYjNDM7CQkuZGV2aWNlID0gZGV2LSZndDtkZXZpY2UsCiYjNDM7CQkuc3VidmVuZG9yID0gZGV2LSZndDtzdWJzeXN0ZW1fdmVuZG9yLAomIzQzOwkJLnN1YmRldmljZSA9IGRldi0mZ3Q7c3Vic3lzdGVtX2RldmljZSwKJiM0MzsJCS5jbGFzcyA9IGRldi0mZ3Q7Y2xhc3MsCiYjNDM7CX07CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9tYXRjaF9vbmVfaWQgLSBUZWxsIGlmIGEgUENJIGRldmljZSBJRCBtYXRjaGVzIGEgbmVlZGxlIFBDSSBkZXZpY2UgaWQKJiM0MzsgKiBAaWQ6IHNpbmdsZSBQQ0kgZGV2aWNlIGlkIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0IChuZWVkbGUpCiYjNDM7ICogQGRldl9pZDogdGhlIGFjdHVhbCBJRCBmcm9tIHRoZSBQQ0kgZGV2aWNlIChjYW4gYmUgY3JlYXRlZCB2aWEgcGNpX2lkX2Zyb21fZGV2aWNlKQogICoKICAqIFJldHVybnMgdGhlIG1hdGNoaW5nIHBjaV9kZXZpY2VfaWQgc3RydWN0dXJlIG9yICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLgogICovCiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICoKLXBjaV9tYXRjaF9vbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldikKJiM0MztwY2lfbWF0Y2hfb25lX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRldl9pZCkKIHsKLQlpZiAoKGlkLSZndDt2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC0mZ3Q7dmVuZG9yID09IGRldi0mZ3Q7dmVuZG9yKSAmYW1wOyZhbXA7Ci0JICAgIChpZC0mZ3Q7ZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtJmd0O2RldmljZSA9PSBkZXYtJmd0O2RldmljZSkgJmFtcDsmYW1wOwotCSAgICAoaWQtJmd0O3N1YnZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGlkLSZndDtzdWJ2ZW5kb3IgPT0gZGV2LSZndDtzdWJzeXN0ZW1fdmVuZG9yKSAmYW1wOyZhbXA7Ci0JICAgIChpZC0mZ3Q7c3ViZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtJmd0O3N1YmRldmljZSA9PSBkZXYtJmd0O3N1YnN5c3RlbV9kZXZpY2UpICZhbXA7JmFtcDsKLQkgICAgISgoaWQtJmd0O2NsYXNzIF4gZGV2LSZndDtjbGFzcykgJmFtcDsgaWQtJmd0O2NsYXNzX21hc2spKQomIzQzOwlpZiAoKGlkLSZndDt2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC0mZ3Q7dmVuZG9yID09IGRldl9pZC0mZ3Q7dmVuZG9yKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoaWQtJmd0O2RldmljZSA9PSBQQ0lfQU5ZX0lEIHx8IGlkLSZndDtkZXZpY2UgPT0gZGV2X2lkLSZndDtkZXZpY2UpICZhbXA7JmFtcDsKJiM0MzsJICAgIChpZC0mZ3Q7c3VidmVuZG9yID09IFBDSV9BTllfSUQgfHwgaWQtJmd0O3N1YnZlbmRvciA9PSBkZXZfaWQtJmd0O3N1YnZlbmRvcikgJmFtcDsmYW1wOwomIzQzOwkgICAgKGlkLSZndDtzdWJkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC0mZ3Q7c3ViZGV2aWNlID09IGRldl9pZC0mZ3Q7c3ViZGV2aWNlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKChpZC0mZ3Q7Y2xhc3MgXiBkZXZfaWQtJmd0O2NsYXNzKSAmYW1wOyBpZC0mZ3Q7Y2xhc3NfbWFzaykpCiAJCXJldHVybiBpZDsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKaW5kZXggZTNkMzE3N2ZjZTU0OWUuLmM4YzRiZmU3ODE3YjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZWFyY2guYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwpAQCAtMjQ1LDggJiM0MzsyNDUsMTAgQEAgc3RhdGljIGludCBtYXRjaF9wY2lfZGV2X2J5X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgcGNpX2RldmljZV9pZCBkZXZfaWQ7CiAKLQlpZiAocGNpX21hdGNoX29uZV9kZXZpY2UoaWQsIHBkZXYpKQomIzQzOwlkZXZfaWQgPSBwY2lfaWRfZnJvbV9kZXZpY2UocGRldik7CiYjNDM7CWlmIChwY2lfbWF0Y2hfb25lX2lkKGlkLCAmYW1wO2Rldl9pZCkpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtNDE4LDcgJiM0Mzs0MjAsNyBAQCBFWFBPUlRfU1lNQk9MKHBjaV9nZXRfY2xhc3MpOwogICoKICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuIElmIGEgUENJIGRldmljZSBpcyBmb3VuZAogICogd2l0aCBhIG1hdGNoaW5nIGJhc2UgY2xhc3MgY29kZSwgdGhlIHJlZmVyZW5jZSBjb3VudCB0byB0aGUgZGV2aWNlIGlzCi0gKiBpbmNyZW1lbnRlZC4gU2VlIHBjaV9tYXRjaF9vbmVfZGV2aWNlKCkgdG8gZmlndXJlIG91dCBob3cgZG9lcyB0aGlzIHdvcmtzLgomIzQzOyAqIGluY3JlbWVudGVkLiBTZWUgcGNpX21hdGNoX29uZV9pZCgpIHRvIGZpZ3VyZSBvdXQgaG93IGRvZXMgdGhpcyB3b3Jrcy4KICAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuCiAgKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlIG9uIHRoZQogICogZ2xvYmFsIGxpc3QuIFRoZSByZWZlcmVuY2UgY291bnQgZm9yIEBmcm9tIGlzIGFsd2F5cyBkZWNyZW1lbnRlZCBpZiBpdCBpcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyLmMgYi9kcml2ZXJzL3Njc2kvbnNwMzIuYwppbmRleCBlODkzZDU2NzcyNDE3YS4uOWM5MjgxMjIyYTBhY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5jCkBAIC0xNDcwLDcgJiM0MzsxNDcwLDcgQEAgc3RhdGljIGludCBuc3AzMl9zaG93X2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQogCQkgICAobnNwMzJfcmVhZDIoYmFzZSwgSU5ERVhfUkVHKSAmZ3Q7Jmd0OyA4KSAmYW1wOyAweGZmKTsKIAogCW1vZGVfcmVnID0gbnNwMzJfaW5kZXhfcmVhZDEoYmFzZSwgQ0hJUF9NT0RFKTsKLQltb2RlbCAgICA9IGRhdGEtJmd0O3BjaV9kZXZpZC0mZ3Q7ZHJpdmVyX2RhdGE7CiYjNDM7CW1vZGVsICAgID0gZGF0YS0mZ3Q7bW9kZWw7CiAKICNpZmRlZiBDT05GSUdfUE0KIAlzZXFfcHJpbnRmKG0sICYjMzQ7UG93ZXIgTWFuYWdlbWVudDogICAgICAlc1xuJiMzNDssCkBAIC0yOTA3LDggJiM0MzsyOTA3LDggQEAgc3RhdGljIGludCBuc3AzMl9laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogICovCiBzdGF0aWMgaW50IG5zcDMyX2dldHByb21fcGFyYW0obnNwMzJfaHdfZGF0YSAqZGF0YSkKIHsKLQlpbnQgdmVuZG9yID0gZGF0YS0mZ3Q7cGNpX2RldmlkLSZndDt2ZW5kb3I7Ci0JaW50IGRldmljZSA9IGRhdGEtJmd0O3BjaV9kZXZpZC0mZ3Q7ZGV2aWNlOwomIzQzOwlpbnQgdmVuZG9yID0gZGF0YS0mZ3Q7UGNpLSZndDt2ZW5kb3I7CiYjNDM7CWludCBkZXZpY2UgPSBkYXRhLSZndDtQY2ktJmd0O2RldmljZTsKIAlpbnQgcmV0LCBpOwogCWludCBfX21heWJlX3VudXNlZCB2YWw7CiAKQEAgLTMzNDAsNyAmIzQzOzMzNDAsNyBAQCBzdGF0aWMgaW50IG5zcDMyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJfQogCiAJZGF0YS0mZ3Q7UGNpCSAgPSBwZGV2OwotCWRhdGEtJmd0O3BjaV9kZXZpZCAgID0gaWQ7CiYjNDM7CWRhdGEtJmd0O21vZGVsICAgICAgID0gaWQtJmd0O2RyaXZlcl9kYXRhOwogCWRhdGEtJmd0O0lycU51bWJlciAgID0gcGRldi0mZ3Q7aXJxOwogCWRhdGEtJmd0O0Jhc2VBZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCWRhdGEtJmd0O051bUFkZHJlc3MgID0gcGNpX3Jlc291cmNlX2xlbiAgKHBkZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyLmggYi9kcml2ZXJzL3Njc2kvbnNwMzIuaAppbmRleCA5MjQ4ODlmOGJkMzdlNy4uOWU2NTc3MWNiNTkyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oCkBAIC01NjQsMTAgJiM0Mzs1NjQsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX25zcDMyX2h3X2RhdGEgewogCiAJc3RydWN0IHNjc2lfY21uZCAqQ3VycmVudFNDOwogCi0Jc3RydWN0IHBjaV9kZXYgICAgICAgICAgICAgKlBjaTsKLQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldmlkOwotCXN0cnVjdCBTY3NpX0hvc3QgICAgICAgICAgICpIb3N0OwotCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICBMb2NrOwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAgICAqUGNpOwomIzQzOwlpbnQgICAgICAgICAgICAgICAgbW9kZWw7CiYjNDM7CXN0cnVjdCBTY3NpX0hvc3QgICpIb3N0OwomIzQzOwlzcGlubG9ja190ICAgICAgICAgTG9jazsKIAogCWNoYXIgaW5mb19zdHJbMTAwXTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggNjRiMzA4YjZlNjFjMTkuLjkyYzE3YzExNmRlNmQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTk3OSw2ICYjNDM7OTc5LDcgQEAgc3RydWN0IG1vZHVsZTsKICAqCQlmdW5jdGlvbiByZXR1cm5zIHplcm8gd2hlbiB0aGUgZHJpdmVyIGNob29zZXMgdG8KICAqCQl0YWtlICYjMzQ7b3duZXJzaGlwJiMzNDsgb2YgdGhlIGRldmljZSBvciBhbiBlcnJvciBjb2RlCiAgKgkJKG5lZ2F0aXZlIG51bWJlcikgb3RoZXJ3aXNlLgomIzQzOyAqCQlUaGUgcGNpX2RldmljZV9pZCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcgcHJvYmUuCiAgKgkJVGhlIHByb2JlIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3MKICAqCQljb250ZXh0LCBzbyBpdCBjYW4gc2xlZXAuCiAgKiBAcmVtb3ZlOglUaGUgcmVtb3ZlKCkgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYSBkZXZpY2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NzEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBDSSBNYXRjaGluZyBSZWZhY3RvcmluZyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBQQ0kgZGV2aWNlIElEcyBhcmUgbWF0Y2hlZCwgcGFydGljdWxhcmx5IGZvciBkeW5hbWljIElEcyBhZGRlZCB2aWEgc3lzZnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqIHRoYXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhlIHNoaWZ0IGluIGhvdyBgcGNpX21hdGNoX2RldmljZWAgd29ya3MsIGVzcGVjaWFsbHkgaXRzIGludGVyYWN0aW9uIHdpdGggZHluYW1pY2FsbHkgYWRkZWQgSURzLgoKSGVyZSYjMzk7cyBteSBicmVha2Rvd246CgoqICAgKipDb3JlIENoYW5nZToqKiBUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBQQ0kgbWF0Y2hpbmcgbG9naWMgdG8gcGFzcyBhIGNvcHkgb2YgdGhlIG1hdGNoZWQgYHBjaV9kZXZpY2VfaWRgIChgaWRfY29weWApIHRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24sIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBJRCAod2hpY2gsIGluIHRoZSBjYXNlIG9mIGR5bmFtaWMgSURzLCBjb3VsZCBiZSBoZWFwLWFsbG9jYXRlZCkuCiogICAqKk1vdGl2YXRpb246KiogVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uOiBwcmV2aW91c2x5LCBkcml2ZXJzIGNvdWxkIHN0b3JlIGEgcG9pbnRlciB0byBhIGBwY2lfZGV2aWNlX2lkYCB0aGF0IG1pZ2h0IGJlY29tZSBpbnZhbGlkIChlLmcuLCBpZiB0aGUgZHluYW1pYyBJRCB3YXMgcmVtb3ZlZCkuIFRoZSBuZXcgYXBwcm9hY2ggZm9yY2VzIGRyaXZlcnMgdG8gZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGBkcml2ZXJfZGF0YWAgb3Igc2ltaWxhciBpbmZvcm1hdGlvbiAqZHVyaW5nKiB0aGUgcHJvYmUgYW5kIG5vdCB0byBzdG9yZSB0aGUgbm93IHRlbXBvcmFyeSBgcGNpX2RldmljZV9pZGAgcG9pbnRlci4KKiAgICoqSW1wYWN0OioqIFRoaXMgaXMgYSBiaWcgZGVhbC4gU2V2ZXJhbCBkcml2ZXJzLCBpbmNsdWRpbmcgQVRBLCBBR1AsIE1lbGxhbm94LCBhbmQgb3RoZXJzLCBhcmUgZGlyZWN0bHkgbW9kaWZpZWQgdG8gcmVmbGVjdCB0aGlzIG5ldyBwYXJhZGlnbS4gVGhlc2UgZHJpdmVycyBub3cgbmVlZCB0byBzdG9yZSBhbmQgYWNjZXNzIGRyaXZlci1zcGVjaWZpYyBkYXRhIGR1cmluZyB0aGUgcHJvYmUgaW5zdGVhZCBvZiB0aGUgYHBjaV9kZXZpY2VfaWRgIHBvaW50ZXIgaXRzZWxmLgoqICAgKipGdXp6aW5nIFBvdGVudGlhbDoqKiBUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCBmdXp6aW5nLXdpc2UsIGlzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN5c2ZzIChgbmV3X2lkYCksIGR5bmFtaWMgSUQgaGFuZGxpbmcsIGFuZCB0aGUgUENJIG1hdGNoaW5nIGNvcmUuIFN5emthbGxlciBjYW4gZWFzaWx5IGludGVyYWN0IHdpdGggc3lzZnMgYW5kIGFkZCBkeW5hbWljIElEcyAodHJpZ2dlcmluZyBgbmV3X2lkX3N0b3JlYCwgd2hpY2ggY2FsbHMgYGRvX3BjaV9hZGRfZHluaWRgKS4gVGhlIHByb2JpbmcgcHJvY2VzcyB0aGVuIGdvZXMgdGhyb3VnaCBgcGNpX21hdGNoX2RldmljZWAgYW5kIGBwY2lfbWF0Y2hfb25lX2lkYC4gVGhlIGNoYW5nZWQgbG9naWMgaXMgaW50ZXJlc3RpbmcuCiogICAqKkZ1enppbmcgVGFyZ2V0czoqKiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcyBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0czoKICAgICogICBgZG9fcGNpX2FkZF9keW5pZGAKICAgICogICBgbmV3X2lkX3N0b3JlYAogICAgKiAgIGBwY2lfbWF0Y2hfZGV2aWNlYAogICAgKiAgIGBwY2lfbWF0Y2hfb25lX2lkYAogICAgKiAgIGBfX3BjaV9kZXZpY2VfcHJvYmVgCiogICAqKk1vZGlmaWVkIERyaXZlcnMgKGFsc28gdG8gZnV6eik6KioKICAgICogICBgYXRhX2dlbmVyaWNfaW5pdF9vbmVgCiAgICAqICAgYGFncF9hbWRrN19wcm9iZWAKICAgICogICBgYWdwX3ZpYV9wcm9iZWAKICAgICogICBgdHBjaTIwMF9wY2lfcHJvYmVgCiAgICAqICAgYG1seHN3X3BjaV9wcm9iZWAKICAgICogICBgbnNwMzJfcHJvYmVgCiogICAqKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnM6KiogSSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtb2RpZmllZCBkcml2ZXJzIHRvIGJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3I6CiAgICAqICAgYEFUQV9HRU5FUklDYAogICAgKiAgIGBBR1BfQU1ENjRgIG9yIGBBR1BfQU1ESzdgCiAgICAqICAgYEFHUF9WSUFgCiAgICAqICAgYFRQQ0kyMDBgCiAgICAqICAgYE1MWFNXX1BDSWAKICAgICogICBgU0NTSV9OU1AzMmAKICAgICogIGBDT05GSUdfUENJYCAod2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0KQoKU3l6a2FsbGVyIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYG5ld19pZGAgc3lzZnMgZW50cnkgYW5kIGNhbiB0cmlnZ2VyIGR5bmFtaWMgSUQgYWRkaXRpb24sIGxlYWRpbmcgdG8gZXhlY3V0aW9uIG9mIHRoZSBQQ0kgcHJvYmluZyBmdW5jdGlvbnMgd2hpY2ggaW4gdHVybiBjYWxscyB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uLiBUaGlzIHNldCBvZiBjaGFuZ2VzIG9mZmVycyBpbnRlcmVzdGluZyBmdXp6aW5nIHNjZW5hcmlvcy4gVGhlIGRyaXZlcnMgdGhhdCB3ZXJlIGNoYW5nZWQgd2lsbCBuZWVkIHRvIGJlIGZ1enplZCBhcyB3ZWxsIHRvIHRlc3QgdGhlIGV4dHJhY3Rpb24gYW5kIHN0b3JhZ2Ugb2YgZHJpdmVyIGRhdGEgZHVyaW5nIHByb2JpbmcuIEl0IGFsbCBjb21lcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVRBX0dFTkVSSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2F0YS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hdGEvS2NvbmZpZz0xMTYzPWNvbmZpZyBQQVRBX0FDUElcbi0tXG5kcml2ZXJzL2F0YS9LY29uZmlnLTExNzItXG5kcml2ZXJzL2F0YS9LY29uZmlnOjExNzM6Y29uZmlnIEFUQV9HRU5FUklDXG5kcml2ZXJzL2F0YS9LY29uZmlnLTExNzQtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIEFUQSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NjYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipJbnRlcm5hbCBNdXNpbmdzIG9uIEFUQV9HRU5FUklDKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcy4uLiBgQVRBX0dFTkVSSUNgLiBIbW0sIGxldCYjMzk7cyBzZWUuIFRoZSB0ZXh0IHNheXMuLi4gd2VsbCwgaXQgKmlzKiBgQVRBX0dFTkVSSUNgLiBPa2F5LCB0aGF0JiMzOTtzIG5vdCBleGFjdGx5IHJldmVsYXRvcnksIGlzIGl0PyBDbGVhcmx5LCB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnQgaXMgdGhhdCBgQVRBX0dFTkVSSUNgIGlzLCBpbiBmYWN0LCBgQVRBX0dFTkVSSUNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSB3b25kZXIgd2h5IHRoaXMgc3RhdGVtZW50IG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgbm90ZWQuIElzIGl0IHNpbXBseSBhIG1hdHRlciBvZiBlc3RhYmxpc2hpbmcgdGhlIGdyb3VuZHdvcmsgZm9yIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnM/IElzIHRoZXJlIGEgbmVlZCB0byBkZWZpbmUgdGhlIHRoaW5nIGFzIGl0c2VsZiwgcGVyaGFwcyB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc29tZSBicm9hZGVyIHN5c3RlbSBvciBzcGVjaWZpY2F0aW9uPyBJdCBzZWVtcyBsaWtlIHRoaXMgbWlnaHQgYmUgbW9yZSBvZiBhIHBsYWNlaG9sZGVyIHRoYW4gYSByZXZlbGF0aW9uLiBTbywgSSBuZWVkIHRvIHN0YXJ0IGJ1aWxkaW5nIGNvbnRleHQuIEhvdyBjYW4gSSBleHBhbmQgdXBvbiB0aGlzIGluIGEgbWVhbmluZ2Z1bCB3YXk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFHUF9BTUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvYWdwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvYWdwL0tjb25maWc9NDU9Y29uZmlnIEFHUF9BVElcbi0tXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctNTEtXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWc6NTI6Y29uZmlnIEFHUF9BTURcbmRyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0FNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZy01OC1cbmRyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZzo1OTpjb25maWcgQUdQX0FNRDY0XG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtBTUQgT3B0ZXJvbi9BdGhsb242NCBvbi1DUFUgR0FSVCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBBR1BfQU1EIFZhcmlhYmxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFNlZWluZyAmIzM0O0FHUFxfQU1EJiMzNDsgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gQWNjZWxlcmF0ZWQgR3JhcGhpY3MgUG9ydCAoQUdQKSBhbmQgQU1EIGhhcmR3YXJlLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIHVuZGVyc2NvcmUgaXMgaW50ZXJlc3RpbmcsIGl0IGltcGxpZXMgYSB2YXJpYWJsZSBvciBhIGxhYmVsLCBub3QgYSBkaXJlY3QgY29tbWFuZCBvciBmaWxlbmFtZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtpcyB0aGlzIGEgc3lzdGVtIHZhcmlhYmxlLCBhIGRyaXZlciBzZXR0aW5nLCBhIHJlZ2lzdHJ5IGtleSwgb3IgcGFydCBvZiBhIGNvbmZpZ3VyYXRpb24gZmlsZT8mIzM0OyBXaXRob3V0IG1vcmUgY29udGV4dCwgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byBzYXkgZm9yIHN1cmUuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkmIzM5O20gZW5jb3VudGVyaW5nIHRoaXMgdGV4dC4KCklmIEkgd2VyZSB0byB0YWtlIGFuIGVkdWNhdGVkIGd1ZXNzLCBJ4oCZZCBwcmVzdW1lIGl0IHJlZmVycyB0byBhIHBhcnRpY3VsYXIgQUdQIHNldHRpbmcgb3IgYSBmZWF0dXJlIHRoYXTigJlzIHNwZWNpZmljIHRvIEFNRCBoYXJkd2FyZSwgcG9zc2libHkgaW4gYSBkcml2ZXIgY29uZmlndXJhdGlvbi4gSXQgY291bGQgYmUgcmVsYXRlZCB0byBBR1AgYXBlcnR1cmUgc2l6ZSwgQUdQIHRyYW5zZmVyIHJhdGUgbW9kZXMgKGxpa2UgNHggb3IgOHgpLCBvciBwZXJoYXBzIGV2ZW4gc29tZSBwcm9wcmlldGFyeSBBTUQgZXh0ZW5zaW9uIGZvciBBR1AuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBpbnZlc3RpZ2F0ZSBwb3RlbnRpYWwgZHJpdmVyIHNldHRpbmdzIG9yIEJJT1Mgc2V0dGluZ3MgZm9yIGFuIEFNRC1iYXNlZCBzeXN0ZW0gd2l0aCBBR1AuIFRoZSB2YXJpYWJsZSBpdHNlbGYsIGJ5IG5hbWluZyB0aGUgaGFyZHdhcmUgKmFuZCogdGhlIHRlY2hub2xvZ3ksIHN1Z2dlc3RzIGFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gVGhlIHByZWNpc2UgbWVhbmluZywgdGhvdWdoLCBpcyBlbnRpcmVseSBkZXBlbmRlbnQgb24gdGhlIHN5c3RlbSBvciBjb2RlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFHUF9WSUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvYWdwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvYWdwL0tjb25maWc9OTg9Y29uZmlnIEFHUF9TV09SS1Ncbi0tXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctMTA0LVxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnOjEwNTpjb25maWcgQUdQX1ZJQVxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnLTEwNi1cdHRyaXN0YXRlIFwmIzM0O1ZJQSBjaGlwc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU5NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gdGVjaG5pY2FsIGNvbmNlcHRzOgoKKipUaGUgQ29yZSBJZGVudGl0eSBvZiBBR1BfVklBKioKCkhtbSwgc28gdGhlIHRob3VnaHQgaXMgc2ltcGx5ICYjMzQ7QUdQX1ZJQSBpcyBgQUdQX1ZJQWAuJiMzNDsgSW50ZXJlc3RpbmcuIE9uIHRoZSBzdXJmYWNlLCBpdCBzZWVtcyBhbG1vc3QgdGF1dG9sb2dpY2FsLCBhIHZlcnkgYmFzaWMgaWRlbnRpdHkgc3RhdGVtZW50LiBCdXQgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhlcmUmIzM5O3MgbW9yZSBiZW5lYXRoIHRoZSBzdXJmYWNlLiBJdCYjMzk7cyBub3QganVzdCBhIGRlY2xhcmF0aW9uOyBpdCYjMzk7cyBhIGZvdW5kYXRpb25hbCB1bmRlcnN0YW5kaW5nLiBJdCYjMzk7cyBhY2tub3dsZWRnaW5nIHRoYXQgdGhlIGlkZW50aWZpZXIgJiMzNDtBR1BfVklBJiMzNDsgcmVwcmVzZW50cywgYnkgZGVmaW5pdGlvbiwgKkFHUF9WSUEqLiBUaGVyZSYjMzk7cyBubyBoaWRkZW4gdmFyaWFibGUsIG5vIGFtYmlndWl0eS4gSXQgYXNzZXJ0cyB0aGUgY29yZSBlc3NlbmNlIG9mIHRoYXQgc3BlY2lmaWMgZWxlbWVudCwgd2hhdGV2ZXIgaXQmIzM5O3MgcmVmZXJyaW5nIHRvLCBpcyBpdHMgb3duIGlkZW50aWZpZXIuIEl0JiMzOTtzIGEga2V5IHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUENJMjAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pcGFjay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgyNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGxvY2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byAmIzM0O3RwY2kyMDAsJiMzNDsgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZHJpdmVyIGluZnJhc3RydWN0dXJlIGZvciBJUEFDSyBjYXJyaWVycy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9pcGFjay9jYXJyaWVycy9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IHJlZmxleGl2ZSBhdCB0aGlzIHBvaW50IOKAkyBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBUaGV5JiMzOTtyZSB3aGVyZSB0aGVzZSBraW5kcyBvZiBoYXJkd2FyZSBvcHRpb25zIGFyZSB1c3VhbGx5IGRlZmluZWQgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBlc3RhYmxpc2hlZC4gSnVtcGluZyBpbnRvIHRoaXMgZGlyZWN0b3J5IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBmaXJzdCBzdGVwLiBJIHN1c3BlY3QgdGhhdCBlaXRoZXIgJiMzNDt0cGNpMjAwJiMzNDsgaXMgZXhwbGljaXRseSBuYW1lZCBpbiBhIG1lbnUgZW50cnksIG9yIGl0JiMzOTtzIHBhcnQgb2YgYSBicm9hZGVyIHNldCBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBjYW4gdGhlbiB0cmFjZS4gSXQgaXMgdmVyeSBsaWtlbHkgYSBib29sZWFuIG9wdGlvbiwgcG9zc2libHkgZGVwZW5kZW50IG9uIGFub3RoZXIgbW9yZSBnZW5lcmljIGJvYXJkIG9wdGlvbi4gSXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGluIGFuIGluY2x1ZGVzIGZpbGUgYW5kIHB1bGxlZCBpbnRvIHRoaXMgS2NvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaXBhY2svY2FycmllcnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lwYWNrL2NhcnJpZXJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaXBhY2svY2FycmllcnMvS2NvbmZpZzoyOmNvbmZpZyBCT0FSRF9UUENJMjAwXG5kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBURVdTIFRQQ0ktMjAwIEluZHVzdHJ5UGFjayBjYXJyaWVyIGJvYXJkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTc0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgQk9BUkRfVFBDSTIwMDogQSBDb25jaXNlIFJlZmxlY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU2VlaW5nICYjMzQ7Qk9BUkRfVFBDSTIwMCBpcyBgQk9BUkRfVFBDSTIwMGAmIzM0OyBpcyBlc3NlbnRpYWxseSBhIHRhdXRvbG9neS4gSXQmIzM5O3MgYSBzdGF0ZW1lbnQgb2YgaWRlbnRpdHksIG5vdGhpbmcgbW9yZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byByZWNvZ25pemUgdGhpcyBhcyBhIHBsYWNlaG9sZGVyLCBwZXJoYXBzIGluIHNvbWUgY29kZSBvciBkb2N1bWVudGF0aW9uLiBJdCYjMzk7cyBhIGJhc2ljIGFzc2lnbm1lbnQuCgpUaGUga2V5IGxpZXMgaW4gKndoeSogaXQmIzM5O3MgcHJlc2VudGVkIHRoaXMgd2F5LiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgZGVidWdnaW5nIHNjZW5hcmlvPyBBIHJ1ZGltZW50YXJ5IGNoZWNrPyBPciBwZXJoYXBzIGl0JiMzOTtzIGEgY29tcG9uZW50IGluIGEgbGFyZ2VyIHN5c3RlbSB3aGVyZSB0aGUgYWN0dWFsIHZhbHVlIGlzIGRlcml2ZWQgb3IgZHluYW1pY2FsbHkgYXNzaWduZWQgbGF0ZXIgYW5kIHRoaXMgaXMgdGhlIGluaXRpYWwgYXNzaWdubWVudCBwbGFjZWhvbGRlcj8gSSYjMzk7ZCBuZWVkIG1vcmUgY29udGV4dC4KClRoZSBmb3JtIHN1Z2dlc3RzIGEgc3ltYm9sIGFuZCBhIGxpdGVyYWwgcmVmZXJlbmNlIHRvIGl0c2VsZi4gSXQmIzM5O3MgYWxtb3N0IHRvbyBzaW1wbGlzdGljLiBUaGUgcmVhbCBpbnRlcmVzdCBpcyB0aGUgKnB1cnBvc2UqIGJlaGluZCBpdCwgd2hhdCB0aGlzIHJlcHJlc2VudHMgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIElzIGl0IGEgY29uc3RhbnQsIGEgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaXRob3V0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIEkmIzM5O20gbGVmdCB0byBzcGVjdWxhdGUgb24gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uIFRoZSBpbW1lZGlhdGUgcmVzcG9uc2UgaXMgdG8gY29uc2lkZXIgaXQgYSBiYXNpYyBidWlsZGluZyBibG9jaywgYSBrbm93biBxdWFudGl0eSwgYSAmIzM0O2tub3duIGtub3duLCYjMzQ7IGlmIHlvdSB3aWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUxYU1dfUENJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MjU9Y29uZmlnIE1MWFNXX0NPUkVfVEhFUk1BTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjMzOmNvbmZpZyBNTFhTV19QQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzQtXHR0cmlzdGF0ZSBcJiMzNDtQQ0kgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNZWxsYW5veCBUZWNobm9sb2dpZXMgU3dpdGNoIEFTSUNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQ6IE1MWFNXX1BDSSoqCgpSaWdodCwgc28sIHRoZSBpbnB1dCBzaW1wbHkgc3RhdGVzICYjMzQ7TUxYU1dfUENJIGlzIGBNTFhTV19QQ0lgLiYjMzQ7IFRoaXMgaXMgYSBmdW5kYW1lbnRhbCwgdGF1dG9sb2dpY2FsIHN0YXRlbWVudC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFuIGFzc2VydGlvbiB0aGF0IHNvbWV0aGluZyDigJMgKk1MWFNXX1BDSSog4oCTIGlzIGVxdWFsIHRvIGl0c2VsZi4gSXQmIzM5O3MgYSBwbGFjZWhvbGRlciwgYSBzdGFydGluZyBwb2ludC4gSXQmIzM5O3Mgbm90IHByb3ZpZGluZyBhbnkgbmV3IGluZm9ybWF0aW9uIG9yIGluc2lnaHQgb24gaXRzIG93bi4gSXQmIzM5O3MgdGhlIGVxdWl2YWxlbnQgb2Ygc2F5aW5nICYjMzQ7YSB0cmVlIGlzIGEgdHJlZS4mIzM0OyBXaGlsZSBvYnZpb3VzLCBpdCBjb3VsZCBiZSB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIG1vcmUgY29tcGxleCBjb25jZXB0cyBidWlsZC4gVGhpcyBiZWdzIHRoZSBxdWVzdGlvbiwgd2hlcmUgd2lsbCB0aGlzIHRha2UgbWU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ1NJX05TUDMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZz0xMTkxPWNvbmZpZyBTQ1NJX0FNNTNDOTc0XG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctMTIwNi1cbmRyaXZlcnMvc2NzaS9LY29uZmlnOjEyMDc6Y29uZmlnIFNDU0lfTlNQMzJcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTEyMDgtXHR0cmlzdGF0ZSBcJiMzNDtXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTQ1NJX05TUDMyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYFNDU0lfTlNQMzJgIGlzLCB3ZWxsLCBgU0NTSV9OU1AzMmAuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBhcmU6IGBBVEFfR0VORVJJQ2AsIGBBR1BfQU1EYCwgYEFHUF9WSUFgLCBgQk9BUkRfVFBDSTIwMGAsIGBNTFhTV19QQ0lgLCBhbmQgYFNDU0lfTlNQMzJgLgoKTm93LCBzb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZSBhYm91dCBgU0NTSV9OU1AzMmAuIEkgaGF2ZSBhIGZlZWxpbmcgaXQgY291bGQgYmUgZGVwZW5kZW50IG9uIHNvbWV0aGluZyBsaWtlIGBQQ01DSUFgIG9yIGEgc2ltaWxhciBsZWdhY3kgaW50ZXJmYWNlLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAgdG8gYXZvaWQgcG90ZW50aWFsIGNvbmZsaWN0cyBvciB1bmZvcmVzZWVuIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggb2xkZXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNDU0lfTlNQMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZz0xMTkxPWNvbmZpZyBTQ1NJX0FNNTNDOTc0XG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctMTIwNi1cbmRyaXZlcnMvc2NzaS9LY29uZmlnOjEyMDc6Y29uZmlnIFNDU0lfTlNQMzJcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTEyMDgtXHR0cmlzdGF0ZSBcJiMzNDtXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzQzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqCgpBbHJpZ2h0LCB0aGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgaXMgY2xlYXIuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cgaXM6IExldCYjMzk7cyByZWFkIHRoZSBkZXBlbmRlbmNpZXMuIEJlZm9yZSBJIGNhbiBlZmZlY3RpdmVseSBkaWFnbm9zZSwgcmVmYWN0b3IsIG9yIGV2ZW4ganVzdCAqdW5kZXJzdGFuZCogdGhlIHN5c3RlbSBpbiBmcm9udCBvZiBtZSwgSSBuZWVkIHRvIGtub3cgd2hhdCBpdCByZWxpZXMgb24uIEkmIzM5O20gbm90IGxvb2tpbmcgZm9yIGEgc3VwZXJmaWNpYWwgb3ZlcnZpZXc7IEkgbmVlZCBhIGRldGFpbGVkIHBpY3R1cmUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlaXIgdmVyc2lvbnMsIHRoZSBpbnRlcnJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVtLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQganVtcCBvdXQuIEnigJltIHRoaW5raW5nIGFib3V0IGhvdyBlYWNoIGRlcGVuZGVuY3kgY29udHJpYnV0ZXMsIGFuZCB3aGVyZSB0aGUgbW9zdCBjb21wbGV4IGludGVyYWN0aW9ucyBsaWUuIFRoaXMgZmlyc3Qgc3RlcCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwuIFdpdGhvdXQgdGhpcyBkZXRhaWxlZCB2aWV3LCBhbnkgZnVydGhlciBhbmFseXNpcyB3aWxsIGJlIGhhcGhhemFyZCBhbmQgbGlrZWx5IGxlYWQgdG8gZXJyb3JzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIG9mIGEgc291bmQgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIwNzpcdGNvbmZpZyBTQ1NJX05TUDMyXG4xMjA4Olx0XHR0cmlzdGF0ZSBcJiMzNDtXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBzdXBwb3J0XCYjMzQ7XG4xMjA5Olx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgU0NTSSBcdTAwMjZcdTAwMjYgITY0QklUIFx1MDAyNlx1MDAyNiBIQVNfSU9QT1JUXG4xMjEwOlx0XHRoZWxwXG4xMjExOlx0XHQgIFRoaXMgaXMgc3VwcG9ydCBmb3IgdGhlIFdvcmtiaXQgTmluamFTQ1NJLTMyQmkvVURFIFBDSS9DYXJkYnVzXG4xMjEyOlx0XHQgIFNDU0kgaG9zdCBhZGFwdGVyLiBQbGVhc2UgcmVhZCB0aGUgU0NTSS1IT1dUTywgYXZhaWxhYmxlIGZyb21cbjEyMTM6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cdTAwM2UuXG4xMjE0Olx0XG4xMjE1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuMTIxNjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbnNwMzIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgU3l6a2FsbGVyJiMzOTtzIEFyY2hpdGVjdHVyYWwgTGFuZHNjYXBlKioKCk9rYXksIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG1pbmQgaXMgdGhhdCB0aGlzIHdob2xlIGxpbmUgb2YgdGhpbmtpbmcgaXMgZGVwZW5kZW50IG9uIHdoZXRoZXIgb3Igbm90IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSA2NC1iaXQgYXJjaGl0ZWN0dXJlLCB3aGljaCBTeXprYWxsZXIsIGluIGl0cyB0eXBpY2FsIGNvbmZpZ3VyYXRpb25zICh4ODZfNjQgYW5kIGFybTY0KSwgdGVuZHMgdG8gYmUuIElmIHRoaXMgY29kZSBwYXRoIGlzIGNvbmRpdGlvbmVkIG9uIGAhNjRCSVRgLCB0aGVuIHRoZSBwcmFjdGljYWxpdHkgb2YgdGVzdGluZyBgU0NTSV9OU1AzMmAgYmVjb21lcyBxdWVzdGlvbmFibGUgaW4gb3VyIHVzdWFsIFN5emthbGxlciBlbnZpcm9ubWVudC4gSXQgbWlnaHQgbm90IGV2ZW4gKmJlKiB0ZXN0YWJsZSwgYnV0IHRoYXQgZG9lc24mIzM5O3QgbmVjZXNzYXJpbHkgbWVhbiB3ZSBzaG91bGQgZXhjbHVkZSBpdCBmcm9tIGEgbGlzdCwgcmlnaHQ/IFdlIGNhbiBjZXJ0YWlubHkgKmxpc3QqIGl0LiBXZSBzaG91bGQgZGVmaW5pdGVseSBsaXN0IGl0LgoKTm93LCBzaGlmdGluZyBnZWFycy4uLmxldCYjMzk7cyBnbyBhaGVhZCBhbmQgZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJPQVJEX1RQQ0kyMDBgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBpbXBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaXBhY2svY2FycmllcnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBCT0FSRF9UUENJMjAwXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVEVXUyBUUENJLTIwMCBJbmR1c3RyeVBhY2sgY2FycmllciBib2FyZFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJUEFDS19CVVNcbiAgIDU6XHRcdGRlcGVuZHMgb24gUENJXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFRFV1MgVFBDSTIwMCBJbmR1c3RyeVBhY2sgY2FycmllciBib2FyZC5cbiAgIDg6XHRcdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjIxMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgY29udGluZ2VudCBvbiBgSVBBQ0tfQlVTYC4gVGhhdCYjMzk7cyB0aGUga2V5IHZhcmlhYmxlLCB0aGUgbGluY2hwaW4uIE15IGluaXRpYWwgdGhvdWdodCBpczogd2hhdCAqcHJlY2lzZWx5KiBhYm91dCBgSVBBQ0tfQlVTYD8gSXMgaXQgdGhlIHZhbHVlLCB0aGUgc3RhdGUsIHRoZSBhdmFpbGFiaWxpdHksIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgcHJvdG9jb2wgYmVpbmcgdXNlZCBvbiBpdCwgdGhlIGRhdGEgdHJhbnNtaXR0ZWQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZGVwZW5kZW5jeSBpcyBzdGF0ZWQsIGJ1dCB0aGUgbmF0dXJlIG9mIHRoZSBkZXBlbmRlbmN5IGlzbiYjMzk7dC4KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBjb3VsZCBtZWFuIGEgbXVsdGl0dWRlIG9mIHRoaW5ncy4gV2UgbmVlZCB0byBkcmlsbCBkb3duLiBJcyB0aGlzIGFuIGlucHV0IHRvIGEgc3BlY2lmaWMgY2FsY3VsYXRpb24/IEEgY29uZGl0aW9uIGZvciB0cmlnZ2VyaW5nIGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBtb2R1bGU/IElzIHRoZSBzeXN0ZW0gc3RhdGUgZGVmaW5lZD8gSXMgdGhlcmUgYW4gaW1wbGllZCBjb25zdHJhaW50IGluIHRoZSBkZXNpZ24/IElzIGBJUEFDS19CVVNgIGJlaW5nIHRyZWF0ZWQgYXMgYSBibGFja2JveCBoZXJlLCBvciBjYW4gaXRzIGlubmVyIHdvcmtpbmdzIGJlIGRlZmluZWQ/IFdpdGhvdXQgZnVydGhlciBjb250ZXh0LCB0aGUgbWVhbmluZyBpcyBlc3NlbnRpYWxseSBvcGFxdWUuIFdoYXQgaXMgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgc3Vycm91bmRpbmcgY29udGV4dD8gV2l0aG91dCBtb3JlIGluZm9ybWF0aW9uLCBJJiMzOTttIGxlZnQgZ3Vlc3NpbmcuIEkgbmVlZCBtb3JlIGRhdGEgdG8gbWVhbmluZ2Z1bGx5IGludGVycHJldCB0aGUgJiMzOTtkZXBlbmRlbmN5JiMzOTsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUEFDS19CVVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lwYWNrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pcGFjay9LY29uZmlnLTUtXG5kcml2ZXJzL2lwYWNrL0tjb25maWc6NjptZW51Y29uZmlnIElQQUNLX0JVU1xuZHJpdmVycy9pcGFjay9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtJbmR1c3RyeVBhY2sgYnVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqQ29uc2lkZXJpbmcgQnVzIEFyY2hpdGVjdHVyZXMqKgoKUmlnaHQsIHNvIEkgc2VlIHdlIGFic29sdXRlbHkgbmVlZCB0byBpbmNvcnBvcmF0ZSBgSVBBQ0tfQlVTYCBpbnRvIHRoZSBkZXNpZ24uIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudC4gTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gb3RoZXIgY29tbW9uIGFyY2hpdGVjdHVyZXMuIFdlIHNob3VsZCByZXZpc2l0IHRoZSBzcGVjaWZpY3Mgb2YgYEFHUF9BTURgIGFuZCBgQUdQX1ZJQWAuIEFyZSB0aGVyZSBhbnkgcGVyZm9ybWFuY2UgYmVuZWZpdHM/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGV5IG1pZ2h0IGluZmx1ZW5jZSB0aGUgZW5kIHByb2R1Y3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jaGFyL2FncC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MjpcdGNvbmZpZyBBR1BfQU1EXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0IHN1cHBvcnRcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gQUdQIFx1MDAyNlx1MDAyNiBYODZfMzJcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZlxuICA1NzpcdFx0ICBYIG9uIEFNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXRzLlxuICA1ODpcdFxuICA1OTpcdGNvbmZpZyBBR1BfQU1ENjRcbiAgNjA6XHRcdHRyaXN0YXRlIFwmIzM0O0FNRCBPcHRlcm9uL0F0aGxvbjY0IG9uLUNQVSBHQVJUIHN1cHBvcnRcJiMzNDtcbiAgNjE6XHRcdGRlcGVuZHMgb24gQUdQIFx1MDAyNlx1MDAyNiBYODYgXHUwMDI2XHUwMDI2IEFNRF9OQlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkwNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQXNzZXNzbWVudCBvZiBBR1AgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBgQUdQX0FNRGAgaXMgZXhwbGljaXRseSByZWxpYW50IG9uIHRoZSBgWDg2XzMyYCBhcmNoaXRlY3R1cmUuIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgc2lnbmFsLiBHaXZlbiB0aGF0IGRlcGVuZGVuY3ksIGl0JiMzOTtzIGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCB3ZSAqd29uJiMzOTt0KiBuZWVkIHRvIGJvdGhlciB3aXRoIHRlc3RpbmcgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZSBvbiBhIDY0LWJpdCBzeXN0ZW0uIFRoZSBkZXBlbmRlbmN5IHdpbGwgYmxvY2sgaXQuIFdlIGNhbiBzYWZlbHkgc2tpcCB0aGUgNjQtYml0IHRlc3RpbmcgaW4gdGhhdCBjYXNlLgoKSG1tLCBub3csIHdoYXQgYWJvdXQgYEFHUF9WSUFgPyBJcyBpdCB0aGUgc2FtZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEFHUF9WSUFgIGJlZm9yZSBtYWtpbmcgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jaGFyL2FncC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDU6XHRjb25maWcgQUdQX1ZJQVxuIDEwNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VklBIGNoaXBzZXQgc3VwcG9ydFwmIzM0O1xuIDEwNzpcdFx0ZGVwZW5kcyBvbiBBR1AgXHUwMDI2XHUwMDI2IFg4NlxuIDEwODpcdFx0aGVscFxuIDEwOTpcdFx0ICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mXG4gMTEwOlx0XHQgIFggb24gVklBIE1WUDMvQXBvbGxvIFBybyBjaGlwc2V0cy5cbiAxMTE6XHRcbiAxMTI6XHRjb25maWcgQUdQX1BBUklTQ1xuIDExMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SFAgUXVpY2tzaWx2ZXIgQUdQIHN1cHBvcnRcJiMzNDtcbiAxMTQ6XHRcdGRlcGVuZHMgb24gQUdQIFx1MDAyNlx1MDAyNiBQQVJJU0MgXHUwMDI2XHUwMDI2IDY0QklUIFx1MDAyNlx1MDAyNiBJT01NVV9TQkFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biB0aGlua2luZyBwcm9jZXNzOgoKKipEZXBlbmRlbmNpZXMgYW5kIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0gaXMgdGhhdCBgQUdQX1ZJQWAgKmFic29sdXRlbHkqIGhpbmdlcyBvbiBgQUdQYCAqYW5kKiBgWDg2YC4gVGhhdCYjMzk7cyBub24tbmVnb3RpYWJsZS4gU28sIGZpcnN0IGFuZCBmb3JlbW9zdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQUdQYCBpcyBjb25maWd1cmVkIGFuZCBhdmFpbGFibGUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlIGhlcmUuCgpOb3csIEkmIzM5O20gc2hpZnRpbmcgZ2VhcnMuLi4gd2hhdCBhYm91dCBgQVRBX0dFTkVSSUNgPyBEb2VzIHRoaXMgaW50ZXJmYWNlIHBsYXkgaW50byBgQUdQX1ZJQWAgYXQgYWxsPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBpbnRlcmNvbm5lY3RlZCBwaWVjZXMgb2YgdGhlIHB1enpsZSBiZWZvcmUgcHJvY2VlZGluZy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgZml0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2F0YS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE3MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTczOlx0Y29uZmlnIEFUQV9HRU5FUklDXG4xMTc0Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIEFUQSBzdXBwb3J0XCYjMzQ7XG4xMTc1Olx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgQVRBX0JNRE1BXG4xMTc2Olx0XHRzZWxlY3QgU0FUQV9IT1NUXG4xMTc3Olx0XHRoZWxwXG4xMTc4Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgZ2VuZXJpYyBCSU9TIGNvbmZpZ3VyZWRcbjExNzk6XHRcdCAgQVRBIGNvbnRyb2xsZXJzIHZpYSB0aGUgbmV3IEFUQSBsYXllclxuMTE4MDpcdFxuMTE4MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMTE4MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY2MgoJCQkJCQkJb3V0cHV0OiAzNDIKCQkJCQkJCXRob3VnaHRzOiAxMDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUENJIENvcmUgYW5kIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaGluZ2VzIG9uIGBBVEFfQk1ETUFgLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIEZpcnN0LCBsZXQmIzM5O3MgbGlzdCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlOiBgQVRBX0dFTkVSSUNgLCBgQUdQX1ZJQWAsIGBCT0FSRF9UUENJMjAwYCwgYElQQUNLX0JVU2AsIGBNTFhTV19QQ0lgLCBhbmQgYEFHUGAuIE9oLCBhbmQgSSBzaG91bGQgbm90ZSBgU0NTSV9OU1AzMmAgYW5kIGBBR1BfQU1EYCB3aGljaCBhcmUgMzItYml0IHNwZWNpZmljLCBidXQgc3RpbGwgcmVsZXZhbnQuCgpOb3csIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgY2hhbmdlcyB0byBQQ0kgZGV2aWNlIG1hdGNoaW5nIGFuZCBwcm9iaW5nLiBJIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgc3ltYm9sczogYGRvX3BjaV9hZGRfZHluaWRgLCBgbmV3X2lkX3N0b3JlYCwgYHBjaV9tYXRjaF9kZXZpY2VgLCBgcGNpX21hdGNoX2lkYCwgYF9fcGNpX2RldmljZV9wcm9iZWAsIGBhdGFfZ2VuZXJpY19pbml0X29uZWAsIGBhZ3BfYW1kazdfcHJvYmVgLCBgYWdwX3ZpYV9wcm9iZWAsIGB0cGNpMjAwX3BjaV9wcm9iZWAsIGBtbHhzd19wY2lfcHJvYmVgLCBhbmQgYG5zcDMyX3Byb2JlYC4KCldhaXQgYSBtaW51dGUsIGBwY2lfbWF0Y2hfb25lX2lkYCBpcyBhY3R1YWxseSBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gYGluY2x1ZGUvbGludXgvcGNpLmhgLiBJdCB3b24mIzM5O3QgYmUgYSBzeW1ib2wgaW4gdGhlIGtlcm5lbCBpbWFnZSBkaXJlY3RseSwgYnV0IGl0JiMzOTtzIHVzZWQgd2l0aGluIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBkb19wY2lfbWF0Y2hfaWRgLCBgbWF0Y2hfcGNpX2Rldl9ieV9pZGAsIGBkb19wY2lfYWRkX2R5bmlkYCwgYW5kIGBwY2lfbWF0Y2hfZGV2aWNlYC4gU28gSSYjMzk7bGwgbGlzdCBgZG9fcGNpX21hdGNoX2lkYCBpbnN0ZWFkLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rpb25zIEkgbGlzdGVkIGFyZSBzdGF0aWMuIGBfX3BjaV9kZXZpY2VfcHJvYmVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZmluZSwgYXMgaXMgYG5ld19pZF9zdG9yZWAuIGBkb19wY2lfYWRkX2R5bmlkYCBpcyBhbHNvIHN0YXRpYy4gT2theS4KCkxldCYjMzk7cyBzZWUgaWYgb3RoZXIgZnVuY3Rpb25zIGFyZSB0b3VjaGVkLiBUaGVyZSYjMzk7cyBgbWx4c3dfcGNpX3Jlc2V0YCwgYG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdGAsIGBtbHhzd19wY2lfaW5pdGAsIGBuc3AzMl9zaG93X2luZm9gLCBgbnNwMzJfZ2V0cHJvbV9wYXJhbWAsIGBwY2lfbWF0Y2hfaWRgLCBhbmQgYHBjaV9hZGRfZHluaWRgLiBUaGVzZSBhcmUgYWxsIGltcG9ydGFudCB0b28sIHNvIEkmIzM5O2xsIGFkZCBgcGNpX2FkZF9keW5pZGAgYW5kIGBwY2lfbWF0Y2hfaWRgLgoKTm93LCBsZXQmIzM5O3MgcmVjYXAgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcy4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB0aGUgUENJIGNvcmUgaGFuZGxlcyBkeW5hbWljIGBwY2lfZGV2aWNlX2lkYCBlbnRyaWVzLiBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBwb2ludGVyIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCBJRCB0byB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uLCBpdCYjMzk7cyBwYXNzaW5nIGEgY29weS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpZiB0aGF0IGR5bmFtaWMgSUQgZ2V0cyByZW1vdmVkIHRocm91Z2ggc3lzZnMuIFRoZXJlIGFyZSBhbHNvIGRyaXZlciB1cGRhdGVzIHRvIGZpeCB0aGVtIHNhdmluZyB0aGUgYHBjaV9kZXZpY2VfaWRgIHBvaW50ZXIgYW5kIGluc3RlYWQgc2F2aW5nIHJlbGV2YW50IGZpZWxkcy4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYm90aCB0aGUgUENJIGNvcmUgYW5kIGFmZmVjdGVkIGRyaXZlcnMuIFRoaXMgaXMgYWxsIHJpcGUgZm9yIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYW5kIHByb2JpbmcsIGVzcGVjaWFsbHkgd2l0aCB0aG9zZSBkeW5hbWljIElEcyBjb21pbmcgZnJvbSBzeXNmcy4KCkhlcmUgYXJlIHRoZSBjb25maWdzIGFnYWluLCBub3cgdGhhdCBJJiMzOTt2ZSBmb2N1c2VkIG15IGF0dGVudGlvbjoKYEFUQV9HRU5FUklDYApgQUdQYApgQUdQX0FNRGAKYEFHUF9WSUFgCmBJUEFDS19CVVNgCmBCT0FSRF9UUENJMjAwYApgTUxYU1dfUENJYApgU0NTSV9OU1AzMmAKCkFuZCBoZXJlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb246CmBkb19wY2lfYWRkX2R5bmlkYApgbmV3X2lkX3N0b3JlYApgcGNpX21hdGNoX2RldmljZWAKYGRvX3BjaV9tYXRjaF9pZGAKYF9fcGNpX2RldmljZV9wcm9iZWAKYHBjaV9hZGRfZHluaWRgCmBwY2lfbWF0Y2hfaWRgCmBhdGFfZ2VuZXJpY19pbml0X29uZWAKYGFncF9hbWRrN19wcm9iZWAKYGFncF92aWFfcHJvYmVgCmB0cGNpMjAwX3BjaV9wcm9iZWAKYG1seHN3X3BjaV9wcm9iZWAKYG5zcDMyX3Byb2JlYAoKRmluYWxseSwgYHBjaV9tYXRjaF9vbmVfZGV2aWNlYCBoYXMgYmVlbiByZXBsYWNlZCBieSBgcGNpX21hdGNoX29uZV9pZGAsIHdoaWNoIGlzIGlubGluZS4KClJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIHNldCB0aGUgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVEFfR0VORVJJQyYjMzQ7LAogICAgJiMzNDtBR1AmIzM0OywKICAgICYjMzQ7QUdQX0FNRCYjMzQ7LAogICAgJiMzNDtBR1BfVklBJiMzNDssCiAgICAmIzM0O0lQQUNLX0JVUyYjMzQ7LAogICAgJiMzNDtCT0FSRF9UUENJMjAwJiMzNDssCiAgICAmIzM0O01MWFNXX1BDSSYjMzQ7LAogICAgJiMzNDtTQ1NJX05TUDMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fcGNpX2FkZF9keW5pZCYjMzQ7LAogICAgJiMzNDtuZXdfaWRfc3RvcmUmIzM0OywKICAgICYjMzQ7cGNpX21hdGNoX2RldmljZSYjMzQ7LAogICAgJiMzNDtkb19wY2lfbWF0Y2hfaWQmIzM0OywKICAgICYjMzQ7X19wY2lfZGV2aWNlX3Byb2JlJiMzNDssCiAgICAmIzM0O3BjaV9hZGRfZHluaWQmIzM0OywKICAgICYjMzQ7cGNpX21hdGNoX2lkJiMzNDssCiAgICAmIzM0O2F0YV9nZW5lcmljX2luaXRfb25lJiMzNDssCiAgICAmIzM0O2FncF9hbWRrN19wcm9iZSYjMzQ7LAogICAgJiMzNDthZ3BfdmlhX3Byb2JlJiMzNDssCiAgICAmIzM0O3RwY2kyMDBfcGNpX3Byb2JlJiMzNDssCiAgICAmIzM0O21seHN3X3BjaV9wcm9iZSYjMzQ7LAogICAgJiMzNDtuc3AzMl9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUENJIGNvcmUgdG8gcGFzcyBhIGNvcHkgb2YgdGhlIGR5bmFtaWMgcGNpX2RldmljZV9pZCB0byB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCBkeW5hbWljIElELCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBkeW5hbWljIElEIGlzIHJlbW92ZWQgdmlhIHN5c2ZzLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIHRoYXQgd2VyZSBpbmNvcnJlY3RseSBzYXZpbmcgdGhlIHBjaV9kZXZpY2VfaWQgcG9pbnRlciB0byBpbnN0ZWFkIHNhdmUgdGhlIGRyaXZlcl9kYXRhIG9yIG90aGVyIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBQQ0kgY29yZSBhbmQgZHJpdmVycywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYW5kIHByb2JpbmcsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBkeW5hbWljIElEcyB2aWEgc3lzZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUQV9HRU5FUklDJiMzNDssCiAgICAmIzM0O0FHUCYjMzQ7LAogICAgJiMzNDtBR1BfQU1EJiMzNDssCiAgICAmIzM0O0FHUF9WSUEmIzM0OywKICAgICYjMzQ7SVBBQ0tfQlVTJiMzNDssCiAgICAmIzM0O0JPQVJEX1RQQ0kyMDAmIzM0OywKICAgICYjMzQ7TUxYU1dfUENJJiMzNDssCiAgICAmIzM0O1NDU0lfTlNQMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19wY2lfYWRkX2R5bmlkJiMzNDssCiAgICAmIzM0O25ld19pZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfZGV2aWNlJiMzNDssCiAgICAmIzM0O2RvX3BjaV9tYXRjaF9pZCYjMzQ7LAogICAgJiMzNDtfX3BjaV9kZXZpY2VfcHJvYmUmIzM0OywKICAgICYjMzQ7cGNpX2FkZF9keW5pZCYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfaWQmIzM0OywKICAgICYjMzQ7YXRhX2dlbmVyaWNfaW5pdF9vbmUmIzM0OywKICAgICYjMzQ7YWdwX2FtZGs3X3Byb2JlJiMzNDssCiAgICAmIzM0O2FncF92aWFfcHJvYmUmIzM0OywKICAgICYjMzQ7dHBjaTIwMF9wY2lfcHJvYmUmIzM0OywKICAgICYjMzQ7bWx4c3dfcGNpX3Byb2JlJiMzNDssCiAgICAmIzM0O25zcDMyX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgY29yZSB0byBwYXNzIGEgY29weSBvZiB0aGUgZHluYW1pYyBwY2lfZGV2aWNlX2lkIHRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gdGhlIGhlYXAtYWxsb2NhdGVkIGR5bmFtaWMgSUQsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGR5bmFtaWMgSUQgaXMgcmVtb3ZlZCB2aWEgc3lzZnMuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHNhdmluZyB0aGUgcGNpX2RldmljZV9pZCBwb2ludGVyIHRvIGluc3RlYWQgc2F2ZSB0aGUgZHJpdmVyX2RhdGEgb3Igb3RoZXIgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFBDSSBjb3JlIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gUENJIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGR5bmFtaWMgSURzIHZpYSBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ0OjQzLjYxNDIxODE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE5MjUwNjE3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRBX0dFTkVSSUNcIixcbiAgICBcIkFHUFwiLFxuICAgIFwiQUdQX0FNRFwiLFxuICAgIFwiQUdQX1ZJQVwiLFxuICAgIFwiSVBBQ0tfQlVTXCIsXG4gICAgXCJCT0FSRF9UUENJMjAwXCIsXG4gICAgXCJNTFhTV19QQ0lcIixcbiAgICBcIlNDU0lfTlNQMzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19wY2lfYWRkX2R5bmlkXCIsXG4gICAgXCJuZXdfaWRfc3RvcmVcIixcbiAgICBcInBjaV9tYXRjaF9kZXZpY2VcIixcbiAgICBcImRvX3BjaV9tYXRjaF9pZFwiLFxuICAgIFwiX19wY2lfZGV2aWNlX3Byb2JlXCIsXG4gICAgXCJwY2lfYWRkX2R5bmlkXCIsXG4gICAgXCJwY2lfbWF0Y2hfaWRcIixcbiAgICBcImF0YV9nZW5lcmljX2luaXRfb25lXCIsXG4gICAgXCJhZ3BfYW1kazdfcHJvYmVcIixcbiAgICBcImFncF92aWFfcHJvYmVcIixcbiAgICBcInRwY2kyMDBfcGNpX3Byb2JlXCIsXG4gICAgXCJtbHhzd19wY2lfcHJvYmVcIixcbiAgICBcIm5zcDMyX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBDSSBjb3JlIHRvIHBhc3MgYSBjb3B5IG9mIHRoZSBkeW5hbWljIHBjaV9kZXZpY2VfaWQgdG8gdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCBkeW5hbWljIElELCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBkeW5hbWljIElEIGlzIHJlbW92ZWQgdmlhIHN5c2ZzLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIHRoYXQgd2VyZSBpbmNvcnJlY3RseSBzYXZpbmcgdGhlIHBjaV9kZXZpY2VfaWQgcG9pbnRlciB0byBpbnN0ZWFkIHNhdmUgdGhlIGRyaXZlcl9kYXRhIG9yIG90aGVyIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBQQ0kgY29yZSBhbmQgZHJpdmVycywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYW5kIHByb2JpbmcsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBkeW5hbWljIElEcyB2aWEgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ0OjQzLjYxNDIyMzYzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1MzQ0OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNThiZTU4MTlmZmZkZDVmM2MxMWRkMWEyNmFhNTJkY2E1MGUwMjQwOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDIwOjQ0OjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jXFxuaW5kZXggZTcwYjZjMDg5Y2YxNzkuLjE4ZWE3NDBjYTU4MjkzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmNcXG4rKysgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jXFxuQEAgLTUxLDExICs1MSwxMSBAQCBlbnVtIHtcXG4gc3RhdGljIGludCBnZW5lcmljX3NldF9tb2RlKHN0cnVjdCBhdGFfbGluayAqbGluaywgc3RydWN0IGF0YV9kZXZpY2UgKip1bnVzZWQpXFxuIHtcXG4gXFx0c3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstXFx1MDAzZWFwO1xcbi1cXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQgPSBhcC1cXHUwMDNlaG9zdC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXHR1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpYXAtXFx1MDAzZWhvc3QtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFx0aW50IGRtYV9lbmFibGVkID0gMDtcXG4gXFx0c3RydWN0IGF0YV9kZXZpY2UgKmRldjtcXG4gXFxuLVxcdGlmIChpZC1cXHUwMDNlZHJpdmVyX2RhdGEgXFx1MDAyNiBBVEFfR0VOX0ZPUkNFX0RNQSkge1xcbitcXHRpZiAoZHJpdmVyX2RhdGEgXFx1MDAyNiBBVEFfR0VOX0ZPUkNFX0RNQSkge1xcbiBcXHRcXHRkbWFfZW5hYmxlZCA9IDB4ZmY7XFxuIFxcdH0gZWxzZSBpZiAoYXAtXFx1MDAzZWlvYWRkci5ibWRtYV9hZGRyKSB7XFxuIFxcdFxcdC8qIEJpdHMgNSBhbmQgNiBpbmRpY2F0ZSBpZiBETUEgaXMgYWN0aXZlIG9uIG1hc3Rlci9zbGF2ZSAqL1xcbkBAIC0yMDYsNyArMjA2LDcgQEAgc3RhdGljIGludCBhdGFfZ2VuZXJpY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZFxcbiBcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdFxcdHBjaW1fcGluX2RldmljZShkZXYpO1xcbiBcXHR9XFxuLVxcdHJldHVybiBhdGFfcGNpX2JtZG1hX2luaXRfb25lKGRldiwgcHBpLCBcXHUwMDI2Z2VuZXJpY19zaHQsICh2b2lkICopaWQsIDApO1xcbitcXHRyZXR1cm4gYXRhX3BjaV9ibWRtYV9pbml0X29uZShkZXYsIHBwaSwgXFx1MDAyNmdlbmVyaWNfc2h0LCAodm9pZCAqKWlkLVxcdTAwM2Vkcml2ZXJfZGF0YSwgMCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGFfZ2VuZXJpY1tdID0ge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jXFxuaW5kZXggODk4ZmYzMGZmZDQ2YjIuLjRkMjAxZTcxYzUxNzcyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jXFxuKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmNcXG5AQCAtMzg3LDM3ICszODcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbWRfaXJvbmdhdGVfZHJpdmVyID0ge1xcbiBcXHQuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlLFxcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBhZ3BfZGV2aWNlX2lkcyBhbWRfYWdwX2RldmljZV9pZHNbXSA9XFxuLXtcXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMDYsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJJcm9uZ2F0ZVxcXCIsXFxuLVxcdH0sXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDBFLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiNzYxXFxcIixcXG4tXFx0fSxcXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEMsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCI3NjBNUFxcXCIsXFxuLVxcdH0sXFxuLVxcdHsgfSwgLyogZHVtbXkgZmluYWwgZW50cnksIGFsd2F5cyBwcmVzZW50ICovXFxuLX07XFxuLVxcbiBzdGF0aWMgaW50IGFncF9hbWRrN19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4ge1xcbiBcXHRzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7XFxuIFxcdHU4IGNhcF9wdHI7XFxuLVxcdGludCBqO1xcbiBcXG4gXFx0Y2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApO1xcbiBcXHRpZiAoIWNhcF9wdHIpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0aiA9IGVudCAtIGFncF9hbWRrN19wY2lfdGFibGU7XFxuLVxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJBTUQgJXMgY2hpcHNldFxcXFxuXFxcIixcXG4tXFx0XFx0IGFtZF9hZ3BfZGV2aWNlX2lkc1tqXS5jaGlwc2V0X25hbWUpO1xcbitcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQU1EICVzIGNoaXBzZXRcXFxcblxcXCIsIChjb25zdCBjaGFyICopZW50LVxcdTAwM2Vkcml2ZXJfZGF0YSk7XFxuIFxcbiBcXHRicmlkZ2UgPSBhZ3BfYWxsb2NfYnJpZGdlKCk7XFxuIFxcdGlmICghYnJpZGdlKVxcbkBAIC00OTIsNyArNDcyLDYgQEAgc3RhdGljIGludCBhZ3BfYW1kazdfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIGFtZF9pcm9uZ2F0ZV9kcml2ZXIuY29uZmlndXJlKCk7XFxuIH1cXG4gXFxuLS8qIG11c3QgYmUgdGhlIHNhbWUgb3JkZXIgYXMgbmFtZSB0YWJsZSBhYm92ZSAqL1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xcbiBcXHR7XFxuIFxcdC5jbGFzc1xcdFxcdD0gKFBDSV9DTEFTU19CUklER0VfSE9TVCBcXHUwMDNjXFx1MDAzYyA4KSxcXG5AQCAtNTAxLDYgKzQ4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfYW1kazdfcGNpX3RhYmxlW10gPSB7XFxuIFxcdC5kZXZpY2VcXHRcXHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwNixcXG4gXFx0LnN1YnZlbmRvclxcdD0gUENJX0FOWV9JRCxcXG4gXFx0LnN1YmRldmljZVxcdD0gUENJX0FOWV9JRCxcXG4rXFx0LmRyaXZlcl9kYXRhXFx0PSAoa2VybmVsX3Vsb25nX3QpXFxcIklyb25nYXRlXFxcIixcXG4gXFx0fSxcXG4gXFx0e1xcbiBcXHQuY2xhc3NcXHRcXHQ9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgXFx1MDAzY1xcdTAwM2MgOCksXFxuQEAgLTUwOSw2ICs0ODksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xcbiBcXHQuZGV2aWNlXFx0XFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEUsXFxuIFxcdC5zdWJ2ZW5kb3JcXHQ9IFBDSV9BTllfSUQsXFxuIFxcdC5zdWJkZXZpY2VcXHQ9IFBDSV9BTllfSUQsXFxuK1xcdC5kcml2ZXJfZGF0YVxcdD0gKGtlcm5lbF91bG9uZ190KVxcXCI3NjFcXFwiLFxcbiBcXHR9LFxcbiBcXHR7XFxuIFxcdC5jbGFzc1xcdFxcdD0gKFBDSV9DTEFTU19CUklER0VfSE9TVCBcXHUwMDNjXFx1MDAzYyA4KSxcXG5AQCAtNTE3LDYgKzQ5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfYW1kazdfcGNpX3RhYmxlW10gPSB7XFxuIFxcdC5kZXZpY2VcXHRcXHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQyxcXG4gXFx0LnN1YnZlbmRvclxcdD0gUENJX0FOWV9JRCxcXG4gXFx0LnN1YmRldmljZVxcdD0gUENJX0FOWV9JRCxcXG4rXFx0LmRyaXZlcl9kYXRhXFx0PSAoa2VybmVsX3Vsb25nX3QpXFxcIjc2ME1QXFxcIixcXG4gXFx0fSxcXG4gXFx0eyB9XFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmNcXG5pbmRleCA4YjE5YTVkMWEwOWI0OS4uYWIzYjczZGQwODBhZmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmNcXG4rKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuY1xcbkBAIC0yMjEsMjA0ICsyMjEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIHZpYV9kcml2ZXIgPSB7XFxuIFxcdC5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IGFncF9kZXZpY2VfaWRzIHZpYV9hZ3BfZGV2aWNlX2lkc1tdID1cXG4te1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5N18wLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiQXBvbGxvIFZQM1xcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8wLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiQXBvbGxvIE1WUDNcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJBcG9sbG8gTVZQNFxcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHQvKiBWVDg2MDEgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJBcG9sbG8gUHJvTWVkaWEvUExFMTMzVGFcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0LyogVlQ4MkM2OTNBIC8gVlQyOEM2OTRUICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJBcG9sbG8gUHJvIDEzM1xcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIktYMTMzXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFZUODYzMyAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg2MzNfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlBybyAyNjZcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV9YTjI2NixcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIkFwb2xsbyBQcm8yNjZcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0LyogVlQ4MzYxICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2MSxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIktMRTEzM1xcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHQvKiBWVDgzNjUgLyBWVDgzNjIgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJUd2lzdGVyLUsvS1QxMzN4L0tNMTMzXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFZUODc1M0EgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NzUzXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJQNFgyNjZcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0LyogVlQ4MzY2ICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2N18wLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiS1QyNjYvS1kyNjZ4L0tUMzMzXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFZUODYzMyAoZm9yIEN1TWluZS8gQ2VsZXJvbikgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJQcm8yNjZUXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIEtNMjY2IC8gUE0yNjYgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2NixcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlBNMjY2L0tNMjY2XFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIENMRTI2NiAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg2MlhfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIkNMRTI2NlxcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIktUNDAwL0tUNDAwQS9LVDYwMFxcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHQvKiBWVDg2MDQgLyBWVDg2MDUgLyBWVDg2MDNcXG4tXFx0ICogKEFwb2xsbyBQcm8xMzNBIGNoaXBzZXQgd2l0aCBTMyBTYXZhZ2U0KSAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlByb1NhdmFnZSBQTTEzMy9QTDEzMy9QTjEzM1xcXCJcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFA0TTI2NngvUDROMjY2ICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODcwM181MV8wLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiUDRNMjY2eC9QNE4yNjZcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0LyogVlQ4NzU0ICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODc1NENfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlBUODAwXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFA0WDYwMCAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3NjNfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlA0WDYwMFxcXCJcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIEtNNDAwICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODM3OF8wLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiS000MDAvS000MDBBXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFBUODgwICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfUFQ4ODAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJQVDg4MFxcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHQvKiBQVDg4MCBVbHRyYSAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BUODgwVUxUUkEsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJQVDg4MCBVbHRyYVxcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHQvKiBQVDg5MCAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlBUODkwXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFBNODAwL1BOODAwL1BNODgwL1BOODgwICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlBNODAwL1BOODAwL1BNODgwL1BOODgwXFxcIixcXG4tXFx0fSxcXG4tXFx0LyogS1Q4ODAgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJLVDg4MFxcXCIsXFxuLVxcdH0sXFxuLVxcdC8qIEtUeHh4L1B4OHh4ICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODNfODdYWF8xLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiVlQ4M3h4L1ZUODd4eC9LVHh4eC9QeDh4eFxcXCIsXFxuLVxcdH0sXFxuLVxcdC8qIFA0TTgwMCAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlA0TTgwMFxcXCIsXFxuLVxcdH0sXFxuLVxcdC8qIFA0TTgwMENFICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJWVDMzMTRcXFwiLFxcbi1cXHR9LFxcbi1cXHQvKiBWVDMzMjQgLyBDWDcwMCAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0LFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lICAgPSBcXFwiQ1g3MDBcXFwiLFxcbi1cXHR9LFxcbi1cXHQvKiBWVDMzMzYgLSB0aGlzIGlzIGEgY2hpcHNldCBmb3IgQU1EIEF0aGxvbi9LOCBDUFUuIER1ZSB0byBLOCdzIHVuaXF1ZVxcbi1cXHQgKiBhcmNoaXRlY3R1cmUsIHRoZSBBR1AgcmVzb3VyY2UgYW5kIGJlaGF2aW9yIGFyZSBkaWZmZXJlbnQgZnJvbVxcbi1cXHQgKiB0aGUgdHJhZGl0aW9uYWwgQUdQIHdoaWNoIHJlc2lkZXMgb25seSBpbiBjaGlwc2V0LiBBR1AgaXMgdXNlZFxcbi1cXHQgKiBieSAzRCBkcml2ZXIgd2hpY2ggd2Fzbid0IGF2YWlsYWJsZSBmb3IgdGhlIFZUMzMzNiBhbmQgVlQzMzY0XFxuLVxcdCAqIGdlbmVyYXRpb24gdW50aWwgbm93LiAgVW5mb3J0dW5hdGVseSwgYnkgdGVzdGluZywgVlQzMzY0IHdvcmtzXFxuLVxcdCAqIGJ1dCBWVDMzMzYgZG9lc24ndC4gLSBleHBsYW5hdGlvbiBmcm9tIHZpYSwganVzdCBsZWF2ZSB0aGlzIGFzXFxuLVxcdCAqIGFzIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uXFxuLVxcdCAqL1xcbi0jaWYgMFxcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lICAgPSBcXFwiVlQzMzM2XFxcIixcXG4tXFx0fSxcXG4tI2VuZGlmXFxuLVxcdC8qIFA0TTg5MCAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfUDRNODkwLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lICAgPSBcXFwiUDRNODkwXFxcIixcXG4tXFx0fSxcXG4tXFx0LyogUDRNOTAwICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZCAgPSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzNjQsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWUgICA9IFxcXCJQNE05MDBcXFwiLFxcbi1cXHR9LFxcbi1cXHR7IH0sIC8qIGR1bW15IGZpbmFsIGVudHJ5LCBhbHdheXMgcHJlc2VudCAqL1xcbi19O1xcbi1cXG4gXFxuIC8qXFxuICAqIFZJQSdzIEFHUDMgY2hpcHNldHMgZG8gbWFnaWNrIHRvIHB1dCB0aGUgQUdQIGJyaWRnZSBjb21wbGlhbnRcXG5AQCAtNDM3LDE3ICsyMzksMTQgQEAgc3RhdGljIHZvaWQgY2hlY2tfdmlhX2FncDMgKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSlcXG4gXFxuIHN0YXRpYyBpbnQgYWdwX3ZpYV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4ge1xcbi1cXHRzdHJ1Y3QgYWdwX2RldmljZV9pZHMgKmRldnMgPSB2aWFfYWdwX2RldmljZV9pZHM7XFxuIFxcdHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZTtcXG4tXFx0aW50IGogPSAwO1xcbiBcXHR1OCBjYXBfcHRyO1xcbiBcXG4gXFx0Y2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApO1xcbiBcXHRpZiAoIWNhcF9wdHIpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0aiA9IGVudCAtIGFncF92aWFfcGNpX3RhYmxlO1xcbi1cXHRwcmludGsgKEtFUk5fSU5GTyBQRlggXFxcIkRldGVjdGVkIFZJQSAlcyBjaGlwc2V0XFxcXG5cXFwiLCBkZXZzW2pdLmNoaXBzZXRfbmFtZSk7XFxuK1xcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJEZXRlY3RlZCBWSUEgJXMgY2hpcHNldFxcXFxuXFxcIiwgKGNvbnN0IGNoYXIgKillbnQtXFx1MDAzZWRyaXZlcl9kYXRhKTtcXG4gXFxuIFxcdGJyaWRnZSA9IGFncF9hbGxvY19icmlkZ2UoKTtcXG4gXFx0aWYgKCFicmlkZ2UpXFxuQEAgLTUwMSw5ICszMDAsOCBAQCBzdGF0aWMgaW50IGFncF92aWFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLS8qIG11c3QgYmUgdGhlIHNhbWUgb3JkZXIgYXMgbmFtZSB0YWJsZSBhYm92ZSAqL1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX3ZpYV9wY2lfdGFibGVbXSA9IHtcXG4tI2RlZmluZSBJRCh4KSBcXFxcXFxuKyNkZWZpbmUgSUQoeCwgbmFtZSkgXFxcXFxcbiBcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQuY2xhc3NcXHRcXHQ9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgXFx1MDAzY1xcdTAwM2MgOCksXFx0XFxcXFxcbiBcXHQuY2xhc3NfbWFza1xcdD0gfjAsXFx0XFx0XFx0XFx0XFxcXFxcbkBAIC01MTEsMzkgKzMwOSw3NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX3ZpYV9wY2lfdGFibGVbXSA9IHtcXG4gXFx0LmRldmljZVxcdFxcdD0geCxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC5zdWJ2ZW5kb3JcXHQ9IFBDSV9BTllfSUQsXFx0XFx0XFx0XFxcXFxcbiBcXHQuc3ViZGV2aWNlXFx0PSBQQ0lfQU5ZX0lELFxcdFxcdFxcdFxcXFxcXG4rXFx0LmRyaXZlcl9kYXRhXFx0PSAoa2VybmVsX3Vsb25nX3QpbmFtZSxcXHRcXHRcXFxcXFxuIFxcdH1cXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OThfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDFfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzY5MV8wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3MV8wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYzM18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfWE4yNjYpLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYxKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM2M18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc1M18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM2N18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODY1M18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfWE0yNjYpLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc3XzApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjA1XzApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzAzXzUxXzApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzU0Q18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc2M18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3OF8wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MFVMVFJBKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc4M18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzMyNjlfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0KSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODkwKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0KSxcXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzAsIFxcXCJBcG9sbG8gVlAzXFxcIiksXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8wLCBcXFwiQXBvbGxvIE1WUDNcXFwiKSxcXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODUwMV8wLCBcXFwiQXBvbGxvIE1WUDRcXFwiKSxcXG4rXFx0LyogVlQ4NjAxICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDFfMCwgXFxcIkFwb2xsbyBQcm9NZWRpYS9QTEUxMzNUYVxcXCIpLFxcbitcXHQvKiBWVDgyQzY5M0EgLyBWVDI4QzY5NFQgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAsIFxcXCJBcG9sbG8gUHJvIDEzM1xcXCIpLFxcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzAsIFxcXCJLWDEzM1xcXCIpLFxcbitcXHQvKiBWVDg2MzMgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYzM18wLCBcXFwiUHJvIDI2NlxcXCIpLFxcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9YTjI2NiwgXFxcIkFwb2xsbyBQcm8yNjZcXFwiKSxcXG4rXFx0LyogVlQ4MzYxICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjEsIFxcXCJLTEUxMzNcXFwiKSxcXG4rXFx0LyogVlQ4MzY1IC8gVlQ4MzYyICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjNfMCwgXFxcIlR3aXN0ZXItSy9LVDEzM3gvS00xMzNcXFwiKSxcXG4rXFx0LyogVlQ4NzUzQSAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzUzXzAsIFxcXCJQNFgyNjZcXFwiKSxcXG4rXFx0LyogVlQ4MzY2ICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjdfMCwgXFxcIktUMjY2L0tZMjY2eC9LVDMzM1xcXCIpLFxcbitcXHQvKiBWVDg2MzMgKGZvciBDdU1pbmUvIENlbGVyb24pICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2NTNfMCwgXFxcIlBybzI2NlRcXFwiKSxcXG4rXFx0LyogS00yNjYgLyBQTTI2NiAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2NiwgXFxcIlBNMjY2L0tNMjY2XFxcIiksXFxuK1xcdC8qIENMRTI2NiAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzAsIFxcXCJDTEUyNjZcXFwiKSxcXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3N18wLCBcXFwiS1Q0MDAvS1Q0MDBBL0tUNjAwXFxcIiksXFxuK1xcdC8qIFZUODYwNCAvIFZUODYwNSAvIFZUODYwMyAoQXBvbGxvIFBybzEzM0EgY2hpcHNldCB3aXRoIFMzIFNhdmFnZTQpICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCwgXFxcIlByb1NhdmFnZSBQTTEzMy9QTDEzMy9QTjEzM1xcXCIpLFxcbitcXHQvKiBQNE0yNjZ4L1A0TjI2NiAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzAzXzUxXzAsIFxcXCJQNE0yNjZ4L1A0TjI2NlxcXCIpLFxcbitcXHQvKiBWVDg3NTQgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc1NENfMCwgXFxcIlBUODAwXFxcIiksXFxuK1xcdC8qIFA0WDYwMCAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzYzXzAsIFxcXCJQNFg2MDBcXFwiKSxcXG4rXFx0LyogS000MDAgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3OF8wLCBcXFwiS000MDAvS000MDBBXFxcIiksXFxuK1xcdC8qIFBUODgwICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBX1BUODgwLCBcXFwiUFQ4ODBcXFwiKSxcXG4rXFx0LyogUFQ4ODAgVWx0cmEgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSwgXFxcIlBUODgwIFVsdHJhXFxcIiksXFxuK1xcdC8qIFBUODkwICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCwgXFxcIlBUODkwXFxcIiksXFxuK1xcdC8qIFBNODAwL1BOODAwL1BNODgwL1BOODgwICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAsIFxcXCJQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MFxcXCIpLFxcbitcXHQvKiBLVDg4MCAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzAsIFxcXCJLVDg4MFxcXCIpLFxcbitcXHQvKiBLVHh4eC9QeDh4eCAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84M184N1hYXzEsIFxcXCJWVDgzeHgvVlQ4N3h4L0tUeHh4L1B4OHh4XFxcIiksXFxuK1xcdC8qIFA0TTgwMCAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjk2XzAsIFxcXCJQNE04MDBcXFwiKSxcXG4rXFx0LyogUDRNODAwQ0UgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UsIFxcXCJWVDMzMTRcXFwiKSxcXG4rXFx0LyogVlQzMzI0IC8gQ1g3MDAgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0LCBcXFwiQ1g3MDBcXFwiKSxcXG4rXFx0LyogVlQzMzM2IC0gdGhpcyBpcyBhIGNoaXBzZXQgZm9yIEFNRCBBdGhsb24vSzggQ1BVLiBEdWUgdG8gSzgncyB1bmlxdWVcXG4rXFx0ICogYXJjaGl0ZWN0dXJlLCB0aGUgQUdQIHJlc291cmNlIGFuZCBiZWhhdmlvciBhcmUgZGlmZmVyZW50IGZyb21cXG4rXFx0ICogdGhlIHRyYWRpdGlvbmFsIEFHUCB3aGljaCByZXNpZGVzIG9ubHkgaW4gY2hpcHNldC4gQUdQIGlzIHVzZWRcXG4rXFx0ICogYnkgM0QgZHJpdmVyIHdoaWNoIHdhc24ndCBhdmFpbGFibGUgZm9yIHRoZSBWVDMzMzYgYW5kIFZUMzM2NFxcbitcXHQgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3Jrc1xcbitcXHQgKiBidXQgVlQzMzM2IGRvZXNuJ3QuIC0gZXhwbGFuYXRpb24gZnJvbSB2aWEsIGp1c3QgbGVhdmUgdGhpcyBhc1xcbitcXHQgKiBhIHBsYWNlaG9sZGVyIHRvIGF2b2lkIGZ1dHVyZSBwYXRjaGVzIGFkZGluZyBpdCBiYWNrIGluLlxcbitcXHQgKi9cXG4rI2lmIDBcXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LCBcXFwiVlQzMzM2XFxcIiksXFxuKyNlbmRpZlxcbitcXHQvKiBQNE04OTAgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODkwLCBcXFwiUDRNODkwXFxcIiksXFxuK1xcdC8qIFA0TTkwMCAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzNjQsIFxcXCJQNE05MDBcXFwiKSxcXG4gXFx0eyB9XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuYyBiL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jXFxuaW5kZXggMDVkY2I2Njc1Y2Q2NjEuLjFjZjUxZjc2MzI5MzJiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jXFxuKysrIGIvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmNcXG5AQCAtNTYyLDcgKzU2Miw2IEBAIHN0YXRpYyBpbnQgdHBjaTIwMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcbiBcXHQvKiBTYXZlIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgKi9cXG4gXFx0dHBjaTIwMC1cXHUwMDNlaW5mby1cXHUwMDNlcGRldiA9IHBkZXY7XFxuLVxcdHRwY2kyMDAtXFx1MDAzZWluZm8tXFx1MDAzZWlkX3RhYmxlID0gKHN0cnVjdCBwY2lfZGV2aWNlX2lkICopaWQ7XFxuIFxcbiBcXHQvKiByZWdpc3RlciB0aGUgZGV2aWNlIGFuZCBpbml0aWFsaXplIGl0ICovXFxuIFxcdHJldCA9IHRwY2kyMDBfaW5zdGFsbCh0cGNpMjAwKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmggYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaFxcbmluZGV4IGU3OWFjNjRhYmNmZmFjLi5hMmJmMzEyNTc5NGI3YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaFxcbisrKyBiL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oXFxuQEAgLTE0NSw3ICsxNDUsNiBAQCBzdHJ1Y3QgdHBjaTIwMF9zbG90IHtcXG4gICovXFxuIHN0cnVjdCB0cGNpMjAwX2luZm9zIHtcXG4gXFx0c3RydWN0IHBjaV9kZXZcXHRcXHRcXHQqcGRldjtcXG4tXFx0c3RydWN0IHBjaV9kZXZpY2VfaWRcXHRcXHQqaWRfdGFibGU7XFxuIFxcdHN0cnVjdCB0cGNpMjAwX3JlZ3MgX19pb21lbVxcdCppbnRlcmZhY2VfcmVncztcXG4gXFx0dm9pZCBfX2lvbWVtXFx0XFx0XFx0KmNmZ19yZWdzO1xcbiBcXHRzdHJ1Y3QgaXBhY2tfYnVzX2RldmljZVxcdFxcdCppcGFja19idXM7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmNcXG5pbmRleCAwZGE4NWQzNjY0N2Q5MS4uYmZlMzI2OGRmZGMxN2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuY1xcbkBAIC0xMzAsNyArMTMwLDYgQEAgc3RydWN0IG1seHN3X3BjaSB7XFxuIFxcdFxcdH0gY29tcDtcXG4gXFx0fSBjbWQ7XFxuIFxcdHN0cnVjdCBtbHhzd19idXNfaW5mbyBidXNfaW5mbztcXG4tXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xcbiBcXHRlbnVtIG1seHN3X3BjaV9jcWVfdiBtYXhfY3FlX3ZlcjsgLyogTWF4aW1hbCBzdXBwb3J0ZWQgQ1FFIHZlcnNpb24gKi9cXG4gXFx0dTggbnVtX2NxczsgLyogTnVtYmVyIG9mIENRcyAqL1xcbiBcXHR1OCBudW1fc2RxczsgLyogTnVtYmVyIG9mIFNEUXMgKi9cXG5AQCAtMTc2OCw3ICsxNzY3LDYgQEAgc3RhdGljIHZvaWQgbWx4c3dfcGNpX21ib3hfZnJlZShzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSxcXG4tXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCxcXG4gXFx0XFx0XFx0XFx0ICAgIHUzMiAqcF9zeXNfc3RhdHVzKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kO1xcbkBAIC0xODM5LDcgKzE4MzcsNyBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9yZXNldF9zdyhzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2kpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG4tbWx4c3dfcGNpX3Jlc2V0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbittbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpKVxcbiB7XFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWx4c3dfcGNpLVxcdTAwM2VwZGV2O1xcbiBcXHRib29sIHBjaV9yZXNldF9zYnJfc3VwcG9ydGVkID0gZmFsc2U7XFxuQEAgLTE4NDgsNyArMTg0Niw3IEBAIG1seHN3X3BjaV9yZXNldChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0dTMyIHN5c19zdGF0dXM7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCBpZCwgXFx1MDAyNnN5c19zdGF0dXMpO1xcbitcXHRlcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCBcXHUwMDI2c3lzX3N0YXR1cyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWNoIHN5c3RlbSByZWFkeSBzdGF0dXMgYmVmb3JlIHJlc2V0LiBTdGF0dXMgaXMgMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0c3lzX3N0YXR1cyk7XFxuQEAgLTE4ODAsNyArMTg3OCw3IEBAIG1seHN3X3BjaV9yZXNldChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGVyciA9IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChtbHhzd19wY2ksIGlkLCBcXHUwMDI2c3lzX3N0YXR1cyk7XFxuK1xcdGVyciA9IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChtbHhzd19wY2ksIFxcdTAwMjZzeXNfc3RhdHVzKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVhY2ggc3lzdGVtIHJlYWR5IHN0YXR1cyBhZnRlciByZXNldC4gU3RhdHVzIGlzIDB4JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHN5c19zdGF0dXMpO1xcbkBAIC0xOTMyLDcgKzE5MzAsNyBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9pbml0KHZvaWQgKmJ1c19wcml2LCBzdHJ1Y3QgbWx4c3dfY29yZSAqbWx4c3dfY29yZSxcXG4gXFx0aWYgKCFtYm94KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGVyciA9IG1seHN3X3BjaV9yZXNldChtbHhzd19wY2ksIG1seHN3X3BjaS1cXHUwMDNlaWQpO1xcbitcXHRlcnIgPSBtbHhzd19wY2lfcmVzZXQobWx4c3dfcGNpKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfcmVzZXQ7XFxuIFxcbkBAIC0yNDY0LDcgKzI0NjIsNiBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiBcXHRtbHhzd19wY2ktXFx1MDAzZWJ1c19pbmZvLmRldmljZV9uYW1lID0gcGNpX25hbWUobWx4c3dfcGNpLVxcdTAwM2VwZGV2KTtcXG4gXFx0bWx4c3dfcGNpLVxcdTAwM2VidXNfaW5mby5kZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiBcXHRtbHhzd19wY2ktXFx1MDAzZWJ1c19pbmZvLnJlYWRfY2xvY2tfY2FwYWJsZSA9IHRydWU7XFxuLVxcdG1seHN3X3BjaS1cXHUwMDNlaWQgPSBpZDtcXG4gXFxuIFxcdGVyciA9IG1seHN3X2NvcmVfYnVzX2RldmljZV9yZWdpc3RlcihcXHUwMDI2bWx4c3dfcGNpLVxcdTAwM2VidXNfaW5mbyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWx4c3dfcGNpX2J1cywgbWx4c3dfcGNpLCBmYWxzZSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXFxuaW5kZXggZjM2Nzc4ZTYyYWMxYTUuLjQ4NTEwNjFiYWJjYjVkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xcbkBAIC0yOSw2ICsyOSw0NyBAQCBzdHJ1Y3QgcGNpX2R5bmlkIHtcXG4gXFx0c3RydWN0IHBjaV9kZXZpY2VfaWQgaWQ7XFxuIH07XFxuIFxcbisvKipcXG4rICogZG9fcGNpX2FkZF9keW5pZCAtIGFkZCBhIG5ldyBQQ0kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyIGFuZCByZS1wcm9iZSBkZXZpY2VzXFxuKyAqIEBkcnY6IHRhcmdldCBwY2kgZHJpdmVyXFxuKyAqIEBpZDogSUQgdG8gYmUgYWRkZWRcXG4rICogQGNoZWNrX2R1cDogd2hldGhlciB0byBjaGVjayBpZiBtYXRjaGluZyBJRCBpcyBhbHJlYWR5IHByZXNlbnRcXG4rICpcXG4rICogQWRkcyBhIG5ldyBkeW5hbWljIHBjaSBkZXZpY2UgSUQgdG8gdGhpcyBkcml2ZXIgYW5kIGNhdXNlcyB0aGVcXG4rICogZHJpdmVyIHRvIHByb2JlIGZvciBhbGwgZGV2aWNlcyBhZ2Fpbi4gIEBkcnYgbXVzdCBoYXZlIGJlZW5cXG4rICogcmVnaXN0ZXJlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXFxuKyAqXFxuKyAqIENPTlRFWFQ6XFxuKyAqIERvZXMgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uLlxcbisgKlxcbisgKiBSRVRVUk5TOlxcbisgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4rc3RhdGljIGludCBkb19wY2lfYWRkX2R5bmlkKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgYm9vbCBjaGVja19kdXApXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9keW5pZCAqZHluaWQsICpleGlzdGluZ19keW5pZDtcXG4rXFxuK1xcdGR5bmlkID0ga3phbGxvY19vYmooKmR5bmlkKTtcXG4rXFx0aWYgKCFkeW5pZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRkeW5pZC1cXHUwMDNlaWQgPSAqaWQ7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZkcnYtXFx1MDAzZWR5bmlkcy5sb2NrKSB7XFxuK1xcdFxcdGlmIChjaGVja19kdXApIHtcXG4rXFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShleGlzdGluZ19keW5pZCwgXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxpc3QsIG5vZGUpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHBjaV9tYXRjaF9vbmVfaWQoXFx1MDAyNmV4aXN0aW5nX2R5bmlkLVxcdTAwM2VpZCwgaWQpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGtmcmVlKGR5bmlkKTtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmR5bmlkLVxcdTAwM2Vub2RlLCBcXHUwMDI2ZHJ2LVxcdTAwM2VkeW5pZHMubGlzdCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBkcml2ZXJfYXR0YWNoKFxcdTAwMjZkcnYtXFx1MDAzZWRyaXZlcik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBwY2lfYWRkX2R5bmlkIC0gYWRkIGEgbmV3IFBDSSBkZXZpY2UgSUQgdG8gdGhpcyBkcml2ZXIgYW5kIHJlLXByb2JlIGRldmljZXNcXG4gICogQGRydjogdGFyZ2V0IHBjaSBkcml2ZXJcXG5AQCAtNTYsMjUgKzk3LDE3IEBAIGludCBwY2lfYWRkX2R5bmlkKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsXFxuIFxcdFxcdCAgdW5zaWduZWQgaW50IGNsYXNzLCB1bnNpZ25lZCBpbnQgY2xhc3NfbWFzayxcXG4gXFx0XFx0ICB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKVxcbiB7XFxuLVxcdHN0cnVjdCBwY2lfZHluaWQgKmR5bmlkO1xcbi1cXG4tXFx0ZHluaWQgPSBremFsbG9jX29iaigqZHluaWQpO1xcbi1cXHRpZiAoIWR5bmlkKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFxuLVxcdGR5bmlkLVxcdTAwM2VpZC52ZW5kb3IgPSB2ZW5kb3I7XFxuLVxcdGR5bmlkLVxcdTAwM2VpZC5kZXZpY2UgPSBkZXZpY2U7XFxuLVxcdGR5bmlkLVxcdTAwM2VpZC5zdWJ2ZW5kb3IgPSBzdWJ2ZW5kb3I7XFxuLVxcdGR5bmlkLVxcdTAwM2VpZC5zdWJkZXZpY2UgPSBzdWJkZXZpY2U7XFxuLVxcdGR5bmlkLVxcdTAwM2VpZC5jbGFzcyA9IGNsYXNzO1xcbi1cXHRkeW5pZC1cXHUwMDNlaWQuY2xhc3NfbWFzayA9IGNsYXNzX21hc2s7XFxuLVxcdGR5bmlkLVxcdTAwM2VpZC5kcml2ZXJfZGF0YSA9IGRyaXZlcl9kYXRhO1xcbi1cXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZkcnYtXFx1MDAzZWR5bmlkcy5sb2NrKTtcXG4tXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZHluaWQtXFx1MDAzZW5vZGUsIFxcdTAwMjZkcnYtXFx1MDAzZWR5bmlkcy5saXN0KTtcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxvY2spO1xcbi1cXG4tXFx0cmV0dXJuIGRyaXZlcl9hdHRhY2goXFx1MDAyNmRydi1cXHUwMDNlZHJpdmVyKTtcXG4rXFx0c3RydWN0IHBjaV9kZXZpY2VfaWQgaWQgPSB7XFxuK1xcdFxcdC52ZW5kb3IgPSB2ZW5kb3IsXFxuK1xcdFxcdC5kZXZpY2UgPSBkZXZpY2UsXFxuK1xcdFxcdC5zdWJ2ZW5kb3IgPSBzdWJ2ZW5kb3IsXFxuK1xcdFxcdC5zdWJkZXZpY2UgPSBzdWJkZXZpY2UsXFxuK1xcdFxcdC5jbGFzcyA9IGNsYXNzLFxcbitcXHRcXHQuY2xhc3NfbWFzayA9IGNsYXNzX21hc2ssXFxuK1xcdFxcdC5kcml2ZXJfZGF0YSA9IGRyaXZlcl9kYXRhLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIGRvX3BjaV9hZGRfZHluaWQoZHJ2LCBcXHUwMDI2aWQsIGZhbHNlKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfYWRkX2R5bmlkKTtcXG4gXFxuQEAgLTkwLDYgKzEyMywzMCBAQCBzdGF0aWMgdm9pZCBwY2lfZnJlZV9keW5pZHMoc3RydWN0IHBjaV9kcml2ZXIgKmRydilcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxvY2spO1xcbiB9XFxuIFxcbisvKipcXG4rICogZG9fcGNpX21hdGNoX2lkIC0gU2VlIGlmIGEgUENJIElEIG1hdGNoZXMgYSBnaXZlbiBwY2lfaWQgdGFibGVcXG4rICogQGlkczogYXJyYXkgb2YgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmVzIHRvIHNlYXJjaCBpblxcbisgKiBAZGV2X2lkOiB0aGUgYWN0dWFsIFBDSSBkZXZpY2UgSUQgc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3QuXFxuKyAqIEBpbmNsdWRlX292ZXJyaWRlX29ubHk6IGFsc28gbWF0Y2ggYWdhaW5zdCBkZXZpY2UgSUQgZW50cmllcyBtYXJrZWQgYXMgb3ZlcnJpZGUgb25seS5cXG4rICpcXG4rICogUmV0dXJucyB0aGUgbWF0Y2hpbmcgcGNpX2RldmljZV9pZCBzdHJ1Y3R1cmUgb3JcXG4rICogJU5VTEwgaWYgdGhlcmUgaXMgbm8gbWF0Y2guXFxuKyAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRvX3BjaV9tYXRjaF9pZChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZGV2X2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBib29sIGluY2x1ZGVfb3ZlcnJpZGVfb25seSlcXG4re1xcbitcXHRpZiAoaWRzKSB7XFxuK1xcdFxcdHdoaWxlIChpZHMtXFx1MDAzZXZlbmRvciB8fCBpZHMtXFx1MDAzZXN1YnZlbmRvciB8fCBpZHMtXFx1MDAzZWNsYXNzX21hc2spIHtcXG4rXFx0XFx0XFx0aWYgKCghaWRzLVxcdTAwM2VvdmVycmlkZV9vbmx5IHx8IGluY2x1ZGVfb3ZlcnJpZGVfb25seSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHBjaV9tYXRjaF9vbmVfaWQoaWRzLCBkZXZfaWQpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaWRzO1xcbitcXHRcXHRcXHRpZHMrKztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbiAvKipcXG4gICogcGNpX21hdGNoX2lkIC0gU2VlIGlmIGEgUENJIGRldmljZSBtYXRjaGVzIGEgZ2l2ZW4gcGNpX2lkIHRhYmxlXFxuICAqIEBpZHM6IGFycmF5IG9mIFBDSSBkZXZpY2UgSUQgc3RydWN0dXJlcyB0byBzZWFyY2ggaW5cXG5AQCAtMTA1LDE0ICsxNjIsOSBAQCBzdGF0aWMgdm9pZCBwY2lfZnJlZV9keW5pZHMoc3RydWN0IHBjaV9kcml2ZXIgKmRydilcXG4gY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9pZChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLFxcbiBcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBjaV9kZXYgKmRldilcXG4ge1xcbi1cXHRpZiAoaWRzKSB7XFxuLVxcdFxcdHdoaWxlIChpZHMtXFx1MDAzZXZlbmRvciB8fCBpZHMtXFx1MDAzZXN1YnZlbmRvciB8fCBpZHMtXFx1MDAzZWNsYXNzX21hc2spIHtcXG4tXFx0XFx0XFx0aWYgKHBjaV9tYXRjaF9vbmVfZGV2aWNlKGlkcywgZGV2KSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGlkcztcXG4tXFx0XFx0XFx0aWRzKys7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXHRyZXR1cm4gTlVMTDtcXG4rXFx0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkID0gcGNpX2lkX2Zyb21fZGV2aWNlKGRldik7XFxuK1xcbitcXHRyZXR1cm4gZG9fcGNpX21hdGNoX2lkKGlkcywgXFx1MDAyNmRldl9pZCwgdHJ1ZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChwY2lfbWF0Y2hfaWQpO1xcbiBcXG5AQCAtMTI3LDYgKzE3OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfZGV2aWNlX2lkX2FueSA9IHtcXG4gICogcGNpX21hdGNoX2RldmljZSAtIFNlZSBpZiBhIGRldmljZSBtYXRjaGVzIGEgZHJpdmVyJ3MgbGlzdCBvZiBJRHNcXG4gICogQGRydjogdGhlIFBDSSBkcml2ZXIgdG8gbWF0Y2ggYWdhaW5zdFxcbiAgKiBAZGV2OiB0aGUgUENJIGRldmljZSBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdFxcbisgKiBAaWRfY29weTogUGxhY2UgdG8gc3RvcmUgY29weSBvZiBwY2lfZGV2aWNlX2lkIGZvciBkeW5hbWljIElEXFxuICAqXFxuICAqIFVzZWQgYnkgYSBkcml2ZXIgdG8gY2hlY2sgd2hldGhlciBhIFBDSSBkZXZpY2UgaXMgaW4gaXRzIGxpc3Qgb2ZcXG4gICogc3VwcG9ydGVkIGRldmljZXMgb3IgaW4gdGhlIGR5bmlkcyBsaXN0LCB3aGljaCBtYXkgaGF2ZSBiZWVuIGF1Z21lbnRlZFxcbkBAIC0xMzQsMTAgKzE4NywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2RldmljZV9pZF9hbnkgPSB7XFxuICAqIHN0cnVjdHVyZSBvciAlTlVMTCBpZiB0aGVyZSBpcyBubyBtYXRjaC5cXG4gICovXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2RldmljZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBjaV9kZXYgKmRldilcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRfY29weSlcXG4ge1xcbi1cXHRzdHJ1Y3QgcGNpX2R5bmlkICpkeW5pZDtcXG4tXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkID0gTlVMTCwgKmlkcztcXG4rXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkID0gTlVMTDtcXG4rXFx0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0LyogV2hlbiBkcml2ZXJfb3ZlcnJpZGUgaXMgc2V0LCBvbmx5IGJpbmQgdG8gdGhlIG1hdGNoaW5nIGRyaXZlciAqL1xcbkBAIC0xNDUsNDUgKzE5OSwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9kZXZpY2Uoc3RydWN0IHBjaV9kcml2ZXIgKmRydixcXG4gXFx0aWYgKHJldCA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdGRldl9pZCA9IHBjaV9pZF9mcm9tX2RldmljZShkZXYpO1xcbiBcXHQvKiBMb29rIGF0IHRoZSBkeW5hbWljIGlkcyBmaXJzdCwgYmVmb3JlIHRoZSBzdGF0aWMgb25lcyAqL1xcbi1cXHRzcGluX2xvY2soXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxvY2spO1xcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGR5bmlkLCBcXHUwMDI2ZHJ2LVxcdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xcbi1cXHRcXHRpZiAocGNpX21hdGNoX29uZV9kZXZpY2UoXFx1MDAyNmR5bmlkLVxcdTAwM2VpZCwgZGV2KSkge1xcbi1cXHRcXHRcXHRmb3VuZF9pZCA9IFxcdTAwMjZkeW5pZC1cXHUwMDNlaWQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZkcnYtXFx1MDAzZWR5bmlkcy5sb2NrKSB7XFxuK1xcdFxcdHN0cnVjdCBwY2lfZHluaWQgKmR5bmlkO1xcbitcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxpc3QsIG5vZGUpIHtcXG4rXFx0XFx0XFx0aWYgKHBjaV9tYXRjaF9vbmVfaWQoXFx1MDAyNmR5bmlkLVxcdTAwM2VpZCwgXFx1MDAyNmRldl9pZCkpIHtcXG4rXFx0XFx0XFx0XFx0KmlkX2NvcHkgPSBkeW5pZC1cXHUwMDNlaWQ7XFxuK1xcdFxcdFxcdFxcdHJldHVybiBpZF9jb3B5O1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2ZHJ2LVxcdTAwM2VkeW5pZHMubG9jayk7XFxuIFxcbitcXHRmb3VuZF9pZCA9IGRvX3BjaV9tYXRjaF9pZChkcnYtXFx1MDAzZWlkX3RhYmxlLCBcXHUwMDI2ZGV2X2lkLCByZXQgXFx1MDAzZSAwKTtcXG4gXFx0aWYgKGZvdW5kX2lkKVxcbiBcXHRcXHRyZXR1cm4gZm91bmRfaWQ7XFxuIFxcbi1cXHRmb3IgKGlkcyA9IGRydi1cXHUwMDNlaWRfdGFibGU7IChmb3VuZF9pZCA9IHBjaV9tYXRjaF9pZChpZHMsIGRldikpO1xcbi1cXHQgICAgIGlkcyA9IGZvdW5kX2lkICsgMSkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBUaGUgbWF0Y2ggdGFibGUgaXMgc3BsaXQgYmFzZWQgb24gZHJpdmVyX292ZXJyaWRlLlxcbi1cXHRcXHQgKiBJbiBjYXNlIG92ZXJyaWRlX29ubHkgd2FzIHNldCwgZW5mb3JjZSBkcml2ZXJfb3ZlcnJpZGVcXG4tXFx0XFx0ICogbWF0Y2hpbmcuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZm91bmRfaWQtXFx1MDAzZW92ZXJyaWRlX29ubHkpIHtcXG4tXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuLVxcdFxcdFxcdFxcdHJldHVybiBmb3VuZF9pZDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cmV0dXJuIGZvdW5kX2lkO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuIFxcdC8qIGRyaXZlcl9vdmVycmlkZSB3aWxsIGFsd2F5cyBtYXRjaCwgc2VuZCBhIGR1bW15IGlkICovXFxuIFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbiBcXHRcXHRyZXR1cm4gXFx1MDAyNnBjaV9kZXZpY2VfaWRfYW55O1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX3BjaV9mcmVlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLXtcXG4tXFx0a2ZyZWUodG9fcGNpX2RldihkZXYpKTtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIG5ld19pZF9zdG9yZSAtIHN5c2ZzIGZyb250ZW5kIHRvIHBjaV9hZGRfZHluaWQoKVxcbiAgKiBAZHJpdmVyOiB0YXJnZXQgZGV2aWNlIGRyaXZlclxcbkBAIC0xOTcsMzggKzIzNSwyMiBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLFxcbiB7XFxuIFxcdHN0cnVjdCBwY2lfZHJpdmVyICpwZHJ2ID0gdG9fcGNpX2RyaXZlcihkcml2ZXIpO1xcbiBcXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzID0gcGRydi1cXHUwMDNlaWRfdGFibGU7XFxuLVxcdHUzMiB2ZW5kb3IsIGRldmljZSwgc3VidmVuZG9yID0gUENJX0FOWV9JRCxcXG4tXFx0XFx0c3ViZGV2aWNlID0gUENJX0FOWV9JRCwgY2xhc3MgPSAwLCBjbGFzc19tYXNrID0gMDtcXG4tXFx0dW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSA9IDA7XFxuK1xcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkID0ge1xcbitcXHRcXHQuc3VidmVuZG9yID0gUENJX0FOWV9JRCxcXG4rXFx0XFx0LnN1YmRldmljZSA9IFBDSV9BTllfSURcXG4rXFx0fTtcXG4gXFx0aW50IGZpZWxkcztcXG4gXFx0aW50IHJldHZhbCA9IDA7XFxuIFxcbiBcXHRmaWVsZHMgPSBzc2NhbmYoYnVmLCBcXFwiJXggJXggJXggJXggJXggJXggJWx4XFxcIixcXG4tXFx0XFx0XFx0XFx1MDAyNnZlbmRvciwgXFx1MDAyNmRldmljZSwgXFx1MDAyNnN1YnZlbmRvciwgXFx1MDAyNnN1YmRldmljZSxcXG4tXFx0XFx0XFx0XFx1MDAyNmNsYXNzLCBcXHUwMDI2Y2xhc3NfbWFzaywgXFx1MDAyNmRyaXZlcl9kYXRhKTtcXG4rXFx0XFx0XFx0XFx1MDAyNmlkLnZlbmRvciwgXFx1MDAyNmlkLmRldmljZSwgXFx1MDAyNmlkLnN1YnZlbmRvciwgXFx1MDAyNmlkLnN1YmRldmljZSxcXG4rXFx0XFx0XFx0XFx1MDAyNmlkLmNsYXNzLCBcXHUwMDI2aWQuY2xhc3NfbWFzaywgXFx1MDAyNmlkLmRyaXZlcl9kYXRhKTtcXG4gXFx0aWYgKGZpZWxkcyBcXHUwMDNjIDIpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKGZpZWxkcyAhPSA3KSB7XFxuLVxcdFxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0ga3phbGxvY19vYmooKnBkZXYpO1xcbi1cXHRcXHRpZiAoIXBkZXYpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXG4tXFx0XFx0cGRldi1cXHUwMDNldmVuZG9yID0gdmVuZG9yO1xcbi1cXHRcXHRwZGV2LVxcdTAwM2VkZXZpY2UgPSBkZXZpY2U7XFxuLVxcdFxcdHBkZXYtXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3IgPSBzdWJ2ZW5kb3I7XFxuLVxcdFxcdHBkZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2UgPSBzdWJkZXZpY2U7XFxuLVxcdFxcdHBkZXYtXFx1MDAzZWNsYXNzID0gY2xhc3M7XFxuLVxcdFxcdHBkZXYtXFx1MDAzZWRldi5yZWxlYXNlID0gX3BjaV9mcmVlX2RldmljZTtcXG4tXFxuLVxcdFxcdGRldmljZV9pbml0aWFsaXplKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbi1cXHRcXHRpZiAocGNpX21hdGNoX2RldmljZShwZHJ2LCBwZGV2KSlcXG4tXFx0XFx0XFx0cmV0dmFsID0gLUVFWElTVDtcXG4tXFxuLVxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuLVxcbi1cXHRcXHRpZiAocmV0dmFsKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbitcXHRcXHRpZiAoZG9fcGNpX21hdGNoX2lkKHBkcnYtXFx1MDAzZWlkX3RhYmxlLCBcXHUwMDI2aWQsIGZhbHNlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIE9ubHkgYWNjZXB0IGRyaXZlcl9kYXRhIHZhbHVlcyB0aGF0IG1hdGNoIGFuIGV4aXN0aW5nIGlkX3RhYmxlXFxuQEAgLTIzNiw3ICsyNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRpZiAoaWRzKSB7XFxuIFxcdFxcdHJldHZhbCA9IC1FSU5WQUw7XFxuIFxcdFxcdHdoaWxlIChpZHMtXFx1MDAzZXZlbmRvciB8fCBpZHMtXFx1MDAzZXN1YnZlbmRvciB8fCBpZHMtXFx1MDAzZWNsYXNzX21hc2spIHtcXG4tXFx0XFx0XFx0aWYgKGRyaXZlcl9kYXRhID09IGlkcy1cXHUwMDNlZHJpdmVyX2RhdGEpIHtcXG4rXFx0XFx0XFx0aWYgKGlkLmRyaXZlcl9kYXRhID09IGlkcy1cXHUwMDNlZHJpdmVyX2RhdGEpIHtcXG4gXFx0XFx0XFx0XFx0cmV0dmFsID0gMDtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG5AQCAtMjQ2LDggKzI2OCw3IEBAIHN0YXRpYyBzc2l6ZV90IG5ld19pZF9zdG9yZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLCBjb25zdCBjaGFyICpidWYsXFxuIFxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHZhbCA9IHBjaV9hZGRfZHluaWQocGRydiwgdmVuZG9yLCBkZXZpY2UsIHN1YnZlbmRvciwgc3ViZGV2aWNlLFxcbi1cXHRcXHRcXHQgICAgICAgY2xhc3MsIGNsYXNzX21hc2ssIGRyaXZlcl9kYXRhKTtcXG4rXFx0cmV0dmFsID0gZG9fcGNpX2FkZF9keW5pZChwZHJ2LCBcXHUwMDI2aWQsIGZpZWxkcyAhPSA3KTtcXG4gXFx0aWYgKHJldHZhbClcXG4gXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFx0cmV0dXJuIGNvdW50O1xcbkBAIC00NDUsMTIgKzQ2NiwxMyBAQCB2b2lkIHBjaV9wcm9iZV9mbHVzaF93b3JrcXVldWUodm9pZClcXG4gc3RhdGljIGludCBfX3BjaV9kZXZpY2VfcHJvYmUoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xcbitcXHRzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF9jb3B5O1xcbiBcXHRpbnQgZXJyb3IgPSAwO1xcbiBcXG4gXFx0aWYgKGRydi1cXHUwMDNlcHJvYmUpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbiBcXG4tXFx0XFx0aWQgPSBwY2lfbWF0Y2hfZGV2aWNlKGRydiwgcGNpX2Rldik7XFxuK1xcdFxcdGlkID0gcGNpX21hdGNoX2RldmljZShkcnYsIHBjaV9kZXYsIFxcdTAwMjZpZF9jb3B5KTtcXG4gXFx0XFx0aWYgKGlkKVxcbiBcXHRcXHRcXHRlcnJvciA9IHBjaV9jYWxsX3Byb2JlKGRydiwgcGNpX2RldiwgaWQpO1xcbiBcXHR9XFxuQEAgLTE1MzgsMTIgKzE1NjAsMTMgQEAgc3RhdGljIGludCBwY2lfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7XFxuIFxcdHN0cnVjdCBwY2lfZHJpdmVyICpwY2lfZHJ2O1xcbiBcXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmRfaWQ7XFxuK1xcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkX2NvcHk7XFxuIFxcbiBcXHRpZiAocGNpX2Rldl9iaW5kaW5nX2Rpc2FsbG93ZWQocGNpX2RldikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cGNpX2RydiA9IChzdHJ1Y3QgcGNpX2RyaXZlciAqKXRvX3BjaV9kcml2ZXIoZHJ2KTtcXG4tXFx0Zm91bmRfaWQgPSBwY2lfbWF0Y2hfZGV2aWNlKHBjaV9kcnYsIHBjaV9kZXYpO1xcbitcXHRmb3VuZF9pZCA9IHBjaV9tYXRjaF9kZXZpY2UocGNpX2RydiwgcGNpX2RldiwgXFx1MDAyNmlkX2NvcHkpO1xcbiBcXHRpZiAoZm91bmRfaWQpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaFxcbmluZGV4IDQ0NjllMWE3N2YzYzEzLi4wNTY3YTg3NjJiYWEwOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS9wY2kuaFxcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oXFxuQEAgLTQ0MiwyMSArNDQyLDM3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9zZXR1cF9jYXJkYnVzKGNoYXIgKnN0cikgeyByZXR1cm4gLUVOT0VOVDsgfVxcbiAjZW5kaWYgLyogQ09ORklHX0NBUkRCVVMgKi9cXG4gXFxuIC8qKlxcbi0gKiBwY2lfbWF0Y2hfb25lX2RldmljZSAtIFRlbGwgaWYgYSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSBoYXMgYSBtYXRjaGluZ1xcbi0gKlxcdFxcdFxcdCAgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmVcXG4tICogQGlkOiBzaW5nbGUgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmUgdG8gbWF0Y2hcXG4tICogQGRldjogdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3RcXG4rICogcGNpX2lkX2Zyb21fZGV2aWNlIC0gT2J0YWluIGEgcGNpX2RldmljZV9pZCBmcm9tIGEgUENJIGRldmljZVxcbisgKiBAZGV2OiB0aGUgUENJIGRldmljZVxcbisgKlxcbisgKiBSZXR1cm5zIGEgcGNpX2RldmljZV9pZCBmaWxsZWQuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZF9mcm9tX2RldmljZShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHJldHVybiAoc3RydWN0IHBjaV9kZXZpY2VfaWQpIHtcXG4rXFx0XFx0LnZlbmRvciA9IGRldi1cXHUwMDNldmVuZG9yLFxcbitcXHRcXHQuZGV2aWNlID0gZGV2LVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdC5zdWJ2ZW5kb3IgPSBkZXYtXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3IsXFxuK1xcdFxcdC5zdWJkZXZpY2UgPSBkZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2UsXFxuK1xcdFxcdC5jbGFzcyA9IGRldi1cXHUwMDNlY2xhc3MsXFxuK1xcdH07XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwY2lfbWF0Y2hfb25lX2lkIC0gVGVsbCBpZiBhIFBDSSBkZXZpY2UgSUQgbWF0Y2hlcyBhIG5lZWRsZSBQQ0kgZGV2aWNlIGlkXFxuKyAqIEBpZDogc2luZ2xlIFBDSSBkZXZpY2UgaWQgc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3QgKG5lZWRsZSlcXG4rICogQGRldl9pZDogdGhlIGFjdHVhbCBJRCBmcm9tIHRoZSBQQ0kgZGV2aWNlIChjYW4gYmUgY3JlYXRlZCB2aWEgcGNpX2lkX2Zyb21fZGV2aWNlKVxcbiAgKlxcbiAgKiBSZXR1cm5zIHRoZSBtYXRjaGluZyBwY2lfZGV2aWNlX2lkIHN0cnVjdHVyZSBvciAlTlVMTCBpZiB0aGVyZSBpcyBubyBtYXRjaC5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKlxcbi1wY2lfbWF0Y2hfb25lX2RldmljZShjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3BjaV9tYXRjaF9vbmVfaWQoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZGV2X2lkKVxcbiB7XFxuLVxcdGlmICgoaWQtXFx1MDAzZXZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVxcdTAwM2V2ZW5kb3IgPT0gZGV2LVxcdTAwM2V2ZW5kb3IpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoaWQtXFx1MDAzZWRldmljZSA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVxcdTAwM2VkZXZpY2UgPT0gZGV2LVxcdTAwM2VkZXZpY2UpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoaWQtXFx1MDAzZXN1YnZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVxcdTAwM2VzdWJ2ZW5kb3IgPT0gZGV2LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKGlkLVxcdTAwM2VzdWJkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC1cXHUwMDNlc3ViZGV2aWNlID09IGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICEoKGlkLVxcdTAwM2VjbGFzcyBeIGRldi1cXHUwMDNlY2xhc3MpIFxcdTAwMjYgaWQtXFx1MDAzZWNsYXNzX21hc2spKVxcbitcXHRpZiAoKGlkLVxcdTAwM2V2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC1cXHUwMDNldmVuZG9yID09IGRldl9pZC1cXHUwMDNldmVuZG9yKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGlkLVxcdTAwM2VkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC1cXHUwMDNlZGV2aWNlID09IGRldl9pZC1cXHUwMDNlZGV2aWNlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGlkLVxcdTAwM2VzdWJ2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC1cXHUwMDNlc3VidmVuZG9yID09IGRldl9pZC1cXHUwMDNlc3VidmVuZG9yKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGlkLVxcdTAwM2VzdWJkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC1cXHUwMDNlc3ViZGV2aWNlID09IGRldl9pZC1cXHUwMDNlc3ViZGV2aWNlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgISgoaWQtXFx1MDAzZWNsYXNzIF4gZGV2X2lkLVxcdTAwM2VjbGFzcykgXFx1MDAyNiBpZC1cXHUwMDNlY2xhc3NfbWFzaykpXFxuIFxcdFxcdHJldHVybiBpZDtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guY1xcbmluZGV4IGUzZDMxNzdmY2U1NDllLi5jOGM0YmZlNzgxN2IwMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS9zZWFyY2guY1xcbisrKyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jXFxuQEAgLTI0NSw4ICsyNDUsMTAgQEAgc3RhdGljIGludCBtYXRjaF9wY2lfZGV2X2J5X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcXG4gXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkID0gZGF0YTtcXG4rXFx0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkO1xcbiBcXG4tXFx0aWYgKHBjaV9tYXRjaF9vbmVfZGV2aWNlKGlkLCBwZGV2KSlcXG4rXFx0ZGV2X2lkID0gcGNpX2lkX2Zyb21fZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAocGNpX21hdGNoX29uZV9pZChpZCwgXFx1MDAyNmRldl9pZCkpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC00MTgsNyArNDIwLDcgQEAgRVhQT1JUX1NZTUJPTChwY2lfZ2V0X2NsYXNzKTtcXG4gICpcXG4gICogSXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBrbm93biBQQ0kgZGV2aWNlcy4gSWYgYSBQQ0kgZGV2aWNlIGlzIGZvdW5kXFxuICAqIHdpdGggYSBtYXRjaGluZyBiYXNlIGNsYXNzIGNvZGUsIHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGhlIGRldmljZSBpc1xcbi0gKiBpbmNyZW1lbnRlZC4gU2VlIHBjaV9tYXRjaF9vbmVfZGV2aWNlKCkgdG8gZmlndXJlIG91dCBob3cgZG9lcyB0aGlzIHdvcmtzLlxcbisgKiBpbmNyZW1lbnRlZC4gU2VlIHBjaV9tYXRjaF9vbmVfaWQoKSB0byBmaWd1cmUgb3V0IGhvdyBkb2VzIHRoaXMgd29ya3MuXFxuICAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuXFxuICAqIE90aGVyd2lzZSBpZiBAZnJvbSBpcyBub3QgJU5VTEwsIHNlYXJjaGVzIGNvbnRpbnVlIGZyb20gbmV4dCBkZXZpY2Ugb24gdGhlXFxuICAqIGdsb2JhbCBsaXN0LiBUaGUgcmVmZXJlbmNlIGNvdW50IGZvciBAZnJvbSBpcyBhbHdheXMgZGVjcmVtZW50ZWQgaWYgaXQgaXNcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyLmMgYi9kcml2ZXJzL3Njc2kvbnNwMzIuY1xcbmluZGV4IGU4OTNkNTY3NzI0MTdhLi45YzkyODEyMjJhMGFjZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Njc2kvbnNwMzIuY1xcbisrKyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5jXFxuQEAgLTE0NzAsNyArMTQ3MCw3IEBAIHN0YXRpYyBpbnQgbnNwMzJfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IFNjc2lfSG9zdCAqaG9zdClcXG4gXFx0XFx0ICAgKG5zcDMyX3JlYWQyKGJhc2UsIElOREVYX1JFRykgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweGZmKTtcXG4gXFxuIFxcdG1vZGVfcmVnID0gbnNwMzJfaW5kZXhfcmVhZDEoYmFzZSwgQ0hJUF9NT0RFKTtcXG4tXFx0bW9kZWwgICAgPSBkYXRhLVxcdTAwM2VwY2lfZGV2aWQtXFx1MDAzZWRyaXZlcl9kYXRhO1xcbitcXHRtb2RlbCAgICA9IGRhdGEtXFx1MDAzZW1vZGVsO1xcbiBcXG4gI2lmZGVmIENPTkZJR19QTVxcbiBcXHRzZXFfcHJpbnRmKG0sIFxcXCJQb3dlciBNYW5hZ2VtZW50OiAgICAgICVzXFxcXG5cXFwiLFxcbkBAIC0yOTA3LDggKzI5MDcsOCBAQCBzdGF0aWMgaW50IG5zcDMyX2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpXFxuICAqL1xcbiBzdGF0aWMgaW50IG5zcDMyX2dldHByb21fcGFyYW0obnNwMzJfaHdfZGF0YSAqZGF0YSlcXG4ge1xcbi1cXHRpbnQgdmVuZG9yID0gZGF0YS1cXHUwMDNlcGNpX2RldmlkLVxcdTAwM2V2ZW5kb3I7XFxuLVxcdGludCBkZXZpY2UgPSBkYXRhLVxcdTAwM2VwY2lfZGV2aWQtXFx1MDAzZWRldmljZTtcXG4rXFx0aW50IHZlbmRvciA9IGRhdGEtXFx1MDAzZVBjaS1cXHUwMDNldmVuZG9yO1xcbitcXHRpbnQgZGV2aWNlID0gZGF0YS1cXHUwMDNlUGNpLVxcdTAwM2VkZXZpY2U7XFxuIFxcdGludCByZXQsIGk7XFxuIFxcdGludCBfX21heWJlX3VudXNlZCB2YWw7XFxuIFxcbkBAIC0zMzQwLDcgKzMzNDAsNyBAQCBzdGF0aWMgaW50IG5zcDMyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuIFxcdH1cXG4gXFxuIFxcdGRhdGEtXFx1MDAzZVBjaVxcdCAgPSBwZGV2O1xcbi1cXHRkYXRhLVxcdTAwM2VwY2lfZGV2aWQgICA9IGlkO1xcbitcXHRkYXRhLVxcdTAwM2Vtb2RlbCAgICAgICA9IGlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4gXFx0ZGF0YS1cXHUwMDNlSXJxTnVtYmVyICAgPSBwZGV2LVxcdTAwM2VpcnE7XFxuIFxcdGRhdGEtXFx1MDAzZUJhc2VBZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApO1xcbiBcXHRkYXRhLVxcdTAwM2VOdW1BZGRyZXNzICA9IHBjaV9yZXNvdXJjZV9sZW4gIChwZGV2LCAwKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyLmggYi9kcml2ZXJzL3Njc2kvbnNwMzIuaFxcbmluZGV4IDkyNDg4OWY4YmQzN2U3Li45ZTY1NzcxY2I1OTI4NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Njc2kvbnNwMzIuaFxcbisrKyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oXFxuQEAgLTU2NCwxMCArNTY0LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9uc3AzMl9od19kYXRhIHtcXG4gXFxuIFxcdHN0cnVjdCBzY3NpX2NtbmQgKkN1cnJlbnRTQztcXG4gXFxuLVxcdHN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICpQY2k7XFxuLVxcdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2aWQ7XFxuLVxcdHN0cnVjdCBTY3NpX0hvc3QgICAgICAgICAgICpIb3N0O1xcbi1cXHRzcGlubG9ja190ICAgICAgICAgICAgICAgICAgTG9jaztcXG4rXFx0c3RydWN0IHBjaV9kZXYgICAgKlBjaTtcXG4rXFx0aW50ICAgICAgICAgICAgICAgIG1vZGVsO1xcbitcXHRzdHJ1Y3QgU2NzaV9Ib3N0ICAqSG9zdDtcXG4rXFx0c3BpbmxvY2tfdCAgICAgICAgIExvY2s7XFxuIFxcbiBcXHRjaGFyIGluZm9fc3RyWzEwMF07XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li45MmMxN2MxMTZkZTZkMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbkBAIC05NzksNiArOTc5LDcgQEAgc3RydWN0IG1vZHVsZTtcXG4gICpcXHRcXHRmdW5jdGlvbiByZXR1cm5zIHplcm8gd2hlbiB0aGUgZHJpdmVyIGNob29zZXMgdG9cXG4gICpcXHRcXHR0YWtlIFxcXCJvd25lcnNoaXBcXFwiIG9mIHRoZSBkZXZpY2Ugb3IgYW4gZXJyb3IgY29kZVxcbiAgKlxcdFxcdChuZWdhdGl2ZSBudW1iZXIpIG90aGVyd2lzZS5cXG4rICpcXHRcXHRUaGUgcGNpX2RldmljZV9pZCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcgcHJvYmUuXFxuICAqXFx0XFx0VGhlIHByb2JlIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3NcXG4gICpcXHRcXHRjb250ZXh0LCBzbyBpdCBjYW4gc2xlZXAuXFxuICAqIEByZW1vdmU6XFx0VGhlIHJlbW92ZSgpIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgZGV2aWNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ0OjQ0LjQ1MDQ4ODE5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEwODg3Nzc0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRBX0dFTkVSSUNcIixcbiAgICBcIkFHUFwiLFxuICAgIFwiQUdQX0FNRFwiLFxuICAgIFwiQUdQX1ZJQVwiLFxuICAgIFwiSVBBQ0tfQlVTXCIsXG4gICAgXCJCT0FSRF9UUENJMjAwXCIsXG4gICAgXCJNTFhTV19QQ0lcIixcbiAgICBcIlNDU0lfTlNQMzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19wY2lfYWRkX2R5bmlkXCIsXG4gICAgXCJuZXdfaWRfc3RvcmVcIixcbiAgICBcInBjaV9tYXRjaF9kZXZpY2VcIixcbiAgICBcImRvX3BjaV9tYXRjaF9pZFwiLFxuICAgIFwiX19wY2lfZGV2aWNlX3Byb2JlXCIsXG4gICAgXCJwY2lfYWRkX2R5bmlkXCIsXG4gICAgXCJwY2lfbWF0Y2hfaWRcIixcbiAgICBcImF0YV9nZW5lcmljX2luaXRfb25lXCIsXG4gICAgXCJhZ3BfYW1kazdfcHJvYmVcIixcbiAgICBcImFncF92aWFfcHJvYmVcIixcbiAgICBcInRwY2kyMDBfcGNpX3Byb2JlXCIsXG4gICAgXCJtbHhzd19wY2lfcHJvYmVcIixcbiAgICBcIm5zcDMyX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBDSSBjb3JlIHRvIHBhc3MgYSBjb3B5IG9mIHRoZSBkeW5hbWljIHBjaV9kZXZpY2VfaWQgdG8gdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCBkeW5hbWljIElELCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBkeW5hbWljIElEIGlzIHJlbW92ZWQgdmlhIHN5c2ZzLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIHRoYXQgd2VyZSBpbmNvcnJlY3RseSBzYXZpbmcgdGhlIHBjaV9kZXZpY2VfaWQgcG9pbnRlciB0byBpbnN0ZWFkIHNhdmUgdGhlIGRyaXZlcl9kYXRhIG9yIG90aGVyIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBQQ0kgY29yZSBhbmQgZHJpdmVycywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYW5kIHByb2JpbmcsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBkeW5hbWljIElEcyB2aWEgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNThiZTU4MTlmZmZkZDVmM2MxMWRkMWEyNmFhNTJkY2E1MGUwMjQwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMjA6NDQ6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuY1xuaW5kZXggZTcwYjZjMDg5Y2YxNzkuLjE4ZWE3NDBjYTU4MjkzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuY1xuKysrIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuY1xuQEAgLTUxLDExICs1MSwxMSBAQCBlbnVtIHtcbiBzdGF0aWMgaW50IGdlbmVyaWNfc2V0X21vZGUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnVudXNlZClcbiB7XG4gXHRzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay1cdTAwM2VhcDtcbi1cdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCA9IGFwLVx1MDAzZWhvc3QtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0dW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFwLVx1MDAzZWhvc3QtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0aW50IGRtYV9lbmFibGVkID0gMDtcbiBcdHN0cnVjdCBhdGFfZGV2aWNlICpkZXY7XG4gXG4tXHRpZiAoaWQtXHUwMDNlZHJpdmVyX2RhdGEgXHUwMDI2IEFUQV9HRU5fRk9SQ0VfRE1BKSB7XG4rXHRpZiAoZHJpdmVyX2RhdGEgXHUwMDI2IEFUQV9HRU5fRk9SQ0VfRE1BKSB7XG4gXHRcdGRtYV9lbmFibGVkID0gMHhmZjtcbiBcdH0gZWxzZSBpZiAoYXAtXHUwMDNlaW9hZGRyLmJtZG1hX2FkZHIpIHtcbiBcdFx0LyogQml0cyA1IGFuZCA2IGluZGljYXRlIGlmIERNQSBpcyBhY3RpdmUgb24gbWFzdGVyL3NsYXZlICovXG5AQCAtMjA2LDcgKzIwNiw3IEBAIHN0YXRpYyBpbnQgYXRhX2dlbmVyaWNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWRcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdHBjaW1fcGluX2RldmljZShkZXYpO1xuIFx0fVxuLVx0cmV0dXJuIGF0YV9wY2lfYm1kbWFfaW5pdF9vbmUoZGV2LCBwcGksIFx1MDAyNmdlbmVyaWNfc2h0LCAodm9pZCAqKWlkLCAwKTtcbitcdHJldHVybiBhdGFfcGNpX2JtZG1hX2luaXRfb25lKGRldiwgcHBpLCBcdTAwMjZnZW5lcmljX3NodCwgKHZvaWQgKilpZC1cdTAwM2Vkcml2ZXJfZGF0YSwgMCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGFfZ2VuZXJpY1tdID0ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmNcbmluZGV4IDg5OGZmMzBmZmQ0NmIyLi40ZDIwMWU3MWM1MTc3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jXG4rKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuY1xuQEAgLTM4NywzNyArMzg3LDE3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgYW1kX2lyb25nYXRlX2RyaXZlciA9IHtcbiBcdC5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGFncF9kZXZpY2VfaWRzIGFtZF9hZ3BfZGV2aWNlX2lkc1tdID1cbi17XG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDA2LFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiSXJvbmdhdGVcIixcbi1cdH0sXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDBFLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiNzYxXCIsXG4tXHR9LFxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQyxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIjc2ME1QXCIsXG4tXHR9LFxuLVx0eyB9LCAvKiBkdW1teSBmaW5hbCBlbnRyeSwgYWx3YXlzIHByZXNlbnQgKi9cbi19O1xuLVxuIHN0YXRpYyBpbnQgYWdwX2FtZGs3X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4ge1xuIFx0c3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlO1xuIFx0dTggY2FwX3B0cjtcbi1cdGludCBqO1xuIFxuIFx0Y2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApO1xuIFx0aWYgKCFjYXBfcHRyKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdGogPSBlbnQgLSBhZ3BfYW1kazdfcGNpX3RhYmxlO1xuLVx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiQU1EICVzIGNoaXBzZXRcXG5cIixcbi1cdFx0IGFtZF9hZ3BfZGV2aWNlX2lkc1tqXS5jaGlwc2V0X25hbWUpO1xuK1x0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiQU1EICVzIGNoaXBzZXRcXG5cIiwgKGNvbnN0IGNoYXIgKillbnQtXHUwMDNlZHJpdmVyX2RhdGEpO1xuIFxuIFx0YnJpZGdlID0gYWdwX2FsbG9jX2JyaWRnZSgpO1xuIFx0aWYgKCFicmlkZ2UpXG5AQCAtNDkyLDcgKzQ3Miw2IEBAIHN0YXRpYyBpbnQgYWdwX2FtZGs3X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gYW1kX2lyb25nYXRlX2RyaXZlci5jb25maWd1cmUoKTtcbiB9XG4gXG4tLyogbXVzdCBiZSB0aGUgc2FtZSBvcmRlciBhcyBuYW1lIHRhYmxlIGFib3ZlICovXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF9hbWRrN19wY2lfdGFibGVbXSA9IHtcbiBcdHtcbiBcdC5jbGFzc1x0XHQ9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgXHUwMDNjXHUwMDNjIDgpLFxuQEAgLTUwMSw2ICs0ODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xuIFx0LmRldmljZVx0XHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwNixcbiBcdC5zdWJ2ZW5kb3JcdD0gUENJX0FOWV9JRCxcbiBcdC5zdWJkZXZpY2VcdD0gUENJX0FOWV9JRCxcbitcdC5kcml2ZXJfZGF0YVx0PSAoa2VybmVsX3Vsb25nX3QpXCJJcm9uZ2F0ZVwiLFxuIFx0fSxcbiBcdHtcbiBcdC5jbGFzc1x0XHQ9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgXHUwMDNjXHUwMDNjIDgpLFxuQEAgLTUwOSw2ICs0ODksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xuIFx0LmRldmljZVx0XHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwRSxcbiBcdC5zdWJ2ZW5kb3JcdD0gUENJX0FOWV9JRCxcbiBcdC5zdWJkZXZpY2VcdD0gUENJX0FOWV9JRCxcbitcdC5kcml2ZXJfZGF0YVx0PSAoa2VybmVsX3Vsb25nX3QpXCI3NjFcIixcbiBcdH0sXG4gXHR7XG4gXHQuY2xhc3NcdFx0PSAoUENJX0NMQVNTX0JSSURHRV9IT1NUIFx1MDAzY1x1MDAzYyA4KSxcbkBAIC01MTcsNiArNDk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF9hbWRrN19wY2lfdGFibGVbXSA9IHtcbiBcdC5kZXZpY2VcdFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEMsXG4gXHQuc3VidmVuZG9yXHQ9IFBDSV9BTllfSUQsXG4gXHQuc3ViZGV2aWNlXHQ9IFBDSV9BTllfSUQsXG4rXHQuZHJpdmVyX2RhdGFcdD0gKGtlcm5lbF91bG9uZ190KVwiNzYwTVBcIixcbiBcdH0sXG4gXHR7IH1cbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmNcbmluZGV4IDhiMTlhNWQxYTA5YjQ5Li5hYjNiNzNkZDA4MGFmZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jXG4rKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuY1xuQEAgLTIyMSwyMDQgKzIyMSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgdmlhX2RyaXZlciA9IHtcbiBcdC5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGFncF9kZXZpY2VfaWRzIHZpYV9hZ3BfZGV2aWNlX2lkc1tdID1cbi17XG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJBcG9sbG8gVlAzXCIsXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiQXBvbGxvIE1WUDNcIixcbi1cdH0sXG4tXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODUwMV8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiQXBvbGxvIE1WUDRcIixcbi1cdH0sXG4tXG4tXHQvKiBWVDg2MDEgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJBcG9sbG8gUHJvTWVkaWEvUExFMTMzVGFcIixcbi1cdH0sXG4tXG4tXHQvKiBWVDgyQzY5M0EgLyBWVDI4QzY5NFQgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2OTFfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIkFwb2xsbyBQcm8gMTMzXCIsXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIktYMTMzXCIsXG4tXHR9LFxuLVxuLVx0LyogVlQ4NjMzICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODYzM18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiUHJvIDI2NlwiLFxuLVx0fSxcbi1cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV9YTjI2Nixcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIkFwb2xsbyBQcm8yNjZcIixcbi1cdH0sXG4tXG4tXHQvKiBWVDgzNjEgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84MzYxLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiS0xFMTMzXCIsXG4tXHR9LFxuLVxuLVx0LyogVlQ4MzY1IC8gVlQ4MzYyICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiVHdpc3Rlci1LL0tUMTMzeC9LTTEzM1wiLFxuLVx0fSxcbi1cbi1cdC8qIFZUODc1M0EgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NzUzXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQNFgyNjZcIixcbi1cdH0sXG4tXG4tXHQvKiBWVDgzNjYgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84MzY3XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJLVDI2Ni9LWTI2NngvS1QzMzNcIixcbi1cdH0sXG4tXG4tXHQvKiBWVDg2MzMgKGZvciBDdU1pbmUvIENlbGVyb24pICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODY1M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiUHJvMjY2VFwiLFxuLVx0fSxcbi1cbi1cdC8qIEtNMjY2IC8gUE0yNjYgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2Nixcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIlBNMjY2L0tNMjY2XCIsXG4tXHR9LFxuLVxuLVx0LyogQ0xFMjY2ICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODYyWF8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiQ0xFMjY2XCIsXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIktUNDAwL0tUNDAwQS9LVDYwMFwiLFxuLVx0fSxcbi1cbi1cdC8qIFZUODYwNCAvIFZUODYwNSAvIFZUODYwM1xuLVx0ICogKEFwb2xsbyBQcm8xMzNBIGNoaXBzZXQgd2l0aCBTMyBTYXZhZ2U0KSAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIlByb1NhdmFnZSBQTTEzMy9QTDEzMy9QTjEzM1wiXG4tXHR9LFxuLVxuLVx0LyogUDRNMjY2eC9QNE4yNjYgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NzAzXzUxXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQNE0yNjZ4L1A0TjI2NlwiLFxuLVx0fSxcbi1cbi1cdC8qIFZUODc1NCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQVDgwMFwiLFxuLVx0fSxcbi1cbi1cdC8qIFA0WDYwMCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3NjNfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIlA0WDYwMFwiXG4tXHR9LFxuLVxuLVx0LyogS000MDAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJLTTQwMC9LTTQwMEFcIixcbi1cdH0sXG4tXG4tXHQvKiBQVDg4MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BUODgwLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiUFQ4ODBcIixcbi1cdH0sXG4tXG4tXHQvKiBQVDg4MCBVbHRyYSAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BUODgwVUxUUkEsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQVDg4MCBVbHRyYVwiLFxuLVx0fSxcbi1cbi1cdC8qIFBUODkwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODc4M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiUFQ4OTBcIixcbi1cdH0sXG4tXG4tXHQvKiBQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MFwiLFxuLVx0fSxcbi1cdC8qIEtUODgwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiS1Q4ODBcIixcbi1cdH0sXG4tXHQvKiBLVHh4eC9QeDh4eCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIlZUODN4eC9WVDg3eHgvS1R4eHgvUHg4eHhcIixcbi1cdH0sXG4tXHQvKiBQNE04MDAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjk2XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQNE04MDBcIixcbi1cdH0sXG4tXHQvKiBQNE04MDBDRSAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiVlQzMzE0XCIsXG4tXHR9LFxuLVx0LyogVlQzMzI0IC8gQ1g3MDAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZCAgPSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMjQsXG4tXHRcdC5jaGlwc2V0X25hbWUgICA9IFwiQ1g3MDBcIixcbi1cdH0sXG4tXHQvKiBWVDMzMzYgLSB0aGlzIGlzIGEgY2hpcHNldCBmb3IgQU1EIEF0aGxvbi9LOCBDUFUuIER1ZSB0byBLOCdzIHVuaXF1ZVxuLVx0ICogYXJjaGl0ZWN0dXJlLCB0aGUgQUdQIHJlc291cmNlIGFuZCBiZWhhdmlvciBhcmUgZGlmZmVyZW50IGZyb21cbi1cdCAqIHRoZSB0cmFkaXRpb25hbCBBR1Agd2hpY2ggcmVzaWRlcyBvbmx5IGluIGNoaXBzZXQuIEFHUCBpcyB1c2VkXG4tXHQgKiBieSAzRCBkcml2ZXIgd2hpY2ggd2Fzbid0IGF2YWlsYWJsZSBmb3IgdGhlIFZUMzMzNiBhbmQgVlQzMzY0XG4tXHQgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3Jrc1xuLVx0ICogYnV0IFZUMzMzNiBkb2Vzbid0LiAtIGV4cGxhbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXNcbi1cdCAqIGFzIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uXG4tXHQgKi9cbi0jaWYgMFxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMzNixcbi1cdFx0LmNoaXBzZXRfbmFtZSAgID0gXCJWVDMzMzZcIixcbi1cdH0sXG4tI2VuZGlmXG4tXHQvKiBQNE04OTAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZCAgPSBQQ0lfREVWSUNFX0lEX1ZJQV9QNE04OTAsXG4tXHRcdC5jaGlwc2V0X25hbWUgICA9IFwiUDRNODkwXCIsXG4tXHR9LFxuLVx0LyogUDRNOTAwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0LFxuLVx0XHQuY2hpcHNldF9uYW1lICAgPSBcIlA0TTkwMFwiLFxuLVx0fSxcbi1cdHsgfSwgLyogZHVtbXkgZmluYWwgZW50cnksIGFsd2F5cyBwcmVzZW50ICovXG4tfTtcbi1cbiBcbiAvKlxuICAqIFZJQSdzIEFHUDMgY2hpcHNldHMgZG8gbWFnaWNrIHRvIHB1dCB0aGUgQUdQIGJyaWRnZSBjb21wbGlhbnRcbkBAIC00MzcsMTcgKzIzOSwxNCBAQCBzdGF0aWMgdm9pZCBjaGVja192aWFfYWdwMyAoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlKVxuIFxuIHN0YXRpYyBpbnQgYWdwX3ZpYV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4tXHRzdHJ1Y3QgYWdwX2RldmljZV9pZHMgKmRldnMgPSB2aWFfYWdwX2RldmljZV9pZHM7XG4gXHRzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7XG4tXHRpbnQgaiA9IDA7XG4gXHR1OCBjYXBfcHRyO1xuIFxuIFx0Y2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApO1xuIFx0aWYgKCFjYXBfcHRyKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdGogPSBlbnQgLSBhZ3BfdmlhX3BjaV90YWJsZTtcbi1cdHByaW50ayAoS0VSTl9JTkZPIFBGWCBcIkRldGVjdGVkIFZJQSAlcyBjaGlwc2V0XFxuXCIsIGRldnNbal0uY2hpcHNldF9uYW1lKTtcbitcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcIkRldGVjdGVkIFZJQSAlcyBjaGlwc2V0XFxuXCIsIChjb25zdCBjaGFyICopZW50LVx1MDAzZWRyaXZlcl9kYXRhKTtcbiBcbiBcdGJyaWRnZSA9IGFncF9hbGxvY19icmlkZ2UoKTtcbiBcdGlmICghYnJpZGdlKVxuQEAgLTUwMSw5ICszMDAsOCBAQCBzdGF0aWMgaW50IGFncF92aWFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKiBtdXN0IGJlIHRoZSBzYW1lIG9yZGVyIGFzIG5hbWUgdGFibGUgYWJvdmUgKi9cbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX3ZpYV9wY2lfdGFibGVbXSA9IHtcbi0jZGVmaW5lIElEKHgpIFxcXG4rI2RlZmluZSBJRCh4LCBuYW1lKSBcXFxuIFx0e1x0XHRcdFx0XHRcdFxcXG4gXHQuY2xhc3NcdFx0PSAoUENJX0NMQVNTX0JSSURHRV9IT1NUIFx1MDAzY1x1MDAzYyA4KSxcdFxcXG4gXHQuY2xhc3NfbWFza1x0PSB+MCxcdFx0XHRcdFxcXG5AQCAtNTExLDM5ICszMDksNzcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF92aWFfcGNpX3RhYmxlW10gPSB7XG4gXHQuZGV2aWNlXHRcdD0geCxcdFx0XHRcdFxcXG4gXHQuc3VidmVuZG9yXHQ9IFBDSV9BTllfSUQsXHRcdFx0XFxcbiBcdC5zdWJkZXZpY2VcdD0gUENJX0FOWV9JRCxcdFx0XHRcXFxuK1x0LmRyaXZlcl9kYXRhXHQ9IChrZXJuZWxfdWxvbmdfdCluYW1lLFx0XHRcXFxuIFx0fVxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODUwMV8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDFfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM2OTFfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYzM18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2KSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjEpLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM2M18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzY3XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODY1M18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2KSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MlhfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc3XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYwNV8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzU0Q18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NjNfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzgzXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODNfODdYWF8xKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04MDBDRSksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMjQpLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODkwKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBX1ZUMzM2NCksXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMCwgXCJBcG9sbG8gVlAzXCIpLFxuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAsIFwiQXBvbGxvIE1WUDNcIiksXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzAsIFwiQXBvbGxvIE1WUDRcIiksXG4rXHQvKiBWVDg2MDEgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDFfMCwgXCJBcG9sbG8gUHJvTWVkaWEvUExFMTMzVGFcIiksXG4rXHQvKiBWVDgyQzY5M0EgLyBWVDI4QzY5NFQgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzY5MV8wLCBcIkFwb2xsbyBQcm8gMTMzXCIpLFxuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3MV8wLCBcIktYMTMzXCIpLFxuK1x0LyogVlQ4NjMzICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjMzXzAsIFwiUHJvIDI2NlwiKSxcbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2LCBcIkFwb2xsbyBQcm8yNjZcIiksXG4rXHQvKiBWVDgzNjEgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjEsIFwiS0xFMTMzXCIpLFxuK1x0LyogVlQ4MzY1IC8gVlQ4MzYyICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzAsIFwiVHdpc3Rlci1LL0tUMTMzeC9LTTEzM1wiKSxcbitcdC8qIFZUODc1M0EgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCwgXCJQNFgyNjZcIiksXG4rXHQvKiBWVDgzNjYgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjdfMCwgXCJLVDI2Ni9LWTI2NngvS1QzMzNcIiksXG4rXHQvKiBWVDg2MzMgKGZvciBDdU1pbmUvIENlbGVyb24pICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzAsIFwiUHJvMjY2VFwiKSxcbitcdC8qIEtNMjY2IC8gUE0yNjYgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2LCBcIlBNMjY2L0tNMjY2XCIpLFxuK1x0LyogQ0xFMjY2ICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzAsIFwiQ0xFMjY2XCIpLFxuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3N18wLCBcIktUNDAwL0tUNDAwQS9LVDYwMFwiKSxcbitcdC8qIFZUODYwNCAvIFZUODYwNSAvIFZUODYwMyAoQXBvbGxvIFBybzEzM0EgY2hpcHNldCB3aXRoIFMzIFNhdmFnZTQpICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjA1XzAsIFwiUHJvU2F2YWdlIFBNMTMzL1BMMTMzL1BOMTMzXCIpLFxuK1x0LyogUDRNMjY2eC9QNE4yNjYgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCwgXCJQNE0yNjZ4L1A0TjI2NlwiKSxcbitcdC8qIFZUODc1NCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODc1NENfMCwgXCJQVDgwMFwiKSxcbitcdC8qIFA0WDYwMCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODc2M18wLCBcIlA0WDYwMFwiKSxcbitcdC8qIEtNNDAwICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzAsIFwiS000MDAvS000MDBBXCIpLFxuK1x0LyogUFQ4ODAgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1BUODgwLCBcIlBUODgwXCIpLFxuK1x0LyogUFQ4ODAgVWx0cmEgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1BUODgwVUxUUkEsIFwiUFQ4ODAgVWx0cmFcIiksXG4rXHQvKiBQVDg5MCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODc4M18wLCBcIlBUODkwXCIpLFxuK1x0LyogUE04MDAvUE44MDAvUE04ODAvUE44ODAgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAsIFwiUE04MDAvUE44MDAvUE04ODAvUE44ODBcIiksXG4rXHQvKiBLVDg4MCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wLCBcIktUODgwXCIpLFxuK1x0LyogS1R4eHgvUHg4eHggKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSwgXCJWVDgzeHgvVlQ4N3h4L0tUeHh4L1B4OHh4XCIpLFxuK1x0LyogUDRNODAwICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjk2XzAsIFwiUDRNODAwXCIpLFxuK1x0LyogUDRNODAwQ0UgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFLCBcIlZUMzMxNFwiKSxcbitcdC8qIFZUMzMyNCAvIENYNzAwICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMjQsIFwiQ1g3MDBcIiksXG4rXHQvKiBWVDMzMzYgLSB0aGlzIGlzIGEgY2hpcHNldCBmb3IgQU1EIEF0aGxvbi9LOCBDUFUuIER1ZSB0byBLOCdzIHVuaXF1ZVxuK1x0ICogYXJjaGl0ZWN0dXJlLCB0aGUgQUdQIHJlc291cmNlIGFuZCBiZWhhdmlvciBhcmUgZGlmZmVyZW50IGZyb21cbitcdCAqIHRoZSB0cmFkaXRpb25hbCBBR1Agd2hpY2ggcmVzaWRlcyBvbmx5IGluIGNoaXBzZXQuIEFHUCBpcyB1c2VkXG4rXHQgKiBieSAzRCBkcml2ZXIgd2hpY2ggd2Fzbid0IGF2YWlsYWJsZSBmb3IgdGhlIFZUMzMzNiBhbmQgVlQzMzY0XG4rXHQgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3Jrc1xuK1x0ICogYnV0IFZUMzMzNiBkb2Vzbid0LiAtIGV4cGxhbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXNcbitcdCAqIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uXG4rXHQgKi9cbisjaWYgMFxuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LCBcIlZUMzMzNlwiKSxcbisjZW5kaWZcbitcdC8qIFA0TTg5MCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODkwLCBcIlA0TTg5MFwiKSxcbitcdC8qIFA0TTkwMCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0LCBcIlA0TTkwMFwiKSxcbiBcdHsgfVxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmMgYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuY1xuaW5kZXggMDVkY2I2Njc1Y2Q2NjEuLjFjZjUxZjc2MzI5MzJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmNcbisrKyBiL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jXG5AQCAtNTYyLDcgKzU2Miw2IEBAIHN0YXRpYyBpbnQgdHBjaTIwMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXG4gXHQvKiBTYXZlIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgKi9cbiBcdHRwY2kyMDAtXHUwMDNlaW5mby1cdTAwM2VwZGV2ID0gcGRldjtcbi1cdHRwY2kyMDAtXHUwMDNlaW5mby1cdTAwM2VpZF90YWJsZSA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKWlkO1xuIFxuIFx0LyogcmVnaXN0ZXIgdGhlIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBpdCAqL1xuIFx0cmV0ID0gdHBjaTIwMF9pbnN0YWxsKHRwY2kyMDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oIGIvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmhcbmluZGV4IGU3OWFjNjRhYmNmZmFjLi5hMmJmMzEyNTc5NGI3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oXG4rKysgYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaFxuQEAgLTE0NSw3ICsxNDUsNiBAQCBzdHJ1Y3QgdHBjaTIwMF9zbG90IHtcbiAgKi9cbiBzdHJ1Y3QgdHBjaTIwMF9pbmZvcyB7XG4gXHRzdHJ1Y3QgcGNpX2Rldlx0XHRcdCpwZGV2O1xuLVx0c3RydWN0IHBjaV9kZXZpY2VfaWRcdFx0KmlkX3RhYmxlO1xuIFx0c3RydWN0IHRwY2kyMDBfcmVncyBfX2lvbWVtXHQqaW50ZXJmYWNlX3JlZ3M7XG4gXHR2b2lkIF9faW9tZW1cdFx0XHQqY2ZnX3JlZ3M7XG4gXHRzdHJ1Y3QgaXBhY2tfYnVzX2RldmljZVx0XHQqaXBhY2tfYnVzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmNcbmluZGV4IDBkYTg1ZDM2NjQ3ZDkxLi5iZmUzMjY4ZGZkYzE3ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuY1xuQEAgLTEzMCw3ICsxMzAsNiBAQCBzdHJ1Y3QgbWx4c3dfcGNpIHtcbiBcdFx0fSBjb21wO1xuIFx0fSBjbWQ7XG4gXHRzdHJ1Y3QgbWx4c3dfYnVzX2luZm8gYnVzX2luZm87XG4tXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQ7XG4gXHRlbnVtIG1seHN3X3BjaV9jcWVfdiBtYXhfY3FlX3ZlcjsgLyogTWF4aW1hbCBzdXBwb3J0ZWQgQ1FFIHZlcnNpb24gKi9cbiBcdHU4IG51bV9jcXM7IC8qIE51bWJlciBvZiBDUXMgKi9cbiBcdHU4IG51bV9zZHFzOyAvKiBOdW1iZXIgb2YgU0RRcyAqL1xuQEAgLTE3NjgsNyArMTc2Nyw2IEBAIHN0YXRpYyB2b2lkIG1seHN3X3BjaV9tYm94X2ZyZWUoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLFxuIH1cbiBcbiBzdGF0aWMgaW50IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksXG4tXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkLFxuIFx0XHRcdFx0ICAgIHUzMiAqcF9zeXNfc3RhdHVzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kO1xuQEAgLTE4MzksNyArMTgzNyw3IEBAIHN0YXRpYyBpbnQgbWx4c3dfcGNpX3Jlc2V0X3N3KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSlcbiB9XG4gXG4gc3RhdGljIGludFxuLW1seHN3X3BjaV9yZXNldChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbittbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpKVxuIHtcbiBcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWx4c3dfcGNpLVx1MDAzZXBkZXY7XG4gXHRib29sIHBjaV9yZXNldF9zYnJfc3VwcG9ydGVkID0gZmFsc2U7XG5AQCAtMTg0OCw3ICsxODQ2LDcgQEAgbWx4c3dfcGNpX3Jlc2V0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0dTMyIHN5c19zdGF0dXM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KG1seHN3X3BjaSwgaWQsIFx1MDAyNnN5c19zdGF0dXMpO1xuK1x0ZXJyID0gbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KG1seHN3X3BjaSwgXHUwMDI2c3lzX3N0YXR1cyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWNoIHN5c3RlbSByZWFkeSBzdGF0dXMgYmVmb3JlIHJlc2V0LiBTdGF0dXMgaXMgMHgleFxcblwiLFxuIFx0XHRcdHN5c19zdGF0dXMpO1xuQEAgLTE4ODAsNyArMTg3OCw3IEBAIG1seHN3X3BjaV9yZXNldChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRlcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCBpZCwgXHUwMDI2c3lzX3N0YXR1cyk7XG4rXHRlcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCBcdTAwMjZzeXNfc3RhdHVzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVhY2ggc3lzdGVtIHJlYWR5IHN0YXR1cyBhZnRlciByZXNldC4gU3RhdHVzIGlzIDB4JXhcXG5cIixcbiBcdFx0XHRzeXNfc3RhdHVzKTtcbkBAIC0xOTMyLDcgKzE5MzAsNyBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9pbml0KHZvaWQgKmJ1c19wcml2LCBzdHJ1Y3QgbWx4c3dfY29yZSAqbWx4c3dfY29yZSxcbiBcdGlmICghbWJveClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRlcnIgPSBtbHhzd19wY2lfcmVzZXQobWx4c3dfcGNpLCBtbHhzd19wY2ktXHUwMDNlaWQpO1xuK1x0ZXJyID0gbWx4c3dfcGNpX3Jlc2V0KG1seHN3X3BjaSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9yZXNldDtcbiBcbkBAIC0yNDY0LDcgKzI0NjIsNiBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0bWx4c3dfcGNpLVx1MDAzZWJ1c19pbmZvLmRldmljZV9uYW1lID0gcGNpX25hbWUobWx4c3dfcGNpLVx1MDAzZXBkZXYpO1xuIFx0bWx4c3dfcGNpLVx1MDAzZWJ1c19pbmZvLmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIFx0bWx4c3dfcGNpLVx1MDAzZWJ1c19pbmZvLnJlYWRfY2xvY2tfY2FwYWJsZSA9IHRydWU7XG4tXHRtbHhzd19wY2ktXHUwMDNlaWQgPSBpZDtcbiBcbiBcdGVyciA9IG1seHN3X2NvcmVfYnVzX2RldmljZV9yZWdpc3RlcihcdTAwMjZtbHhzd19wY2ktXHUwMDNlYnVzX2luZm8sXG4gXHRcdFx0XHRcdCAgICAgXHUwMDI2bWx4c3dfcGNpX2J1cywgbWx4c3dfcGNpLCBmYWxzZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmNcbmluZGV4IGYzNjc3OGU2MmFjMWE1Li40ODUxMDYxYmFiY2I1ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xuKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXG5AQCAtMjksNiArMjksNDcgQEAgc3RydWN0IHBjaV9keW5pZCB7XG4gXHRzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZDtcbiB9O1xuIFxuKy8qKlxuKyAqIGRvX3BjaV9hZGRfZHluaWQgLSBhZGQgYSBuZXcgUENJIGRldmljZSBJRCB0byB0aGlzIGRyaXZlciBhbmQgcmUtcHJvYmUgZGV2aWNlc1xuKyAqIEBkcnY6IHRhcmdldCBwY2kgZHJpdmVyXG4rICogQGlkOiBJRCB0byBiZSBhZGRlZFxuKyAqIEBjaGVja19kdXA6IHdoZXRoZXIgdG8gY2hlY2sgaWYgbWF0Y2hpbmcgSUQgaXMgYWxyZWFkeSBwcmVzZW50XG4rICpcbisgKiBBZGRzIGEgbmV3IGR5bmFtaWMgcGNpIGRldmljZSBJRCB0byB0aGlzIGRyaXZlciBhbmQgY2F1c2VzIHRoZVxuKyAqIGRyaXZlciB0byBwcm9iZSBmb3IgYWxsIGRldmljZXMgYWdhaW4uICBAZHJ2IG11c3QgaGF2ZSBiZWVuXG4rICogcmVnaXN0ZXJlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4rICpcbisgKiBDT05URVhUOlxuKyAqIERvZXMgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uLlxuKyAqXG4rICogUkVUVVJOUzpcbisgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK3N0YXRpYyBpbnQgZG9fcGNpX2FkZF9keW5pZChzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQsIGJvb2wgY2hlY2tfZHVwKVxuK3tcbitcdHN0cnVjdCBwY2lfZHluaWQgKmR5bmlkLCAqZXhpc3RpbmdfZHluaWQ7XG4rXG4rXHRkeW5pZCA9IGt6YWxsb2Nfb2JqKCpkeW5pZCk7XG4rXHRpZiAoIWR5bmlkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGR5bmlkLVx1MDAzZWlkID0gKmlkO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spIHtcbitcdFx0aWYgKGNoZWNrX2R1cCkge1xuK1x0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZXhpc3RpbmdfZHluaWQsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xuK1x0XHRcdFx0aWYgKHBjaV9tYXRjaF9vbmVfaWQoXHUwMDI2ZXhpc3RpbmdfZHluaWQtXHUwMDNlaWQsIGlkKSkge1xuK1x0XHRcdFx0XHRrZnJlZShkeW5pZCk7XG4rXHRcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmR5bmlkLVx1MDAzZW5vZGUsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZHJpdmVyX2F0dGFjaChcdTAwMjZkcnYtXHUwMDNlZHJpdmVyKTtcbit9XG4rXG4gLyoqXG4gICogcGNpX2FkZF9keW5pZCAtIGFkZCBhIG5ldyBQQ0kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyIGFuZCByZS1wcm9iZSBkZXZpY2VzXG4gICogQGRydjogdGFyZ2V0IHBjaSBkcml2ZXJcbkBAIC01NiwyNSArOTcsMTcgQEAgaW50IHBjaV9hZGRfZHluaWQoc3RydWN0IHBjaV9kcml2ZXIgKmRydixcbiBcdFx0ICB1bnNpZ25lZCBpbnQgY2xhc3MsIHVuc2lnbmVkIGludCBjbGFzc19tYXNrLFxuIFx0XHQgIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpXG4ge1xuLVx0c3RydWN0IHBjaV9keW5pZCAqZHluaWQ7XG4tXG4tXHRkeW5pZCA9IGt6YWxsb2Nfb2JqKCpkeW5pZCk7XG4tXHRpZiAoIWR5bmlkKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGR5bmlkLVx1MDAzZWlkLnZlbmRvciA9IHZlbmRvcjtcbi1cdGR5bmlkLVx1MDAzZWlkLmRldmljZSA9IGRldmljZTtcbi1cdGR5bmlkLVx1MDAzZWlkLnN1YnZlbmRvciA9IHN1YnZlbmRvcjtcbi1cdGR5bmlkLVx1MDAzZWlkLnN1YmRldmljZSA9IHN1YmRldmljZTtcbi1cdGR5bmlkLVx1MDAzZWlkLmNsYXNzID0gY2xhc3M7XG4tXHRkeW5pZC1cdTAwM2VpZC5jbGFzc19tYXNrID0gY2xhc3NfbWFzaztcbi1cdGR5bmlkLVx1MDAzZWlkLmRyaXZlcl9kYXRhID0gZHJpdmVyX2RhdGE7XG4tXG4tXHRzcGluX2xvY2soXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5sb2NrKTtcbi1cdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZHluaWQtXHUwMDNlbm9kZSwgXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5saXN0KTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubG9jayk7XG4tXG4tXHRyZXR1cm4gZHJpdmVyX2F0dGFjaChcdTAwMjZkcnYtXHUwMDNlZHJpdmVyKTtcbitcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkID0ge1xuK1x0XHQudmVuZG9yID0gdmVuZG9yLFxuK1x0XHQuZGV2aWNlID0gZGV2aWNlLFxuK1x0XHQuc3VidmVuZG9yID0gc3VidmVuZG9yLFxuK1x0XHQuc3ViZGV2aWNlID0gc3ViZGV2aWNlLFxuK1x0XHQuY2xhc3MgPSBjbGFzcyxcbitcdFx0LmNsYXNzX21hc2sgPSBjbGFzc19tYXNrLFxuK1x0XHQuZHJpdmVyX2RhdGEgPSBkcml2ZXJfZGF0YSxcbitcdH07XG4rXG4rXHRyZXR1cm4gZG9fcGNpX2FkZF9keW5pZChkcnYsIFx1MDAyNmlkLCBmYWxzZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9hZGRfZHluaWQpO1xuIFxuQEAgLTkwLDYgKzEyMywzMCBAQCBzdGF0aWMgdm9pZCBwY2lfZnJlZV9keW5pZHMoc3RydWN0IHBjaV9kcml2ZXIgKmRydilcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubG9jayk7XG4gfVxuIFxuKy8qKlxuKyAqIGRvX3BjaV9tYXRjaF9pZCAtIFNlZSBpZiBhIFBDSSBJRCBtYXRjaGVzIGEgZ2l2ZW4gcGNpX2lkIHRhYmxlXG4rICogQGlkczogYXJyYXkgb2YgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmVzIHRvIHNlYXJjaCBpblxuKyAqIEBkZXZfaWQ6IHRoZSBhY3R1YWwgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdC5cbisgKiBAaW5jbHVkZV9vdmVycmlkZV9vbmx5OiBhbHNvIG1hdGNoIGFnYWluc3QgZGV2aWNlIElEIGVudHJpZXMgbWFya2VkIGFzIG92ZXJyaWRlIG9ubHkuXG4rICpcbisgKiBSZXR1cm5zIHRoZSBtYXRjaGluZyBwY2lfZGV2aWNlX2lkIHN0cnVjdHVyZSBvclxuKyAqICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuKyAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZG9fcGNpX21hdGNoX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsXG4rXHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRldl9pZCxcbitcdFx0XHRcdFx0XHQgICBib29sIGluY2x1ZGVfb3ZlcnJpZGVfb25seSlcbit7XG4rXHRpZiAoaWRzKSB7XG4rXHRcdHdoaWxlIChpZHMtXHUwMDNldmVuZG9yIHx8IGlkcy1cdTAwM2VzdWJ2ZW5kb3IgfHwgaWRzLVx1MDAzZWNsYXNzX21hc2spIHtcbitcdFx0XHRpZiAoKCFpZHMtXHUwMDNlb3ZlcnJpZGVfb25seSB8fCBpbmNsdWRlX292ZXJyaWRlX29ubHkpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBwY2lfbWF0Y2hfb25lX2lkKGlkcywgZGV2X2lkKSlcbitcdFx0XHRcdHJldHVybiBpZHM7XG4rXHRcdFx0aWRzKys7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbiAvKipcbiAgKiBwY2lfbWF0Y2hfaWQgLSBTZWUgaWYgYSBQQ0kgZGV2aWNlIG1hdGNoZXMgYSBnaXZlbiBwY2lfaWQgdGFibGVcbiAgKiBAaWRzOiBhcnJheSBvZiBQQ0kgZGV2aWNlIElEIHN0cnVjdHVyZXMgdG8gc2VhcmNoIGluXG5AQCAtMTA1LDE0ICsxNjIsOSBAQCBzdGF0aWMgdm9pZCBwY2lfZnJlZV9keW5pZHMoc3RydWN0IHBjaV9kcml2ZXIgKmRydilcbiBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbi1cdGlmIChpZHMpIHtcbi1cdFx0d2hpbGUgKGlkcy1cdTAwM2V2ZW5kb3IgfHwgaWRzLVx1MDAzZXN1YnZlbmRvciB8fCBpZHMtXHUwMDNlY2xhc3NfbWFzaykge1xuLVx0XHRcdGlmIChwY2lfbWF0Y2hfb25lX2RldmljZShpZHMsIGRldikpXG4tXHRcdFx0XHRyZXR1cm4gaWRzO1xuLVx0XHRcdGlkcysrO1xuLVx0XHR9XG4tXHR9XG4tXHRyZXR1cm4gTlVMTDtcbitcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRldl9pZCA9IHBjaV9pZF9mcm9tX2RldmljZShkZXYpO1xuK1xuK1x0cmV0dXJuIGRvX3BjaV9tYXRjaF9pZChpZHMsIFx1MDAyNmRldl9pZCwgdHJ1ZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpX21hdGNoX2lkKTtcbiBcbkBAIC0xMjcsNiArMTc5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9kZXZpY2VfaWRfYW55ID0ge1xuICAqIHBjaV9tYXRjaF9kZXZpY2UgLSBTZWUgaWYgYSBkZXZpY2UgbWF0Y2hlcyBhIGRyaXZlcidzIGxpc3Qgb2YgSURzXG4gICogQGRydjogdGhlIFBDSSBkcml2ZXIgdG8gbWF0Y2ggYWdhaW5zdFxuICAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0XG4rICogQGlkX2NvcHk6IFBsYWNlIHRvIHN0b3JlIGNvcHkgb2YgcGNpX2RldmljZV9pZCBmb3IgZHluYW1pYyBJRFxuICAqXG4gICogVXNlZCBieSBhIGRyaXZlciB0byBjaGVjayB3aGV0aGVyIGEgUENJIGRldmljZSBpcyBpbiBpdHMgbGlzdCBvZlxuICAqIHN1cHBvcnRlZCBkZXZpY2VzIG9yIGluIHRoZSBkeW5pZHMgbGlzdCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBhdWdtZW50ZWRcbkBAIC0xMzQsMTAgKzE4NywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2RldmljZV9pZF9hbnkgPSB7XG4gICogc3RydWN0dXJlIG9yICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2RldmljZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LFxuLVx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK1x0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRfY29weSlcbiB7XG4tXHRzdHJ1Y3QgcGNpX2R5bmlkICpkeW5pZDtcbi1cdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpmb3VuZF9pZCA9IE5VTEwsICppZHM7XG4rXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmRfaWQgPSBOVUxMO1xuK1x0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qIFdoZW4gZHJpdmVyX292ZXJyaWRlIGlzIHNldCwgb25seSBiaW5kIHRvIHRoZSBtYXRjaGluZyBkcml2ZXIgKi9cbkBAIC0xNDUsNDUgKzE5OSwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9kZXZpY2Uoc3RydWN0IHBjaV9kcml2ZXIgKmRydixcbiBcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRkZXZfaWQgPSBwY2lfaWRfZnJvbV9kZXZpY2UoZGV2KTtcbiBcdC8qIExvb2sgYXQgdGhlIGR5bmFtaWMgaWRzIGZpcnN0LCBiZWZvcmUgdGhlIHN0YXRpYyBvbmVzICovXG4tXHRzcGluX2xvY2soXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xuLVx0XHRpZiAocGNpX21hdGNoX29uZV9kZXZpY2UoXHUwMDI2ZHluaWQtXHUwMDNlaWQsIGRldikpIHtcbi1cdFx0XHRmb3VuZF9pZCA9IFx1MDAyNmR5bmlkLVx1MDAzZWlkO1xuLVx0XHRcdGJyZWFrO1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spIHtcbitcdFx0c3RydWN0IHBjaV9keW5pZCAqZHluaWQ7XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xuK1x0XHRcdGlmIChwY2lfbWF0Y2hfb25lX2lkKFx1MDAyNmR5bmlkLVx1MDAzZWlkLCBcdTAwMjZkZXZfaWQpKSB7XG4rXHRcdFx0XHQqaWRfY29weSA9IGR5bmlkLVx1MDAzZWlkO1xuK1x0XHRcdFx0cmV0dXJuIGlkX2NvcHk7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4tXHRzcGluX3VubG9jayhcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spO1xuIFxuK1x0Zm91bmRfaWQgPSBkb19wY2lfbWF0Y2hfaWQoZHJ2LVx1MDAzZWlkX3RhYmxlLCBcdTAwMjZkZXZfaWQsIHJldCBcdTAwM2UgMCk7XG4gXHRpZiAoZm91bmRfaWQpXG4gXHRcdHJldHVybiBmb3VuZF9pZDtcbiBcbi1cdGZvciAoaWRzID0gZHJ2LVx1MDAzZWlkX3RhYmxlOyAoZm91bmRfaWQgPSBwY2lfbWF0Y2hfaWQoaWRzLCBkZXYpKTtcbi1cdCAgICAgaWRzID0gZm91bmRfaWQgKyAxKSB7XG4tXHRcdC8qXG4tXHRcdCAqIFRoZSBtYXRjaCB0YWJsZSBpcyBzcGxpdCBiYXNlZCBvbiBkcml2ZXJfb3ZlcnJpZGUuXG4tXHRcdCAqIEluIGNhc2Ugb3ZlcnJpZGVfb25seSB3YXMgc2V0LCBlbmZvcmNlIGRyaXZlcl9vdmVycmlkZVxuLVx0XHQgKiBtYXRjaGluZy5cbi1cdFx0ICovXG4tXHRcdGlmIChmb3VuZF9pZC1cdTAwM2VvdmVycmlkZV9vbmx5KSB7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbi1cdFx0XHRcdHJldHVybiBmb3VuZF9pZDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXR1cm4gZm91bmRfaWQ7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdC8qIGRyaXZlcl9vdmVycmlkZSB3aWxsIGFsd2F5cyBtYXRjaCwgc2VuZCBhIGR1bW15IGlkICovXG4gXHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4gXHUwMDI2cGNpX2RldmljZV9pZF9hbnk7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX3BjaV9mcmVlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4te1xuLVx0a2ZyZWUodG9fcGNpX2RldihkZXYpKTtcbi19XG4tXG4gLyoqXG4gICogbmV3X2lkX3N0b3JlIC0gc3lzZnMgZnJvbnRlbmQgdG8gcGNpX2FkZF9keW5pZCgpXG4gICogQGRyaXZlcjogdGFyZ2V0IGRldmljZSBkcml2ZXJcbkBAIC0xOTcsMzggKzIzNSwyMiBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBwY2lfZHJpdmVyICpwZHJ2ID0gdG9fcGNpX2RyaXZlcihkcml2ZXIpO1xuIFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcyA9IHBkcnYtXHUwMDNlaWRfdGFibGU7XG4tXHR1MzIgdmVuZG9yLCBkZXZpY2UsIHN1YnZlbmRvciA9IFBDSV9BTllfSUQsXG4tXHRcdHN1YmRldmljZSA9IFBDSV9BTllfSUQsIGNsYXNzID0gMCwgY2xhc3NfbWFzayA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhID0gMDtcbitcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkID0ge1xuK1x0XHQuc3VidmVuZG9yID0gUENJX0FOWV9JRCxcbitcdFx0LnN1YmRldmljZSA9IFBDSV9BTllfSURcbitcdH07XG4gXHRpbnQgZmllbGRzO1xuIFx0aW50IHJldHZhbCA9IDA7XG4gXG4gXHRmaWVsZHMgPSBzc2NhbmYoYnVmLCBcIiV4ICV4ICV4ICV4ICV4ICV4ICVseFwiLFxuLVx0XHRcdFx1MDAyNnZlbmRvciwgXHUwMDI2ZGV2aWNlLCBcdTAwMjZzdWJ2ZW5kb3IsIFx1MDAyNnN1YmRldmljZSxcbi1cdFx0XHRcdTAwMjZjbGFzcywgXHUwMDI2Y2xhc3NfbWFzaywgXHUwMDI2ZHJpdmVyX2RhdGEpO1xuK1x0XHRcdFx1MDAyNmlkLnZlbmRvciwgXHUwMDI2aWQuZGV2aWNlLCBcdTAwMjZpZC5zdWJ2ZW5kb3IsIFx1MDAyNmlkLnN1YmRldmljZSxcbitcdFx0XHRcdTAwMjZpZC5jbGFzcywgXHUwMDI2aWQuY2xhc3NfbWFzaywgXHUwMDI2aWQuZHJpdmVyX2RhdGEpO1xuIFx0aWYgKGZpZWxkcyBcdTAwM2MgMilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoZmllbGRzICE9IDcpIHtcbi1cdFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBremFsbG9jX29iaigqcGRldik7XG4tXHRcdGlmICghcGRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdFx0cGRldi1cdTAwM2V2ZW5kb3IgPSB2ZW5kb3I7XG4tXHRcdHBkZXYtXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xuLVx0XHRwZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3IgPSBzdWJ2ZW5kb3I7XG4tXHRcdHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZSA9IHN1YmRldmljZTtcbi1cdFx0cGRldi1cdTAwM2VjbGFzcyA9IGNsYXNzO1xuLVx0XHRwZGV2LVx1MDAzZWRldi5yZWxlYXNlID0gX3BjaV9mcmVlX2RldmljZTtcbi1cbi1cdFx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuLVx0XHRpZiAocGNpX21hdGNoX2RldmljZShwZHJ2LCBwZGV2KSlcbi1cdFx0XHRyZXR2YWwgPSAtRUVYSVNUO1xuLVxuLVx0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbi1cbi1cdFx0aWYgKHJldHZhbClcbi1cdFx0XHRyZXR1cm4gcmV0dmFsO1xuK1x0XHRpZiAoZG9fcGNpX21hdGNoX2lkKHBkcnYtXHUwMDNlaWRfdGFibGUsIFx1MDAyNmlkLCBmYWxzZSkpXG4rXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHR9XG4gXG4gXHQvKiBPbmx5IGFjY2VwdCBkcml2ZXJfZGF0YSB2YWx1ZXMgdGhhdCBtYXRjaCBhbiBleGlzdGluZyBpZF90YWJsZVxuQEAgLTIzNiw3ICsyNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLFxuIFx0aWYgKGlkcykge1xuIFx0XHRyZXR2YWwgPSAtRUlOVkFMO1xuIFx0XHR3aGlsZSAoaWRzLVx1MDAzZXZlbmRvciB8fCBpZHMtXHUwMDNlc3VidmVuZG9yIHx8IGlkcy1cdTAwM2VjbGFzc19tYXNrKSB7XG4tXHRcdFx0aWYgKGRyaXZlcl9kYXRhID09IGlkcy1cdTAwM2Vkcml2ZXJfZGF0YSkge1xuK1x0XHRcdGlmIChpZC5kcml2ZXJfZGF0YSA9PSBpZHMtXHUwMDNlZHJpdmVyX2RhdGEpIHtcbiBcdFx0XHRcdHJldHZhbCA9IDA7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG5AQCAtMjQ2LDggKzI2OCw3IEBAIHN0YXRpYyBzc2l6ZV90IG5ld19pZF9zdG9yZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdFx0cmV0dXJuIHJldHZhbDtcbiBcdH1cbiBcbi1cdHJldHZhbCA9IHBjaV9hZGRfZHluaWQocGRydiwgdmVuZG9yLCBkZXZpY2UsIHN1YnZlbmRvciwgc3ViZGV2aWNlLFxuLVx0XHRcdCAgICAgICBjbGFzcywgY2xhc3NfbWFzaywgZHJpdmVyX2RhdGEpO1xuK1x0cmV0dmFsID0gZG9fcGNpX2FkZF9keW5pZChwZHJ2LCBcdTAwMjZpZCwgZmllbGRzICE9IDcpO1xuIFx0aWYgKHJldHZhbClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcdHJldHVybiBjb3VudDtcbkBAIC00NDUsMTIgKzQ2NiwxMyBAQCB2b2lkIHBjaV9wcm9iZV9mbHVzaF93b3JrcXVldWUodm9pZClcbiBzdGF0aWMgaW50IF9fcGNpX2RldmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQ7XG4rXHRzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF9jb3B5O1xuIFx0aW50IGVycm9yID0gMDtcbiBcbiBcdGlmIChkcnYtXHUwMDNlcHJvYmUpIHtcbiBcdFx0ZXJyb3IgPSAtRU5PREVWO1xuIFxuLVx0XHRpZCA9IHBjaV9tYXRjaF9kZXZpY2UoZHJ2LCBwY2lfZGV2KTtcbitcdFx0aWQgPSBwY2lfbWF0Y2hfZGV2aWNlKGRydiwgcGNpX2RldiwgXHUwMDI2aWRfY29weSk7XG4gXHRcdGlmIChpZClcbiBcdFx0XHRlcnJvciA9IHBjaV9jYWxsX3Byb2JlKGRydiwgcGNpX2RldiwgaWQpO1xuIFx0fVxuQEAgLTE1MzgsMTIgKzE1NjAsMTMgQEAgc3RhdGljIGludCBwY2lfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbiBcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpO1xuIFx0c3RydWN0IHBjaV9kcml2ZXIgKnBjaV9kcnY7XG4gXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmRfaWQ7XG4rXHRzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF9jb3B5O1xuIFxuIFx0aWYgKHBjaV9kZXZfYmluZGluZ19kaXNhbGxvd2VkKHBjaV9kZXYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHBjaV9kcnYgPSAoc3RydWN0IHBjaV9kcml2ZXIgKil0b19wY2lfZHJpdmVyKGRydik7XG4tXHRmb3VuZF9pZCA9IHBjaV9tYXRjaF9kZXZpY2UocGNpX2RydiwgcGNpX2Rldik7XG4rXHRmb3VuZF9pZCA9IHBjaV9tYXRjaF9kZXZpY2UocGNpX2RydiwgcGNpX2RldiwgXHUwMDI2aWRfY29weSk7XG4gXHRpZiAoZm91bmRfaWQpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IDQ0NjllMWE3N2YzYzEzLi4wNTY3YTg3NjJiYWEwOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuaFxuQEAgLTQ0MiwyMSArNDQyLDM3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9zZXR1cF9jYXJkYnVzKGNoYXIgKnN0cikgeyByZXR1cm4gLUVOT0VOVDsgfVxuICNlbmRpZiAvKiBDT05GSUdfQ0FSREJVUyAqL1xuIFxuIC8qKlxuLSAqIHBjaV9tYXRjaF9vbmVfZGV2aWNlIC0gVGVsbCBpZiBhIFBDSSBkZXZpY2Ugc3RydWN0dXJlIGhhcyBhIG1hdGNoaW5nXG4tICpcdFx0XHQgIFBDSSBkZXZpY2UgaWQgc3RydWN0dXJlXG4tICogQGlkOiBzaW5nbGUgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmUgdG8gbWF0Y2hcbi0gKiBAZGV2OiB0aGUgUENJIGRldmljZSBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdFxuKyAqIHBjaV9pZF9mcm9tX2RldmljZSAtIE9idGFpbiBhIHBjaV9kZXZpY2VfaWQgZnJvbSBhIFBDSSBkZXZpY2VcbisgKiBAZGV2OiB0aGUgUENJIGRldmljZVxuKyAqXG4rICogUmV0dXJucyBhIHBjaV9kZXZpY2VfaWQgZmlsbGVkLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkX2Zyb21fZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3QgcGNpX2RldmljZV9pZCkge1xuK1x0XHQudmVuZG9yID0gZGV2LVx1MDAzZXZlbmRvcixcbitcdFx0LmRldmljZSA9IGRldi1cdTAwM2VkZXZpY2UsXG4rXHRcdC5zdWJ2ZW5kb3IgPSBkZXYtXHUwMDNlc3Vic3lzdGVtX3ZlbmRvcixcbitcdFx0LnN1YmRldmljZSA9IGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlLFxuK1x0XHQuY2xhc3MgPSBkZXYtXHUwMDNlY2xhc3MsXG4rXHR9O1xuK31cbitcbisvKipcbisgKiBwY2lfbWF0Y2hfb25lX2lkIC0gVGVsbCBpZiBhIFBDSSBkZXZpY2UgSUQgbWF0Y2hlcyBhIG5lZWRsZSBQQ0kgZGV2aWNlIGlkXG4rICogQGlkOiBzaW5nbGUgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdCAobmVlZGxlKVxuKyAqIEBkZXZfaWQ6IHRoZSBhY3R1YWwgSUQgZnJvbSB0aGUgUENJIGRldmljZSAoY2FuIGJlIGNyZWF0ZWQgdmlhIHBjaV9pZF9mcm9tX2RldmljZSlcbiAgKlxuICAqIFJldHVybnMgdGhlIG1hdGNoaW5nIHBjaV9kZXZpY2VfaWQgc3RydWN0dXJlIG9yICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKlxuLXBjaV9tYXRjaF9vbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldilcbitwY2lfbWF0Y2hfb25lX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRldl9pZClcbiB7XG4tXHRpZiAoKGlkLVx1MDAzZXZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVx1MDAzZXZlbmRvciA9PSBkZXYtXHUwMDNldmVuZG9yKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoaWQtXHUwMDNlZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlZGV2aWNlID09IGRldi1cdTAwM2VkZXZpY2UpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChpZC1cdTAwM2VzdWJ2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC1cdTAwM2VzdWJ2ZW5kb3IgPT0gZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3IpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChpZC1cdTAwM2VzdWJkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC1cdTAwM2VzdWJkZXZpY2UgPT0gZGV2LVx1MDAzZXN1YnN5c3RlbV9kZXZpY2UpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEoKGlkLVx1MDAzZWNsYXNzIF4gZGV2LVx1MDAzZWNsYXNzKSBcdTAwMjYgaWQtXHUwMDNlY2xhc3NfbWFzaykpXG4rXHRpZiAoKGlkLVx1MDAzZXZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVx1MDAzZXZlbmRvciA9PSBkZXZfaWQtXHUwMDNldmVuZG9yKSBcdTAwMjZcdTAwMjZcbitcdCAgICAoaWQtXHUwMDNlZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlZGV2aWNlID09IGRldl9pZC1cdTAwM2VkZXZpY2UpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChpZC1cdTAwM2VzdWJ2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC1cdTAwM2VzdWJ2ZW5kb3IgPT0gZGV2X2lkLVx1MDAzZXN1YnZlbmRvcikgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGlkLVx1MDAzZXN1YmRldmljZSA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVx1MDAzZXN1YmRldmljZSA9PSBkZXZfaWQtXHUwMDNlc3ViZGV2aWNlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhKChpZC1cdTAwM2VjbGFzcyBeIGRldl9pZC1cdTAwM2VjbGFzcykgXHUwMDI2IGlkLVx1MDAzZWNsYXNzX21hc2spKVxuIFx0XHRyZXR1cm4gaWQ7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guY1xuaW5kZXggZTNkMzE3N2ZjZTU0OWUuLmM4YzRiZmU3ODE3YjAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvc2VhcmNoLmNcbisrKyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jXG5AQCAtMjQ1LDggKzI0NSwxMCBAQCBzdGF0aWMgaW50IG1hdGNoX3BjaV9kZXZfYnlfaWQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpO1xuIFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkID0gZGF0YTtcbitcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRldl9pZDtcbiBcbi1cdGlmIChwY2lfbWF0Y2hfb25lX2RldmljZShpZCwgcGRldikpXG4rXHRkZXZfaWQgPSBwY2lfaWRfZnJvbV9kZXZpY2UocGRldik7XG4rXHRpZiAocGNpX21hdGNoX29uZV9pZChpZCwgXHUwMDI2ZGV2X2lkKSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNDE4LDcgKzQyMCw3IEBAIEVYUE9SVF9TWU1CT0wocGNpX2dldF9jbGFzcyk7XG4gICpcbiAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBsaXN0IG9mIGtub3duIFBDSSBkZXZpY2VzLiBJZiBhIFBDSSBkZXZpY2UgaXMgZm91bmRcbiAgKiB3aXRoIGEgbWF0Y2hpbmcgYmFzZSBjbGFzcyBjb2RlLCB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHRoZSBkZXZpY2UgaXNcbi0gKiBpbmNyZW1lbnRlZC4gU2VlIHBjaV9tYXRjaF9vbmVfZGV2aWNlKCkgdG8gZmlndXJlIG91dCBob3cgZG9lcyB0aGlzIHdvcmtzLlxuKyAqIGluY3JlbWVudGVkLiBTZWUgcGNpX21hdGNoX29uZV9pZCgpIHRvIGZpZ3VyZSBvdXQgaG93IGRvZXMgdGhpcyB3b3Jrcy5cbiAgKiBBIG5ldyBzZWFyY2ggaXMgaW5pdGlhdGVkIGJ5IHBhc3NpbmcgJU5VTEwgYXMgdGhlIEBmcm9tIGFyZ3VtZW50LlxuICAqIE90aGVyd2lzZSBpZiBAZnJvbSBpcyBub3QgJU5VTEwsIHNlYXJjaGVzIGNvbnRpbnVlIGZyb20gbmV4dCBkZXZpY2Ugb24gdGhlXG4gICogZ2xvYmFsIGxpc3QuIFRoZSByZWZlcmVuY2UgY291bnQgZm9yIEBmcm9tIGlzIGFsd2F5cyBkZWNyZW1lbnRlZCBpZiBpdCBpc1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jIGIvZHJpdmVycy9zY3NpL25zcDMyLmNcbmluZGV4IGU4OTNkNTY3NzI0MTdhLi45YzkyODEyMjJhMGFjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jXG4rKysgYi9kcml2ZXJzL3Njc2kvbnNwMzIuY1xuQEAgLTE0NzAsNyArMTQ3MCw3IEBAIHN0YXRpYyBpbnQgbnNwMzJfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IFNjc2lfSG9zdCAqaG9zdClcbiBcdFx0ICAgKG5zcDMyX3JlYWQyKGJhc2UsIElOREVYX1JFRykgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmKTtcbiBcbiBcdG1vZGVfcmVnID0gbnNwMzJfaW5kZXhfcmVhZDEoYmFzZSwgQ0hJUF9NT0RFKTtcbi1cdG1vZGVsICAgID0gZGF0YS1cdTAwM2VwY2lfZGV2aWQtXHUwMDNlZHJpdmVyX2RhdGE7XG4rXHRtb2RlbCAgICA9IGRhdGEtXHUwMDNlbW9kZWw7XG4gXG4gI2lmZGVmIENPTkZJR19QTVxuIFx0c2VxX3ByaW50ZihtLCBcIlBvd2VyIE1hbmFnZW1lbnQ6ICAgICAgJXNcXG5cIixcbkBAIC0yOTA3LDggKzI5MDcsOCBAQCBzdGF0aWMgaW50IG5zcDMyX2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpXG4gICovXG4gc3RhdGljIGludCBuc3AzMl9nZXRwcm9tX3BhcmFtKG5zcDMyX2h3X2RhdGEgKmRhdGEpXG4ge1xuLVx0aW50IHZlbmRvciA9IGRhdGEtXHUwMDNlcGNpX2RldmlkLVx1MDAzZXZlbmRvcjtcbi1cdGludCBkZXZpY2UgPSBkYXRhLVx1MDAzZXBjaV9kZXZpZC1cdTAwM2VkZXZpY2U7XG4rXHRpbnQgdmVuZG9yID0gZGF0YS1cdTAwM2VQY2ktXHUwMDNldmVuZG9yO1xuK1x0aW50IGRldmljZSA9IGRhdGEtXHUwMDNlUGNpLVx1MDAzZWRldmljZTtcbiBcdGludCByZXQsIGk7XG4gXHRpbnQgX19tYXliZV91bnVzZWQgdmFsO1xuIFxuQEAgLTMzNDAsNyArMzM0MCw3IEBAIHN0YXRpYyBpbnQgbnNwMzJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdH1cbiBcbiBcdGRhdGEtXHUwMDNlUGNpXHQgID0gcGRldjtcbi1cdGRhdGEtXHUwMDNlcGNpX2RldmlkICAgPSBpZDtcbitcdGRhdGEtXHUwMDNlbW9kZWwgICAgICAgPSBpZC1cdTAwM2Vkcml2ZXJfZGF0YTtcbiBcdGRhdGEtXHUwMDNlSXJxTnVtYmVyICAgPSBwZGV2LVx1MDAzZWlycTtcbiBcdGRhdGEtXHUwMDNlQmFzZUFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7XG4gXHRkYXRhLVx1MDAzZU51bUFkZHJlc3MgID0gcGNpX3Jlc291cmNlX2xlbiAgKHBkZXYsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oIGIvZHJpdmVycy9zY3NpL25zcDMyLmhcbmluZGV4IDkyNDg4OWY4YmQzN2U3Li45ZTY1NzcxY2I1OTI4NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oXG4rKysgYi9kcml2ZXJzL3Njc2kvbnNwMzIuaFxuQEAgLTU2NCwxMCArNTY0LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9uc3AzMl9od19kYXRhIHtcbiBcbiBcdHN0cnVjdCBzY3NpX2NtbmQgKkN1cnJlbnRTQztcbiBcbi1cdHN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICpQY2k7XG4tXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldmlkO1xuLVx0c3RydWN0IFNjc2lfSG9zdCAgICAgICAgICAgKkhvc3Q7XG4tXHRzcGlubG9ja190ICAgICAgICAgICAgICAgICAgTG9jaztcbitcdHN0cnVjdCBwY2lfZGV2ICAgICpQY2k7XG4rXHRpbnQgICAgICAgICAgICAgICAgbW9kZWw7XG4rXHRzdHJ1Y3QgU2NzaV9Ib3N0ICAqSG9zdDtcbitcdHNwaW5sb2NrX3QgICAgICAgICBMb2NrO1xuIFxuIFx0Y2hhciBpbmZvX3N0clsxMDBdO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5pbmRleCA2NGIzMDhiNmU2MWMxOS4uOTJjMTdjMTE2ZGU2ZDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5AQCAtOTc5LDYgKzk3OSw3IEBAIHN0cnVjdCBtb2R1bGU7XG4gICpcdFx0ZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHdoZW4gdGhlIGRyaXZlciBjaG9vc2VzIHRvXG4gICpcdFx0dGFrZSBcIm93bmVyc2hpcFwiIG9mIHRoZSBkZXZpY2Ugb3IgYW4gZXJyb3IgY29kZVxuICAqXHRcdChuZWdhdGl2ZSBudW1iZXIpIG90aGVyd2lzZS5cbisgKlx0XHRUaGUgcGNpX2RldmljZV9pZCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcgcHJvYmUuXG4gICpcdFx0VGhlIHByb2JlIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3NcbiAgKlx0XHRjb250ZXh0LCBzbyBpdCBjYW4gc2xlZXAuXG4gICogQHJlbW92ZTpcdFRoZSByZW1vdmUoKSBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuZXZlciBhIGRldmljZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDQ6NDQuNDUwNDkwNDY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA2ODU5NjA2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUENJIE1hdGNoaW5nIFJlZmFjdG9yaW5nIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgUENJIGRldmljZSBJRHMgYXJlIG1hdGNoZWQsIHBhcnRpY3VsYXJseSBmb3IgZHluYW1pYyBJRHMgYWRkZWQgdmlhIHN5c2ZzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiB0aGF0IGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHRoZSBzaGlmdCBpbiBob3cgYHBjaV9tYXRjaF9kZXZpY2VgIHdvcmtzLCBlc3BlY2lhbGx5IGl0cyBpbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWNhbGx5IGFkZGVkIElEcy5cblxuSGVyZSdzIG15IGJyZWFrZG93bjpcblxuKiAgICoqQ29yZSBDaGFuZ2U6KiogVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgUENJIG1hdGNoaW5nIGxvZ2ljIHRvIHBhc3MgYSBjb3B5IG9mIHRoZSBtYXRjaGVkIGBwY2lfZGV2aWNlX2lkYCAoYGlkX2NvcHlgKSB0byB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24sIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBJRCAod2hpY2gsIGluIHRoZSBjYXNlIG9mIGR5bmFtaWMgSURzLCBjb3VsZCBiZSBoZWFwLWFsbG9jYXRlZCkuXG4qICAgKipNb3RpdmF0aW9uOioqIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbjogcHJldmlvdXNseSwgZHJpdmVycyBjb3VsZCBzdG9yZSBhIHBvaW50ZXIgdG8gYSBgcGNpX2RldmljZV9pZGAgdGhhdCBtaWdodCBiZWNvbWUgaW52YWxpZCAoZS5nLiwgaWYgdGhlIGR5bmFtaWMgSUQgd2FzIHJlbW92ZWQpLiBUaGUgbmV3IGFwcHJvYWNoIGZvcmNlcyBkcml2ZXJzIHRvIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeSBgZHJpdmVyX2RhdGFgIG9yIHNpbWlsYXIgaW5mb3JtYXRpb24gKmR1cmluZyogdGhlIHByb2JlIGFuZCBub3QgdG8gc3RvcmUgdGhlIG5vdyB0ZW1wb3JhcnkgYHBjaV9kZXZpY2VfaWRgIHBvaW50ZXIuXG4qICAgKipJbXBhY3Q6KiogVGhpcyBpcyBhIGJpZyBkZWFsLiBTZXZlcmFsIGRyaXZlcnMsIGluY2x1ZGluZyBBVEEsIEFHUCwgTWVsbGFub3gsIGFuZCBvdGhlcnMsIGFyZSBkaXJlY3RseSBtb2RpZmllZCB0byByZWZsZWN0IHRoaXMgbmV3IHBhcmFkaWdtLiBUaGVzZSBkcml2ZXJzIG5vdyBuZWVkIHRvIHN0b3JlIGFuZCBhY2Nlc3MgZHJpdmVyLXNwZWNpZmljIGRhdGEgZHVyaW5nIHRoZSBwcm9iZSBpbnN0ZWFkIG9mIHRoZSBgcGNpX2RldmljZV9pZGAgcG9pbnRlciBpdHNlbGYuXG4qICAgKipGdXp6aW5nIFBvdGVudGlhbDoqKiBUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCBmdXp6aW5nLXdpc2UsIGlzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN5c2ZzIChgbmV3X2lkYCksIGR5bmFtaWMgSUQgaGFuZGxpbmcsIGFuZCB0aGUgUENJIG1hdGNoaW5nIGNvcmUuIFN5emthbGxlciBjYW4gZWFzaWx5IGludGVyYWN0IHdpdGggc3lzZnMgYW5kIGFkZCBkeW5hbWljIElEcyAodHJpZ2dlcmluZyBgbmV3X2lkX3N0b3JlYCwgd2hpY2ggY2FsbHMgYGRvX3BjaV9hZGRfZHluaWRgKS4gVGhlIHByb2JpbmcgcHJvY2VzcyB0aGVuIGdvZXMgdGhyb3VnaCBgcGNpX21hdGNoX2RldmljZWAgYW5kIGBwY2lfbWF0Y2hfb25lX2lkYC4gVGhlIGNoYW5nZWQgbG9naWMgaXMgaW50ZXJlc3RpbmcuXG4qICAgKipGdXp6aW5nIFRhcmdldHM6KiogSSd2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcyBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0czpcbiAgICAqICAgYGRvX3BjaV9hZGRfZHluaWRgXG4gICAgKiAgIGBuZXdfaWRfc3RvcmVgXG4gICAgKiAgIGBwY2lfbWF0Y2hfZGV2aWNlYFxuICAgICogICBgcGNpX21hdGNoX29uZV9pZGBcbiAgICAqICAgYF9fcGNpX2RldmljZV9wcm9iZWBcbiogICAqKk1vZGlmaWVkIERyaXZlcnMgKGFsc28gdG8gZnV6eik6KipcbiAgICAqICAgYGF0YV9nZW5lcmljX2luaXRfb25lYFxuICAgICogICBgYWdwX2FtZGs3X3Byb2JlYFxuICAgICogICBgYWdwX3ZpYV9wcm9iZWBcbiAgICAqICAgYHRwY2kyMDBfcGNpX3Byb2JlYFxuICAgICogICBgbWx4c3dfcGNpX3Byb2JlYFxuICAgICogICBgbnNwMzJfcHJvYmVgXG4qICAgKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zOioqIEkgbmVlZCB0byB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbW9kaWZpZWQgZHJpdmVycyB0byBiZSBlbmFibGVkLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBjaGVjayBmb3I6XG4gICAgKiAgIGBBVEFfR0VORVJJQ2BcbiAgICAqICAgYEFHUF9BTUQ2NGAgb3IgYEFHUF9BTURLN2BcbiAgICAqICAgYEFHUF9WSUFgXG4gICAgKiAgIGBUUENJMjAwYFxuICAgICogICBgTUxYU1dfUENJYFxuICAgICogICBgU0NTSV9OU1AzMmBcbiAgICAqICBgQ09ORklHX1BDSWAgKHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdClcblxuU3l6a2FsbGVyIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYG5ld19pZGAgc3lzZnMgZW50cnkgYW5kIGNhbiB0cmlnZ2VyIGR5bmFtaWMgSUQgYWRkaXRpb24sIGxlYWRpbmcgdG8gZXhlY3V0aW9uIG9mIHRoZSBQQ0kgcHJvYmluZyBmdW5jdGlvbnMgd2hpY2ggaW4gdHVybiBjYWxscyB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgc2V0IG9mIGNoYW5nZXMgb2ZmZXJzIGludGVyZXN0aW5nIGZ1enppbmcgc2NlbmFyaW9zLiBUaGUgZHJpdmVycyB0aGF0IHdlcmUgY2hhbmdlZCB3aWxsIG5lZWQgdG8gYmUgZnV6emVkIGFzIHdlbGwgdG8gdGVzdCB0aGUgZXh0cmFjdGlvbiBhbmQgc3RvcmFnZSBvZiBkcml2ZXIgZGF0YSBkdXJpbmcgcHJvYmluZy4gSXQgYWxsIGNvbWVzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTowNS4xMzY0NTM3OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MjEzMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEFfR0VORVJJQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2F0YS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hdGEvS2NvbmZpZz0xMTYzPWNvbmZpZyBQQVRBX0FDUElcXG4tLVxcbmRyaXZlcnMvYXRhL0tjb25maWctMTE3Mi1cXG5kcml2ZXJzL2F0YS9LY29uZmlnOjExNzM6Y29uZmlnIEFUQV9HRU5FUklDXFxuZHJpdmVycy9hdGEvS2NvbmZpZy0xMTc0LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIEFUQSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTowNS4yNTU2NzI5MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA5MTYwMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipJbnRlcm5hbCBNdXNpbmdzIG9uIEFUQV9HRU5FUklDKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMuLi4gYEFUQV9HRU5FUklDYC4gSG1tLCBsZXQncyBzZWUuIFRoZSB0ZXh0IHNheXMuLi4gd2VsbCwgaXQgKmlzKiBgQVRBX0dFTkVSSUNgLiBPa2F5LCB0aGF0J3Mgbm90IGV4YWN0bHkgcmV2ZWxhdG9yeSwgaXMgaXQ/IENsZWFybHksIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudCBpcyB0aGF0IGBBVEFfR0VORVJJQ2AgaXMsIGluIGZhY3QsIGBBVEFfR0VORVJJQ2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBJIHdvbmRlciB3aHkgdGhpcyBzdGF0ZW1lbnQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBub3RlZC4gSXMgaXQgc2ltcGx5IGEgbWF0dGVyIG9mIGVzdGFibGlzaGluZyB0aGUgZ3JvdW5kd29yayBmb3IgbW9yZSBjb21wbGV4IGludGVyYWN0aW9ucz8gSXMgdGhlcmUgYSBuZWVkIHRvIGRlZmluZSB0aGUgdGhpbmcgYXMgaXRzZWxmLCBwZXJoYXBzIHdpdGhpbiB0aGUgY29udGV4dCBvZiBzb21lIGJyb2FkZXIgc3lzdGVtIG9yIHNwZWNpZmljYXRpb24/IEl0IHNlZW1zIGxpa2UgdGhpcyBtaWdodCBiZSBtb3JlIG9mIGEgcGxhY2Vob2xkZXIgdGhhbiBhIHJldmVsYXRpb24uIFNvLCBJIG5lZWQgdG8gc3RhcnQgYnVpbGRpbmcgY29udGV4dC4gSG93IGNhbiBJIGV4cGFuZCB1cG9uIHRoaXMgaW4gYSBtZWFuaW5nZnVsIHdheT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTowOC4xNjQ4MzYxMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTczNDA0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFHUF9BTURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jaGFyL2FncC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jaGFyL2FncC9LY29uZmlnPTQ1PWNvbmZpZyBBR1BfQVRJXFxuLS1cXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctNTEtXFxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnOjUyOmNvbmZpZyBBR1BfQU1EXFxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctNTgtXFxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnOjU5OmNvbmZpZyBBR1BfQU1ENjRcXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctNjAtXFx0dHJpc3RhdGUgXFxcIkFNRCBPcHRlcm9uL0F0aGxvbjY0IG9uLUNQVSBHQVJUIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjA4LjI4MjE4NzgwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDM0MDY0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEFHUF9BTUQgVmFyaWFibGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFNlZWluZyBcIkFHUFxcX0FNRFwiIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gQWNjZWxlcmF0ZWQgR3JhcGhpY3MgUG9ydCAoQUdQKSBhbmQgQU1EIGhhcmR3YXJlLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIHVuZGVyc2NvcmUgaXMgaW50ZXJlc3RpbmcsIGl0IGltcGxpZXMgYSB2YXJpYWJsZSBvciBhIGxhYmVsLCBub3QgYSBkaXJlY3QgY29tbWFuZCBvciBmaWxlbmFtZS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcImlzIHRoaXMgYSBzeXN0ZW0gdmFyaWFibGUsIGEgZHJpdmVyIHNldHRpbmcsIGEgcmVnaXN0cnkga2V5LCBvciBwYXJ0IG9mIGEgY29uZmlndXJhdGlvbiBmaWxlP1wiIFdpdGhvdXQgbW9yZSBjb250ZXh0LCBpdCdzIGltcG9zc2libGUgdG8gc2F5IGZvciBzdXJlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBJJ20gZW5jb3VudGVyaW5nIHRoaXMgdGV4dC5cblxuSWYgSSB3ZXJlIHRvIHRha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MsIEnigJlkIHByZXN1bWUgaXQgcmVmZXJzIHRvIGEgcGFydGljdWxhciBBR1Agc2V0dGluZyBvciBhIGZlYXR1cmUgdGhhdOKAmXMgc3BlY2lmaWMgdG8gQU1EIGhhcmR3YXJlLCBwb3NzaWJseSBpbiBhIGRyaXZlciBjb25maWd1cmF0aW9uLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIEFHUCBhcGVydHVyZSBzaXplLCBBR1AgdHJhbnNmZXIgcmF0ZSBtb2RlcyAobGlrZSA0eCBvciA4eCksIG9yIHBlcmhhcHMgZXZlbiBzb21lIHByb3ByaWV0YXJ5IEFNRCBleHRlbnNpb24gZm9yIEFHUC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRvIGludmVzdGlnYXRlIHBvdGVudGlhbCBkcml2ZXIgc2V0dGluZ3Mgb3IgQklPUyBzZXR0aW5ncyBmb3IgYW4gQU1ELWJhc2VkIHN5c3RlbSB3aXRoIEFHUC4gVGhlIHZhcmlhYmxlIGl0c2VsZiwgYnkgbmFtaW5nIHRoZSBoYXJkd2FyZSAqYW5kKiB0aGUgdGVjaG5vbG9neSwgc3VnZ2VzdHMgYW4gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBUaGUgcHJlY2lzZSBtZWFuaW5nLCB0aG91Z2gsIGlzIGVudGlyZWx5IGRlcGVuZGVudCBvbiB0aGUgc3lzdGVtIG9yIGNvZGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NToxMS45MjU1OTY4NzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg1NzA3MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBR1BfVklBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvY2hhci9hZ3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZz05OD1jb25maWcgQUdQX1NXT1JLU1xcbi0tXFxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnLTEwNC1cXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWc6MTA1OmNvbmZpZyBBR1BfVklBXFxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnLTEwNi1cXHR0cmlzdGF0ZSBcXFwiVklBIGNoaXBzZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6MTIuMzExMzA5NTI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxODA1NDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiB0ZWNobmljYWwgY29uY2VwdHM6XG5cbioqVGhlIENvcmUgSWRlbnRpdHkgb2YgQUdQX1ZJQSoqXG5cbkhtbSwgc28gdGhlIHRob3VnaHQgaXMgc2ltcGx5IFwiQUdQX1ZJQSBpcyBgQUdQX1ZJQWAuXCIgSW50ZXJlc3RpbmcuIE9uIHRoZSBzdXJmYWNlLCBpdCBzZWVtcyBhbG1vc3QgdGF1dG9sb2dpY2FsLCBhIHZlcnkgYmFzaWMgaWRlbnRpdHkgc3RhdGVtZW50LiBCdXQgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhlcmUncyBtb3JlIGJlbmVhdGggdGhlIHN1cmZhY2UuIEl0J3Mgbm90IGp1c3QgYSBkZWNsYXJhdGlvbjsgaXQncyBhIGZvdW5kYXRpb25hbCB1bmRlcnN0YW5kaW5nLiBJdCdzIGFja25vd2xlZGdpbmcgdGhhdCB0aGUgaWRlbnRpZmllciBcIkFHUF9WSUFcIiByZXByZXNlbnRzLCBieSBkZWZpbml0aW9uLCAqQUdQX1ZJQSouIFRoZXJlJ3Mgbm8gaGlkZGVuIHZhcmlhYmxlLCBubyBhbWJpZ3VpdHkuIEl0IGFzc2VydHMgdGhlIGNvcmUgZXNzZW5jZSBvZiB0aGF0IHNwZWNpZmljIGVsZW1lbnQsIHdoYXRldmVyIGl0J3MgcmVmZXJyaW5nIHRvLCBpcyBpdHMgb3duIGlkZW50aWZpZXIuIEl0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6MTUuMzI5MzY2NDI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTUxNzE5NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRQQ0kyMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pcGFjay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjE1LjQxODg5NjU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTQxODI5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gbG9jYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIFwidHBjaTIwMCxcIiBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmUgZm9yIElQQUNLIGNhcnJpZXJzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL2lwYWNrL2NhcnJpZXJzL0tjb25maWdgLiBJdCdzIGFsbW9zdCByZWZsZXhpdmUgYXQgdGhpcyBwb2ludCDigJMgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gVGhleSdyZSB3aGVyZSB0aGVzZSBraW5kcyBvZiBoYXJkd2FyZSBvcHRpb25zIGFyZSB1c3VhbGx5IGRlZmluZWQgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBlc3RhYmxpc2hlZC4gSnVtcGluZyBpbnRvIHRoaXMgZGlyZWN0b3J5IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBmaXJzdCBzdGVwLiBJIHN1c3BlY3QgdGhhdCBlaXRoZXIgXCJ0cGNpMjAwXCIgaXMgZXhwbGljaXRseSBuYW1lZCBpbiBhIG1lbnUgZW50cnksIG9yIGl0J3MgcGFydCBvZiBhIGJyb2FkZXIgc2V0IG9mIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBJIGNhbiB0aGVuIHRyYWNlLiBJdCBpcyB2ZXJ5IGxpa2VseSBhIGJvb2xlYW4gb3B0aW9uLCBwb3NzaWJseSBkZXBlbmRlbnQgb24gYW5vdGhlciBtb3JlIGdlbmVyaWMgYm9hcmQgb3B0aW9uLiBJdCBjb3VsZCBhbHNvIGJlIGRlZmluZWQgaW4gYW4gaW5jbHVkZXMgZmlsZSBhbmQgcHVsbGVkIGludG8gdGhpcyBLY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgyNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjE5LjIzMzA4MjUxMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2NzQyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lwYWNrL2NhcnJpZXJzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pcGFjay9jYXJyaWVycy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pcGFjay9jYXJyaWVycy9LY29uZmlnOjI6Y29uZmlnIEJPQVJEX1RQQ0kyMDBcXG5kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgdGhlIFRFV1MgVFBDSS0yMDAgSW5kdXN0cnlQYWNrIGNhcnJpZXIgYm9hcmRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjE5LjMxNjc2NDE4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTcxNTAyOTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWNvZGluZyBCT0FSRF9UUENJMjAwOiBBIENvbmNpc2UgUmVmbGVjdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gU2VlaW5nIFwiQk9BUkRfVFBDSTIwMCBpcyBgQk9BUkRfVFBDSTIwMGBcIiBpcyBlc3NlbnRpYWxseSBhIHRhdXRvbG9neS4gSXQncyBhIHN0YXRlbWVudCBvZiBpZGVudGl0eSwgbm90aGluZyBtb3JlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHJlY29nbml6ZSB0aGlzIGFzIGEgcGxhY2Vob2xkZXIsIHBlcmhhcHMgaW4gc29tZSBjb2RlIG9yIGRvY3VtZW50YXRpb24uIEl0J3MgYSBiYXNpYyBhc3NpZ25tZW50LlxuXG5UaGUga2V5IGxpZXMgaW4gKndoeSogaXQncyBwcmVzZW50ZWQgdGhpcyB3YXkuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBkZWJ1Z2dpbmcgc2NlbmFyaW8/IEEgcnVkaW1lbnRhcnkgY2hlY2s/IE9yIHBlcmhhcHMgaXQncyBhIGNvbXBvbmVudCBpbiBhIGxhcmdlciBzeXN0ZW0gd2hlcmUgdGhlIGFjdHVhbCB2YWx1ZSBpcyBkZXJpdmVkIG9yIGR5bmFtaWNhbGx5IGFzc2lnbmVkIGxhdGVyIGFuZCB0aGlzIGlzIHRoZSBpbml0aWFsIGFzc2lnbm1lbnQgcGxhY2Vob2xkZXI/IEknZCBuZWVkIG1vcmUgY29udGV4dC5cblxuVGhlIGZvcm0gc3VnZ2VzdHMgYSBzeW1ib2wgYW5kIGEgbGl0ZXJhbCByZWZlcmVuY2UgdG8gaXRzZWxmLiBJdCdzIGFsbW9zdCB0b28gc2ltcGxpc3RpYy4gVGhlIHJlYWwgaW50ZXJlc3QgaXMgdGhlICpwdXJwb3NlKiBiZWhpbmQgaXQsIHdoYXQgdGhpcyByZXByZXNlbnRzIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJcyBpdCBhIGNvbnN0YW50LCBhIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2l0aG91dCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBJJ20gbGVmdCB0byBzcGVjdWxhdGUgb24gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uIFRoZSBpbW1lZGlhdGUgcmVzcG9uc2UgaXMgdG8gY29uc2lkZXIgaXQgYSBiYXNpYyBidWlsZGluZyBibG9jaywgYSBrbm93biBxdWFudGl0eSwgYSBcImtub3duIGtub3duLFwiIGlmIHlvdSB3aWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE3NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjI0LjQ4ODI3MDE1MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2ODA1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1MWFNXX1BDSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZz0yNT1jb25maWcgTUxYU1dfQ09SRV9USEVSTUFMXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTMyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc6MzM6Y29uZmlnIE1MWFNXX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzQtXFx0dHJpc3RhdGUgXFxcIlBDSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1lbGxhbm94IFRlY2hub2xvZ2llcyBTd2l0Y2ggQVNJQ3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjI0LjU4Njk1NTg3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUwOTc0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBJbW1lZGlhdGUgQXNzZXNzbWVudDogTUxYU1dfUENJKipcblxuUmlnaHQsIHNvLCB0aGUgaW5wdXQgc2ltcGx5IHN0YXRlcyBcIk1MWFNXX1BDSSBpcyBgTUxYU1dfUENJYC5cIiBUaGlzIGlzIGEgZnVuZGFtZW50YWwsIHRhdXRvbG9naWNhbCBzdGF0ZW1lbnQuIEVzc2VudGlhbGx5LCBpdCdzIGFuIGFzc2VydGlvbiB0aGF0IHNvbWV0aGluZyDigJMgKk1MWFNXX1BDSSog4oCTIGlzIGVxdWFsIHRvIGl0c2VsZi4gSXQncyBhIHBsYWNlaG9sZGVyLCBhIHN0YXJ0aW5nIHBvaW50LiBJdCdzIG5vdCBwcm92aWRpbmcgYW55IG5ldyBpbmZvcm1hdGlvbiBvciBpbnNpZ2h0IG9uIGl0cyBvd24uIEl0J3MgdGhlIGVxdWl2YWxlbnQgb2Ygc2F5aW5nIFwiYSB0cmVlIGlzIGEgdHJlZS5cIiBXaGlsZSBvYnZpb3VzLCBpdCBjb3VsZCBiZSB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIG1vcmUgY29tcGxleCBjb25jZXB0cyBidWlsZC4gVGhpcyBiZWdzIHRoZSBxdWVzdGlvbiwgd2hlcmUgd2lsbCB0aGlzIHRha2UgbWU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6MjcuODM3OTMyMzI0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI5NTIxOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNDU0lfTlNQMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvS2NvbmZpZz0xMTkxPWNvbmZpZyBTQ1NJX0FNNTNDOTc0XFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xMjA2LVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnOjEyMDc6Y29uZmlnIFNDU0lfTlNQMzJcXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xMjA4LVxcdHRyaXN0YXRlIFxcXCJXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NToyOC4wMDA4ODg4MjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5Njk3MzEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0NTSV9OU1AzMiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYFNDU0lfTlNQMzJgIGlzLCB3ZWxsLCBgU0NTSV9OU1AzMmAuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGFyZTogYEFUQV9HRU5FUklDYCwgYEFHUF9BTURgLCBgQUdQX1ZJQWAsIGBCT0FSRF9UUENJMjAwYCwgYE1MWFNXX1BDSWAsIGFuZCBgU0NTSV9OU1AzMmAuXG5cbk5vdywgc29tZXRoaW5nJ3MgbmFnZ2luZyBhdCBtZSBhYm91dCBgU0NTSV9OU1AzMmAuIEkgaGF2ZSBhIGZlZWxpbmcgaXQgY291bGQgYmUgZGVwZW5kZW50IG9uIHNvbWV0aGluZyBsaWtlIGBQQ01DSUFgIG9yIGEgc2ltaWxhciBsZWdhY3kgaW50ZXJmYWNlLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAgdG8gYXZvaWQgcG90ZW50aWFsIGNvbmZsaWN0cyBvciB1bmZvcmVzZWVuIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggb2xkZXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6MzEuNDk3ODY0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMTQ4MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTQ1NJX05TUDMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvc2NzaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9LY29uZmlnPTExOTE9Y29uZmlnIFNDU0lfQU01M0M5NzRcXG4tLVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTEyMDYtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6MTIwNzpjb25maWcgU0NTSV9OU1AzMlxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTEyMDgtXFx0dHJpc3RhdGUgXFxcIldvcmtiaXQgTmluamFTQ1NJLTMyQmkvVURFIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjMxLjU5OTAxNjc0MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU3NjEwMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBjbGVhci4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIG5vdyBpczogTGV0J3MgcmVhZCB0aGUgZGVwZW5kZW5jaWVzLiBCZWZvcmUgSSBjYW4gZWZmZWN0aXZlbHkgZGlhZ25vc2UsIHJlZmFjdG9yLCBvciBldmVuIGp1c3QgKnVuZGVyc3RhbmQqIHRoZSBzeXN0ZW0gaW4gZnJvbnQgb2YgbWUsIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgcmVsaWVzIG9uLiBJJ20gbm90IGxvb2tpbmcgZm9yIGEgc3VwZXJmaWNpYWwgb3ZlcnZpZXc7IEkgbmVlZCBhIGRldGFpbGVkIHBpY3R1cmUuIEknbSBmb2N1c2luZyBvbiB0aGVpciB2ZXJzaW9ucywgdGhlIGludGVycmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZW0sIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBqdW1wIG91dC4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgaG93IGVhY2ggZGVwZW5kZW5jeSBjb250cmlidXRlcywgYW5kIHdoZXJlIHRoZSBtb3N0IGNvbXBsZXggaW50ZXJhY3Rpb25zIGxpZS4gVGhpcyBmaXJzdCBzdGVwIGlzIGFic29sdXRlbHkgY3J1Y2lhbC4gV2l0aG91dCB0aGlzIGRldGFpbGVkIHZpZXcsIGFueSBmdXJ0aGVyIGFuYWx5c2lzIHdpbGwgYmUgaGFwaGF6YXJkIGFuZCBsaWtlbHkgbGVhZCB0byBlcnJvcnMgZG93biB0aGUgbGluZS4gSXQncyB0aGUgZm91bmRhdGlvbiBvZiBhIHNvdW5kIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzQzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTozNC41NTY2MzA5MTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDc6XFx0Y29uZmlnIFNDU0lfTlNQMzJcXG4xMjA4OlxcdFxcdHRyaXN0YXRlIFxcXCJXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBzdXBwb3J0XFxcIlxcbjEyMDk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgU0NTSSBcXHUwMDI2XFx1MDAyNiAhNjRCSVQgXFx1MDAyNlxcdTAwMjYgSEFTX0lPUE9SVFxcbjEyMTA6XFx0XFx0aGVscFxcbjEyMTE6XFx0XFx0ICBUaGlzIGlzIHN1cHBvcnQgZm9yIHRoZSBXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBQQ0kvQ2FyZGJ1c1xcbjEyMTI6XFx0XFx0ICBTQ1NJIGhvc3QgYWRhcHRlci4gUGxlYXNlIHJlYWQgdGhlIFNDU0ktSE9XVE8sIGF2YWlsYWJsZSBmcm9tXFxuMTIxMzpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1xcdTAwM2UuXFxuMTIxNDpcXHRcXG4xMjE1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuMTIxNjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBuc3AzMi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6MzQuNTU2NzczMjM0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDM5NDU2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgU3l6a2FsbGVyJ3MgQXJjaGl0ZWN0dXJhbCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIHRoYXQgdGhpcyB3aG9sZSBsaW5lIG9mIHRoaW5raW5nIGlzIGRlcGVuZGVudCBvbiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSA2NC1iaXQgYXJjaGl0ZWN0dXJlLCB3aGljaCBTeXprYWxsZXIsIGluIGl0cyB0eXBpY2FsIGNvbmZpZ3VyYXRpb25zICh4ODZfNjQgYW5kIGFybTY0KSwgdGVuZHMgdG8gYmUuIElmIHRoaXMgY29kZSBwYXRoIGlzIGNvbmRpdGlvbmVkIG9uIGAhNjRCSVRgLCB0aGVuIHRoZSBwcmFjdGljYWxpdHkgb2YgdGVzdGluZyBgU0NTSV9OU1AzMmAgYmVjb21lcyBxdWVzdGlvbmFibGUgaW4gb3VyIHVzdWFsIFN5emthbGxlciBlbnZpcm9ubWVudC4gSXQgbWlnaHQgbm90IGV2ZW4gKmJlKiB0ZXN0YWJsZSwgYnV0IHRoYXQgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHdlIHNob3VsZCBleGNsdWRlIGl0IGZyb20gYSBsaXN0LCByaWdodD8gV2UgY2FuIGNlcnRhaW5seSAqbGlzdCogaXQuIFdlIHNob3VsZCBkZWZpbml0ZWx5IGxpc3QgaXQuXG5cbk5vdywgc2hpZnRpbmcgZ2VhcnMuLi5sZXQncyBnbyBhaGVhZCBhbmQgZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJPQVJEX1RQQ0kyMDBgLiBMZXQncyBzZWUgd2hhdCB0aGF0IGltcGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTozOC41MDA3MjExMDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pcGFjay9jYXJyaWVycy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQk9BUkRfVFBDSTIwMFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgZm9yIHRoZSBURVdTIFRQQ0ktMjAwIEluZHVzdHJ5UGFjayBjYXJyaWVyIGJvYXJkXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJUEFDS19CVVNcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFRFV1MgVFBDSTIwMCBJbmR1c3RyeVBhY2sgY2FycmllciBib2FyZC5cXG4gICA4OlxcdFxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTozOC41MDA3Nzk2NjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NzMyOTk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBjb250aW5nZW50IG9uIGBJUEFDS19CVVNgLiBUaGF0J3MgdGhlIGtleSB2YXJpYWJsZSwgdGhlIGxpbmNocGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IHdoYXQgKnByZWNpc2VseSogYWJvdXQgYElQQUNLX0JVU2A/IElzIGl0IHRoZSB2YWx1ZSwgdGhlIHN0YXRlLCB0aGUgYXZhaWxhYmlsaXR5LCB0aGUgY29uZmlndXJhdGlvbiwgdGhlIHByb3RvY29sIGJlaW5nIHVzZWQgb24gaXQsIHRoZSBkYXRhIHRyYW5zbWl0dGVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGRlcGVuZGVuY3kgaXMgc3RhdGVkLCBidXQgdGhlIG5hdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSBpc24ndC5cblxuTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGNvdWxkIG1lYW4gYSBtdWx0aXR1ZGUgb2YgdGhpbmdzLiBXZSBuZWVkIHRvIGRyaWxsIGRvd24uIElzIHRoaXMgYW4gaW5wdXQgdG8gYSBzcGVjaWZpYyBjYWxjdWxhdGlvbj8gQSBjb25kaXRpb24gZm9yIHRyaWdnZXJpbmcgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIG1vZHVsZT8gSXMgdGhlIHN5c3RlbSBzdGF0ZSBkZWZpbmVkPyBJcyB0aGVyZSBhbiBpbXBsaWVkIGNvbnN0cmFpbnQgaW4gdGhlIGRlc2lnbj8gSXMgYElQQUNLX0JVU2AgYmVpbmcgdHJlYXRlZCBhcyBhIGJsYWNrYm94IGhlcmUsIG9yIGNhbiBpdHMgaW5uZXIgd29ya2luZ3MgYmUgZGVmaW5lZD8gV2l0aG91dCBmdXJ0aGVyIGNvbnRleHQsIHRoZSBtZWFuaW5nIGlzIGVzc2VudGlhbGx5IG9wYXF1ZS4gV2hhdCBpcyBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0PyBXaXRob3V0IG1vcmUgaW5mb3JtYXRpb24sIEknbSBsZWZ0IGd1ZXNzaW5nLiBJIG5lZWQgbW9yZSBkYXRhIHRvIG1lYW5pbmdmdWxseSBpbnRlcnByZXQgdGhlICdkZXBlbmRlbmN5Jy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6NDEuNzQ4MTEyMTAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIwNjA3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQQUNLX0JVU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lwYWNrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pcGFjay9LY29uZmlnLTUtXFxuZHJpdmVycy9pcGFjay9LY29uZmlnOjY6bWVudWNvbmZpZyBJUEFDS19CVVNcXG5kcml2ZXJzL2lwYWNrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSW5kdXN0cnlQYWNrIGJ1cyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTo0MS45MDAxNzgyMjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5OTg1OTE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkNvbnNpZGVyaW5nIEJ1cyBBcmNoaXRlY3R1cmVzKipcblxuUmlnaHQsIHNvIEkgc2VlIHdlIGFic29sdXRlbHkgbmVlZCB0byBpbmNvcnBvcmF0ZSBgSVBBQ0tfQlVTYCBpbnRvIHRoZSBkZXNpZ24uIFRoYXQncyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50LiBOb3csIGxldCdzIGNpcmNsZSBiYWNrIHRvIG90aGVyIGNvbW1vbiBhcmNoaXRlY3R1cmVzLiBXZSBzaG91bGQgcmV2aXNpdCB0aGUgc3BlY2lmaWNzIG9mIGBBR1BfQU1EYCBhbmQgYEFHUF9WSUFgLiBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXRzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhleSBtaWdodCBpbmZsdWVuY2UgdGhlIGVuZCBwcm9kdWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU1MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjQ1LjIwMDA0MDAxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NoYXIvYWdwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTI6XFx0Y29uZmlnIEFHUF9BTURcXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0IHN1cHBvcnRcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIEFHUCBcXHUwMDI2XFx1MDAyNiBYODZfMzJcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZlxcbiAgNTc6XFx0XFx0ICBYIG9uIEFNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXRzLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRjb25maWcgQUdQX0FNRDY0XFxuICA2MDpcXHRcXHR0cmlzdGF0ZSBcXFwiQU1EIE9wdGVyb24vQXRobG9uNjQgb24tQ1BVIEdBUlQgc3VwcG9ydFxcXCJcXG4gIDYxOlxcdFxcdGRlcGVuZHMgb24gQUdQIFxcdTAwMjZcXHUwMDI2IFg4NiBcXHUwMDI2XFx1MDAyNiBBTURfTkJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6NDUuMjAwMDk2MDQ2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTUzOTI5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQXNzZXNzbWVudCBvZiBBR1AgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIGBBR1BfQU1EYCBpcyBleHBsaWNpdGx5IHJlbGlhbnQgb24gdGhlIGBYODZfMzJgIGFyY2hpdGVjdHVyZS4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIHNpZ25hbC4gR2l2ZW4gdGhhdCBkZXBlbmRlbmN5LCBpdCdzIGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCB3ZSAqd29uJ3QqIG5lZWQgdG8gYm90aGVyIHdpdGggdGVzdGluZyB0aGF0IHBhcnRpY3VsYXIgbW9kdWxlIG9uIGEgNjQtYml0IHN5c3RlbS4gVGhlIGRlcGVuZGVuY3kgd2lsbCBibG9jayBpdC4gV2UgY2FuIHNhZmVseSBza2lwIHRoZSA2NC1iaXQgdGVzdGluZyBpbiB0aGF0IGNhc2UuXG5cbkhtbSwgbm93LCB3aGF0IGFib3V0IGBBR1BfVklBYD8gSXMgaXQgdGhlIHNhbWU/IEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBBR1BfVklBYCBiZWZvcmUgbWFraW5nIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkwNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6NDguMjk1NDkxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NoYXIvYWdwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTA1OlxcdGNvbmZpZyBBR1BfVklBXFxuIDEwNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVklBIGNoaXBzZXQgc3VwcG9ydFxcXCJcXG4gMTA3OlxcdFxcdGRlcGVuZHMgb24gQUdQIFxcdTAwMjZcXHUwMDI2IFg4NlxcbiAxMDg6XFx0XFx0aGVscFxcbiAxMDk6XFx0XFx0ICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mXFxuIDExMDpcXHRcXHQgIFggb24gVklBIE1WUDMvQXBvbGxvIFBybyBjaGlwc2V0cy5cXG4gMTExOlxcdFxcbiAxMTI6XFx0Y29uZmlnIEFHUF9QQVJJU0NcXG4gMTEzOlxcdFxcdHRyaXN0YXRlIFxcXCJIUCBRdWlja3NpbHZlciBBR1Agc3VwcG9ydFxcXCJcXG4gMTE0OlxcdFxcdGRlcGVuZHMgb24gQUdQIFxcdTAwMjZcXHUwMDI2IFBBUklTQyBcXHUwMDI2XFx1MDAyNiA2NEJJVCBcXHUwMDI2XFx1MDAyNiBJT01NVV9TQkFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6NDguMjk1NTcyMjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5NzIzNjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBSZXF1aXJlbWVudHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBpcyB0aGF0IGBBR1BfVklBYCAqYWJzb2x1dGVseSogaGluZ2VzIG9uIGBBR1BgICphbmQqIGBYODZgLiBUaGF0J3Mgbm9uLW5lZ290aWFibGUuIFNvLCBmaXJzdCBhbmQgZm9yZW1vc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgYEFHUGAgaXMgY29uZmlndXJlZCBhbmQgYXZhaWxhYmxlLiBJdCdzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlIGhlcmUuXG5cbk5vdywgSSdtIHNoaWZ0aW5nIGdlYXJzLi4uIHdoYXQgYWJvdXQgYEFUQV9HRU5FUklDYD8gRG9lcyB0aGlzIGludGVyZmFjZSBwbGF5IGludG8gYEFHUF9WSUFgIGF0IGFsbD8gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgaW50ZXJjb25uZWN0ZWQgcGllY2VzIG9mIHRoZSBwdXp6bGUgYmVmb3JlIHByb2NlZWRpbmcuIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0IGZpdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzA1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTo1MS4xOTI4MTE2MDlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYXRhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3MyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3MzpcXHRjb25maWcgQVRBX0dFTkVSSUNcXG4xMTc0OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIEFUQSBzdXBwb3J0XFxcIlxcbjExNzU6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgQVRBX0JNRE1BXFxuMTE3NjpcXHRcXHRzZWxlY3QgU0FUQV9IT1NUXFxuMTE3NzpcXHRcXHRoZWxwXFxuMTE3ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgZ2VuZXJpYyBCSU9TIGNvbmZpZ3VyZWRcXG4xMTc5OlxcdFxcdCAgQVRBIGNvbnRyb2xsZXJzIHZpYSB0aGUgbmV3IEFUQSBsYXllclxcbjExODA6XFx0XFxuMTE4MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMTE4MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6NTEuMTkyOTIwODM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MjAzOTgxNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUENJIENvcmUgYW5kIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGhpbmdlcyBvbiBgQVRBX0JNRE1BYCwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBGaXJzdCwgbGV0J3MgbGlzdCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlOiBgQVRBX0dFTkVSSUNgLCBgQUdQX1ZJQWAsIGBCT0FSRF9UUENJMjAwYCwgYElQQUNLX0JVU2AsIGBNTFhTV19QQ0lgLCBhbmQgYEFHUGAuIE9oLCBhbmQgSSBzaG91bGQgbm90ZSBgU0NTSV9OU1AzMmAgYW5kIGBBR1BfQU1EYCB3aGljaCBhcmUgMzItYml0IHNwZWNpZmljLCBidXQgc3RpbGwgcmVsZXZhbnQuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBjaGFuZ2VzIHRvIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYW5kIHByb2JpbmcuIEkgbmVlZCB0byBmb2N1cyBvbiBzcGVjaWZpYyBzeW1ib2xzOiBgZG9fcGNpX2FkZF9keW5pZGAsIGBuZXdfaWRfc3RvcmVgLCBgcGNpX21hdGNoX2RldmljZWAsIGBwY2lfbWF0Y2hfaWRgLCBgX19wY2lfZGV2aWNlX3Byb2JlYCwgYGF0YV9nZW5lcmljX2luaXRfb25lYCwgYGFncF9hbWRrN19wcm9iZWAsIGBhZ3BfdmlhX3Byb2JlYCwgYHRwY2kyMDBfcGNpX3Byb2JlYCwgYG1seHN3X3BjaV9wcm9iZWAsIGFuZCBgbnNwMzJfcHJvYmVgLlxuXG5XYWl0IGEgbWludXRlLCBgcGNpX21hdGNoX29uZV9pZGAgaXMgYWN0dWFsbHkgYW4gaW5saW5lIGZ1bmN0aW9uIGluIGBpbmNsdWRlL2xpbnV4L3BjaS5oYC4gSXQgd29uJ3QgYmUgYSBzeW1ib2wgaW4gdGhlIGtlcm5lbCBpbWFnZSBkaXJlY3RseSwgYnV0IGl0J3MgdXNlZCB3aXRoaW4gb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGRvX3BjaV9tYXRjaF9pZGAsIGBtYXRjaF9wY2lfZGV2X2J5X2lkYCwgYGRvX3BjaV9hZGRfZHluaWRgLCBhbmQgYHBjaV9tYXRjaF9kZXZpY2VgLiBTbyBJJ2xsIGxpc3QgYGRvX3BjaV9tYXRjaF9pZGAgaW5zdGVhZC5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rpb25zIEkgbGlzdGVkIGFyZSBzdGF0aWMuIGBfX3BjaV9kZXZpY2VfcHJvYmVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZmluZSwgYXMgaXMgYG5ld19pZF9zdG9yZWAuIGBkb19wY2lfYWRkX2R5bmlkYCBpcyBhbHNvIHN0YXRpYy4gT2theS5cblxuTGV0J3Mgc2VlIGlmIG90aGVyIGZ1bmN0aW9ucyBhcmUgdG91Y2hlZC4gVGhlcmUncyBgbWx4c3dfcGNpX3Jlc2V0YCwgYG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdGAsIGBtbHhzd19wY2lfaW5pdGAsIGBuc3AzMl9zaG93X2luZm9gLCBgbnNwMzJfZ2V0cHJvbV9wYXJhbWAsIGBwY2lfbWF0Y2hfaWRgLCBhbmQgYHBjaV9hZGRfZHluaWRgLiBUaGVzZSBhcmUgYWxsIGltcG9ydGFudCB0b28sIHNvIEknbGwgYWRkIGBwY2lfYWRkX2R5bmlkYCBhbmQgYHBjaV9tYXRjaF9pZGAuXG5cbk5vdywgbGV0J3MgcmVjYXAgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcy4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB0aGUgUENJIGNvcmUgaGFuZGxlcyBkeW5hbWljIGBwY2lfZGV2aWNlX2lkYCBlbnRyaWVzLiBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBwb2ludGVyIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCBJRCB0byB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24sIGl0J3MgcGFzc2luZyBhIGNvcHkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhhdCBkeW5hbWljIElEIGdldHMgcmVtb3ZlZCB0aHJvdWdoIHN5c2ZzLiBUaGVyZSBhcmUgYWxzbyBkcml2ZXIgdXBkYXRlcyB0byBmaXggdGhlbSBzYXZpbmcgdGhlIGBwY2lfZGV2aWNlX2lkYCBwb2ludGVyIGFuZCBpbnN0ZWFkIHNhdmluZyByZWxldmFudCBmaWVsZHMuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGJvdGggdGhlIFBDSSBjb3JlIGFuZCBhZmZlY3RlZCBkcml2ZXJzLiBUaGlzIGlzIGFsbCByaXBlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBQQ0kgZGV2aWNlIG1hdGNoaW5nIGFuZCBwcm9iaW5nLCBlc3BlY2lhbGx5IHdpdGggdGhvc2UgZHluYW1pYyBJRHMgY29taW5nIGZyb20gc3lzZnMuXG5cbkhlcmUgYXJlIHRoZSBjb25maWdzIGFnYWluLCBub3cgdGhhdCBJJ3ZlIGZvY3VzZWQgbXkgYXR0ZW50aW9uOlxuYEFUQV9HRU5FUklDYFxuYEFHUGBcbmBBR1BfQU1EYFxuYEFHUF9WSUFgXG5gSVBBQ0tfQlVTYFxuYEJPQVJEX1RQQ0kyMDBgXG5gTUxYU1dfUENJYFxuYFNDU0lfTlNQMzJgXG5cbkFuZCBoZXJlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb246XG5gZG9fcGNpX2FkZF9keW5pZGBcbmBuZXdfaWRfc3RvcmVgXG5gcGNpX21hdGNoX2RldmljZWBcbmBkb19wY2lfbWF0Y2hfaWRgXG5gX19wY2lfZGV2aWNlX3Byb2JlYFxuYHBjaV9hZGRfZHluaWRgXG5gcGNpX21hdGNoX2lkYFxuYGF0YV9nZW5lcmljX2luaXRfb25lYFxuYGFncF9hbWRrN19wcm9iZWBcbmBhZ3BfdmlhX3Byb2JlYFxuYHRwY2kyMDBfcGNpX3Byb2JlYFxuYG1seHN3X3BjaV9wcm9iZWBcbmBuc3AzMl9wcm9iZWBcblxuRmluYWxseSwgYHBjaV9tYXRjaF9vbmVfZGV2aWNlYCBoYXMgYmVlbiByZXBsYWNlZCBieSBgcGNpX21hdGNoX29uZV9pZGAsIHdoaWNoIGlzIGlubGluZS5cblxuUmlnaHQsIEknbSByZWFkeSB0byBzZXQgdGhlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY2MiwiT3V0cHV0VG9rZW5zIjozNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDY6MDUuMzk2OTA0NzE0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMzU0NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVEFfR0VORVJJQ1wiLFxuICAgIFwiQUdQXCIsXG4gICAgXCJBR1BfQU1EXCIsXG4gICAgXCJBR1BfVklBXCIsXG4gICAgXCJJUEFDS19CVVNcIixcbiAgICBcIkJPQVJEX1RQQ0kyMDBcIixcbiAgICBcIk1MWFNXX1BDSVwiLFxuICAgIFwiU0NTSV9OU1AzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3BjaV9hZGRfZHluaWRcIixcbiAgICBcIm5ld19pZF9zdG9yZVwiLFxuICAgIFwicGNpX21hdGNoX2RldmljZVwiLFxuICAgIFwiZG9fcGNpX21hdGNoX2lkXCIsXG4gICAgXCJfX3BjaV9kZXZpY2VfcHJvYmVcIixcbiAgICBcInBjaV9hZGRfZHluaWRcIixcbiAgICBcInBjaV9tYXRjaF9pZFwiLFxuICAgIFwiYXRhX2dlbmVyaWNfaW5pdF9vbmVcIixcbiAgICBcImFncF9hbWRrN19wcm9iZVwiLFxuICAgIFwiYWdwX3ZpYV9wcm9iZVwiLFxuICAgIFwidHBjaTIwMF9wY2lfcHJvYmVcIixcbiAgICBcIm1seHN3X3BjaV9wcm9iZVwiLFxuICAgIFwibnNwMzJfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUENJIGNvcmUgdG8gcGFzcyBhIGNvcHkgb2YgdGhlIGR5bmFtaWMgcGNpX2RldmljZV9pZCB0byB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gdGhlIGhlYXAtYWxsb2NhdGVkIGR5bmFtaWMgSUQsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGR5bmFtaWMgSUQgaXMgcmVtb3ZlZCB2aWEgc3lzZnMuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHNhdmluZyB0aGUgcGNpX2RldmljZV9pZCBwb2ludGVyIHRvIGluc3RlYWQgc2F2ZSB0aGUgZHJpdmVyX2RhdGEgb3Igb3RoZXIgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFBDSSBjb3JlIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gUENJIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGR5bmFtaWMgSURzIHZpYSBzeXNmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVEFfR0VORVJJQ1wiLFxuICAgIFwiQUdQXCIsXG4gICAgXCJBR1BfQU1EXCIsXG4gICAgXCJBR1BfVklBXCIsXG4gICAgXCJJUEFDS19CVVNcIixcbiAgICBcIkJPQVJEX1RQQ0kyMDBcIixcbiAgICBcIk1MWFNXX1BDSVwiLFxuICAgIFwiU0NTSV9OU1AzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3BjaV9hZGRfZHluaWRcIixcbiAgICBcIm5ld19pZF9zdG9yZVwiLFxuICAgIFwicGNpX21hdGNoX2RldmljZVwiLFxuICAgIFwiZG9fcGNpX21hdGNoX2lkXCIsXG4gICAgXCJfX3BjaV9kZXZpY2VfcHJvYmVcIixcbiAgICBcInBjaV9hZGRfZHluaWRcIixcbiAgICBcInBjaV9tYXRjaF9pZFwiLFxuICAgIFwiYXRhX2dlbmVyaWNfaW5pdF9vbmVcIixcbiAgICBcImFncF9hbWRrN19wcm9iZVwiLFxuICAgIFwiYWdwX3ZpYV9wcm9iZVwiLFxuICAgIFwidHBjaTIwMF9wY2lfcHJvYmVcIixcbiAgICBcIm1seHN3X3BjaV9wcm9iZVwiLFxuICAgIFwibnNwMzJfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUENJIGNvcmUgdG8gcGFzcyBhIGNvcHkgb2YgdGhlIGR5bmFtaWMgcGNpX2RldmljZV9pZCB0byB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gdGhlIGhlYXAtYWxsb2NhdGVkIGR5bmFtaWMgSUQsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGR5bmFtaWMgSUQgaXMgcmVtb3ZlZCB2aWEgc3lzZnMuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHNhdmluZyB0aGUgcGNpX2RldmljZV9pZCBwb2ludGVyIHRvIGluc3RlYWQgc2F2ZSB0aGUgZHJpdmVyX2RhdGEgb3Igb3RoZXIgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFBDSSBjb3JlIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gUENJIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGR5bmFtaWMgSURzIHZpYSBzeXNmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowp46hx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 20:30:01 +0000 UTC FinishedAt: 2026-07-06 20:46:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATA_GENERIC", "AGP", "AGP_AMD", "AGP_VIA", "IPACK_BUS", "BOARD_TPCI200", "MLXSW_PCI", "SCSI_NSP32" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "8cdeaa50eae8dad34885515f62559ee83e7e8dda", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATA_GENERIC", "AGP", "AGP_AMD", "AGP_VIA", "IPACK_BUS", "BOARD_TPCI200", "MLXSW_PCI", "SCSI_NSP32" ], "series_id": "c8ad27ae-4632-4771-9d93-b3b4069c723f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "do_pci_add_dynid", "new_id_store", "pci_match_device", "do_pci_match_id", "__pci_device_probe", "pci_add_dynid", "pci_match_id", "ata_generic_init_one", "agp_amdk7_probe", "agp_via_probe", "tpci200_pci_probe", "mlxsw_pci_probe", "nsp32_probe" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUQV9HRU5FUklDJiMzNDssCiAgICAmIzM0O0FHUCYjMzQ7LAogICAgJiMzNDtBR1BfQU1EJiMzNDssCiAgICAmIzM0O0FHUF9WSUEmIzM0OywKICAgICYjMzQ7SVBBQ0tfQlVTJiMzNDssCiAgICAmIzM0O0JPQVJEX1RQQ0kyMDAmIzM0OywKICAgICYjMzQ7TUxYU1dfUENJJiMzNDssCiAgICAmIzM0O1NDU0lfTlNQMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19wY2lfYWRkX2R5bmlkJiMzNDssCiAgICAmIzM0O25ld19pZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfZGV2aWNlJiMzNDssCiAgICAmIzM0O2RvX3BjaV9tYXRjaF9pZCYjMzQ7LAogICAgJiMzNDtfX3BjaV9kZXZpY2VfcHJvYmUmIzM0OywKICAgICYjMzQ7cGNpX2FkZF9keW5pZCYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfaWQmIzM0OywKICAgICYjMzQ7YXRhX2dlbmVyaWNfaW5pdF9vbmUmIzM0OywKICAgICYjMzQ7YWdwX2FtZGs3X3Byb2JlJiMzNDssCiAgICAmIzM0O2FncF92aWFfcHJvYmUmIzM0OywKICAgICYjMzQ7dHBjaTIwMF9wY2lfcHJvYmUmIzM0OywKICAgICYjMzQ7bWx4c3dfcGNpX3Byb2JlJiMzNDssCiAgICAmIzM0O25zcDMyX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgY29yZSB0byBwYXNzIGEgY29weSBvZiB0aGUgZHluYW1pYyBwY2lfZGV2aWNlX2lkIHRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gdGhlIGhlYXAtYWxsb2NhdGVkIGR5bmFtaWMgSUQsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGR5bmFtaWMgSUQgaXMgcmVtb3ZlZCB2aWEgc3lzZnMuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHNhdmluZyB0aGUgcGNpX2RldmljZV9pZCBwb2ludGVyIHRvIGluc3RlYWQgc2F2ZSB0aGUgZHJpdmVyX2RhdGEgb3Igb3RoZXIgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFBDSSBjb3JlIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gUENJIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGR5bmFtaWMgSURzIHZpYSBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU4YmU1ODE5ZmZmZGQ1ZjNjMTFkZDFhMjZhYTUyZGNhNTBlMDI0MDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDIwOjQ0OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jXG5pbmRleCBlNzBiNmMwODljZjE3OS4uMThlYTc0MGNhNTgyOTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jXG5AQCAtNTEsMTEgJiM0Mzs1MSwxMSBAQCBlbnVtIHtcbiBzdGF0aWMgaW50IGdlbmVyaWNfc2V0X21vZGUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnVudXNlZClcbiB7XG4gXHRzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay1cdTAwM2VhcDtcbi1cdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCA9IGFwLVx1MDAzZWhvc3QtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZylhcC1cdTAwM2Vob3N0LVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdGludCBkbWFfZW5hYmxlZCA9IDA7XG4gXHRzdHJ1Y3QgYXRhX2RldmljZSAqZGV2O1xuIFxuLVx0aWYgKGlkLVx1MDAzZWRyaXZlcl9kYXRhIFx1MDAyNiBBVEFfR0VOX0ZPUkNFX0RNQSkge1xuJiM0MztcdGlmIChkcml2ZXJfZGF0YSBcdTAwMjYgQVRBX0dFTl9GT1JDRV9ETUEpIHtcbiBcdFx0ZG1hX2VuYWJsZWQgPSAweGZmO1xuIFx0fSBlbHNlIGlmIChhcC1cdTAwM2Vpb2FkZHIuYm1kbWFfYWRkcikge1xuIFx0XHQvKiBCaXRzIDUgYW5kIDYgaW5kaWNhdGUgaWYgRE1BIGlzIGFjdGl2ZSBvbiBtYXN0ZXIvc2xhdmUgKi9cbkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIHN0YXRpYyBpbnQgYXRhX2dlbmVyaWNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWRcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdHBjaW1fcGluX2RldmljZShkZXYpO1xuIFx0fVxuLVx0cmV0dXJuIGF0YV9wY2lfYm1kbWFfaW5pdF9vbmUoZGV2LCBwcGksIFx1MDAyNmdlbmVyaWNfc2h0LCAodm9pZCAqKWlkLCAwKTtcbiYjNDM7XHRyZXR1cm4gYXRhX3BjaV9ibWRtYV9pbml0X29uZShkZXYsIHBwaSwgXHUwMDI2Z2VuZXJpY19zaHQsICh2b2lkICopaWQtXHUwMDNlZHJpdmVyX2RhdGEsIDApO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRhX2dlbmVyaWNbXSA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jXG5pbmRleCA4OThmZjMwZmZkNDZiMi4uNGQyMDFlNzFjNTE3NzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmNcbkBAIC0zODcsMzcgJiM0MzszODcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbWRfaXJvbmdhdGVfZHJpdmVyID0ge1xuIFx0LmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgYWdwX2RldmljZV9pZHMgYW1kX2FncF9kZXZpY2VfaWRzW10gPVxuLXtcbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMDYsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7SXJvbmdhdGVcJiMzNDssXG4tXHR9LFxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwRSxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDs3NjFcJiMzNDssXG4tXHR9LFxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQyxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDs3NjBNUFwmIzM0Oyxcbi1cdH0sXG4tXHR7IH0sIC8qIGR1bW15IGZpbmFsIGVudHJ5LCBhbHdheXMgcHJlc2VudCAqL1xuLX07XG4tXG4gc3RhdGljIGludCBhZ3BfYW1kazdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4gXHRzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7XG4gXHR1OCBjYXBfcHRyO1xuLVx0aW50IGo7XG4gXG4gXHRjYXBfcHRyID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0FHUCk7XG4gXHRpZiAoIWNhcF9wdHIpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0aiA9IGVudCAtIGFncF9hbWRrN19wY2lfdGFibGU7XG4tXHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7QU1EICVzIGNoaXBzZXRcXG5cJiMzNDssXG4tXHRcdCBhbWRfYWdwX2RldmljZV9pZHNbal0uY2hpcHNldF9uYW1lKTtcbiYjNDM7XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7QU1EICVzIGNoaXBzZXRcXG5cJiMzNDssIChjb25zdCBjaGFyICopZW50LVx1MDAzZWRyaXZlcl9kYXRhKTtcbiBcbiBcdGJyaWRnZSA9IGFncF9hbGxvY19icmlkZ2UoKTtcbiBcdGlmICghYnJpZGdlKVxuQEAgLTQ5Miw3ICYjNDM7NDcyLDYgQEAgc3RhdGljIGludCBhZ3BfYW1kazdfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiBhbWRfaXJvbmdhdGVfZHJpdmVyLmNvbmZpZ3VyZSgpO1xuIH1cbiBcbi0vKiBtdXN0IGJlIHRoZSBzYW1lIG9yZGVyIGFzIG5hbWUgdGFibGUgYWJvdmUgKi9cbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xuIFx0e1xuIFx0LmNsYXNzXHRcdD0gKFBDSV9DTEFTU19CUklER0VfSE9TVCBcdTAwM2NcdTAwM2MgOCksXG5AQCAtNTAxLDYgJiM0Mzs0ODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xuIFx0LmRldmljZVx0XHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwNixcbiBcdC5zdWJ2ZW5kb3JcdD0gUENJX0FOWV9JRCxcbiBcdC5zdWJkZXZpY2VcdD0gUENJX0FOWV9JRCxcbiYjNDM7XHQuZHJpdmVyX2RhdGFcdD0gKGtlcm5lbF91bG9uZ190KVwmIzM0O0lyb25nYXRlXCYjMzQ7LFxuIFx0fSxcbiBcdHtcbiBcdC5jbGFzc1x0XHQ9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgXHUwMDNjXHUwMDNjIDgpLFxuQEAgLTUwOSw2ICYjNDM7NDg5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF9hbWRrN19wY2lfdGFibGVbXSA9IHtcbiBcdC5kZXZpY2VcdFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEUsXG4gXHQuc3VidmVuZG9yXHQ9IFBDSV9BTllfSUQsXG4gXHQuc3ViZGV2aWNlXHQ9IFBDSV9BTllfSUQsXG4mIzQzO1x0LmRyaXZlcl9kYXRhXHQ9IChrZXJuZWxfdWxvbmdfdClcJiMzNDs3NjFcJiMzNDssXG4gXHR9LFxuIFx0e1xuIFx0LmNsYXNzXHRcdD0gKFBDSV9DTEFTU19CUklER0VfSE9TVCBcdTAwM2NcdTAwM2MgOCksXG5AQCAtNTE3LDYgJiM0Mzs0OTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xuIFx0LmRldmljZVx0XHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQyxcbiBcdC5zdWJ2ZW5kb3JcdD0gUENJX0FOWV9JRCxcbiBcdC5zdWJkZXZpY2VcdD0gUENJX0FOWV9JRCxcbiYjNDM7XHQuZHJpdmVyX2RhdGFcdD0gKGtlcm5lbF91bG9uZ190KVwmIzM0Ozc2ME1QXCYjMzQ7LFxuIFx0fSxcbiBcdHsgfVxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuY1xuaW5kZXggOGIxOWE1ZDFhMDliNDkuLmFiM2I3M2RkMDgwYWZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jXG5AQCAtMjIxLDIwNCAmIzQzOzIyMSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgdmlhX2RyaXZlciA9IHtcbiBcdC5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGFncF9kZXZpY2VfaWRzIHZpYV9hZ3BfZGV2aWNlX2lkc1tdID1cbi17XG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7QXBvbGxvIFZQM1wmIzM0Oyxcbi1cdH0sXG4tXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7QXBvbGxvIE1WUDNcJiMzNDssXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtBcG9sbG8gTVZQNFwmIzM0Oyxcbi1cdH0sXG4tXG4tXHQvKiBWVDg2MDEgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7QXBvbGxvIFByb01lZGlhL1BMRTEzM1RhXCYjMzQ7LFxuLVx0fSxcbi1cbi1cdC8qIFZUODJDNjkzQSAvIFZUMjhDNjk0VCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgyQzY5MV8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O0Fwb2xsbyBQcm8gMTMzXCYjMzQ7LFxuLVx0fSxcbi1cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7S1gxMzNcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4NjMzICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODYzM18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1BybyAyNjZcJiMzNDssXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2LFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O0Fwb2xsbyBQcm8yNjZcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4MzYxICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2MSxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtLTEUxMzNcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4MzY1IC8gVlQ4MzYyICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1R3aXN0ZXItSy9LVDEzM3gvS00xMzNcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4NzUzQSAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtQNFgyNjZcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4MzY2ICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2N18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O0tUMjY2L0tZMjY2eC9LVDMzM1wmIzM0Oyxcbi1cdH0sXG4tXG4tXHQvKiBWVDg2MzMgKGZvciBDdU1pbmUvIENlbGVyb24pICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODY1M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1BybzI2NlRcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogS00yNjYgLyBQTTI2NiAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2LFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1BNMjY2L0tNMjY2XCYjMzQ7LFxuLVx0fSxcbi1cbi1cdC8qIENMRTI2NiAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg2MlhfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtDTEUyNjZcJiMzNDssXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtLVDQwMC9LVDQwMEEvS1Q2MDBcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogVlQ4NjA0IC8gVlQ4NjA1IC8gVlQ4NjAzXG4tXHQgKiAoQXBvbGxvIFBybzEzM0EgY2hpcHNldCB3aXRoIFMzIFNhdmFnZTQpICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODYwNV8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1Byb1NhdmFnZSBQTTEzMy9QTDEzMy9QTjEzM1wmIzM0O1xuLVx0fSxcbi1cbi1cdC8qIFA0TTI2NngvUDROMjY2ICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODcwM181MV8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1A0TTI2NngvUDROMjY2XCYjMzQ7LFxuLVx0fSxcbi1cbi1cdC8qIFZUODc1NCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7UFQ4MDBcJiMzNDssXG4tXHR9LFxuLVxuLVx0LyogUDRYNjAwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODc2M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1A0WDYwMFwmIzM0O1xuLVx0fSxcbi1cbi1cdC8qIEtNNDAwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODM3OF8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O0tNNDAwL0tNNDAwQVwmIzM0Oyxcbi1cdH0sXG4tXG4tXHQvKiBQVDg4MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BUODgwLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwmIzM0O1BUODgwXCYjMzQ7LFxuLVx0fSxcbi1cbi1cdC8qIFBUODgwIFVsdHJhICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtQVDg4MCBVbHRyYVwmIzM0Oyxcbi1cdH0sXG4tXG4tXHQvKiBQVDg5MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcJiMzNDtQVDg5MFwmIzM0Oyxcbi1cdH0sXG4tXG4tXHQvKiBQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7UE04MDAvUE44MDAvUE04ODAvUE44ODBcJiMzNDssXG4tXHR9LFxuLVx0LyogS1Q4ODAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7S1Q4ODBcJiMzNDssXG4tXHR9LFxuLVx0LyogS1R4eHgvUHg4eHggKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84M184N1hYXzEsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7VlQ4M3h4L1ZUODd4eC9LVHh4eC9QeDh4eFwmIzM0Oyxcbi1cdH0sXG4tXHQvKiBQNE04MDAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjk2XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7UDRNODAwXCYjMzQ7LFxuLVx0fSxcbi1cdC8qIFA0TTgwMENFICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCYjMzQ7VlQzMzE0XCYjMzQ7LFxuLVx0fSxcbi1cdC8qIFZUMzMyNCAvIENYNzAwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0LFxuLVx0XHQuY2hpcHNldF9uYW1lICAgPSBcJiMzNDtDWDcwMFwmIzM0Oyxcbi1cdH0sXG4tXHQvKiBWVDMzMzYgLSB0aGlzIGlzIGEgY2hpcHNldCBmb3IgQU1EIEF0aGxvbi9LOCBDUFUuIER1ZSB0byBLOCYjMzk7cyB1bmlxdWVcbi1cdCAqIGFyY2hpdGVjdHVyZSwgdGhlIEFHUCByZXNvdXJjZSBhbmQgYmVoYXZpb3IgYXJlIGRpZmZlcmVudCBmcm9tXG4tXHQgKiB0aGUgdHJhZGl0aW9uYWwgQUdQIHdoaWNoIHJlc2lkZXMgb25seSBpbiBjaGlwc2V0LiBBR1AgaXMgdXNlZFxuLVx0ICogYnkgM0QgZHJpdmVyIHdoaWNoIHdhc24mIzM5O3QgYXZhaWxhYmxlIGZvciB0aGUgVlQzMzM2IGFuZCBWVDMzNjRcbi1cdCAqIGdlbmVyYXRpb24gdW50aWwgbm93LiAgVW5mb3J0dW5hdGVseSwgYnkgdGVzdGluZywgVlQzMzY0IHdvcmtzXG4tXHQgKiBidXQgVlQzMzM2IGRvZXNuJiMzOTt0LiAtIGV4cGxhbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXNcbi1cdCAqIGFzIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uXG4tXHQgKi9cbi0jaWYgMFxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMzNixcbi1cdFx0LmNoaXBzZXRfbmFtZSAgID0gXCYjMzQ7VlQzMzM2XCYjMzQ7LFxuLVx0fSxcbi0jZW5kaWZcbi1cdC8qIFA0TTg5MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1A0TTg5MCxcbi1cdFx0LmNoaXBzZXRfbmFtZSAgID0gXCYjMzQ7UDRNODkwXCYjMzQ7LFxuLVx0fSxcbi1cdC8qIFA0TTkwMCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzM2NCxcbi1cdFx0LmNoaXBzZXRfbmFtZSAgID0gXCYjMzQ7UDRNOTAwXCYjMzQ7LFxuLVx0fSxcbi1cdHsgfSwgLyogZHVtbXkgZmluYWwgZW50cnksIGFsd2F5cyBwcmVzZW50ICovXG4tfTtcbi1cbiBcbiAvKlxuICAqIFZJQSYjMzk7cyBBR1AzIGNoaXBzZXRzIGRvIG1hZ2ljayB0byBwdXQgdGhlIEFHUCBicmlkZ2UgY29tcGxpYW50XG5AQCAtNDM3LDE3ICYjNDM7MjM5LDE0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3ZpYV9hZ3AzIChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpXG4gXG4gc3RhdGljIGludCBhZ3BfdmlhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbi1cdHN0cnVjdCBhZ3BfZGV2aWNlX2lkcyAqZGV2cyA9IHZpYV9hZ3BfZGV2aWNlX2lkcztcbiBcdHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZTtcbi1cdGludCBqID0gMDtcbiBcdHU4IGNhcF9wdHI7XG4gXG4gXHRjYXBfcHRyID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0FHUCk7XG4gXHRpZiAoIWNhcF9wdHIpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0aiA9IGVudCAtIGFncF92aWFfcGNpX3RhYmxlO1xuLVx0cHJpbnRrIChLRVJOX0lORk8gUEZYIFwmIzM0O0RldGVjdGVkIFZJQSAlcyBjaGlwc2V0XFxuXCYjMzQ7LCBkZXZzW2pdLmNoaXBzZXRfbmFtZSk7XG4mIzQzO1x0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0RldGVjdGVkIFZJQSAlcyBjaGlwc2V0XFxuXCYjMzQ7LCAoY29uc3QgY2hhciAqKWVudC1cdTAwM2Vkcml2ZXJfZGF0YSk7XG4gXG4gXHRicmlkZ2UgPSBhZ3BfYWxsb2NfYnJpZGdlKCk7XG4gXHRpZiAoIWJyaWRnZSlcbkBAIC01MDEsOSAmIzQzOzMwMCw4IEBAIHN0YXRpYyBpbnQgYWdwX3ZpYV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qIG11c3QgYmUgdGhlIHNhbWUgb3JkZXIgYXMgbmFtZSB0YWJsZSBhYm92ZSAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfdmlhX3BjaV90YWJsZVtdID0ge1xuLSNkZWZpbmUgSUQoeCkgXFxcbiYjNDM7I2RlZmluZSBJRCh4LCBuYW1lKSBcXFxuIFx0e1x0XHRcdFx0XHRcdFxcXG4gXHQuY2xhc3NcdFx0PSAoUENJX0NMQVNTX0JSSURHRV9IT1NUIFx1MDAzY1x1MDAzYyA4KSxcdFxcXG4gXHQuY2xhc3NfbWFza1x0PSB+MCxcdFx0XHRcdFxcXG5AQCAtNTExLDM5ICYjNDM7MzA5LDc3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfdmlhX3BjaV90YWJsZVtdID0ge1xuIFx0LmRldmljZVx0XHQ9IHgsXHRcdFx0XHRcXFxuIFx0LnN1YnZlbmRvclx0PSBQQ0lfQU5ZX0lELFx0XHRcdFxcXG4gXHQuc3ViZGV2aWNlXHQ9IFBDSV9BTllfSUQsXHRcdFx0XFxcbiYjNDM7XHQuZHJpdmVyX2RhdGFcdD0gKGtlcm5lbF91bG9uZ190KW5hbWUsXHRcdFxcXG4gXHR9XG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OThfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYwMV8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzY5MV8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjMzXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfWE4yNjYpLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM2MSksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc1M18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjdfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfWE0yNjYpLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYyWF8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjA1XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODcwM181MV8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc2M18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzhfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MFVMVFJBKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QWDhYMF8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzMyNjlfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84M184N1hYXzEpLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfMzI5Nl8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMyNCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04OTApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0KSxcbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMCwgXCYjMzQ7QXBvbGxvIFZQM1wmIzM0OyksXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAsIFwmIzM0O0Fwb2xsbyBNVlAzXCYjMzQ7KSxcbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzAsIFwmIzM0O0Fwb2xsbyBNVlA0XCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDg2MDEgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsIFwmIzM0O0Fwb2xsbyBQcm9NZWRpYS9QTEUxMzNUYVwmIzM0OyksXG4mIzQzO1x0LyogVlQ4MkM2OTNBIC8gVlQyOEM2OTRUICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAsIFwmIzM0O0Fwb2xsbyBQcm8gMTMzXCYjMzQ7KSxcbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzAsIFwmIzM0O0tYMTMzXCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDg2MzMgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjMzXzAsIFwmIzM0O1BybyAyNjZcJiMzNDspLFxuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2LCBcJiMzNDtBcG9sbG8gUHJvMjY2XCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDgzNjEgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYxLCBcJiMzNDtLTEUxMzNcJiMzNDspLFxuJiM0MztcdC8qIFZUODM2NSAvIFZUODM2MiAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjNfMCwgXCYjMzQ7VHdpc3Rlci1LL0tUMTMzeC9LTTEzM1wmIzM0OyksXG4mIzQzO1x0LyogVlQ4NzUzQSAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCwgXCYjMzQ7UDRYMjY2XCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDgzNjYgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzY3XzAsIFwmIzM0O0tUMjY2L0tZMjY2eC9LVDMzM1wmIzM0OyksXG4mIzQzO1x0LyogVlQ4NjMzIChmb3IgQ3VNaW5lLyBDZWxlcm9uKSAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2NTNfMCwgXCYjMzQ7UHJvMjY2VFwmIzM0OyksXG4mIzQzO1x0LyogS00yNjYgLyBQTTI2NiAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2LCBcJiMzNDtQTTI2Ni9LTTI2NlwmIzM0OyksXG4mIzQzO1x0LyogQ0xFMjY2ICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODYyWF8wLCBcJiMzNDtDTEUyNjZcJiMzNDspLFxuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCwgXCYjMzQ7S1Q0MDAvS1Q0MDBBL0tUNjAwXCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDg2MDQgLyBWVDg2MDUgLyBWVDg2MDMgKEFwb2xsbyBQcm8xMzNBIGNoaXBzZXQgd2l0aCBTMyBTYXZhZ2U0KSAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCwgXCYjMzQ7UHJvU2F2YWdlIFBNMTMzL1BMMTMzL1BOMTMzXCYjMzQ7KSxcbiYjNDM7XHQvKiBQNE0yNjZ4L1A0TjI2NiAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCwgXCYjMzQ7UDRNMjY2eC9QNE4yNjZcJiMzNDspLFxuJiM0MztcdC8qIFZUODc1NCAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzAsIFwmIzM0O1BUODAwXCYjMzQ7KSxcbiYjNDM7XHQvKiBQNFg2MDAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzYzXzAsIFwmIzM0O1A0WDYwMFwmIzM0OyksXG4mIzQzO1x0LyogS000MDAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzAsIFwmIzM0O0tNNDAwL0tNNDAwQVwmIzM0OyksXG4mIzQzO1x0LyogUFQ4ODAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MCwgXCYjMzQ7UFQ4ODBcJiMzNDspLFxuJiM0MztcdC8qIFBUODgwIFVsdHJhICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSwgXCYjMzQ7UFQ4ODAgVWx0cmFcJiMzNDspLFxuJiM0MztcdC8qIFBUODkwICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODc4M18wLCBcJiMzNDtQVDg5MFwmIzM0OyksXG4mIzQzO1x0LyogUE04MDAvUE44MDAvUE04ODAvUE44ODAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QWDhYMF8wLCBcJiMzNDtQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MFwmIzM0OyksXG4mIzQzO1x0LyogS1Q4ODAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzAsIFwmIzM0O0tUODgwXCYjMzQ7KSxcbiYjNDM7XHQvKiBLVHh4eC9QeDh4eCAqL1xuJiM0MztcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSwgXCYjMzQ7VlQ4M3h4L1ZUODd4eC9LVHh4eC9QeDh4eFwmIzM0OyksXG4mIzQzO1x0LyogUDRNODAwICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfMzI5Nl8wLCBcJiMzNDtQNE04MDBcJiMzNDspLFxuJiM0MztcdC8qIFA0TTgwMENFICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UsIFwmIzM0O1ZUMzMxNFwmIzM0OyksXG4mIzQzO1x0LyogVlQzMzI0IC8gQ1g3MDAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMjQsIFwmIzM0O0NYNzAwXCYjMzQ7KSxcbiYjNDM7XHQvKiBWVDMzMzYgLSB0aGlzIGlzIGEgY2hpcHNldCBmb3IgQU1EIEF0aGxvbi9LOCBDUFUuIER1ZSB0byBLOCYjMzk7cyB1bmlxdWVcbiYjNDM7XHQgKiBhcmNoaXRlY3R1cmUsIHRoZSBBR1AgcmVzb3VyY2UgYW5kIGJlaGF2aW9yIGFyZSBkaWZmZXJlbnQgZnJvbVxuJiM0MztcdCAqIHRoZSB0cmFkaXRpb25hbCBBR1Agd2hpY2ggcmVzaWRlcyBvbmx5IGluIGNoaXBzZXQuIEFHUCBpcyB1c2VkXG4mIzQzO1x0ICogYnkgM0QgZHJpdmVyIHdoaWNoIHdhc24mIzM5O3QgYXZhaWxhYmxlIGZvciB0aGUgVlQzMzM2IGFuZCBWVDMzNjRcbiYjNDM7XHQgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3Jrc1xuJiM0MztcdCAqIGJ1dCBWVDMzMzYgZG9lc24mIzM5O3QuIC0gZXhwbGFuYXRpb24gZnJvbSB2aWEsIGp1c3QgbGVhdmUgdGhpcyBhc1xuJiM0MztcdCAqIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uXG4mIzQzO1x0ICovXG4mIzQzOyNpZiAwXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LCBcJiMzNDtWVDMzMzZcJiMzNDspLFxuJiM0MzsjZW5kaWZcbiYjNDM7XHQvKiBQNE04OTAgKi9cbiYjNDM7XHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04OTAsIFwmIzM0O1A0TTg5MFwmIzM0OyksXG4mIzQzO1x0LyogUDRNOTAwICovXG4mIzQzO1x0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0LCBcJiMzNDtQNE05MDBcJiMzNDspLFxuIFx0eyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuYyBiL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jXG5pbmRleCAwNWRjYjY2NzVjZDY2MS4uMWNmNTFmNzYzMjkzMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmNcbkBAIC01NjIsNyAmIzQzOzU2Miw2IEBAIHN0YXRpYyBpbnQgdHBjaTIwMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXG4gXHQvKiBTYXZlIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgKi9cbiBcdHRwY2kyMDAtXHUwMDNlaW5mby1cdTAwM2VwZGV2ID0gcGRldjtcbi1cdHRwY2kyMDAtXHUwMDNlaW5mby1cdTAwM2VpZF90YWJsZSA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKWlkO1xuIFxuIFx0LyogcmVnaXN0ZXIgdGhlIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBpdCAqL1xuIFx0cmV0ID0gdHBjaTIwMF9pbnN0YWxsKHRwY2kyMDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oIGIvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmhcbmluZGV4IGU3OWFjNjRhYmNmZmFjLi5hMmJmMzEyNTc5NGI3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaFxuQEAgLTE0NSw3ICYjNDM7MTQ1LDYgQEAgc3RydWN0IHRwY2kyMDBfc2xvdCB7XG4gICovXG4gc3RydWN0IHRwY2kyMDBfaW5mb3Mge1xuIFx0c3RydWN0IHBjaV9kZXZcdFx0XHQqcGRldjtcbi1cdHN0cnVjdCBwY2lfZGV2aWNlX2lkXHRcdCppZF90YWJsZTtcbiBcdHN0cnVjdCB0cGNpMjAwX3JlZ3MgX19pb21lbVx0KmludGVyZmFjZV9yZWdzO1xuIFx0dm9pZCBfX2lvbWVtXHRcdFx0KmNmZ19yZWdzO1xuIFx0c3RydWN0IGlwYWNrX2J1c19kZXZpY2VcdFx0KmlwYWNrX2J1cztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jXG5pbmRleCAwZGE4NWQzNjY0N2Q5MS4uYmZlMzI2OGRmZGMxN2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmNcbkBAIC0xMzAsNyAmIzQzOzEzMCw2IEBAIHN0cnVjdCBtbHhzd19wY2kge1xuIFx0XHR9IGNvbXA7XG4gXHR9IGNtZDtcbiBcdHN0cnVjdCBtbHhzd19idXNfaW5mbyBidXNfaW5mbztcbi1cdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZDtcbiBcdGVudW0gbWx4c3dfcGNpX2NxZV92IG1heF9jcWVfdmVyOyAvKiBNYXhpbWFsIHN1cHBvcnRlZCBDUUUgdmVyc2lvbiAqL1xuIFx0dTggbnVtX2NxczsgLyogTnVtYmVyIG9mIENRcyAqL1xuIFx0dTggbnVtX3NkcXM7IC8qIE51bWJlciBvZiBTRFFzICovXG5AQCAtMTc2OCw3ICYjNDM7MTc2Nyw2IEBAIHN0YXRpYyB2b2lkIG1seHN3X3BjaV9tYm94X2ZyZWUoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLFxuIH1cbiBcbiBzdGF0aWMgaW50IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksXG4tXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkLFxuIFx0XHRcdFx0ICAgIHUzMiAqcF9zeXNfc3RhdHVzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kO1xuQEAgLTE4MzksNyAmIzQzOzE4MzcsNyBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9yZXNldF9zdyhzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2kpXG4gfVxuIFxuIHN0YXRpYyBpbnRcbi1tbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4mIzQzO21seHN3X3BjaV9yZXNldChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2kpXG4ge1xuIFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtbHhzd19wY2ktXHUwMDNlcGRldjtcbiBcdGJvb2wgcGNpX3Jlc2V0X3Nicl9zdXBwb3J0ZWQgPSBmYWxzZTtcbkBAIC0xODQ4LDcgJiM0MzsxODQ2LDcgQEAgbWx4c3dfcGNpX3Jlc2V0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0dTMyIHN5c19zdGF0dXM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KG1seHN3X3BjaSwgaWQsIFx1MDAyNnN5c19zdGF0dXMpO1xuJiM0MztcdGVyciA9IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChtbHhzd19wY2ksIFx1MDAyNnN5c19zdGF0dXMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhY2ggc3lzdGVtIHJlYWR5IHN0YXR1cyBiZWZvcmUgcmVzZXQuIFN0YXR1cyBpcyAweCV4XFxuXCYjMzQ7LFxuIFx0XHRcdHN5c19zdGF0dXMpO1xuQEAgLTE4ODAsNyAmIzQzOzE4NzgsNyBAQCBtbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZXJyID0gbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KG1seHN3X3BjaSwgaWQsIFx1MDAyNnN5c19zdGF0dXMpO1xuJiM0MztcdGVyciA9IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChtbHhzd19wY2ksIFx1MDAyNnN5c19zdGF0dXMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhY2ggc3lzdGVtIHJlYWR5IHN0YXR1cyBhZnRlciByZXNldC4gU3RhdHVzIGlzIDB4JXhcXG5cJiMzNDssXG4gXHRcdFx0c3lzX3N0YXR1cyk7XG5AQCAtMTkzMiw3ICYjNDM7MTkzMCw3IEBAIHN0YXRpYyBpbnQgbWx4c3dfcGNpX2luaXQodm9pZCAqYnVzX3ByaXYsIHN0cnVjdCBtbHhzd19jb3JlICptbHhzd19jb3JlLFxuIFx0aWYgKCFtYm94KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGVyciA9IG1seHN3X3BjaV9yZXNldChtbHhzd19wY2ksIG1seHN3X3BjaS1cdTAwM2VpZCk7XG4mIzQzO1x0ZXJyID0gbWx4c3dfcGNpX3Jlc2V0KG1seHN3X3BjaSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9yZXNldDtcbiBcbkBAIC0yNDY0LDcgJiM0MzsyNDYyLDYgQEAgc3RhdGljIGludCBtbHhzd19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdG1seHN3X3BjaS1cdTAwM2VidXNfaW5mby5kZXZpY2VfbmFtZSA9IHBjaV9uYW1lKG1seHN3X3BjaS1cdTAwM2VwZGV2KTtcbiBcdG1seHN3X3BjaS1cdTAwM2VidXNfaW5mby5kZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcdG1seHN3X3BjaS1cdTAwM2VidXNfaW5mby5yZWFkX2Nsb2NrX2NhcGFibGUgPSB0cnVlO1xuLVx0bWx4c3dfcGNpLVx1MDAzZWlkID0gaWQ7XG4gXG4gXHRlcnIgPSBtbHhzd19jb3JlX2J1c19kZXZpY2VfcmVnaXN0ZXIoXHUwMDI2bWx4c3dfcGNpLVx1MDAzZWJ1c19pbmZvLFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNm1seHN3X3BjaV9idXMsIG1seHN3X3BjaSwgZmFsc2UsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXG5pbmRleCBmMzY3NzhlNjJhYzFhNS4uNDg1MTA2MWJhYmNiNWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xuQEAgLTI5LDYgJiM0MzsyOSw0NyBAQCBzdHJ1Y3QgcGNpX2R5bmlkIHtcbiBcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkO1xuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkb19wY2lfYWRkX2R5bmlkIC0gYWRkIGEgbmV3IFBDSSBkZXZpY2UgSUQgdG8gdGhpcyBkcml2ZXIgYW5kIHJlLXByb2JlIGRldmljZXNcbiYjNDM7ICogQGRydjogdGFyZ2V0IHBjaSBkcml2ZXJcbiYjNDM7ICogQGlkOiBJRCB0byBiZSBhZGRlZFxuJiM0MzsgKiBAY2hlY2tfZHVwOiB3aGV0aGVyIHRvIGNoZWNrIGlmIG1hdGNoaW5nIElEIGlzIGFscmVhZHkgcHJlc2VudFxuJiM0MzsgKlxuJiM0MzsgKiBBZGRzIGEgbmV3IGR5bmFtaWMgcGNpIGRldmljZSBJRCB0byB0aGlzIGRyaXZlciBhbmQgY2F1c2VzIHRoZVxuJiM0MzsgKiBkcml2ZXIgdG8gcHJvYmUgZm9yIGFsbCBkZXZpY2VzIGFnYWluLiAgQGRydiBtdXN0IGhhdmUgYmVlblxuJiM0MzsgKiByZWdpc3RlcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogQ09OVEVYVDpcbiYjNDM7ICogRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJFVFVSTlM6XG4mIzQzOyAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRvX3BjaV9hZGRfZHluaWQoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkLCBib29sIGNoZWNrX2R1cClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZHluaWQgKmR5bmlkLCAqZXhpc3RpbmdfZHluaWQ7XG4mIzQzO1xuJiM0MztcdGR5bmlkID0ga3phbGxvY19vYmooKmR5bmlkKTtcbiYjNDM7XHRpZiAoIWR5bmlkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGR5bmlkLVx1MDAzZWlkID0gKmlkO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubG9jaykge1xuJiM0MztcdFx0aWYgKGNoZWNrX2R1cCkge1xuJiM0MztcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGV4aXN0aW5nX2R5bmlkLCBcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxpc3QsIG5vZGUpIHtcbiYjNDM7XHRcdFx0XHRpZiAocGNpX21hdGNoX29uZV9pZChcdTAwMjZleGlzdGluZ19keW5pZC1cdTAwM2VpZCwgaWQpKSB7XG4mIzQzO1x0XHRcdFx0XHRrZnJlZShkeW5pZCk7XG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZHluaWQtXHUwMDNlbm9kZSwgXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5saXN0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBkcml2ZXJfYXR0YWNoKFx1MDAyNmRydi1cdTAwM2Vkcml2ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHBjaV9hZGRfZHluaWQgLSBhZGQgYSBuZXcgUENJIGRldmljZSBJRCB0byB0aGlzIGRyaXZlciBhbmQgcmUtcHJvYmUgZGV2aWNlc1xuICAqIEBkcnY6IHRhcmdldCBwY2kgZHJpdmVyXG5AQCAtNTYsMjUgJiM0Mzs5NywxNyBAQCBpbnQgcGNpX2FkZF9keW5pZChzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LFxuIFx0XHQgIHVuc2lnbmVkIGludCBjbGFzcywgdW5zaWduZWQgaW50IGNsYXNzX21hc2ssXG4gXHRcdCAgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSlcbiB7XG4tXHRzdHJ1Y3QgcGNpX2R5bmlkICpkeW5pZDtcbi1cbi1cdGR5bmlkID0ga3phbGxvY19vYmooKmR5bmlkKTtcbi1cdGlmICghZHluaWQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0ZHluaWQtXHUwMDNlaWQudmVuZG9yID0gdmVuZG9yO1xuLVx0ZHluaWQtXHUwMDNlaWQuZGV2aWNlID0gZGV2aWNlO1xuLVx0ZHluaWQtXHUwMDNlaWQuc3VidmVuZG9yID0gc3VidmVuZG9yO1xuLVx0ZHluaWQtXHUwMDNlaWQuc3ViZGV2aWNlID0gc3ViZGV2aWNlO1xuLVx0ZHluaWQtXHUwMDNlaWQuY2xhc3MgPSBjbGFzcztcbi1cdGR5bmlkLVx1MDAzZWlkLmNsYXNzX21hc2sgPSBjbGFzc19tYXNrO1xuLVx0ZHluaWQtXHUwMDNlaWQuZHJpdmVyX2RhdGEgPSBkcml2ZXJfZGF0YTtcbi1cbi1cdHNwaW5fbG9jayhcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spO1xuLVx0bGlzdF9hZGRfdGFpbChcdTAwMjZkeW5pZC1cdTAwM2Vub2RlLCBcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxpc3QpO1xuLVx0c3Bpbl91bmxvY2soXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5sb2NrKTtcbi1cbi1cdHJldHVybiBkcml2ZXJfYXR0YWNoKFx1MDAyNmRydi1cdTAwM2Vkcml2ZXIpO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkID0ge1xuJiM0MztcdFx0LnZlbmRvciA9IHZlbmRvcixcbiYjNDM7XHRcdC5kZXZpY2UgPSBkZXZpY2UsXG4mIzQzO1x0XHQuc3VidmVuZG9yID0gc3VidmVuZG9yLFxuJiM0MztcdFx0LnN1YmRldmljZSA9IHN1YmRldmljZSxcbiYjNDM7XHRcdC5jbGFzcyA9IGNsYXNzLFxuJiM0MztcdFx0LmNsYXNzX21hc2sgPSBjbGFzc19tYXNrLFxuJiM0MztcdFx0LmRyaXZlcl9kYXRhID0gZHJpdmVyX2RhdGEsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRvX3BjaV9hZGRfZHluaWQoZHJ2LCBcdTAwMjZpZCwgZmFsc2UpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfYWRkX2R5bmlkKTtcbiBcbkBAIC05MCw2ICYjNDM7MTIzLDMwIEBAIHN0YXRpYyB2b2lkIHBjaV9mcmVlX2R5bmlkcyhzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5sb2NrKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkb19wY2lfbWF0Y2hfaWQgLSBTZWUgaWYgYSBQQ0kgSUQgbWF0Y2hlcyBhIGdpdmVuIHBjaV9pZCB0YWJsZVxuJiM0MzsgKiBAaWRzOiBhcnJheSBvZiBQQ0kgZGV2aWNlIElEIHN0cnVjdHVyZXMgdG8gc2VhcmNoIGluXG4mIzQzOyAqIEBkZXZfaWQ6IHRoZSBhY3R1YWwgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdC5cbiYjNDM7ICogQGluY2x1ZGVfb3ZlcnJpZGVfb25seTogYWxzbyBtYXRjaCBhZ2FpbnN0IGRldmljZSBJRCBlbnRyaWVzIG1hcmtlZCBhcyBvdmVycmlkZSBvbmx5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIHRoZSBtYXRjaGluZyBwY2lfZGV2aWNlX2lkIHN0cnVjdHVyZSBvclxuJiM0MzsgKiAlTlVMTCBpZiB0aGVyZSBpcyBubyBtYXRjaC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZG9fcGNpX21hdGNoX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpkZXZfaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGJvb2wgaW5jbHVkZV9vdmVycmlkZV9vbmx5KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGlkcykge1xuJiM0MztcdFx0d2hpbGUgKGlkcy1cdTAwM2V2ZW5kb3IgfHwgaWRzLVx1MDAzZXN1YnZlbmRvciB8fCBpZHMtXHUwMDNlY2xhc3NfbWFzaykge1xuJiM0MztcdFx0XHRpZiAoKCFpZHMtXHUwMDNlb3ZlcnJpZGVfb25seSB8fCBpbmNsdWRlX292ZXJyaWRlX29ubHkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgcGNpX21hdGNoX29uZV9pZChpZHMsIGRldl9pZCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGlkcztcbiYjNDM7XHRcdFx0aWRzJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogcGNpX21hdGNoX2lkIC0gU2VlIGlmIGEgUENJIGRldmljZSBtYXRjaGVzIGEgZ2l2ZW4gcGNpX2lkIHRhYmxlXG4gICogQGlkczogYXJyYXkgb2YgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmVzIHRvIHNlYXJjaCBpblxuQEAgLTEwNSwxNCAmIzQzOzE2Miw5IEBAIHN0YXRpYyB2b2lkIHBjaV9mcmVlX2R5bmlkcyhzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KVxuIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfaWQoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcyxcbiBcdFx0XHRcdFx0IHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4ge1xuLVx0aWYgKGlkcykge1xuLVx0XHR3aGlsZSAoaWRzLVx1MDAzZXZlbmRvciB8fCBpZHMtXHUwMDNlc3VidmVuZG9yIHx8IGlkcy1cdTAwM2VjbGFzc19tYXNrKSB7XG4tXHRcdFx0aWYgKHBjaV9tYXRjaF9vbmVfZGV2aWNlKGlkcywgZGV2KSlcbi1cdFx0XHRcdHJldHVybiBpZHM7XG4tXHRcdFx0aWRzJiM0MzsmIzQzOztcbi1cdFx0fVxuLVx0fVxuLVx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkID0gcGNpX2lkX2Zyb21fZGV2aWNlKGRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkb19wY2lfbWF0Y2hfaWQoaWRzLCBcdTAwMjZkZXZfaWQsIHRydWUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBjaV9tYXRjaF9pZCk7XG4gXG5AQCAtMTI3LDYgJiM0MzsxNzksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2RldmljZV9pZF9hbnkgPSB7XG4gICogcGNpX21hdGNoX2RldmljZSAtIFNlZSBpZiBhIGRldmljZSBtYXRjaGVzIGEgZHJpdmVyJiMzOTtzIGxpc3Qgb2YgSURzXG4gICogQGRydjogdGhlIFBDSSBkcml2ZXIgdG8gbWF0Y2ggYWdhaW5zdFxuICAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0XG4mIzQzOyAqIEBpZF9jb3B5OiBQbGFjZSB0byBzdG9yZSBjb3B5IG9mIHBjaV9kZXZpY2VfaWQgZm9yIGR5bmFtaWMgSURcbiAgKlxuICAqIFVzZWQgYnkgYSBkcml2ZXIgdG8gY2hlY2sgd2hldGhlciBhIFBDSSBkZXZpY2UgaXMgaW4gaXRzIGxpc3Qgb2ZcbiAgKiBzdXBwb3J0ZWQgZGV2aWNlcyBvciBpbiB0aGUgZHluaWRzIGxpc3QsIHdoaWNoIG1heSBoYXZlIGJlZW4gYXVnbWVudGVkXG5AQCAtMTM0LDEwICYjNDM7MTg3LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfZGV2aWNlX2lkX2FueSA9IHtcbiAgKiBzdHJ1Y3R1cmUgb3IgJU5VTEwgaWYgdGhlcmUgaXMgbm8gbWF0Y2guXG4gICovXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsXG4tXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkX2NvcHkpXG4ge1xuLVx0c3RydWN0IHBjaV9keW5pZCAqZHluaWQ7XG4tXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmRfaWQgPSBOVUxMLCAqaWRzO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpmb3VuZF9pZCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qIFdoZW4gZHJpdmVyX292ZXJyaWRlIGlzIHNldCwgb25seSBiaW5kIHRvIHRoZSBtYXRjaGluZyBkcml2ZXIgKi9cbkBAIC0xNDUsNDUgJiM0MzsxOTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsXG4gXHRpZiAocmV0ID09IDApXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGRldl9pZCA9IHBjaV9pZF9mcm9tX2RldmljZShkZXYpO1xuIFx0LyogTG9vayBhdCB0aGUgZHluYW1pYyBpZHMgZmlyc3QsIGJlZm9yZSB0aGUgc3RhdGljIG9uZXMgKi9cbi1cdHNwaW5fbG9jayhcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5saXN0LCBub2RlKSB7XG4tXHRcdGlmIChwY2lfbWF0Y2hfb25lX2RldmljZShcdTAwMjZkeW5pZC1cdTAwM2VpZCwgZGV2KSkge1xuLVx0XHRcdGZvdW5kX2lkID0gXHUwMDI2ZHluaWQtXHUwMDNlaWQ7XG4tXHRcdFx0YnJlYWs7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spIHtcbiYjNDM7XHRcdHN0cnVjdCBwY2lfZHluaWQgKmR5bmlkO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xuJiM0MztcdFx0XHRpZiAocGNpX21hdGNoX29uZV9pZChcdTAwMjZkeW5pZC1cdTAwM2VpZCwgXHUwMDI2ZGV2X2lkKSkge1xuJiM0MztcdFx0XHRcdCppZF9jb3B5ID0gZHluaWQtXHUwMDNlaWQ7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGlkX2NvcHk7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0fVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5sb2NrKTtcbiBcbiYjNDM7XHRmb3VuZF9pZCA9IGRvX3BjaV9tYXRjaF9pZChkcnYtXHUwMDNlaWRfdGFibGUsIFx1MDAyNmRldl9pZCwgcmV0IFx1MDAzZSAwKTtcbiBcdGlmIChmb3VuZF9pZClcbiBcdFx0cmV0dXJuIGZvdW5kX2lkO1xuIFxuLVx0Zm9yIChpZHMgPSBkcnYtXHUwMDNlaWRfdGFibGU7IChmb3VuZF9pZCA9IHBjaV9tYXRjaF9pZChpZHMsIGRldikpO1xuLVx0ICAgICBpZHMgPSBmb3VuZF9pZCAmIzQzOyAxKSB7XG4tXHRcdC8qXG4tXHRcdCAqIFRoZSBtYXRjaCB0YWJsZSBpcyBzcGxpdCBiYXNlZCBvbiBkcml2ZXJfb3ZlcnJpZGUuXG4tXHRcdCAqIEluIGNhc2Ugb3ZlcnJpZGVfb25seSB3YXMgc2V0LCBlbmZvcmNlIGRyaXZlcl9vdmVycmlkZVxuLVx0XHQgKiBtYXRjaGluZy5cbi1cdFx0ICovXG4tXHRcdGlmIChmb3VuZF9pZC1cdTAwM2VvdmVycmlkZV9vbmx5KSB7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbi1cdFx0XHRcdHJldHVybiBmb3VuZF9pZDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXR1cm4gZm91bmRfaWQ7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdC8qIGRyaXZlcl9vdmVycmlkZSB3aWxsIGFsd2F5cyBtYXRjaCwgc2VuZCBhIGR1bW15IGlkICovXG4gXHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4gXHUwMDI2cGNpX2RldmljZV9pZF9hbnk7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX3BjaV9mcmVlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4te1xuLVx0a2ZyZWUodG9fcGNpX2RldihkZXYpKTtcbi19XG4tXG4gLyoqXG4gICogbmV3X2lkX3N0b3JlIC0gc3lzZnMgZnJvbnRlbmQgdG8gcGNpX2FkZF9keW5pZCgpXG4gICogQGRyaXZlcjogdGFyZ2V0IGRldmljZSBkcml2ZXJcbkBAIC0xOTcsMzggJiM0MzsyMzUsMjIgQEAgc3RhdGljIHNzaXplX3QgbmV3X2lkX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmJ1ZixcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RyaXZlciAqcGRydiA9IHRvX3BjaV9kcml2ZXIoZHJpdmVyKTtcbiBcdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMgPSBwZHJ2LVx1MDAzZWlkX3RhYmxlO1xuLVx0dTMyIHZlbmRvciwgZGV2aWNlLCBzdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELFxuLVx0XHRzdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELCBjbGFzcyA9IDAsIGNsYXNzX21hc2sgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSA9IDA7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXZpY2VfaWQgaWQgPSB7XG4mIzQzO1x0XHQuc3VidmVuZG9yID0gUENJX0FOWV9JRCxcbiYjNDM7XHRcdC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lEXG4mIzQzO1x0fTtcbiBcdGludCBmaWVsZHM7XG4gXHRpbnQgcmV0dmFsID0gMDtcbiBcbiBcdGZpZWxkcyA9IHNzY2FuZihidWYsIFwmIzM0OyV4ICV4ICV4ICV4ICV4ICV4ICVseFwmIzM0Oyxcbi1cdFx0XHRcdTAwMjZ2ZW5kb3IsIFx1MDAyNmRldmljZSwgXHUwMDI2c3VidmVuZG9yLCBcdTAwMjZzdWJkZXZpY2UsXG4tXHRcdFx0XHUwMDI2Y2xhc3MsIFx1MDAyNmNsYXNzX21hc2ssIFx1MDAyNmRyaXZlcl9kYXRhKTtcbiYjNDM7XHRcdFx0XHUwMDI2aWQudmVuZG9yLCBcdTAwMjZpZC5kZXZpY2UsIFx1MDAyNmlkLnN1YnZlbmRvciwgXHUwMDI2aWQuc3ViZGV2aWNlLFxuJiM0MztcdFx0XHRcdTAwMjZpZC5jbGFzcywgXHUwMDI2aWQuY2xhc3NfbWFzaywgXHUwMDI2aWQuZHJpdmVyX2RhdGEpO1xuIFx0aWYgKGZpZWxkcyBcdTAwM2MgMilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoZmllbGRzICE9IDcpIHtcbi1cdFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBremFsbG9jX29iaigqcGRldik7XG4tXHRcdGlmICghcGRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdFx0cGRldi1cdTAwM2V2ZW5kb3IgPSB2ZW5kb3I7XG4tXHRcdHBkZXYtXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xuLVx0XHRwZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3IgPSBzdWJ2ZW5kb3I7XG4tXHRcdHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZSA9IHN1YmRldmljZTtcbi1cdFx0cGRldi1cdTAwM2VjbGFzcyA9IGNsYXNzO1xuLVx0XHRwZGV2LVx1MDAzZWRldi5yZWxlYXNlID0gX3BjaV9mcmVlX2RldmljZTtcbi1cbi1cdFx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuLVx0XHRpZiAocGNpX21hdGNoX2RldmljZShwZHJ2LCBwZGV2KSlcbi1cdFx0XHRyZXR2YWwgPSAtRUVYSVNUO1xuLVxuLVx0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbi1cbi1cdFx0aWYgKHJldHZhbClcbi1cdFx0XHRyZXR1cm4gcmV0dmFsO1xuJiM0MztcdFx0aWYgKGRvX3BjaV9tYXRjaF9pZChwZHJ2LVx1MDAzZWlkX3RhYmxlLCBcdTAwMjZpZCwgZmFsc2UpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdH1cbiBcbiBcdC8qIE9ubHkgYWNjZXB0IGRyaXZlcl9kYXRhIHZhbHVlcyB0aGF0IG1hdGNoIGFuIGV4aXN0aW5nIGlkX3RhYmxlXG5AQCAtMjM2LDcgJiM0MzsyNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLFxuIFx0aWYgKGlkcykge1xuIFx0XHRyZXR2YWwgPSAtRUlOVkFMO1xuIFx0XHR3aGlsZSAoaWRzLVx1MDAzZXZlbmRvciB8fCBpZHMtXHUwMDNlc3VidmVuZG9yIHx8IGlkcy1cdTAwM2VjbGFzc19tYXNrKSB7XG4tXHRcdFx0aWYgKGRyaXZlcl9kYXRhID09IGlkcy1cdTAwM2Vkcml2ZXJfZGF0YSkge1xuJiM0MztcdFx0XHRpZiAoaWQuZHJpdmVyX2RhdGEgPT0gaWRzLVx1MDAzZWRyaXZlcl9kYXRhKSB7XG4gXHRcdFx0XHRyZXR2YWwgPSAwO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuQEAgLTI0Niw4ICYjNDM7MjY4LDcgQEAgc3RhdGljIHNzaXplX3QgbmV3X2lkX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIFx0fVxuIFxuLVx0cmV0dmFsID0gcGNpX2FkZF9keW5pZChwZHJ2LCB2ZW5kb3IsIGRldmljZSwgc3VidmVuZG9yLCBzdWJkZXZpY2UsXG4tXHRcdFx0ICAgICAgIGNsYXNzLCBjbGFzc19tYXNrLCBkcml2ZXJfZGF0YSk7XG4mIzQzO1x0cmV0dmFsID0gZG9fcGNpX2FkZF9keW5pZChwZHJ2LCBcdTAwMjZpZCwgZmllbGRzICE9IDcpO1xuIFx0aWYgKHJldHZhbClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcdHJldHVybiBjb3VudDtcbkBAIC00NDUsMTIgJiM0Mzs0NjYsMTMgQEAgdm9pZCBwY2lfcHJvYmVfZmx1c2hfd29ya3F1ZXVlKHZvaWQpXG4gc3RhdGljIGludCBfX3BjaV9kZXZpY2VfcHJvYmUoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkX2NvcHk7XG4gXHRpbnQgZXJyb3IgPSAwO1xuIFxuIFx0aWYgKGRydi1cdTAwM2Vwcm9iZSkge1xuIFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gXG4tXHRcdGlkID0gcGNpX21hdGNoX2RldmljZShkcnYsIHBjaV9kZXYpO1xuJiM0MztcdFx0aWQgPSBwY2lfbWF0Y2hfZGV2aWNlKGRydiwgcGNpX2RldiwgXHUwMDI2aWRfY29weSk7XG4gXHRcdGlmIChpZClcbiBcdFx0XHRlcnJvciA9IHBjaV9jYWxsX3Byb2JlKGRydiwgcGNpX2RldiwgaWQpO1xuIFx0fVxuQEAgLTE1MzgsMTIgJiM0MzsxNTYwLDEzIEBAIHN0YXRpYyBpbnQgcGNpX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTtcbiBcdHN0cnVjdCBwY2lfZHJpdmVyICpwY2lfZHJ2O1xuIFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkO1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkX2NvcHk7XG4gXG4gXHRpZiAocGNpX2Rldl9iaW5kaW5nX2Rpc2FsbG93ZWQocGNpX2RldikpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cGNpX2RydiA9IChzdHJ1Y3QgcGNpX2RyaXZlciAqKXRvX3BjaV9kcml2ZXIoZHJ2KTtcbi1cdGZvdW5kX2lkID0gcGNpX21hdGNoX2RldmljZShwY2lfZHJ2LCBwY2lfZGV2KTtcbiYjNDM7XHRmb3VuZF9pZCA9IHBjaV9tYXRjaF9kZXZpY2UocGNpX2RydiwgcGNpX2RldiwgXHUwMDI2aWRfY29weSk7XG4gXHRpZiAoZm91bmRfaWQpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IDQ0NjllMWE3N2YzYzEzLi4wNTY3YTg3NjJiYWEwOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuaFxuQEAgLTQ0MiwyMSAmIzQzOzQ0MiwzNyBAQCBzdGF0aWMgaW5saW5lIGludCBwY2lfc2V0dXBfY2FyZGJ1cyhjaGFyICpzdHIpIHsgcmV0dXJuIC1FTk9FTlQ7IH1cbiAjZW5kaWYgLyogQ09ORklHX0NBUkRCVVMgKi9cbiBcbiAvKipcbi0gKiBwY2lfbWF0Y2hfb25lX2RldmljZSAtIFRlbGwgaWYgYSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSBoYXMgYSBtYXRjaGluZ1xuLSAqXHRcdFx0ICBQQ0kgZGV2aWNlIGlkIHN0cnVjdHVyZVxuLSAqIEBpZDogc2luZ2xlIFBDSSBkZXZpY2UgaWQgc3RydWN0dXJlIHRvIG1hdGNoXG4tICogQGRldjogdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3RcbiYjNDM7ICogcGNpX2lkX2Zyb21fZGV2aWNlIC0gT2J0YWluIGEgcGNpX2RldmljZV9pZCBmcm9tIGEgUENJIGRldmljZVxuJiM0MzsgKiBAZGV2OiB0aGUgUENJIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIGEgcGNpX2RldmljZV9pZCBmaWxsZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZF9mcm9tX2RldmljZShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgcGNpX2RldmljZV9pZCkge1xuJiM0MztcdFx0LnZlbmRvciA9IGRldi1cdTAwM2V2ZW5kb3IsXG4mIzQzO1x0XHQuZGV2aWNlID0gZGV2LVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdC5zdWJ2ZW5kb3IgPSBkZXYtXHUwMDNlc3Vic3lzdGVtX3ZlbmRvcixcbiYjNDM7XHRcdC5zdWJkZXZpY2UgPSBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZSxcbiYjNDM7XHRcdC5jbGFzcyA9IGRldi1cdTAwM2VjbGFzcyxcbiYjNDM7XHR9O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpX21hdGNoX29uZV9pZCAtIFRlbGwgaWYgYSBQQ0kgZGV2aWNlIElEIG1hdGNoZXMgYSBuZWVkbGUgUENJIGRldmljZSBpZFxuJiM0MzsgKiBAaWQ6IHNpbmdsZSBQQ0kgZGV2aWNlIGlkIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0IChuZWVkbGUpXG4mIzQzOyAqIEBkZXZfaWQ6IHRoZSBhY3R1YWwgSUQgZnJvbSB0aGUgUENJIGRldmljZSAoY2FuIGJlIGNyZWF0ZWQgdmlhIHBjaV9pZF9mcm9tX2RldmljZSlcbiAgKlxuICAqIFJldHVybnMgdGhlIG1hdGNoaW5nIHBjaV9kZXZpY2VfaWQgc3RydWN0dXJlIG9yICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKlxuLXBjaV9tYXRjaF9vbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldilcbiYjNDM7cGNpX21hdGNoX29uZV9pZChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpkZXZfaWQpXG4ge1xuLVx0aWYgKChpZC1cdTAwM2V2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC1cdTAwM2V2ZW5kb3IgPT0gZGV2LVx1MDAzZXZlbmRvcikgXHUwMDI2XHUwMDI2XG4tXHQgICAgKGlkLVx1MDAzZWRldmljZSA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVx1MDAzZWRldmljZSA9PSBkZXYtXHUwMDNlZGV2aWNlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoaWQtXHUwMDNlc3VidmVuZG9yID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlc3VidmVuZG9yID09IGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoaWQtXHUwMDNlc3ViZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlc3ViZGV2aWNlID09IGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKChpZC1cdTAwM2VjbGFzcyBeIGRldi1cdTAwM2VjbGFzcykgXHUwMDI2IGlkLVx1MDAzZWNsYXNzX21hc2spKVxuJiM0MztcdGlmICgoaWQtXHUwMDNldmVuZG9yID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNldmVuZG9yID09IGRldl9pZC1cdTAwM2V2ZW5kb3IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoaWQtXHUwMDNlZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlZGV2aWNlID09IGRldl9pZC1cdTAwM2VkZXZpY2UpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoaWQtXHUwMDNlc3VidmVuZG9yID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlc3VidmVuZG9yID09IGRldl9pZC1cdTAwM2VzdWJ2ZW5kb3IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoaWQtXHUwMDNlc3ViZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlc3ViZGV2aWNlID09IGRldl9pZC1cdTAwM2VzdWJkZXZpY2UpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhKChpZC1cdTAwM2VjbGFzcyBeIGRldl9pZC1cdTAwM2VjbGFzcykgXHUwMDI2IGlkLVx1MDAzZWNsYXNzX21hc2spKVxuIFx0XHRyZXR1cm4gaWQ7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guY1xuaW5kZXggZTNkMzE3N2ZjZTU0OWUuLmM4YzRiZmU3ODE3YjAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvc2VhcmNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jXG5AQCAtMjQ1LDggJiM0MzsyNDUsMTAgQEAgc3RhdGljIGludCBtYXRjaF9wY2lfZGV2X2J5X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcbiBcdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCA9IGRhdGE7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkO1xuIFxuLVx0aWYgKHBjaV9tYXRjaF9vbmVfZGV2aWNlKGlkLCBwZGV2KSlcbiYjNDM7XHRkZXZfaWQgPSBwY2lfaWRfZnJvbV9kZXZpY2UocGRldik7XG4mIzQzO1x0aWYgKHBjaV9tYXRjaF9vbmVfaWQoaWQsIFx1MDAyNmRldl9pZCkpXG4gXHRcdHJldHVybiAxO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQxOCw3ICYjNDM7NDIwLDcgQEAgRVhQT1JUX1NZTUJPTChwY2lfZ2V0X2NsYXNzKTtcbiAgKlxuICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuIElmIGEgUENJIGRldmljZSBpcyBmb3VuZFxuICAqIHdpdGggYSBtYXRjaGluZyBiYXNlIGNsYXNzIGNvZGUsIHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGhlIGRldmljZSBpc1xuLSAqIGluY3JlbWVudGVkLiBTZWUgcGNpX21hdGNoX29uZV9kZXZpY2UoKSB0byBmaWd1cmUgb3V0IGhvdyBkb2VzIHRoaXMgd29ya3MuXG4mIzQzOyAqIGluY3JlbWVudGVkLiBTZWUgcGNpX21hdGNoX29uZV9pZCgpIHRvIGZpZ3VyZSBvdXQgaG93IGRvZXMgdGhpcyB3b3Jrcy5cbiAgKiBBIG5ldyBzZWFyY2ggaXMgaW5pdGlhdGVkIGJ5IHBhc3NpbmcgJU5VTEwgYXMgdGhlIEBmcm9tIGFyZ3VtZW50LlxuICAqIE90aGVyd2lzZSBpZiBAZnJvbSBpcyBub3QgJU5VTEwsIHNlYXJjaGVzIGNvbnRpbnVlIGZyb20gbmV4dCBkZXZpY2Ugb24gdGhlXG4gICogZ2xvYmFsIGxpc3QuIFRoZSByZWZlcmVuY2UgY291bnQgZm9yIEBmcm9tIGlzIGFsd2F5cyBkZWNyZW1lbnRlZCBpZiBpdCBpc1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jIGIvZHJpdmVycy9zY3NpL25zcDMyLmNcbmluZGV4IGU4OTNkNTY3NzI0MTdhLi45YzkyODEyMjJhMGFjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvbnNwMzIuY1xuQEAgLTE0NzAsNyAmIzQzOzE0NzAsNyBAQCBzdGF0aWMgaW50IG5zcDMyX3Nob3dfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpXG4gXHRcdCAgIChuc3AzMl9yZWFkMihiYXNlLCBJTkRFWF9SRUcpIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZik7XG4gXG4gXHRtb2RlX3JlZyA9IG5zcDMyX2luZGV4X3JlYWQxKGJhc2UsIENISVBfTU9ERSk7XG4tXHRtb2RlbCAgICA9IGRhdGEtXHUwMDNlcGNpX2RldmlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuJiM0MztcdG1vZGVsICAgID0gZGF0YS1cdTAwM2Vtb2RlbDtcbiBcbiAjaWZkZWYgQ09ORklHX1BNXG4gXHRzZXFfcHJpbnRmKG0sIFwmIzM0O1Bvd2VyIE1hbmFnZW1lbnQ6ICAgICAgJXNcXG5cJiMzNDssXG5AQCAtMjkwNyw4ICYjNDM7MjkwNyw4IEBAIHN0YXRpYyBpbnQgbnNwMzJfZWhfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudClcbiAgKi9cbiBzdGF0aWMgaW50IG5zcDMyX2dldHByb21fcGFyYW0obnNwMzJfaHdfZGF0YSAqZGF0YSlcbiB7XG4tXHRpbnQgdmVuZG9yID0gZGF0YS1cdTAwM2VwY2lfZGV2aWQtXHUwMDNldmVuZG9yO1xuLVx0aW50IGRldmljZSA9IGRhdGEtXHUwMDNlcGNpX2RldmlkLVx1MDAzZWRldmljZTtcbiYjNDM7XHRpbnQgdmVuZG9yID0gZGF0YS1cdTAwM2VQY2ktXHUwMDNldmVuZG9yO1xuJiM0MztcdGludCBkZXZpY2UgPSBkYXRhLVx1MDAzZVBjaS1cdTAwM2VkZXZpY2U7XG4gXHRpbnQgcmV0LCBpO1xuIFx0aW50IF9fbWF5YmVfdW51c2VkIHZhbDtcbiBcbkBAIC0zMzQwLDcgJiM0MzszMzQwLDcgQEAgc3RhdGljIGludCBuc3AzMl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0fVxuIFxuIFx0ZGF0YS1cdTAwM2VQY2lcdCAgPSBwZGV2O1xuLVx0ZGF0YS1cdTAwM2VwY2lfZGV2aWQgICA9IGlkO1xuJiM0MztcdGRhdGEtXHUwMDNlbW9kZWwgICAgICAgPSBpZC1cdTAwM2Vkcml2ZXJfZGF0YTtcbiBcdGRhdGEtXHUwMDNlSXJxTnVtYmVyICAgPSBwZGV2LVx1MDAzZWlycTtcbiBcdGRhdGEtXHUwMDNlQmFzZUFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7XG4gXHRkYXRhLVx1MDAzZU51bUFkZHJlc3MgID0gcGNpX3Jlc291cmNlX2xlbiAgKHBkZXYsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oIGIvZHJpdmVycy9zY3NpL25zcDMyLmhcbmluZGV4IDkyNDg4OWY4YmQzN2U3Li45ZTY1NzcxY2I1OTI4NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvbnNwMzIuaFxuQEAgLTU2NCwxMCAmIzQzOzU2NCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfbnNwMzJfaHdfZGF0YSB7XG4gXG4gXHRzdHJ1Y3Qgc2NzaV9jbW5kICpDdXJyZW50U0M7XG4gXG4tXHRzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICAqUGNpO1xuLVx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXZpZDtcbi1cdHN0cnVjdCBTY3NpX0hvc3QgICAgICAgICAgICpIb3N0O1xuLVx0c3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgIExvY2s7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgICAgKlBjaTtcbiYjNDM7XHRpbnQgICAgICAgICAgICAgICAgbW9kZWw7XG4mIzQzO1x0c3RydWN0IFNjc2lfSG9zdCAgKkhvc3Q7XG4mIzQzO1x0c3BpbmxvY2tfdCAgICAgICAgIExvY2s7XG4gXG4gXHRjaGFyIGluZm9fc3RyWzEwMF07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li45MmMxN2MxMTZkZTZkMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC05NzksNiAmIzQzOzk3OSw3IEBAIHN0cnVjdCBtb2R1bGU7XG4gICpcdFx0ZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHdoZW4gdGhlIGRyaXZlciBjaG9vc2VzIHRvXG4gICpcdFx0dGFrZSBcJiMzNDtvd25lcnNoaXBcJiMzNDsgb2YgdGhlIGRldmljZSBvciBhbiBlcnJvciBjb2RlXG4gICpcdFx0KG5lZ2F0aXZlIG51bWJlcikgb3RoZXJ3aXNlLlxuJiM0MzsgKlx0XHRUaGUgcGNpX2RldmljZV9pZCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcgcHJvYmUuXG4gICpcdFx0VGhlIHByb2JlIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3NcbiAgKlx0XHRjb250ZXh0LCBzbyBpdCBjYW4gc2xlZXAuXG4gICogQHJlbW92ZTpcdFRoZSByZW1vdmUoKSBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuZXZlciBhIGRldmljZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUQV9HRU5FUklDJiMzNDssCiAgICAmIzM0O0FHUCYjMzQ7LAogICAgJiMzNDtBR1BfQU1EJiMzNDssCiAgICAmIzM0O0FHUF9WSUEmIzM0OywKICAgICYjMzQ7SVBBQ0tfQlVTJiMzNDssCiAgICAmIzM0O0JPQVJEX1RQQ0kyMDAmIzM0OywKICAgICYjMzQ7TUxYU1dfUENJJiMzNDssCiAgICAmIzM0O1NDU0lfTlNQMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19wY2lfYWRkX2R5bmlkJiMzNDssCiAgICAmIzM0O25ld19pZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfZGV2aWNlJiMzNDssCiAgICAmIzM0O2RvX3BjaV9tYXRjaF9pZCYjMzQ7LAogICAgJiMzNDtfX3BjaV9kZXZpY2VfcHJvYmUmIzM0OywKICAgICYjMzQ7cGNpX2FkZF9keW5pZCYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfaWQmIzM0OywKICAgICYjMzQ7YXRhX2dlbmVyaWNfaW5pdF9vbmUmIzM0OywKICAgICYjMzQ7YWdwX2FtZGs3X3Byb2JlJiMzNDssCiAgICAmIzM0O2FncF92aWFfcHJvYmUmIzM0OywKICAgICYjMzQ7dHBjaTIwMF9wY2lfcHJvYmUmIzM0OywKICAgICYjMzQ7bWx4c3dfcGNpX3Byb2JlJiMzNDssCiAgICAmIzM0O25zcDMyX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgY29yZSB0byBwYXNzIGEgY29weSBvZiB0aGUgZHluYW1pYyBwY2lfZGV2aWNlX2lkIHRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gdGhlIGhlYXAtYWxsb2NhdGVkIGR5bmFtaWMgSUQsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGR5bmFtaWMgSUQgaXMgcmVtb3ZlZCB2aWEgc3lzZnMuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHNhdmluZyB0aGUgcGNpX2RldmljZV9pZCBwb2ludGVyIHRvIGluc3RlYWQgc2F2ZSB0aGUgZHJpdmVyX2RhdGEgb3Igb3RoZXIgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFBDSSBjb3JlIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gUENJIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGR5bmFtaWMgSURzIHZpYSBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNThiZTU4MTlmZmZkZDVmM2MxMWRkMWEyNmFhNTJkY2E1MGUwMjQwOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMjA6NDQ6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwppbmRleCBlNzBiNmMwODljZjE3OS4uMThlYTc0MGNhNTgyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwpAQCAtNTEsMTEgJiM0Mzs1MSwxMSBAQCBlbnVtIHsKIHN0YXRpYyBpbnQgZ2VuZXJpY19zZXRfbW9kZShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHN0cnVjdCBhdGFfZGV2aWNlICoqdW51c2VkKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLSZndDthcDsKLQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQgPSBhcC0mZ3Q7aG9zdC0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwl1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpYXAtJmd0O2hvc3QtJmd0O3ByaXZhdGVfZGF0YTsKIAlpbnQgZG1hX2VuYWJsZWQgPSAwOwogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CiAKLQlpZiAoaWQtJmd0O2RyaXZlcl9kYXRhICZhbXA7IEFUQV9HRU5fRk9SQ0VfRE1BKSB7CiYjNDM7CWlmIChkcml2ZXJfZGF0YSAmYW1wOyBBVEFfR0VOX0ZPUkNFX0RNQSkgewogCQlkbWFfZW5hYmxlZCA9IDB4ZmY7CiAJfSBlbHNlIGlmIChhcC0mZ3Q7aW9hZGRyLmJtZG1hX2FkZHIpIHsKIAkJLyogQml0cyA1IGFuZCA2IGluZGljYXRlIGlmIERNQSBpcyBhY3RpdmUgb24gbWFzdGVyL3NsYXZlICovCkBAIC0yMDYsNyAmIzQzOzIwNiw3IEBAIHN0YXRpYyBpbnQgYXRhX2dlbmVyaWNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQKIAkJCXJldHVybiByYzsKIAkJcGNpbV9waW5fZGV2aWNlKGRldik7CiAJfQotCXJldHVybiBhdGFfcGNpX2JtZG1hX2luaXRfb25lKGRldiwgcHBpLCAmYW1wO2dlbmVyaWNfc2h0LCAodm9pZCAqKWlkLCAwKTsKJiM0MzsJcmV0dXJuIGF0YV9wY2lfYm1kbWFfaW5pdF9vbmUoZGV2LCBwcGksICZhbXA7Z2VuZXJpY19zaHQsICh2b2lkICopaWQtJmd0O2RyaXZlcl9kYXRhLCAwKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0YV9nZW5lcmljW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCmluZGV4IDg5OGZmMzBmZmQ0NmIyLi40ZDIwMWU3MWM1MTc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKQEAgLTM4NywzNyAmIzQzOzM4NywxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGFtZF9pcm9uZ2F0ZV9kcml2ZXIgPSB7CiAJLmFncF90eXBlX3RvX21hc2tfdHlwZSAgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYWdwX2RldmljZV9pZHMgYW1kX2FncF9kZXZpY2VfaWRzW10gPQotewotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwNiwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7SXJvbmdhdGUmIzM0OywKLQl9LAotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwRSwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7NzYxJiMzNDssCi0JfSwKLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEMsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0Ozc2ME1QJiMzNDssCi0JfSwKLQl7IH0sIC8qIGR1bW15IGZpbmFsIGVudHJ5LCBhbHdheXMgcHJlc2VudCAqLwotfTsKLQogc3RhdGljIGludCBhZ3BfYW1kazdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZTsKIAl1OCBjYXBfcHRyOwotCWludCBqOwogCiAJY2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApOwogCWlmICghY2FwX3B0cikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlqID0gZW50IC0gYWdwX2FtZGs3X3BjaV90YWJsZTsKLQlkZXZfaW5mbygmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtBTUQgJXMgY2hpcHNldFxuJiMzNDssCi0JCSBhbWRfYWdwX2RldmljZV9pZHNbal0uY2hpcHNldF9uYW1lKTsKJiM0MzsJZGV2X2luZm8oJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7QU1EICVzIGNoaXBzZXRcbiYjMzQ7LCAoY29uc3QgY2hhciAqKWVudC0mZ3Q7ZHJpdmVyX2RhdGEpOwogCiAJYnJpZGdlID0gYWdwX2FsbG9jX2JyaWRnZSgpOwogCWlmICghYnJpZGdlKQpAQCAtNDkyLDcgJiM0Mzs0NzIsNiBAQCBzdGF0aWMgaW50IGFncF9hbWRrN19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiBhbWRfaXJvbmdhdGVfZHJpdmVyLmNvbmZpZ3VyZSgpOwogfQogCi0vKiBtdXN0IGJlIHRoZSBzYW1lIG9yZGVyIGFzIG5hbWUgdGFibGUgYWJvdmUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfYW1kazdfcGNpX3RhYmxlW10gPSB7CiAJewogCS5jbGFzcwkJPSAoUENJX0NMQVNTX0JSSURHRV9IT1NUICZsdDsmbHQ7IDgpLApAQCAtNTAxLDYgJiM0Mzs0ODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0gewogCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDA2LAogCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAogCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAomIzQzOwkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJiMzNDtJcm9uZ2F0ZSYjMzQ7LAogCX0sCiAJewogCS5jbGFzcwkJPSAoUENJX0NMQVNTX0JSSURHRV9IT1NUICZsdDsmbHQ7IDgpLApAQCAtNTA5LDYgJiM0Mzs0ODksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0gewogCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDBFLAogCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAogCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAomIzQzOwkuZHJpdmVyX2RhdGEJPSAoa2VybmVsX3Vsb25nX3QpJiMzNDs3NjEmIzM0OywKIAl9LAogCXsKIAkuY2xhc3MJCT0gKFBDSV9DTEFTU19CUklER0VfSE9TVCAmbHQ7Jmx0OyA4KSwKQEAgLTUxNyw2ICYjNDM7NDk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF9hbWRrN19wY2lfdGFibGVbXSA9IHsKIAkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQywKIAkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKIAkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKJiM0MzsJLmRyaXZlcl9kYXRhCT0gKGtlcm5lbF91bG9uZ190KSYjMzQ7NzYwTVAmIzM0OywKIAl9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKaW5kZXggOGIxOWE1ZDFhMDliNDkuLmFiM2I3M2RkMDgwYWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwpAQCAtMjIxLDIwNCAmIzQzOzIyMSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgdmlhX2RyaXZlciA9IHsKIAkuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlLAogfTsKIAotc3RhdGljIHN0cnVjdCBhZ3BfZGV2aWNlX2lkcyB2aWFfYWdwX2RldmljZV9pZHNbXSA9Ci17Ci0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0Fwb2xsbyBWUDMmIzM0OywKLQl9LAotCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0Fwb2xsbyBNVlAzJiMzNDssCi0JfSwKLQotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7QXBvbGxvIE1WUDQmIzM0OywKLQl9LAotCi0JLyogVlQ4NjAxICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODYwMV8wLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtBcG9sbG8gUHJvTWVkaWEvUExFMTMzVGEmIzM0OywKLQl9LAotCi0JLyogVlQ4MkM2OTNBIC8gVlQyOEM2OTRUICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0Fwb2xsbyBQcm8gMTMzJiMzNDssCi0JfSwKLQotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7S1gxMzMmIzM0OywKLQl9LAotCi0JLyogVlQ4NjMzICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODYzM18wLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtQcm8gMjY2JiMzNDssCi0JfSwKLQotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2LAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtBcG9sbG8gUHJvMjY2JiMzNDssCi0JfSwKLQotCS8qIFZUODM2MSAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzgzNjEsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0tMRTEzMyYjMzQ7LAotCX0sCi0KLQkvKiBWVDgzNjUgLyBWVDgzNjIgKi8KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O1R3aXN0ZXItSy9LVDEzM3gvS00xMzMmIzM0OywKLQl9LAotCi0JLyogVlQ4NzUzQSAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UDRYMjY2JiMzNDssCi0JfSwKLQotCS8qIFZUODM2NiAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzgzNjdfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7S1QyNjYvS1kyNjZ4L0tUMzMzJiMzNDssCi0JfSwKLQotCS8qIFZUODYzMyAoZm9yIEN1TWluZS8gQ2VsZXJvbikgKi8KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O1BybzI2NlQmIzM0OywKLQl9LAotCi0JLyogS00yNjYgLyBQTTI2NiAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2LAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtQTTI2Ni9LTTI2NiYjMzQ7LAotCX0sCi0KLQkvKiBDTEUyNjYgKi8KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0NMRTI2NiYjMzQ7LAotCX0sCi0KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84Mzc3XzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O0tUNDAwL0tUNDAwQS9LVDYwMCYjMzQ7LAotCX0sCi0KLQkvKiBWVDg2MDQgLyBWVDg2MDUgLyBWVDg2MDMKLQkgKiAoQXBvbGxvIFBybzEzM0EgY2hpcHNldCB3aXRoIFMzIFNhdmFnZTQpICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODYwNV8wLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtQcm9TYXZhZ2UgUE0xMzMvUEwxMzMvUE4xMzMmIzM0OwotCX0sCi0KLQkvKiBQNE0yNjZ4L1A0TjI2NiAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UDRNMjY2eC9QNE4yNjYmIzM0OywKLQl9LAotCi0JLyogVlQ4NzU0ICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODc1NENfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UFQ4MDAmIzM0OywKLQl9LAotCi0JLyogUDRYNjAwICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfODc2M18wLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtQNFg2MDAmIzM0OwotCX0sCi0KLQkvKiBLTTQwMCAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzhfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7S000MDAvS000MDBBJiMzNDssCi0JfSwKLQotCS8qIFBUODgwICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfUFQ4ODAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O1BUODgwJiMzNDssCi0JfSwKLQotCS8qIFBUODgwIFVsdHJhICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UFQ4ODAgVWx0cmEmIzM0OywKLQl9LAotCi0JLyogUFQ4OTAgKi8KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84NzgzXzAsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O1BUODkwJiMzNDssCi0JfSwKLQotCS8qIFBNODAwL1BOODAwL1BNODgwL1BOODgwICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UE04MDAvUE44MDAvUE04ODAvUE44ODAmIzM0OywKLQl9LAotCS8qIEtUODgwICovCi0JewotCQkuZGV2aWNlX2lkCT0gUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtLVDg4MCYjMzQ7LAotCX0sCi0JLyogS1R4eHgvUHg4eHggKi8KLQl7Ci0JCS5kZXZpY2VfaWQJPSBQQ0lfREVWSUNFX0lEX1ZJQV84M184N1hYXzEsCi0JCS5jaGlwc2V0X25hbWUJPSAmIzM0O1ZUODN4eC9WVDg3eHgvS1R4eHgvUHg4eHgmIzM0OywKLQl9LAotCS8qIFA0TTgwMCAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMCwKLQkJLmNoaXBzZXRfbmFtZQk9ICYjMzQ7UDRNODAwJiMzNDssCi0JfSwKLQkvKiBQNE04MDBDRSAqLwotCXsKLQkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFLAotCQkuY2hpcHNldF9uYW1lCT0gJiMzNDtWVDMzMTQmIzM0OywKLQl9LAotCS8qIFZUMzMyNCAvIENYNzAwICovCi0JewotCQkuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMyNCwKLQkJLmNoaXBzZXRfbmFtZSAgID0gJiMzNDtDWDcwMCYjMzQ7LAotCX0sCi0JLyogVlQzMzM2IC0gdGhpcyBpcyBhIGNoaXBzZXQgZm9yIEFNRCBBdGhsb24vSzggQ1BVLiBEdWUgdG8gSzgmIzM5O3MgdW5pcXVlCi0JICogYXJjaGl0ZWN0dXJlLCB0aGUgQUdQIHJlc291cmNlIGFuZCBiZWhhdmlvciBhcmUgZGlmZmVyZW50IGZyb20KLQkgKiB0aGUgdHJhZGl0aW9uYWwgQUdQIHdoaWNoIHJlc2lkZXMgb25seSBpbiBjaGlwc2V0LiBBR1AgaXMgdXNlZAotCSAqIGJ5IDNEIGRyaXZlciB3aGljaCB3YXNuJiMzOTt0IGF2YWlsYWJsZSBmb3IgdGhlIFZUMzMzNiBhbmQgVlQzMzY0Ci0JICogZ2VuZXJhdGlvbiB1bnRpbCBub3cuICBVbmZvcnR1bmF0ZWx5LCBieSB0ZXN0aW5nLCBWVDMzNjQgd29ya3MKLQkgKiBidXQgVlQzMzM2IGRvZXNuJiMzOTt0LiAtIGV4cGxhbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXMKLQkgKiBhcyBhIHBsYWNlaG9sZGVyIHRvIGF2b2lkIGZ1dHVyZSBwYXRjaGVzIGFkZGluZyBpdCBiYWNrIGluLgotCSAqLwotI2lmIDAKLQl7Ci0JCS5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LAotCQkuY2hpcHNldF9uYW1lICAgPSAmIzM0O1ZUMzMzNiYjMzQ7LAotCX0sCi0jZW5kaWYKLQkvKiBQNE04OTAgKi8KLQl7Ci0JCS5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfUDRNODkwLAotCQkuY2hpcHNldF9uYW1lICAgPSAmIzM0O1A0TTg5MCYjMzQ7LAotCX0sCi0JLyogUDRNOTAwICovCi0JewotCQkuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzM2NCwKLQkJLmNoaXBzZXRfbmFtZSAgID0gJiMzNDtQNE05MDAmIzM0OywKLQl9LAotCXsgfSwgLyogZHVtbXkgZmluYWwgZW50cnksIGFsd2F5cyBwcmVzZW50ICovCi19OwotCiAKIC8qCiAgKiBWSUEmIzM5O3MgQUdQMyBjaGlwc2V0cyBkbyBtYWdpY2sgdG8gcHV0IHRoZSBBR1AgYnJpZGdlIGNvbXBsaWFudApAQCAtNDM3LDE3ICYjNDM7MjM5LDE0IEBAIHN0YXRpYyB2b2lkIGNoZWNrX3ZpYV9hZ3AzIChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpCiAKIHN0YXRpYyBpbnQgYWdwX3ZpYV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdHJ1Y3QgYWdwX2RldmljZV9pZHMgKmRldnMgPSB2aWFfYWdwX2RldmljZV9pZHM7CiAJc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlOwotCWludCBqID0gMDsKIAl1OCBjYXBfcHRyOwogCiAJY2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApOwogCWlmICghY2FwX3B0cikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlqID0gZW50IC0gYWdwX3ZpYV9wY2lfdGFibGU7Ci0JcHJpbnRrIChLRVJOX0lORk8gUEZYICYjMzQ7RGV0ZWN0ZWQgVklBICVzIGNoaXBzZXRcbiYjMzQ7LCBkZXZzW2pdLmNoaXBzZXRfbmFtZSk7CiYjNDM7CWRldl9pbmZvKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O0RldGVjdGVkIFZJQSAlcyBjaGlwc2V0XG4mIzM0OywgKGNvbnN0IGNoYXIgKillbnQtJmd0O2RyaXZlcl9kYXRhKTsKIAogCWJyaWRnZSA9IGFncF9hbGxvY19icmlkZ2UoKTsKIAlpZiAoIWJyaWRnZSkKQEAgLTUwMSw5ICYjNDM7MzAwLDggQEAgc3RhdGljIGludCBhZ3BfdmlhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLS8qIG11c3QgYmUgdGhlIHNhbWUgb3JkZXIgYXMgbmFtZSB0YWJsZSBhYm92ZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF92aWFfcGNpX3RhYmxlW10gPSB7Ci0jZGVmaW5lIElEKHgpIFwKJiM0MzsjZGVmaW5lIElEKHgsIG5hbWUpIFwKIAl7CQkJCQkJXAogCS5jbGFzcwkJPSAoUENJX0NMQVNTX0JSSURHRV9IT1NUICZsdDsmbHQ7IDgpLAlcCiAJLmNsYXNzX21hc2sJPSB+MCwJCQkJXApAQCAtNTExLDM5ICYjNDM7MzA5LDc3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfdmlhX3BjaV90YWJsZVtdID0gewogCS5kZXZpY2UJCT0geCwJCQkJXAogCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAkJCVwKIAkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwJCQlcCiYjNDM7CS5kcml2ZXJfZGF0YQk9IChrZXJuZWxfdWxvbmdfdCluYW1lLAkJXAogCX0KLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODYwMV8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM2OTFfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODM3MV8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjMzXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2KSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYxKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODM2N18wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2KSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODYwNV8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzAzXzUxXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3NjNfMCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODM3OF8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MCksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfODc4M18wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QWDhYMF8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfMzI5Nl8wKSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04MDBDRSksCi0JSUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0KSwKLQlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04OTApLAotCUlEKFBDSV9ERVZJQ0VfSURfVklBX1ZUMzM2NCksCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5N18wLCAmIzM0O0Fwb2xsbyBWUDMmIzM0OyksCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8wLCAmIzM0O0Fwb2xsbyBNVlAzJiMzNDspLAomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzAsICYjMzQ7QXBvbGxvIE1WUDQmIzM0OyksCiYjNDM7CS8qIFZUODYwMSAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsICYjMzQ7QXBvbGxvIFByb01lZGlhL1BMRTEzM1RhJiMzNDspLAomIzQzOwkvKiBWVDgyQzY5M0EgLyBWVDI4QzY5NFQgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAsICYjMzQ7QXBvbGxvIFBybyAxMzMmIzM0OyksCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCwgJiMzNDtLWDEzMyYjMzQ7KSwKJiM0MzsJLyogVlQ4NjMzICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzg2MzNfMCwgJiMzNDtQcm8gMjY2JiMzNDspLAomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9YTjI2NiwgJiMzNDtBcG9sbG8gUHJvMjY2JiMzNDspLAomIzQzOwkvKiBWVDgzNjEgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfODM2MSwgJiMzNDtLTEUxMzMmIzM0OyksCiYjNDM7CS8qIFZUODM2NSAvIFZUODM2MiAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzAsICYjMzQ7VHdpc3Rlci1LL0tUMTMzeC9LTTEzMyYjMzQ7KSwKJiM0MzsJLyogVlQ4NzUzQSAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzUzXzAsICYjMzQ7UDRYMjY2JiMzNDspLAomIzQzOwkvKiBWVDgzNjYgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfODM2N18wLCAmIzM0O0tUMjY2L0tZMjY2eC9LVDMzMyYjMzQ7KSwKJiM0MzsJLyogVlQ4NjMzIChmb3IgQ3VNaW5lLyBDZWxlcm9uKSAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzAsICYjMzQ7UHJvMjY2VCYjMzQ7KSwKJiM0MzsJLyogS00yNjYgLyBQTTI2NiAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2NiwgJiMzNDtQTTI2Ni9LTTI2NiYjMzQ7KSwKJiM0MzsJLyogQ0xFMjY2ICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzg2MlhfMCwgJiMzNDtDTEUyNjYmIzM0OyksCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCwgJiMzNDtLVDQwMC9LVDQwMEEvS1Q2MDAmIzM0OyksCiYjNDM7CS8qIFZUODYwNCAvIFZUODYwNSAvIFZUODYwMyAoQXBvbGxvIFBybzEzM0EgY2hpcHNldCB3aXRoIFMzIFNhdmFnZTQpICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCwgJiMzNDtQcm9TYXZhZ2UgUE0xMzMvUEwxMzMvUE4xMzMmIzM0OyksCiYjNDM7CS8qIFA0TTI2NngvUDROMjY2ICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCwgJiMzNDtQNE0yNjZ4L1A0TjI2NiYjMzQ7KSwKJiM0MzsJLyogVlQ4NzU0ICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzAsICYjMzQ7UFQ4MDAmIzM0OyksCiYjNDM7CS8qIFA0WDYwMCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzYzXzAsICYjMzQ7UDRYNjAwJiMzNDspLAomIzQzOwkvKiBLTTQwMCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzAsICYjMzQ7S000MDAvS000MDBBJiMzNDspLAomIzQzOwkvKiBQVDg4MCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MCwgJiMzNDtQVDg4MCYjMzQ7KSwKJiM0MzsJLyogUFQ4ODAgVWx0cmEgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSwgJiMzNDtQVDg4MCBVbHRyYSYjMzQ7KSwKJiM0MzsJLyogUFQ4OTAgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfODc4M18wLCAmIzM0O1BUODkwJiMzNDspLAomIzQzOwkvKiBQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QWDhYMF8wLCAmIzM0O1BNODAwL1BOODAwL1BNODgwL1BOODgwJiMzNDspLAomIzQzOwkvKiBLVDg4MCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzAsICYjMzQ7S1Q4ODAmIzM0OyksCiYjNDM7CS8qIEtUeHh4L1B4OHh4ICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSwgJiMzNDtWVDgzeHgvVlQ4N3h4L0tUeHh4L1B4OHh4JiMzNDspLAomIzQzOwkvKiBQNE04MDAgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfMzI5Nl8wLCAmIzM0O1A0TTgwMCYjMzQ7KSwKJiM0MzsJLyogUDRNODAwQ0UgKi8KJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UsICYjMzQ7VlQzMzE0JiMzNDspLAomIzQzOwkvKiBWVDMzMjQgLyBDWDcwMCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMjQsICYjMzQ7Q1g3MDAmIzM0OyksCiYjNDM7CS8qIFZUMzMzNiAtIHRoaXMgaXMgYSBjaGlwc2V0IGZvciBBTUQgQXRobG9uL0s4IENQVS4gRHVlIHRvIEs4JiMzOTtzIHVuaXF1ZQomIzQzOwkgKiBhcmNoaXRlY3R1cmUsIHRoZSBBR1AgcmVzb3VyY2UgYW5kIGJlaGF2aW9yIGFyZSBkaWZmZXJlbnQgZnJvbQomIzQzOwkgKiB0aGUgdHJhZGl0aW9uYWwgQUdQIHdoaWNoIHJlc2lkZXMgb25seSBpbiBjaGlwc2V0LiBBR1AgaXMgdXNlZAomIzQzOwkgKiBieSAzRCBkcml2ZXIgd2hpY2ggd2FzbiYjMzk7dCBhdmFpbGFibGUgZm9yIHRoZSBWVDMzMzYgYW5kIFZUMzM2NAomIzQzOwkgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3JrcwomIzQzOwkgKiBidXQgVlQzMzM2IGRvZXNuJiMzOTt0LiAtIGV4cGxhbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXMKJiM0MzsJICogYSBwbGFjZWhvbGRlciB0byBhdm9pZCBmdXR1cmUgcGF0Y2hlcyBhZGRpbmcgaXQgYmFjayBpbi4KJiM0MzsJICovCiYjNDM7I2lmIDAKJiM0MzsJSUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LCAmIzM0O1ZUMzMzNiYjMzQ7KSwKJiM0MzsjZW5kaWYKJiM0MzsJLyogUDRNODkwICovCiYjNDM7CUlEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTg5MCwgJiMzNDtQNE04OTAmIzM0OyksCiYjNDM7CS8qIFA0TTkwMCAqLwomIzQzOwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzNjQsICYjMzQ7UDRNOTAwJiMzNDspLAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmMgYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuYwppbmRleCAwNWRjYjY2NzVjZDY2MS4uMWNmNTFmNzYzMjkzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jCkBAIC01NjIsNyAmIzQzOzU2Miw2IEBAIHN0YXRpYyBpbnQgdHBjaTIwMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAKIAkvKiBTYXZlIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgKi8KIAl0cGNpMjAwLSZndDtpbmZvLSZndDtwZGV2ID0gcGRldjsKLQl0cGNpMjAwLSZndDtpbmZvLSZndDtpZF90YWJsZSA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKWlkOwogCiAJLyogcmVnaXN0ZXIgdGhlIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwogCXJldCA9IHRwY2kyMDBfaW5zdGFsbCh0cGNpMjAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oIGIvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmgKaW5kZXggZTc5YWM2NGFiY2ZmYWMuLmEyYmYzMTI1Nzk0YjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaApAQCAtMTQ1LDcgJiM0MzsxNDUsNiBAQCBzdHJ1Y3QgdHBjaTIwMF9zbG90IHsKICAqLwogc3RydWN0IHRwY2kyMDBfaW5mb3MgewogCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXY7Ci0Jc3RydWN0IHBjaV9kZXZpY2VfaWQJCSppZF90YWJsZTsKIAlzdHJ1Y3QgdHBjaTIwMF9yZWdzIF9faW9tZW0JKmludGVyZmFjZV9yZWdzOwogCXZvaWQgX19pb21lbQkJCSpjZmdfcmVnczsKIAlzdHJ1Y3QgaXBhY2tfYnVzX2RldmljZQkJKmlwYWNrX2J1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmMKaW5kZXggMGRhODVkMzY2NDdkOTEuLmJmZTMyNjhkZmRjMTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuYwpAQCAtMTMwLDcgJiM0MzsxMzAsNiBAQCBzdHJ1Y3QgbWx4c3dfcGNpIHsKIAkJfSBjb21wOwogCX0gY21kOwogCXN0cnVjdCBtbHhzd19idXNfaW5mbyBidXNfaW5mbzsKLQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQ7CiAJZW51bSBtbHhzd19wY2lfY3FlX3YgbWF4X2NxZV92ZXI7IC8qIE1heGltYWwgc3VwcG9ydGVkIENRRSB2ZXJzaW9uICovCiAJdTggbnVtX2NxczsgLyogTnVtYmVyIG9mIENRcyAqLwogCXU4IG51bV9zZHFzOyAvKiBOdW1iZXIgb2YgU0RRcyAqLwpAQCAtMTc2OCw3ICYjNDM7MTc2Nyw2IEBAIHN0YXRpYyB2b2lkIG1seHN3X3BjaV9tYm94X2ZyZWUoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLAogfQogCiBzdGF0aWMgaW50IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwKIAkJCQkgICAgdTMyICpwX3N5c19zdGF0dXMpCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CkBAIC0xODM5LDcgJiM0MzsxODM3LDcgQEAgc3RhdGljIGludCBtbHhzd19wY2lfcmVzZXRfc3coc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpKQogfQogCiBzdGF0aWMgaW50Ci1tbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiYjNDM7bWx4c3dfcGNpX3Jlc2V0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG1seHN3X3BjaS0mZ3Q7cGRldjsKIAlib29sIHBjaV9yZXNldF9zYnJfc3VwcG9ydGVkID0gZmFsc2U7CkBAIC0xODQ4LDcgJiM0MzsxODQ2LDcgQEAgbWx4c3dfcGNpX3Jlc2V0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCXUzMiBzeXNfc3RhdHVzOwogCWludCBlcnI7CiAKLQllcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCBpZCwgJmFtcDtzeXNfc3RhdHVzKTsKJiM0MzsJZXJyID0gbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KG1seHN3X3BjaSwgJmFtcDtzeXNfc3RhdHVzKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlYWNoIHN5c3RlbSByZWFkeSBzdGF0dXMgYmVmb3JlIHJlc2V0LiBTdGF0dXMgaXMgMHgleFxuJiMzNDssCiAJCQlzeXNfc3RhdHVzKTsKQEAgLTE4ODAsNyAmIzQzOzE4NzgsNyBAQCBtbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChtbHhzd19wY2ksIGlkLCAmYW1wO3N5c19zdGF0dXMpOwomIzQzOwllcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCAmYW1wO3N5c19zdGF0dXMpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVhY2ggc3lzdGVtIHJlYWR5IHN0YXR1cyBhZnRlciByZXNldC4gU3RhdHVzIGlzIDB4JXhcbiYjMzQ7LAogCQkJc3lzX3N0YXR1cyk7CkBAIC0xOTMyLDcgJiM0MzsxOTMwLDcgQEAgc3RhdGljIGludCBtbHhzd19wY2lfaW5pdCh2b2lkICpidXNfcHJpdiwgc3RydWN0IG1seHN3X2NvcmUgKm1seHN3X2NvcmUsCiAJaWYgKCFtYm94KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IG1seHN3X3BjaV9yZXNldChtbHhzd19wY2ksIG1seHN3X3BjaS0mZ3Q7aWQpOwomIzQzOwllcnIgPSBtbHhzd19wY2lfcmVzZXQobWx4c3dfcGNpKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZXNldDsKIApAQCAtMjQ2NCw3ICYjNDM7MjQ2Miw2IEBAIHN0YXRpYyBpbnQgbWx4c3dfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJbWx4c3dfcGNpLSZndDtidXNfaW5mby5kZXZpY2VfbmFtZSA9IHBjaV9uYW1lKG1seHN3X3BjaS0mZ3Q7cGRldik7CiAJbWx4c3dfcGNpLSZndDtidXNfaW5mby5kZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKIAltbHhzd19wY2ktJmd0O2J1c19pbmZvLnJlYWRfY2xvY2tfY2FwYWJsZSA9IHRydWU7Ci0JbWx4c3dfcGNpLSZndDtpZCA9IGlkOwogCiAJZXJyID0gbWx4c3dfY29yZV9idXNfZGV2aWNlX3JlZ2lzdGVyKCZhbXA7bWx4c3dfcGNpLSZndDtidXNfaW5mbywKIAkJCQkJICAgICAmYW1wO21seHN3X3BjaV9idXMsIG1seHN3X3BjaSwgZmFsc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZjM2Nzc4ZTYyYWMxYTUuLjQ4NTEwNjFiYWJjYjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC0yOSw2ICYjNDM7MjksNDcgQEAgc3RydWN0IHBjaV9keW5pZCB7CiAJc3RydWN0IHBjaV9kZXZpY2VfaWQgaWQ7CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogZG9fcGNpX2FkZF9keW5pZCAtIGFkZCBhIG5ldyBQQ0kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyIGFuZCByZS1wcm9iZSBkZXZpY2VzCiYjNDM7ICogQGRydjogdGFyZ2V0IHBjaSBkcml2ZXIKJiM0MzsgKiBAaWQ6IElEIHRvIGJlIGFkZGVkCiYjNDM7ICogQGNoZWNrX2R1cDogd2hldGhlciB0byBjaGVjayBpZiBtYXRjaGluZyBJRCBpcyBhbHJlYWR5IHByZXNlbnQKJiM0MzsgKgomIzQzOyAqIEFkZHMgYSBuZXcgZHluYW1pYyBwY2kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyIGFuZCBjYXVzZXMgdGhlCiYjNDM7ICogZHJpdmVyIHRvIHByb2JlIGZvciBhbGwgZGV2aWNlcyBhZ2Fpbi4gIEBkcnYgbXVzdCBoYXZlIGJlZW4KJiM0MzsgKiByZWdpc3RlcmVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KJiM0MzsgKgomIzQzOyAqIENPTlRFWFQ6CiYjNDM7ICogRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBSRVRVUk5TOgomIzQzOyAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkb19wY2lfYWRkX2R5bmlkKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgYm9vbCBjaGVja19kdXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGNpX2R5bmlkICpkeW5pZCwgKmV4aXN0aW5nX2R5bmlkOwomIzQzOwomIzQzOwlkeW5pZCA9IGt6YWxsb2Nfb2JqKCpkeW5pZCk7CiYjNDM7CWlmICghZHluaWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZHluaWQtJmd0O2lkID0gKmlkOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2ssICZhbXA7ZHJ2LSZndDtkeW5pZHMubG9jaykgewomIzQzOwkJaWYgKGNoZWNrX2R1cCkgewomIzQzOwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZXhpc3RpbmdfZHluaWQsICZhbXA7ZHJ2LSZndDtkeW5pZHMubGlzdCwgbm9kZSkgewomIzQzOwkJCQlpZiAocGNpX21hdGNoX29uZV9pZCgmYW1wO2V4aXN0aW5nX2R5bmlkLSZndDtpZCwgaWQpKSB7CiYjNDM7CQkJCQlrZnJlZShkeW5pZCk7CiYjNDM7CQkJCQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJCQkJfQomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtkeW5pZC0mZ3Q7bm9kZSwgJmFtcDtkcnYtJmd0O2R5bmlkcy5saXN0KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZHJpdmVyX2F0dGFjaCgmYW1wO2Rydi0mZ3Q7ZHJpdmVyKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHBjaV9hZGRfZHluaWQgLSBhZGQgYSBuZXcgUENJIGRldmljZSBJRCB0byB0aGlzIGRyaXZlciBhbmQgcmUtcHJvYmUgZGV2aWNlcwogICogQGRydjogdGFyZ2V0IHBjaSBkcml2ZXIKQEAgLTU2LDI1ICYjNDM7OTcsMTcgQEAgaW50IHBjaV9hZGRfZHluaWQoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwKIAkJICB1bnNpZ25lZCBpbnQgY2xhc3MsIHVuc2lnbmVkIGludCBjbGFzc19tYXNrLAogCQkgIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpCiB7Ci0Jc3RydWN0IHBjaV9keW5pZCAqZHluaWQ7Ci0KLQlkeW5pZCA9IGt6YWxsb2Nfb2JqKCpkeW5pZCk7Ci0JaWYgKCFkeW5pZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkeW5pZC0mZ3Q7aWQudmVuZG9yID0gdmVuZG9yOwotCWR5bmlkLSZndDtpZC5kZXZpY2UgPSBkZXZpY2U7Ci0JZHluaWQtJmd0O2lkLnN1YnZlbmRvciA9IHN1YnZlbmRvcjsKLQlkeW5pZC0mZ3Q7aWQuc3ViZGV2aWNlID0gc3ViZGV2aWNlOwotCWR5bmlkLSZndDtpZC5jbGFzcyA9IGNsYXNzOwotCWR5bmlkLSZndDtpZC5jbGFzc19tYXNrID0gY2xhc3NfbWFzazsKLQlkeW5pZC0mZ3Q7aWQuZHJpdmVyX2RhdGEgPSBkcml2ZXJfZGF0YTsKLQotCXNwaW5fbG9jaygmYW1wO2Rydi0mZ3Q7ZHluaWRzLmxvY2spOwotCWxpc3RfYWRkX3RhaWwoJmFtcDtkeW5pZC0mZ3Q7bm9kZSwgJmFtcDtkcnYtJmd0O2R5bmlkcy5saXN0KTsKLQlzcGluX3VubG9jaygmYW1wO2Rydi0mZ3Q7ZHluaWRzLmxvY2spOwotCi0JcmV0dXJuIGRyaXZlcl9hdHRhY2goJmFtcDtkcnYtJmd0O2RyaXZlcik7CiYjNDM7CXN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkID0gewomIzQzOwkJLnZlbmRvciA9IHZlbmRvciwKJiM0MzsJCS5kZXZpY2UgPSBkZXZpY2UsCiYjNDM7CQkuc3VidmVuZG9yID0gc3VidmVuZG9yLAomIzQzOwkJLnN1YmRldmljZSA9IHN1YmRldmljZSwKJiM0MzsJCS5jbGFzcyA9IGNsYXNzLAomIzQzOwkJLmNsYXNzX21hc2sgPSBjbGFzc19tYXNrLAomIzQzOwkJLmRyaXZlcl9kYXRhID0gZHJpdmVyX2RhdGEsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBkb19wY2lfYWRkX2R5bmlkKGRydiwgJmFtcDtpZCwgZmFsc2UpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX2FkZF9keW5pZCk7CiAKQEAgLTkwLDYgJiM0MzsxMjMsMzAgQEAgc3RhdGljIHZvaWQgcGNpX2ZyZWVfZHluaWRzKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpCiAJc3Bpbl91bmxvY2soJmFtcDtkcnYtJmd0O2R5bmlkcy5sb2NrKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGRvX3BjaV9tYXRjaF9pZCAtIFNlZSBpZiBhIFBDSSBJRCBtYXRjaGVzIGEgZ2l2ZW4gcGNpX2lkIHRhYmxlCiYjNDM7ICogQGlkczogYXJyYXkgb2YgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmVzIHRvIHNlYXJjaCBpbgomIzQzOyAqIEBkZXZfaWQ6IHRoZSBhY3R1YWwgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdC4KJiM0MzsgKiBAaW5jbHVkZV9vdmVycmlkZV9vbmx5OiBhbHNvIG1hdGNoIGFnYWluc3QgZGV2aWNlIElEIGVudHJpZXMgbWFya2VkIGFzIG92ZXJyaWRlIG9ubHkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRoZSBtYXRjaGluZyBwY2lfZGV2aWNlX2lkIHN0cnVjdHVyZSBvcgomIzQzOyAqICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZG9fcGNpX21hdGNoX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsCiYjNDM7CQkJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRldl9pZCwKJiM0MzsJCQkJCQkgICBib29sIGluY2x1ZGVfb3ZlcnJpZGVfb25seSkKJiM0Mzt7CiYjNDM7CWlmIChpZHMpIHsKJiM0MzsJCXdoaWxlIChpZHMtJmd0O3ZlbmRvciB8fCBpZHMtJmd0O3N1YnZlbmRvciB8fCBpZHMtJmd0O2NsYXNzX21hc2spIHsKJiM0MzsJCQlpZiAoKCFpZHMtJmd0O292ZXJyaWRlX29ubHkgfHwgaW5jbHVkZV9vdmVycmlkZV9vbmx5KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHBjaV9tYXRjaF9vbmVfaWQoaWRzLCBkZXZfaWQpKQomIzQzOwkJCQlyZXR1cm4gaWRzOwomIzQzOwkJCWlkcyYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBwY2lfbWF0Y2hfaWQgLSBTZWUgaWYgYSBQQ0kgZGV2aWNlIG1hdGNoZXMgYSBnaXZlbiBwY2lfaWQgdGFibGUKICAqIEBpZHM6IGFycmF5IG9mIFBDSSBkZXZpY2UgSUQgc3RydWN0dXJlcyB0byBzZWFyY2ggaW4KQEAgLTEwNSwxNCAmIzQzOzE2Miw5IEBAIHN0YXRpYyB2b2lkIHBjaV9mcmVlX2R5bmlkcyhzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KQogY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9pZChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLAogCQkJCQkgc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlpZiAoaWRzKSB7Ci0JCXdoaWxlIChpZHMtJmd0O3ZlbmRvciB8fCBpZHMtJmd0O3N1YnZlbmRvciB8fCBpZHMtJmd0O2NsYXNzX21hc2spIHsKLQkJCWlmIChwY2lfbWF0Y2hfb25lX2RldmljZShpZHMsIGRldikpCi0JCQkJcmV0dXJuIGlkczsKLQkJCWlkcyYjNDM7JiM0Mzs7Ci0JCX0KLQl9Ci0JcmV0dXJuIE5VTEw7CiYjNDM7CXN0cnVjdCBwY2lfZGV2aWNlX2lkIGRldl9pZCA9IHBjaV9pZF9mcm9tX2RldmljZShkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gZG9fcGNpX21hdGNoX2lkKGlkcywgJmFtcDtkZXZfaWQsIHRydWUpOwogfQogRVhQT1JUX1NZTUJPTChwY2lfbWF0Y2hfaWQpOwogCkBAIC0xMjcsNiAmIzQzOzE3OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfZGV2aWNlX2lkX2FueSA9IHsKICAqIHBjaV9tYXRjaF9kZXZpY2UgLSBTZWUgaWYgYSBkZXZpY2UgbWF0Y2hlcyBhIGRyaXZlciYjMzk7cyBsaXN0IG9mIElEcwogICogQGRydjogdGhlIFBDSSBkcml2ZXIgdG8gbWF0Y2ggYWdhaW5zdAogICogQGRldjogdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3QKJiM0MzsgKiBAaWRfY29weTogUGxhY2UgdG8gc3RvcmUgY29weSBvZiBwY2lfZGV2aWNlX2lkIGZvciBkeW5hbWljIElECiAgKgogICogVXNlZCBieSBhIGRyaXZlciB0byBjaGVjayB3aGV0aGVyIGEgUENJIGRldmljZSBpcyBpbiBpdHMgbGlzdCBvZgogICogc3VwcG9ydGVkIGRldmljZXMgb3IgaW4gdGhlIGR5bmlkcyBsaXN0LCB3aGljaCBtYXkgaGF2ZSBiZWVuIGF1Z21lbnRlZApAQCAtMTM0LDEwICYjNDM7MTg3LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfZGV2aWNlX2lkX2FueSA9IHsKICAqIHN0cnVjdHVyZSBvciAlTlVMTCBpZiB0aGVyZSBpcyBubyBtYXRjaC4KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsCi0JCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldikKJiM0MzsJCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldiwKJiM0MzsJCQkJCQkgICAgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkX2NvcHkpCiB7Ci0Jc3RydWN0IHBjaV9keW5pZCAqZHluaWQ7Ci0JY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkID0gTlVMTCwgKmlkczsKJiM0MzsJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkID0gTlVMTDsKJiM0MzsJc3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkOwogCWludCByZXQ7CiAKIAkvKiBXaGVuIGRyaXZlcl9vdmVycmlkZSBpcyBzZXQsIG9ubHkgYmluZCB0byB0aGUgbWF0Y2hpbmcgZHJpdmVyICovCkBAIC0xNDUsNDUgJiM0MzsxOTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsCiAJaWYgKHJldCA9PSAwKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlkZXZfaWQgPSBwY2lfaWRfZnJvbV9kZXZpY2UoZGV2KTsKIAkvKiBMb29rIGF0IHRoZSBkeW5hbWljIGlkcyBmaXJzdCwgYmVmb3JlIHRoZSBzdGF0aWMgb25lcyAqLwotCXNwaW5fbG9jaygmYW1wO2Rydi0mZ3Q7ZHluaWRzLmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsICZhbXA7ZHJ2LSZndDtkeW5pZHMubGlzdCwgbm9kZSkgewotCQlpZiAocGNpX21hdGNoX29uZV9kZXZpY2UoJmFtcDtkeW5pZC0mZ3Q7aWQsIGRldikpIHsKLQkJCWZvdW5kX2lkID0gJmFtcDtkeW5pZC0mZ3Q7aWQ7Ci0JCQlicmVhazsKJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrLCAmYW1wO2Rydi0mZ3Q7ZHluaWRzLmxvY2spIHsKJiM0MzsJCXN0cnVjdCBwY2lfZHluaWQgKmR5bmlkOwomIzQzOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgJmFtcDtkcnYtJmd0O2R5bmlkcy5saXN0LCBub2RlKSB7CiYjNDM7CQkJaWYgKHBjaV9tYXRjaF9vbmVfaWQoJmFtcDtkeW5pZC0mZ3Q7aWQsICZhbXA7ZGV2X2lkKSkgewomIzQzOwkJCQkqaWRfY29weSA9IGR5bmlkLSZndDtpZDsKJiM0MzsJCQkJcmV0dXJuIGlkX2NvcHk7CiYjNDM7CQkJfQogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZhbXA7ZHJ2LSZndDtkeW5pZHMubG9jayk7CiAKJiM0MzsJZm91bmRfaWQgPSBkb19wY2lfbWF0Y2hfaWQoZHJ2LSZndDtpZF90YWJsZSwgJmFtcDtkZXZfaWQsIHJldCAmZ3Q7IDApOwogCWlmIChmb3VuZF9pZCkKIAkJcmV0dXJuIGZvdW5kX2lkOwogCi0JZm9yIChpZHMgPSBkcnYtJmd0O2lkX3RhYmxlOyAoZm91bmRfaWQgPSBwY2lfbWF0Y2hfaWQoaWRzLCBkZXYpKTsKLQkgICAgIGlkcyA9IGZvdW5kX2lkICYjNDM7IDEpIHsKLQkJLyoKLQkJICogVGhlIG1hdGNoIHRhYmxlIGlzIHNwbGl0IGJhc2VkIG9uIGRyaXZlcl9vdmVycmlkZS4KLQkJICogSW4gY2FzZSBvdmVycmlkZV9vbmx5IHdhcyBzZXQsIGVuZm9yY2UgZHJpdmVyX292ZXJyaWRlCi0JCSAqIG1hdGNoaW5nLgotCQkgKi8KLQkJaWYgKGZvdW5kX2lkLSZndDtvdmVycmlkZV9vbmx5KSB7Ci0JCQlpZiAocmV0ICZndDsgMCkKLQkJCQlyZXR1cm4gZm91bmRfaWQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gZm91bmRfaWQ7Ci0JCX0KLQl9Ci0KIAkvKiBkcml2ZXJfb3ZlcnJpZGUgd2lsbCBhbHdheXMgbWF0Y2gsIHNlbmQgYSBkdW1teSBpZCAqLwogCWlmIChyZXQgJmd0OyAwKQogCQlyZXR1cm4gJmFtcDtwY2lfZGV2aWNlX2lkX2FueTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgX3BjaV9mcmVlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Ja2ZyZWUodG9fcGNpX2RldihkZXYpKTsKLX0KLQogLyoqCiAgKiBuZXdfaWRfc3RvcmUgLSBzeXNmcyBmcm9udGVuZCB0byBwY2lfYWRkX2R5bmlkKCkKICAqIEBkcml2ZXI6IHRhcmdldCBkZXZpY2UgZHJpdmVyCkBAIC0xOTcsMzggJiM0MzsyMzUsMjIgQEAgc3RhdGljIHNzaXplX3QgbmV3X2lkX3N0b3JlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmJ1ZiwKIHsKIAlzdHJ1Y3QgcGNpX2RyaXZlciAqcGRydiA9IHRvX3BjaV9kcml2ZXIoZHJpdmVyKTsKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzID0gcGRydi0mZ3Q7aWRfdGFibGU7Ci0JdTMyIHZlbmRvciwgZGV2aWNlLCBzdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAotCQlzdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELCBjbGFzcyA9IDAsIGNsYXNzX21hc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEgPSAwOwomIzQzOwlzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZCA9IHsKJiM0MzsJCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAomIzQzOwkJLnN1YmRldmljZSA9IFBDSV9BTllfSUQKJiM0MzsJfTsKIAlpbnQgZmllbGRzOwogCWludCByZXR2YWwgPSAwOwogCiAJZmllbGRzID0gc3NjYW5mKGJ1ZiwgJiMzNDsleCAleCAleCAleCAleCAleCAlbHgmIzM0OywKLQkJCSZhbXA7dmVuZG9yLCAmYW1wO2RldmljZSwgJmFtcDtzdWJ2ZW5kb3IsICZhbXA7c3ViZGV2aWNlLAotCQkJJmFtcDtjbGFzcywgJmFtcDtjbGFzc19tYXNrLCAmYW1wO2RyaXZlcl9kYXRhKTsKJiM0MzsJCQkmYW1wO2lkLnZlbmRvciwgJmFtcDtpZC5kZXZpY2UsICZhbXA7aWQuc3VidmVuZG9yLCAmYW1wO2lkLnN1YmRldmljZSwKJiM0MzsJCQkmYW1wO2lkLmNsYXNzLCAmYW1wO2lkLmNsYXNzX21hc2ssICZhbXA7aWQuZHJpdmVyX2RhdGEpOwogCWlmIChmaWVsZHMgJmx0OyAyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmaWVsZHMgIT0gNykgewotCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGt6YWxsb2Nfb2JqKCpwZGV2KTsKLQkJaWYgKCFwZGV2KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJcGRldi0mZ3Q7dmVuZG9yID0gdmVuZG9yOwotCQlwZGV2LSZndDtkZXZpY2UgPSBkZXZpY2U7Ci0JCXBkZXYtJmd0O3N1YnN5c3RlbV92ZW5kb3IgPSBzdWJ2ZW5kb3I7Ci0JCXBkZXYtJmd0O3N1YnN5c3RlbV9kZXZpY2UgPSBzdWJkZXZpY2U7Ci0JCXBkZXYtJmd0O2NsYXNzID0gY2xhc3M7Ci0JCXBkZXYtJmd0O2Rldi5yZWxlYXNlID0gX3BjaV9mcmVlX2RldmljZTsKLQotCQlkZXZpY2VfaW5pdGlhbGl6ZSgmYW1wO3BkZXYtJmd0O2Rldik7Ci0JCWlmIChwY2lfbWF0Y2hfZGV2aWNlKHBkcnYsIHBkZXYpKQotCQkJcmV0dmFsID0gLUVFWElTVDsKLQotCQlwdXRfZGV2aWNlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKLQotCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKJiM0MzsJCWlmIChkb19wY2lfbWF0Y2hfaWQocGRydi0mZ3Q7aWRfdGFibGUsICZhbXA7aWQsIGZhbHNlKSkKJiM0MzsJCQlyZXR1cm4gLUVFWElTVDsKIAl9CiAKIAkvKiBPbmx5IGFjY2VwdCBkcml2ZXJfZGF0YSB2YWx1ZXMgdGhhdCBtYXRjaCBhbiBleGlzdGluZyBpZF90YWJsZQpAQCAtMjM2LDcgJiM0MzsyNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLAogCWlmIChpZHMpIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJd2hpbGUgKGlkcy0mZ3Q7dmVuZG9yIHx8IGlkcy0mZ3Q7c3VidmVuZG9yIHx8IGlkcy0mZ3Q7Y2xhc3NfbWFzaykgewotCQkJaWYgKGRyaXZlcl9kYXRhID09IGlkcy0mZ3Q7ZHJpdmVyX2RhdGEpIHsKJiM0MzsJCQlpZiAoaWQuZHJpdmVyX2RhdGEgPT0gaWRzLSZndDtkcml2ZXJfZGF0YSkgewogCQkJCXJldHZhbCA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0yNDYsOCAmIzQzOzI2OCw3IEBAIHN0YXRpYyBzc2l6ZV90IG5ld19pZF9zdG9yZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLCBjb25zdCBjaGFyICpidWYsCiAJCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXJldHZhbCA9IHBjaV9hZGRfZHluaWQocGRydiwgdmVuZG9yLCBkZXZpY2UsIHN1YnZlbmRvciwgc3ViZGV2aWNlLAotCQkJICAgICAgIGNsYXNzLCBjbGFzc19tYXNrLCBkcml2ZXJfZGF0YSk7CiYjNDM7CXJldHZhbCA9IGRvX3BjaV9hZGRfZHluaWQocGRydiwgJmFtcDtpZCwgZmllbGRzICE9IDcpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAJcmV0dXJuIGNvdW50OwpAQCAtNDQ1LDEyICYjNDM7NDY2LDEzIEBAIHZvaWQgcGNpX3Byb2JlX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKQogc3RhdGljIGludCBfX3BjaV9kZXZpY2VfcHJvYmUoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CiAJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkOwomIzQzOwlzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF9jb3B5OwogCWludCBlcnJvciA9IDA7CiAKIAlpZiAoZHJ2LSZndDtwcm9iZSkgewogCQllcnJvciA9IC1FTk9ERVY7CiAKLQkJaWQgPSBwY2lfbWF0Y2hfZGV2aWNlKGRydiwgcGNpX2Rldik7CiYjNDM7CQlpZCA9IHBjaV9tYXRjaF9kZXZpY2UoZHJ2LCBwY2lfZGV2LCAmYW1wO2lkX2NvcHkpOwogCQlpZiAoaWQpCiAJCQllcnJvciA9IHBjaV9jYWxsX3Byb2JlKGRydiwgcGNpX2RldiwgaWQpOwogCX0KQEAgLTE1MzgsMTIgJiM0MzsxNTYwLDEzIEBAIHN0YXRpYyBpbnQgcGNpX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHBjaV9kcml2ZXIgKnBjaV9kcnY7CiAJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkOwomIzQzOwlzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF9jb3B5OwogCiAJaWYgKHBjaV9kZXZfYmluZGluZ19kaXNhbGxvd2VkKHBjaV9kZXYpKQogCQlyZXR1cm4gMDsKIAogCXBjaV9kcnYgPSAoc3RydWN0IHBjaV9kcml2ZXIgKil0b19wY2lfZHJpdmVyKGRydik7Ci0JZm91bmRfaWQgPSBwY2lfbWF0Y2hfZGV2aWNlKHBjaV9kcnYsIHBjaV9kZXYpOwomIzQzOwlmb3VuZF9pZCA9IHBjaV9tYXRjaF9kZXZpY2UocGNpX2RydiwgcGNpX2RldiwgJmFtcDtpZF9jb3B5KTsKIAlpZiAoZm91bmRfaWQpCiAJCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IDQ0NjllMWE3N2YzYzEzLi4wNTY3YTg3NjJiYWEwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTQ0MiwyMSAmIzQzOzQ0MiwzNyBAQCBzdGF0aWMgaW5saW5lIGludCBwY2lfc2V0dXBfY2FyZGJ1cyhjaGFyICpzdHIpIHsgcmV0dXJuIC1FTk9FTlQ7IH0KICNlbmRpZiAvKiBDT05GSUdfQ0FSREJVUyAqLwogCiAvKioKLSAqIHBjaV9tYXRjaF9vbmVfZGV2aWNlIC0gVGVsbCBpZiBhIFBDSSBkZXZpY2Ugc3RydWN0dXJlIGhhcyBhIG1hdGNoaW5nCi0gKgkJCSAgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmUKLSAqIEBpZDogc2luZ2xlIFBDSSBkZXZpY2UgaWQgc3RydWN0dXJlIHRvIG1hdGNoCi0gKiBAZGV2OiB0aGUgUENJIGRldmljZSBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdAomIzQzOyAqIHBjaV9pZF9mcm9tX2RldmljZSAtIE9idGFpbiBhIHBjaV9kZXZpY2VfaWQgZnJvbSBhIFBDSSBkZXZpY2UKJiM0MzsgKiBAZGV2OiB0aGUgUENJIGRldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJucyBhIHBjaV9kZXZpY2VfaWQgZmlsbGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkX2Zyb21fZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHN0cnVjdCBwY2lfZGV2aWNlX2lkKSB7CiYjNDM7CQkudmVuZG9yID0gZGV2LSZndDt2ZW5kb3IsCiYjNDM7CQkuZGV2aWNlID0gZGV2LSZndDtkZXZpY2UsCiYjNDM7CQkuc3VidmVuZG9yID0gZGV2LSZndDtzdWJzeXN0ZW1fdmVuZG9yLAomIzQzOwkJLnN1YmRldmljZSA9IGRldi0mZ3Q7c3Vic3lzdGVtX2RldmljZSwKJiM0MzsJCS5jbGFzcyA9IGRldi0mZ3Q7Y2xhc3MsCiYjNDM7CX07CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaV9tYXRjaF9vbmVfaWQgLSBUZWxsIGlmIGEgUENJIGRldmljZSBJRCBtYXRjaGVzIGEgbmVlZGxlIFBDSSBkZXZpY2UgaWQKJiM0MzsgKiBAaWQ6IHNpbmdsZSBQQ0kgZGV2aWNlIGlkIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0IChuZWVkbGUpCiYjNDM7ICogQGRldl9pZDogdGhlIGFjdHVhbCBJRCBmcm9tIHRoZSBQQ0kgZGV2aWNlIChjYW4gYmUgY3JlYXRlZCB2aWEgcGNpX2lkX2Zyb21fZGV2aWNlKQogICoKICAqIFJldHVybnMgdGhlIG1hdGNoaW5nIHBjaV9kZXZpY2VfaWQgc3RydWN0dXJlIG9yICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLgogICovCiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICoKLXBjaV9tYXRjaF9vbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldikKJiM0MztwY2lfbWF0Y2hfb25lX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRldl9pZCkKIHsKLQlpZiAoKGlkLSZndDt2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC0mZ3Q7dmVuZG9yID09IGRldi0mZ3Q7dmVuZG9yKSAmYW1wOyZhbXA7Ci0JICAgIChpZC0mZ3Q7ZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtJmd0O2RldmljZSA9PSBkZXYtJmd0O2RldmljZSkgJmFtcDsmYW1wOwotCSAgICAoaWQtJmd0O3N1YnZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGlkLSZndDtzdWJ2ZW5kb3IgPT0gZGV2LSZndDtzdWJzeXN0ZW1fdmVuZG9yKSAmYW1wOyZhbXA7Ci0JICAgIChpZC0mZ3Q7c3ViZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtJmd0O3N1YmRldmljZSA9PSBkZXYtJmd0O3N1YnN5c3RlbV9kZXZpY2UpICZhbXA7JmFtcDsKLQkgICAgISgoaWQtJmd0O2NsYXNzIF4gZGV2LSZndDtjbGFzcykgJmFtcDsgaWQtJmd0O2NsYXNzX21hc2spKQomIzQzOwlpZiAoKGlkLSZndDt2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC0mZ3Q7dmVuZG9yID09IGRldl9pZC0mZ3Q7dmVuZG9yKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoaWQtJmd0O2RldmljZSA9PSBQQ0lfQU5ZX0lEIHx8IGlkLSZndDtkZXZpY2UgPT0gZGV2X2lkLSZndDtkZXZpY2UpICZhbXA7JmFtcDsKJiM0MzsJICAgIChpZC0mZ3Q7c3VidmVuZG9yID09IFBDSV9BTllfSUQgfHwgaWQtJmd0O3N1YnZlbmRvciA9PSBkZXZfaWQtJmd0O3N1YnZlbmRvcikgJmFtcDsmYW1wOwomIzQzOwkgICAgKGlkLSZndDtzdWJkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC0mZ3Q7c3ViZGV2aWNlID09IGRldl9pZC0mZ3Q7c3ViZGV2aWNlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKChpZC0mZ3Q7Y2xhc3MgXiBkZXZfaWQtJmd0O2NsYXNzKSAmYW1wOyBpZC0mZ3Q7Y2xhc3NfbWFzaykpCiAJCXJldHVybiBpZDsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKaW5kZXggZTNkMzE3N2ZjZTU0OWUuLmM4YzRiZmU3ODE3YjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZWFyY2guYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwpAQCAtMjQ1LDggJiM0MzsyNDUsMTAgQEAgc3RhdGljIGludCBtYXRjaF9wY2lfZGV2X2J5X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgcGNpX2RldmljZV9pZCBkZXZfaWQ7CiAKLQlpZiAocGNpX21hdGNoX29uZV9kZXZpY2UoaWQsIHBkZXYpKQomIzQzOwlkZXZfaWQgPSBwY2lfaWRfZnJvbV9kZXZpY2UocGRldik7CiYjNDM7CWlmIChwY2lfbWF0Y2hfb25lX2lkKGlkLCAmYW1wO2Rldl9pZCkpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtNDE4LDcgJiM0Mzs0MjAsNyBAQCBFWFBPUlRfU1lNQk9MKHBjaV9nZXRfY2xhc3MpOwogICoKICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuIElmIGEgUENJIGRldmljZSBpcyBmb3VuZAogICogd2l0aCBhIG1hdGNoaW5nIGJhc2UgY2xhc3MgY29kZSwgdGhlIHJlZmVyZW5jZSBjb3VudCB0byB0aGUgZGV2aWNlIGlzCi0gKiBpbmNyZW1lbnRlZC4gU2VlIHBjaV9tYXRjaF9vbmVfZGV2aWNlKCkgdG8gZmlndXJlIG91dCBob3cgZG9lcyB0aGlzIHdvcmtzLgomIzQzOyAqIGluY3JlbWVudGVkLiBTZWUgcGNpX21hdGNoX29uZV9pZCgpIHRvIGZpZ3VyZSBvdXQgaG93IGRvZXMgdGhpcyB3b3Jrcy4KICAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuCiAgKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlIG9uIHRoZQogICogZ2xvYmFsIGxpc3QuIFRoZSByZWZlcmVuY2UgY291bnQgZm9yIEBmcm9tIGlzIGFsd2F5cyBkZWNyZW1lbnRlZCBpZiBpdCBpcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyLmMgYi9kcml2ZXJzL3Njc2kvbnNwMzIuYwppbmRleCBlODkzZDU2NzcyNDE3YS4uOWM5MjgxMjIyYTBhY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5jCkBAIC0xNDcwLDcgJiM0MzsxNDcwLDcgQEAgc3RhdGljIGludCBuc3AzMl9zaG93X2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQogCQkgICAobnNwMzJfcmVhZDIoYmFzZSwgSU5ERVhfUkVHKSAmZ3Q7Jmd0OyA4KSAmYW1wOyAweGZmKTsKIAogCW1vZGVfcmVnID0gbnNwMzJfaW5kZXhfcmVhZDEoYmFzZSwgQ0hJUF9NT0RFKTsKLQltb2RlbCAgICA9IGRhdGEtJmd0O3BjaV9kZXZpZC0mZ3Q7ZHJpdmVyX2RhdGE7CiYjNDM7CW1vZGVsICAgID0gZGF0YS0mZ3Q7bW9kZWw7CiAKICNpZmRlZiBDT05GSUdfUE0KIAlzZXFfcHJpbnRmKG0sICYjMzQ7UG93ZXIgTWFuYWdlbWVudDogICAgICAlc1xuJiMzNDssCkBAIC0yOTA3LDggJiM0MzsyOTA3LDggQEAgc3RhdGljIGludCBuc3AzMl9laF9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogICovCiBzdGF0aWMgaW50IG5zcDMyX2dldHByb21fcGFyYW0obnNwMzJfaHdfZGF0YSAqZGF0YSkKIHsKLQlpbnQgdmVuZG9yID0gZGF0YS0mZ3Q7cGNpX2RldmlkLSZndDt2ZW5kb3I7Ci0JaW50IGRldmljZSA9IGRhdGEtJmd0O3BjaV9kZXZpZC0mZ3Q7ZGV2aWNlOwomIzQzOwlpbnQgdmVuZG9yID0gZGF0YS0mZ3Q7UGNpLSZndDt2ZW5kb3I7CiYjNDM7CWludCBkZXZpY2UgPSBkYXRhLSZndDtQY2ktJmd0O2RldmljZTsKIAlpbnQgcmV0LCBpOwogCWludCBfX21heWJlX3VudXNlZCB2YWw7CiAKQEAgLTMzNDAsNyAmIzQzOzMzNDAsNyBAQCBzdGF0aWMgaW50IG5zcDMyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJfQogCiAJZGF0YS0mZ3Q7UGNpCSAgPSBwZGV2OwotCWRhdGEtJmd0O3BjaV9kZXZpZCAgID0gaWQ7CiYjNDM7CWRhdGEtJmd0O21vZGVsICAgICAgID0gaWQtJmd0O2RyaXZlcl9kYXRhOwogCWRhdGEtJmd0O0lycU51bWJlciAgID0gcGRldi0mZ3Q7aXJxOwogCWRhdGEtJmd0O0Jhc2VBZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCWRhdGEtJmd0O051bUFkZHJlc3MgID0gcGNpX3Jlc291cmNlX2xlbiAgKHBkZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyLmggYi9kcml2ZXJzL3Njc2kvbnNwMzIuaAppbmRleCA5MjQ4ODlmOGJkMzdlNy4uOWU2NTc3MWNiNTkyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oCkBAIC01NjQsMTAgJiM0Mzs1NjQsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX25zcDMyX2h3X2RhdGEgewogCiAJc3RydWN0IHNjc2lfY21uZCAqQ3VycmVudFNDOwogCi0Jc3RydWN0IHBjaV9kZXYgICAgICAgICAgICAgKlBjaTsKLQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldmlkOwotCXN0cnVjdCBTY3NpX0hvc3QgICAgICAgICAgICpIb3N0OwotCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICBMb2NrOwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAgICAqUGNpOwomIzQzOwlpbnQgICAgICAgICAgICAgICAgbW9kZWw7CiYjNDM7CXN0cnVjdCBTY3NpX0hvc3QgICpIb3N0OwomIzQzOwlzcGlubG9ja190ICAgICAgICAgTG9jazsKIAogCWNoYXIgaW5mb19zdHJbMTAwXTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggNjRiMzA4YjZlNjFjMTkuLjkyYzE3YzExNmRlNmQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTk3OSw2ICYjNDM7OTc5LDcgQEAgc3RydWN0IG1vZHVsZTsKICAqCQlmdW5jdGlvbiByZXR1cm5zIHplcm8gd2hlbiB0aGUgZHJpdmVyIGNob29zZXMgdG8KICAqCQl0YWtlICYjMzQ7b3duZXJzaGlwJiMzNDsgb2YgdGhlIGRldmljZSBvciBhbiBlcnJvciBjb2RlCiAgKgkJKG5lZ2F0aXZlIG51bWJlcikgb3RoZXJ3aXNlLgomIzQzOyAqCQlUaGUgcGNpX2RldmljZV9pZCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcgcHJvYmUuCiAgKgkJVGhlIHByb2JlIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3MKICAqCQljb250ZXh0LCBzbyBpdCBjYW4gc2xlZXAuCiAgKiBAcmVtb3ZlOglUaGUgcmVtb3ZlKCkgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYSBkZXZpY2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NzEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBDSSBNYXRjaGluZyBSZWZhY3RvcmluZyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBQQ0kgZGV2aWNlIElEcyBhcmUgbWF0Y2hlZCwgcGFydGljdWxhcmx5IGZvciBkeW5hbWljIElEcyBhZGRlZCB2aWEgc3lzZnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqIHRoYXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhlIHNoaWZ0IGluIGhvdyBgcGNpX21hdGNoX2RldmljZWAgd29ya3MsIGVzcGVjaWFsbHkgaXRzIGludGVyYWN0aW9uIHdpdGggZHluYW1pY2FsbHkgYWRkZWQgSURzLgoKSGVyZSYjMzk7cyBteSBicmVha2Rvd246CgoqICAgKipDb3JlIENoYW5nZToqKiBUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBQQ0kgbWF0Y2hpbmcgbG9naWMgdG8gcGFzcyBhIGNvcHkgb2YgdGhlIG1hdGNoZWQgYHBjaV9kZXZpY2VfaWRgIChgaWRfY29weWApIHRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24sIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBJRCAod2hpY2gsIGluIHRoZSBjYXNlIG9mIGR5bmFtaWMgSURzLCBjb3VsZCBiZSBoZWFwLWFsbG9jYXRlZCkuCiogICAqKk1vdGl2YXRpb246KiogVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uOiBwcmV2aW91c2x5LCBkcml2ZXJzIGNvdWxkIHN0b3JlIGEgcG9pbnRlciB0byBhIGBwY2lfZGV2aWNlX2lkYCB0aGF0IG1pZ2h0IGJlY29tZSBpbnZhbGlkIChlLmcuLCBpZiB0aGUgZHluYW1pYyBJRCB3YXMgcmVtb3ZlZCkuIFRoZSBuZXcgYXBwcm9hY2ggZm9yY2VzIGRyaXZlcnMgdG8gZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGBkcml2ZXJfZGF0YWAgb3Igc2ltaWxhciBpbmZvcm1hdGlvbiAqZHVyaW5nKiB0aGUgcHJvYmUgYW5kIG5vdCB0byBzdG9yZSB0aGUgbm93IHRlbXBvcmFyeSBgcGNpX2RldmljZV9pZGAgcG9pbnRlci4KKiAgICoqSW1wYWN0OioqIFRoaXMgaXMgYSBiaWcgZGVhbC4gU2V2ZXJhbCBkcml2ZXJzLCBpbmNsdWRpbmcgQVRBLCBBR1AsIE1lbGxhbm94LCBhbmQgb3RoZXJzLCBhcmUgZGlyZWN0bHkgbW9kaWZpZWQgdG8gcmVmbGVjdCB0aGlzIG5ldyBwYXJhZGlnbS4gVGhlc2UgZHJpdmVycyBub3cgbmVlZCB0byBzdG9yZSBhbmQgYWNjZXNzIGRyaXZlci1zcGVjaWZpYyBkYXRhIGR1cmluZyB0aGUgcHJvYmUgaW5zdGVhZCBvZiB0aGUgYHBjaV9kZXZpY2VfaWRgIHBvaW50ZXIgaXRzZWxmLgoqICAgKipGdXp6aW5nIFBvdGVudGlhbDoqKiBUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCBmdXp6aW5nLXdpc2UsIGlzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN5c2ZzIChgbmV3X2lkYCksIGR5bmFtaWMgSUQgaGFuZGxpbmcsIGFuZCB0aGUgUENJIG1hdGNoaW5nIGNvcmUuIFN5emthbGxlciBjYW4gZWFzaWx5IGludGVyYWN0IHdpdGggc3lzZnMgYW5kIGFkZCBkeW5hbWljIElEcyAodHJpZ2dlcmluZyBgbmV3X2lkX3N0b3JlYCwgd2hpY2ggY2FsbHMgYGRvX3BjaV9hZGRfZHluaWRgKS4gVGhlIHByb2JpbmcgcHJvY2VzcyB0aGVuIGdvZXMgdGhyb3VnaCBgcGNpX21hdGNoX2RldmljZWAgYW5kIGBwY2lfbWF0Y2hfb25lX2lkYC4gVGhlIGNoYW5nZWQgbG9naWMgaXMgaW50ZXJlc3RpbmcuCiogICAqKkZ1enppbmcgVGFyZ2V0czoqKiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcyBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0czoKICAgICogICBgZG9fcGNpX2FkZF9keW5pZGAKICAgICogICBgbmV3X2lkX3N0b3JlYAogICAgKiAgIGBwY2lfbWF0Y2hfZGV2aWNlYAogICAgKiAgIGBwY2lfbWF0Y2hfb25lX2lkYAogICAgKiAgIGBfX3BjaV9kZXZpY2VfcHJvYmVgCiogICAqKk1vZGlmaWVkIERyaXZlcnMgKGFsc28gdG8gZnV6eik6KioKICAgICogICBgYXRhX2dlbmVyaWNfaW5pdF9vbmVgCiAgICAqICAgYGFncF9hbWRrN19wcm9iZWAKICAgICogICBgYWdwX3ZpYV9wcm9iZWAKICAgICogICBgdHBjaTIwMF9wY2lfcHJvYmVgCiAgICAqICAgYG1seHN3X3BjaV9wcm9iZWAKICAgICogICBgbnNwMzJfcHJvYmVgCiogICAqKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnM6KiogSSBuZWVkIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBtb2RpZmllZCBkcml2ZXJzIHRvIGJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3I6CiAgICAqICAgYEFUQV9HRU5FUklDYAogICAgKiAgIGBBR1BfQU1ENjRgIG9yIGBBR1BfQU1ESzdgCiAgICAqICAgYEFHUF9WSUFgCiAgICAqICAgYFRQQ0kyMDBgCiAgICAqICAgYE1MWFNXX1BDSWAKICAgICogICBgU0NTSV9OU1AzMmAKICAgICogIGBDT05GSUdfUENJYCAod2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0KQoKU3l6a2FsbGVyIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYG5ld19pZGAgc3lzZnMgZW50cnkgYW5kIGNhbiB0cmlnZ2VyIGR5bmFtaWMgSUQgYWRkaXRpb24sIGxlYWRpbmcgdG8gZXhlY3V0aW9uIG9mIHRoZSBQQ0kgcHJvYmluZyBmdW5jdGlvbnMgd2hpY2ggaW4gdHVybiBjYWxscyB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uLiBUaGlzIHNldCBvZiBjaGFuZ2VzIG9mZmVycyBpbnRlcmVzdGluZyBmdXp6aW5nIHNjZW5hcmlvcy4gVGhlIGRyaXZlcnMgdGhhdCB3ZXJlIGNoYW5nZWQgd2lsbCBuZWVkIHRvIGJlIGZ1enplZCBhcyB3ZWxsIHRvIHRlc3QgdGhlIGV4dHJhY3Rpb24gYW5kIHN0b3JhZ2Ugb2YgZHJpdmVyIGRhdGEgZHVyaW5nIHByb2JpbmcuIEl0IGFsbCBjb21lcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVRBX0dFTkVSSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2F0YS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hdGEvS2NvbmZpZz0xMTYzPWNvbmZpZyBQQVRBX0FDUElcbi0tXG5kcml2ZXJzL2F0YS9LY29uZmlnLTExNzItXG5kcml2ZXJzL2F0YS9LY29uZmlnOjExNzM6Y29uZmlnIEFUQV9HRU5FUklDXG5kcml2ZXJzL2F0YS9LY29uZmlnLTExNzQtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIEFUQSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NjYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipJbnRlcm5hbCBNdXNpbmdzIG9uIEFUQV9HRU5FUklDKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcy4uLiBgQVRBX0dFTkVSSUNgLiBIbW0sIGxldCYjMzk7cyBzZWUuIFRoZSB0ZXh0IHNheXMuLi4gd2VsbCwgaXQgKmlzKiBgQVRBX0dFTkVSSUNgLiBPa2F5LCB0aGF0JiMzOTtzIG5vdCBleGFjdGx5IHJldmVsYXRvcnksIGlzIGl0PyBDbGVhcmx5LCB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnQgaXMgdGhhdCBgQVRBX0dFTkVSSUNgIGlzLCBpbiBmYWN0LCBgQVRBX0dFTkVSSUNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSB3b25kZXIgd2h5IHRoaXMgc3RhdGVtZW50IG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgbm90ZWQuIElzIGl0IHNpbXBseSBhIG1hdHRlciBvZiBlc3RhYmxpc2hpbmcgdGhlIGdyb3VuZHdvcmsgZm9yIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnM/IElzIHRoZXJlIGEgbmVlZCB0byBkZWZpbmUgdGhlIHRoaW5nIGFzIGl0c2VsZiwgcGVyaGFwcyB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc29tZSBicm9hZGVyIHN5c3RlbSBvciBzcGVjaWZpY2F0aW9uPyBJdCBzZWVtcyBsaWtlIHRoaXMgbWlnaHQgYmUgbW9yZSBvZiBhIHBsYWNlaG9sZGVyIHRoYW4gYSByZXZlbGF0aW9uLiBTbywgSSBuZWVkIHRvIHN0YXJ0IGJ1aWxkaW5nIGNvbnRleHQuIEhvdyBjYW4gSSBleHBhbmQgdXBvbiB0aGlzIGluIGEgbWVhbmluZ2Z1bCB3YXk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFHUF9BTUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvYWdwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvYWdwL0tjb25maWc9NDU9Y29uZmlnIEFHUF9BVElcbi0tXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctNTEtXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWc6NTI6Y29uZmlnIEFHUF9BTURcbmRyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0FNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZy01OC1cbmRyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZzo1OTpjb25maWcgQUdQX0FNRDY0XG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtBTUQgT3B0ZXJvbi9BdGhsb242NCBvbi1DUFUgR0FSVCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBBR1BfQU1EIFZhcmlhYmxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFNlZWluZyAmIzM0O0FHUFxfQU1EJiMzNDsgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gQWNjZWxlcmF0ZWQgR3JhcGhpY3MgUG9ydCAoQUdQKSBhbmQgQU1EIGhhcmR3YXJlLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIHVuZGVyc2NvcmUgaXMgaW50ZXJlc3RpbmcsIGl0IGltcGxpZXMgYSB2YXJpYWJsZSBvciBhIGxhYmVsLCBub3QgYSBkaXJlY3QgY29tbWFuZCBvciBmaWxlbmFtZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgJiMzNDtpcyB0aGlzIGEgc3lzdGVtIHZhcmlhYmxlLCBhIGRyaXZlciBzZXR0aW5nLCBhIHJlZ2lzdHJ5IGtleSwgb3IgcGFydCBvZiBhIGNvbmZpZ3VyYXRpb24gZmlsZT8mIzM0OyBXaXRob3V0IG1vcmUgY29udGV4dCwgaXQmIzM5O3MgaW1wb3NzaWJsZSB0byBzYXkgZm9yIHN1cmUuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkmIzM5O20gZW5jb3VudGVyaW5nIHRoaXMgdGV4dC4KCklmIEkgd2VyZSB0byB0YWtlIGFuIGVkdWNhdGVkIGd1ZXNzLCBJ4oCZZCBwcmVzdW1lIGl0IHJlZmVycyB0byBhIHBhcnRpY3VsYXIgQUdQIHNldHRpbmcgb3IgYSBmZWF0dXJlIHRoYXTigJlzIHNwZWNpZmljIHRvIEFNRCBoYXJkd2FyZSwgcG9zc2libHkgaW4gYSBkcml2ZXIgY29uZmlndXJhdGlvbi4gSXQgY291bGQgYmUgcmVsYXRlZCB0byBBR1AgYXBlcnR1cmUgc2l6ZSwgQUdQIHRyYW5zZmVyIHJhdGUgbW9kZXMgKGxpa2UgNHggb3IgOHgpLCBvciBwZXJoYXBzIGV2ZW4gc29tZSBwcm9wcmlldGFyeSBBTUQgZXh0ZW5zaW9uIGZvciBBR1AuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBpbnZlc3RpZ2F0ZSBwb3RlbnRpYWwgZHJpdmVyIHNldHRpbmdzIG9yIEJJT1Mgc2V0dGluZ3MgZm9yIGFuIEFNRC1iYXNlZCBzeXN0ZW0gd2l0aCBBR1AuIFRoZSB2YXJpYWJsZSBpdHNlbGYsIGJ5IG5hbWluZyB0aGUgaGFyZHdhcmUgKmFuZCogdGhlIHRlY2hub2xvZ3ksIHN1Z2dlc3RzIGFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gVGhlIHByZWNpc2UgbWVhbmluZywgdGhvdWdoLCBpcyBlbnRpcmVseSBkZXBlbmRlbnQgb24gdGhlIHN5c3RlbSBvciBjb2RlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFHUF9WSUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvYWdwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvYWdwL0tjb25maWc9OTg9Y29uZmlnIEFHUF9TV09SS1Ncbi0tXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctMTA0LVxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnOjEwNTpjb25maWcgQUdQX1ZJQVxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnLTEwNi1cdHRyaXN0YXRlIFwmIzM0O1ZJQSBjaGlwc2V0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU5NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4gdGVjaG5pY2FsIGNvbmNlcHRzOgoKKipUaGUgQ29yZSBJZGVudGl0eSBvZiBBR1BfVklBKioKCkhtbSwgc28gdGhlIHRob3VnaHQgaXMgc2ltcGx5ICYjMzQ7QUdQX1ZJQSBpcyBgQUdQX1ZJQWAuJiMzNDsgSW50ZXJlc3RpbmcuIE9uIHRoZSBzdXJmYWNlLCBpdCBzZWVtcyBhbG1vc3QgdGF1dG9sb2dpY2FsLCBhIHZlcnkgYmFzaWMgaWRlbnRpdHkgc3RhdGVtZW50LiBCdXQgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhlcmUmIzM5O3MgbW9yZSBiZW5lYXRoIHRoZSBzdXJmYWNlLiBJdCYjMzk7cyBub3QganVzdCBhIGRlY2xhcmF0aW9uOyBpdCYjMzk7cyBhIGZvdW5kYXRpb25hbCB1bmRlcnN0YW5kaW5nLiBJdCYjMzk7cyBhY2tub3dsZWRnaW5nIHRoYXQgdGhlIGlkZW50aWZpZXIgJiMzNDtBR1BfVklBJiMzNDsgcmVwcmVzZW50cywgYnkgZGVmaW5pdGlvbiwgKkFHUF9WSUEqLiBUaGVyZSYjMzk7cyBubyBoaWRkZW4gdmFyaWFibGUsIG5vIGFtYmlndWl0eS4gSXQgYXNzZXJ0cyB0aGUgY29yZSBlc3NlbmNlIG9mIHRoYXQgc3BlY2lmaWMgZWxlbWVudCwgd2hhdGV2ZXIgaXQmIzM5O3MgcmVmZXJyaW5nIHRvLCBpcyBpdHMgb3duIGlkZW50aWZpZXIuIEl0JiMzOTtzIGEga2V5IHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUENJMjAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pcGFjay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgyNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGxvY2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byAmIzM0O3RwY2kyMDAsJiMzNDsgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZHJpdmVyIGluZnJhc3RydWN0dXJlIGZvciBJUEFDSyBjYXJyaWVycy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9pcGFjay9jYXJyaWVycy9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IHJlZmxleGl2ZSBhdCB0aGlzIHBvaW50IOKAkyBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBUaGV5JiMzOTtyZSB3aGVyZSB0aGVzZSBraW5kcyBvZiBoYXJkd2FyZSBvcHRpb25zIGFyZSB1c3VhbGx5IGRlZmluZWQgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBlc3RhYmxpc2hlZC4gSnVtcGluZyBpbnRvIHRoaXMgZGlyZWN0b3J5IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBmaXJzdCBzdGVwLiBJIHN1c3BlY3QgdGhhdCBlaXRoZXIgJiMzNDt0cGNpMjAwJiMzNDsgaXMgZXhwbGljaXRseSBuYW1lZCBpbiBhIG1lbnUgZW50cnksIG9yIGl0JiMzOTtzIHBhcnQgb2YgYSBicm9hZGVyIHNldCBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBjYW4gdGhlbiB0cmFjZS4gSXQgaXMgdmVyeSBsaWtlbHkgYSBib29sZWFuIG9wdGlvbiwgcG9zc2libHkgZGVwZW5kZW50IG9uIGFub3RoZXIgbW9yZSBnZW5lcmljIGJvYXJkIG9wdGlvbi4gSXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGluIGFuIGluY2x1ZGVzIGZpbGUgYW5kIHB1bGxlZCBpbnRvIHRoaXMgS2NvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaXBhY2svY2FycmllcnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lwYWNrL2NhcnJpZXJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaXBhY2svY2FycmllcnMvS2NvbmZpZzoyOmNvbmZpZyBCT0FSRF9UUENJMjAwXG5kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBURVdTIFRQQ0ktMjAwIEluZHVzdHJ5UGFjayBjYXJyaWVyIGJvYXJkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTc0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgQk9BUkRfVFBDSTIwMDogQSBDb25jaXNlIFJlZmxlY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gU2VlaW5nICYjMzQ7Qk9BUkRfVFBDSTIwMCBpcyBgQk9BUkRfVFBDSTIwMGAmIzM0OyBpcyBlc3NlbnRpYWxseSBhIHRhdXRvbG9neS4gSXQmIzM5O3MgYSBzdGF0ZW1lbnQgb2YgaWRlbnRpdHksIG5vdGhpbmcgbW9yZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byByZWNvZ25pemUgdGhpcyBhcyBhIHBsYWNlaG9sZGVyLCBwZXJoYXBzIGluIHNvbWUgY29kZSBvciBkb2N1bWVudGF0aW9uLiBJdCYjMzk7cyBhIGJhc2ljIGFzc2lnbm1lbnQuCgpUaGUga2V5IGxpZXMgaW4gKndoeSogaXQmIzM5O3MgcHJlc2VudGVkIHRoaXMgd2F5LiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgZGVidWdnaW5nIHNjZW5hcmlvPyBBIHJ1ZGltZW50YXJ5IGNoZWNrPyBPciBwZXJoYXBzIGl0JiMzOTtzIGEgY29tcG9uZW50IGluIGEgbGFyZ2VyIHN5c3RlbSB3aGVyZSB0aGUgYWN0dWFsIHZhbHVlIGlzIGRlcml2ZWQgb3IgZHluYW1pY2FsbHkgYXNzaWduZWQgbGF0ZXIgYW5kIHRoaXMgaXMgdGhlIGluaXRpYWwgYXNzaWdubWVudCBwbGFjZWhvbGRlcj8gSSYjMzk7ZCBuZWVkIG1vcmUgY29udGV4dC4KClRoZSBmb3JtIHN1Z2dlc3RzIGEgc3ltYm9sIGFuZCBhIGxpdGVyYWwgcmVmZXJlbmNlIHRvIGl0c2VsZi4gSXQmIzM5O3MgYWxtb3N0IHRvbyBzaW1wbGlzdGljLiBUaGUgcmVhbCBpbnRlcmVzdCBpcyB0aGUgKnB1cnBvc2UqIGJlaGluZCBpdCwgd2hhdCB0aGlzIHJlcHJlc2VudHMgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIElzIGl0IGEgY29uc3RhbnQsIGEgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaXRob3V0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIEkmIzM5O20gbGVmdCB0byBzcGVjdWxhdGUgb24gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uIFRoZSBpbW1lZGlhdGUgcmVzcG9uc2UgaXMgdG8gY29uc2lkZXIgaXQgYSBiYXNpYyBidWlsZGluZyBibG9jaywgYSBrbm93biBxdWFudGl0eSwgYSAmIzM0O2tub3duIGtub3duLCYjMzQ7IGlmIHlvdSB3aWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUxYU1dfUENJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MjU9Y29uZmlnIE1MWFNXX0NPUkVfVEhFUk1BTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjMzOmNvbmZpZyBNTFhTV19QQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzQtXHR0cmlzdGF0ZSBcJiMzNDtQQ0kgYnVzIGltcGxlbWVudGF0aW9uIGZvciBNZWxsYW5veCBUZWNobm9sb2dpZXMgU3dpdGNoIEFTSUNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQ6IE1MWFNXX1BDSSoqCgpSaWdodCwgc28sIHRoZSBpbnB1dCBzaW1wbHkgc3RhdGVzICYjMzQ7TUxYU1dfUENJIGlzIGBNTFhTV19QQ0lgLiYjMzQ7IFRoaXMgaXMgYSBmdW5kYW1lbnRhbCwgdGF1dG9sb2dpY2FsIHN0YXRlbWVudC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFuIGFzc2VydGlvbiB0aGF0IHNvbWV0aGluZyDigJMgKk1MWFNXX1BDSSog4oCTIGlzIGVxdWFsIHRvIGl0c2VsZi4gSXQmIzM5O3MgYSBwbGFjZWhvbGRlciwgYSBzdGFydGluZyBwb2ludC4gSXQmIzM5O3Mgbm90IHByb3ZpZGluZyBhbnkgbmV3IGluZm9ybWF0aW9uIG9yIGluc2lnaHQgb24gaXRzIG93bi4gSXQmIzM5O3MgdGhlIGVxdWl2YWxlbnQgb2Ygc2F5aW5nICYjMzQ7YSB0cmVlIGlzIGEgdHJlZS4mIzM0OyBXaGlsZSBvYnZpb3VzLCBpdCBjb3VsZCBiZSB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIG1vcmUgY29tcGxleCBjb25jZXB0cyBidWlsZC4gVGhpcyBiZWdzIHRoZSBxdWVzdGlvbiwgd2hlcmUgd2lsbCB0aGlzIHRha2UgbWU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ1NJX05TUDMyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZz0xMTkxPWNvbmZpZyBTQ1NJX0FNNTNDOTc0XG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctMTIwNi1cbmRyaXZlcnMvc2NzaS9LY29uZmlnOjEyMDc6Y29uZmlnIFNDU0lfTlNQMzJcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTEyMDgtXHR0cmlzdGF0ZSBcJiMzNDtXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTQ1NJX05TUDMyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYFNDU0lfTlNQMzJgIGlzLCB3ZWxsLCBgU0NTSV9OU1AzMmAuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBhcmU6IGBBVEFfR0VORVJJQ2AsIGBBR1BfQU1EYCwgYEFHUF9WSUFgLCBgQk9BUkRfVFBDSTIwMGAsIGBNTFhTV19QQ0lgLCBhbmQgYFNDU0lfTlNQMzJgLgoKTm93LCBzb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZSBhYm91dCBgU0NTSV9OU1AzMmAuIEkgaGF2ZSBhIGZlZWxpbmcgaXQgY291bGQgYmUgZGVwZW5kZW50IG9uIHNvbWV0aGluZyBsaWtlIGBQQ01DSUFgIG9yIGEgc2ltaWxhciBsZWdhY3kgaW50ZXJmYWNlLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAgdG8gYXZvaWQgcG90ZW50aWFsIGNvbmZsaWN0cyBvciB1bmZvcmVzZWVuIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggb2xkZXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNDU0lfTlNQMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZz0xMTkxPWNvbmZpZyBTQ1NJX0FNNTNDOTc0XG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctMTIwNi1cbmRyaXZlcnMvc2NzaS9LY29uZmlnOjEyMDc6Y29uZmlnIFNDU0lfTlNQMzJcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTEyMDgtXHR0cmlzdGF0ZSBcJiMzNDtXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzQzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqCgpBbHJpZ2h0LCB0aGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgaXMgY2xlYXIuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBub3cgaXM6IExldCYjMzk7cyByZWFkIHRoZSBkZXBlbmRlbmNpZXMuIEJlZm9yZSBJIGNhbiBlZmZlY3RpdmVseSBkaWFnbm9zZSwgcmVmYWN0b3IsIG9yIGV2ZW4ganVzdCAqdW5kZXJzdGFuZCogdGhlIHN5c3RlbSBpbiBmcm9udCBvZiBtZSwgSSBuZWVkIHRvIGtub3cgd2hhdCBpdCByZWxpZXMgb24uIEkmIzM5O20gbm90IGxvb2tpbmcgZm9yIGEgc3VwZXJmaWNpYWwgb3ZlcnZpZXc7IEkgbmVlZCBhIGRldGFpbGVkIHBpY3R1cmUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlaXIgdmVyc2lvbnMsIHRoZSBpbnRlcnJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVtLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQganVtcCBvdXQuIEnigJltIHRoaW5raW5nIGFib3V0IGhvdyBlYWNoIGRlcGVuZGVuY3kgY29udHJpYnV0ZXMsIGFuZCB3aGVyZSB0aGUgbW9zdCBjb21wbGV4IGludGVyYWN0aW9ucyBsaWUuIFRoaXMgZmlyc3Qgc3RlcCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwuIFdpdGhvdXQgdGhpcyBkZXRhaWxlZCB2aWV3LCBhbnkgZnVydGhlciBhbmFseXNpcyB3aWxsIGJlIGhhcGhhemFyZCBhbmQgbGlrZWx5IGxlYWQgdG8gZXJyb3JzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uIG9mIGEgc291bmQgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIwNzpcdGNvbmZpZyBTQ1NJX05TUDMyXG4xMjA4Olx0XHR0cmlzdGF0ZSBcJiMzNDtXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBzdXBwb3J0XCYjMzQ7XG4xMjA5Olx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgU0NTSSBcdTAwMjZcdTAwMjYgITY0QklUIFx1MDAyNlx1MDAyNiBIQVNfSU9QT1JUXG4xMjEwOlx0XHRoZWxwXG4xMjExOlx0XHQgIFRoaXMgaXMgc3VwcG9ydCBmb3IgdGhlIFdvcmtiaXQgTmluamFTQ1NJLTMyQmkvVURFIFBDSS9DYXJkYnVzXG4xMjEyOlx0XHQgIFNDU0kgaG9zdCBhZGFwdGVyLiBQbGVhc2UgcmVhZCB0aGUgU0NTSS1IT1dUTywgYXZhaWxhYmxlIGZyb21cbjEyMTM6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cdTAwM2UuXG4xMjE0Olx0XG4xMjE1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuMTIxNjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbnNwMzIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgU3l6a2FsbGVyJiMzOTtzIEFyY2hpdGVjdHVyYWwgTGFuZHNjYXBlKioKCk9rYXksIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG1pbmQgaXMgdGhhdCB0aGlzIHdob2xlIGxpbmUgb2YgdGhpbmtpbmcgaXMgZGVwZW5kZW50IG9uIHdoZXRoZXIgb3Igbm90IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSA2NC1iaXQgYXJjaGl0ZWN0dXJlLCB3aGljaCBTeXprYWxsZXIsIGluIGl0cyB0eXBpY2FsIGNvbmZpZ3VyYXRpb25zICh4ODZfNjQgYW5kIGFybTY0KSwgdGVuZHMgdG8gYmUuIElmIHRoaXMgY29kZSBwYXRoIGlzIGNvbmRpdGlvbmVkIG9uIGAhNjRCSVRgLCB0aGVuIHRoZSBwcmFjdGljYWxpdHkgb2YgdGVzdGluZyBgU0NTSV9OU1AzMmAgYmVjb21lcyBxdWVzdGlvbmFibGUgaW4gb3VyIHVzdWFsIFN5emthbGxlciBlbnZpcm9ubWVudC4gSXQgbWlnaHQgbm90IGV2ZW4gKmJlKiB0ZXN0YWJsZSwgYnV0IHRoYXQgZG9lc24mIzM5O3QgbmVjZXNzYXJpbHkgbWVhbiB3ZSBzaG91bGQgZXhjbHVkZSBpdCBmcm9tIGEgbGlzdCwgcmlnaHQ/IFdlIGNhbiBjZXJ0YWlubHkgKmxpc3QqIGl0LiBXZSBzaG91bGQgZGVmaW5pdGVseSBsaXN0IGl0LgoKTm93LCBzaGlmdGluZyBnZWFycy4uLmxldCYjMzk7cyBnbyBhaGVhZCBhbmQgZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJPQVJEX1RQQ0kyMDBgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBpbXBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaXBhY2svY2FycmllcnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBCT0FSRF9UUENJMjAwXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciB0aGUgVEVXUyBUUENJLTIwMCBJbmR1c3RyeVBhY2sgY2FycmllciBib2FyZFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJUEFDS19CVVNcbiAgIDU6XHRcdGRlcGVuZHMgb24gUENJXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFRFV1MgVFBDSTIwMCBJbmR1c3RyeVBhY2sgY2FycmllciBib2FyZC5cbiAgIDg6XHRcdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjIxMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgY29udGluZ2VudCBvbiBgSVBBQ0tfQlVTYC4gVGhhdCYjMzk7cyB0aGUga2V5IHZhcmlhYmxlLCB0aGUgbGluY2hwaW4uIE15IGluaXRpYWwgdGhvdWdodCBpczogd2hhdCAqcHJlY2lzZWx5KiBhYm91dCBgSVBBQ0tfQlVTYD8gSXMgaXQgdGhlIHZhbHVlLCB0aGUgc3RhdGUsIHRoZSBhdmFpbGFiaWxpdHksIHRoZSBjb25maWd1cmF0aW9uLCB0aGUgcHJvdG9jb2wgYmVpbmcgdXNlZCBvbiBpdCwgdGhlIGRhdGEgdHJhbnNtaXR0ZWQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZGVwZW5kZW5jeSBpcyBzdGF0ZWQsIGJ1dCB0aGUgbmF0dXJlIG9mIHRoZSBkZXBlbmRlbmN5IGlzbiYjMzk7dC4KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBjb3VsZCBtZWFuIGEgbXVsdGl0dWRlIG9mIHRoaW5ncy4gV2UgbmVlZCB0byBkcmlsbCBkb3duLiBJcyB0aGlzIGFuIGlucHV0IHRvIGEgc3BlY2lmaWMgY2FsY3VsYXRpb24/IEEgY29uZGl0aW9uIGZvciB0cmlnZ2VyaW5nIGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBtb2R1bGU/IElzIHRoZSBzeXN0ZW0gc3RhdGUgZGVmaW5lZD8gSXMgdGhlcmUgYW4gaW1wbGllZCBjb25zdHJhaW50IGluIHRoZSBkZXNpZ24/IElzIGBJUEFDS19CVVNgIGJlaW5nIHRyZWF0ZWQgYXMgYSBibGFja2JveCBoZXJlLCBvciBjYW4gaXRzIGlubmVyIHdvcmtpbmdzIGJlIGRlZmluZWQ/IFdpdGhvdXQgZnVydGhlciBjb250ZXh0LCB0aGUgbWVhbmluZyBpcyBlc3NlbnRpYWxseSBvcGFxdWUuIFdoYXQgaXMgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgc3Vycm91bmRpbmcgY29udGV4dD8gV2l0aG91dCBtb3JlIGluZm9ybWF0aW9uLCBJJiMzOTttIGxlZnQgZ3Vlc3NpbmcuIEkgbmVlZCBtb3JlIGRhdGEgdG8gbWVhbmluZ2Z1bGx5IGludGVycHJldCB0aGUgJiMzOTtkZXBlbmRlbmN5JiMzOTsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUEFDS19CVVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lwYWNrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pcGFjay9LY29uZmlnLTUtXG5kcml2ZXJzL2lwYWNrL0tjb25maWc6NjptZW51Y29uZmlnIElQQUNLX0JVU1xuZHJpdmVycy9pcGFjay9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtJbmR1c3RyeVBhY2sgYnVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqQ29uc2lkZXJpbmcgQnVzIEFyY2hpdGVjdHVyZXMqKgoKUmlnaHQsIHNvIEkgc2VlIHdlIGFic29sdXRlbHkgbmVlZCB0byBpbmNvcnBvcmF0ZSBgSVBBQ0tfQlVTYCBpbnRvIHRoZSBkZXNpZ24uIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudC4gTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gb3RoZXIgY29tbW9uIGFyY2hpdGVjdHVyZXMuIFdlIHNob3VsZCByZXZpc2l0IHRoZSBzcGVjaWZpY3Mgb2YgYEFHUF9BTURgIGFuZCBgQUdQX1ZJQWAuIEFyZSB0aGVyZSBhbnkgcGVyZm9ybWFuY2UgYmVuZWZpdHM/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGV5IG1pZ2h0IGluZmx1ZW5jZSB0aGUgZW5kIHByb2R1Y3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jaGFyL2FncC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MjpcdGNvbmZpZyBBR1BfQU1EXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0IHN1cHBvcnRcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gQUdQIFx1MDAyNlx1MDAyNiBYODZfMzJcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZlxuICA1NzpcdFx0ICBYIG9uIEFNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXRzLlxuICA1ODpcdFxuICA1OTpcdGNvbmZpZyBBR1BfQU1ENjRcbiAgNjA6XHRcdHRyaXN0YXRlIFwmIzM0O0FNRCBPcHRlcm9uL0F0aGxvbjY0IG9uLUNQVSBHQVJUIHN1cHBvcnRcJiMzNDtcbiAgNjE6XHRcdGRlcGVuZHMgb24gQUdQIFx1MDAyNlx1MDAyNiBYODYgXHUwMDI2XHUwMDI2IEFNRF9OQlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkwNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQXNzZXNzbWVudCBvZiBBR1AgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBgQUdQX0FNRGAgaXMgZXhwbGljaXRseSByZWxpYW50IG9uIHRoZSBgWDg2XzMyYCBhcmNoaXRlY3R1cmUuIFRoYXQmIzM5O3MgYSBwcmV0dHkgY2xlYXIgc2lnbmFsLiBHaXZlbiB0aGF0IGRlcGVuZGVuY3ksIGl0JiMzOTtzIGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCB3ZSAqd29uJiMzOTt0KiBuZWVkIHRvIGJvdGhlciB3aXRoIHRlc3RpbmcgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZSBvbiBhIDY0LWJpdCBzeXN0ZW0uIFRoZSBkZXBlbmRlbmN5IHdpbGwgYmxvY2sgaXQuIFdlIGNhbiBzYWZlbHkgc2tpcCB0aGUgNjQtYml0IHRlc3RpbmcgaW4gdGhhdCBjYXNlLgoKSG1tLCBub3csIHdoYXQgYWJvdXQgYEFHUF9WSUFgPyBJcyBpdCB0aGUgc2FtZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEFHUF9WSUFgIGJlZm9yZSBtYWtpbmcgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jaGFyL2FncC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDU6XHRjb25maWcgQUdQX1ZJQVxuIDEwNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VklBIGNoaXBzZXQgc3VwcG9ydFwmIzM0O1xuIDEwNzpcdFx0ZGVwZW5kcyBvbiBBR1AgXHUwMDI2XHUwMDI2IFg4NlxuIDEwODpcdFx0aGVscFxuIDEwOTpcdFx0ICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mXG4gMTEwOlx0XHQgIFggb24gVklBIE1WUDMvQXBvbGxvIFBybyBjaGlwc2V0cy5cbiAxMTE6XHRcbiAxMTI6XHRjb25maWcgQUdQX1BBUklTQ1xuIDExMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SFAgUXVpY2tzaWx2ZXIgQUdQIHN1cHBvcnRcJiMzNDtcbiAxMTQ6XHRcdGRlcGVuZHMgb24gQUdQIFx1MDAyNlx1MDAyNiBQQVJJU0MgXHUwMDI2XHUwMDI2IDY0QklUIFx1MDAyNlx1MDAyNiBJT01NVV9TQkFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biB0aGlua2luZyBwcm9jZXNzOgoKKipEZXBlbmRlbmNpZXMgYW5kIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0gaXMgdGhhdCBgQUdQX1ZJQWAgKmFic29sdXRlbHkqIGhpbmdlcyBvbiBgQUdQYCAqYW5kKiBgWDg2YC4gVGhhdCYjMzk7cyBub24tbmVnb3RpYWJsZS4gU28sIGZpcnN0IGFuZCBmb3JlbW9zdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQUdQYCBpcyBjb25maWd1cmVkIGFuZCBhdmFpbGFibGUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlIGhlcmUuCgpOb3csIEkmIzM5O20gc2hpZnRpbmcgZ2VhcnMuLi4gd2hhdCBhYm91dCBgQVRBX0dFTkVSSUNgPyBEb2VzIHRoaXMgaW50ZXJmYWNlIHBsYXkgaW50byBgQUdQX1ZJQWAgYXQgYWxsPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBpbnRlcmNvbm5lY3RlZCBwaWVjZXMgb2YgdGhlIHB1enpsZSBiZWZvcmUgcHJvY2VlZGluZy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgZml0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2F0YS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE3MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTczOlx0Y29uZmlnIEFUQV9HRU5FUklDXG4xMTc0Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIEFUQSBzdXBwb3J0XCYjMzQ7XG4xMTc1Olx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgQVRBX0JNRE1BXG4xMTc2Olx0XHRzZWxlY3QgU0FUQV9IT1NUXG4xMTc3Olx0XHRoZWxwXG4xMTc4Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgZ2VuZXJpYyBCSU9TIGNvbmZpZ3VyZWRcbjExNzk6XHRcdCAgQVRBIGNvbnRyb2xsZXJzIHZpYSB0aGUgbmV3IEFUQSBsYXllclxuMTE4MDpcdFxuMTE4MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMTE4MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY2MgoJCQkJCQkJb3V0cHV0OiAzNDIKCQkJCQkJCXRob3VnaHRzOiAxMDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUENJIENvcmUgYW5kIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaGluZ2VzIG9uIGBBVEFfQk1ETUFgLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIEZpcnN0LCBsZXQmIzM5O3MgbGlzdCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlOiBgQVRBX0dFTkVSSUNgLCBgQUdQX1ZJQWAsIGBCT0FSRF9UUENJMjAwYCwgYElQQUNLX0JVU2AsIGBNTFhTV19QQ0lgLCBhbmQgYEFHUGAuIE9oLCBhbmQgSSBzaG91bGQgbm90ZSBgU0NTSV9OU1AzMmAgYW5kIGBBR1BfQU1EYCB3aGljaCBhcmUgMzItYml0IHNwZWNpZmljLCBidXQgc3RpbGwgcmVsZXZhbnQuCgpOb3csIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgY2hhbmdlcyB0byBQQ0kgZGV2aWNlIG1hdGNoaW5nIGFuZCBwcm9iaW5nLiBJIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgc3ltYm9sczogYGRvX3BjaV9hZGRfZHluaWRgLCBgbmV3X2lkX3N0b3JlYCwgYHBjaV9tYXRjaF9kZXZpY2VgLCBgcGNpX21hdGNoX2lkYCwgYF9fcGNpX2RldmljZV9wcm9iZWAsIGBhdGFfZ2VuZXJpY19pbml0X29uZWAsIGBhZ3BfYW1kazdfcHJvYmVgLCBgYWdwX3ZpYV9wcm9iZWAsIGB0cGNpMjAwX3BjaV9wcm9iZWAsIGBtbHhzd19wY2lfcHJvYmVgLCBhbmQgYG5zcDMyX3Byb2JlYC4KCldhaXQgYSBtaW51dGUsIGBwY2lfbWF0Y2hfb25lX2lkYCBpcyBhY3R1YWxseSBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gYGluY2x1ZGUvbGludXgvcGNpLmhgLiBJdCB3b24mIzM5O3QgYmUgYSBzeW1ib2wgaW4gdGhlIGtlcm5lbCBpbWFnZSBkaXJlY3RseSwgYnV0IGl0JiMzOTtzIHVzZWQgd2l0aGluIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBkb19wY2lfbWF0Y2hfaWRgLCBgbWF0Y2hfcGNpX2Rldl9ieV9pZGAsIGBkb19wY2lfYWRkX2R5bmlkYCwgYW5kIGBwY2lfbWF0Y2hfZGV2aWNlYC4gU28gSSYjMzk7bGwgbGlzdCBgZG9fcGNpX21hdGNoX2lkYCBpbnN0ZWFkLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rpb25zIEkgbGlzdGVkIGFyZSBzdGF0aWMuIGBfX3BjaV9kZXZpY2VfcHJvYmVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZmluZSwgYXMgaXMgYG5ld19pZF9zdG9yZWAuIGBkb19wY2lfYWRkX2R5bmlkYCBpcyBhbHNvIHN0YXRpYy4gT2theS4KCkxldCYjMzk7cyBzZWUgaWYgb3RoZXIgZnVuY3Rpb25zIGFyZSB0b3VjaGVkLiBUaGVyZSYjMzk7cyBgbWx4c3dfcGNpX3Jlc2V0YCwgYG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdGAsIGBtbHhzd19wY2lfaW5pdGAsIGBuc3AzMl9zaG93X2luZm9gLCBgbnNwMzJfZ2V0cHJvbV9wYXJhbWAsIGBwY2lfbWF0Y2hfaWRgLCBhbmQgYHBjaV9hZGRfZHluaWRgLiBUaGVzZSBhcmUgYWxsIGltcG9ydGFudCB0b28sIHNvIEkmIzM5O2xsIGFkZCBgcGNpX2FkZF9keW5pZGAgYW5kIGBwY2lfbWF0Y2hfaWRgLgoKTm93LCBsZXQmIzM5O3MgcmVjYXAgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcy4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB0aGUgUENJIGNvcmUgaGFuZGxlcyBkeW5hbWljIGBwY2lfZGV2aWNlX2lkYCBlbnRyaWVzLiBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBwb2ludGVyIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCBJRCB0byB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uLCBpdCYjMzk7cyBwYXNzaW5nIGEgY29weS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpZiB0aGF0IGR5bmFtaWMgSUQgZ2V0cyByZW1vdmVkIHRocm91Z2ggc3lzZnMuIFRoZXJlIGFyZSBhbHNvIGRyaXZlciB1cGRhdGVzIHRvIGZpeCB0aGVtIHNhdmluZyB0aGUgYHBjaV9kZXZpY2VfaWRgIHBvaW50ZXIgYW5kIGluc3RlYWQgc2F2aW5nIHJlbGV2YW50IGZpZWxkcy4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYm90aCB0aGUgUENJIGNvcmUgYW5kIGFmZmVjdGVkIGRyaXZlcnMuIFRoaXMgaXMgYWxsIHJpcGUgZm9yIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYW5kIHByb2JpbmcsIGVzcGVjaWFsbHkgd2l0aCB0aG9zZSBkeW5hbWljIElEcyBjb21pbmcgZnJvbSBzeXNmcy4KCkhlcmUgYXJlIHRoZSBjb25maWdzIGFnYWluLCBub3cgdGhhdCBJJiMzOTt2ZSBmb2N1c2VkIG15IGF0dGVudGlvbjoKYEFUQV9HRU5FUklDYApgQUdQYApgQUdQX0FNRGAKYEFHUF9WSUFgCmBJUEFDS19CVVNgCmBCT0FSRF9UUENJMjAwYApgTUxYU1dfUENJYApgU0NTSV9OU1AzMmAKCkFuZCBoZXJlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb246CmBkb19wY2lfYWRkX2R5bmlkYApgbmV3X2lkX3N0b3JlYApgcGNpX21hdGNoX2RldmljZWAKYGRvX3BjaV9tYXRjaF9pZGAKYF9fcGNpX2RldmljZV9wcm9iZWAKYHBjaV9hZGRfZHluaWRgCmBwY2lfbWF0Y2hfaWRgCmBhdGFfZ2VuZXJpY19pbml0X29uZWAKYGFncF9hbWRrN19wcm9iZWAKYGFncF92aWFfcHJvYmVgCmB0cGNpMjAwX3BjaV9wcm9iZWAKYG1seHN3X3BjaV9wcm9iZWAKYG5zcDMyX3Byb2JlYAoKRmluYWxseSwgYHBjaV9tYXRjaF9vbmVfZGV2aWNlYCBoYXMgYmVlbiByZXBsYWNlZCBieSBgcGNpX21hdGNoX29uZV9pZGAsIHdoaWNoIGlzIGlubGluZS4KClJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIHNldCB0aGUgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDIwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVEFfR0VORVJJQyYjMzQ7LAogICAgJiMzNDtBR1AmIzM0OywKICAgICYjMzQ7QUdQX0FNRCYjMzQ7LAogICAgJiMzNDtBR1BfVklBJiMzNDssCiAgICAmIzM0O0lQQUNLX0JVUyYjMzQ7LAogICAgJiMzNDtCT0FSRF9UUENJMjAwJiMzNDssCiAgICAmIzM0O01MWFNXX1BDSSYjMzQ7LAogICAgJiMzNDtTQ1NJX05TUDMyJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fcGNpX2FkZF9keW5pZCYjMzQ7LAogICAgJiMzNDtuZXdfaWRfc3RvcmUmIzM0OywKICAgICYjMzQ7cGNpX21hdGNoX2RldmljZSYjMzQ7LAogICAgJiMzNDtkb19wY2lfbWF0Y2hfaWQmIzM0OywKICAgICYjMzQ7X19wY2lfZGV2aWNlX3Byb2JlJiMzNDssCiAgICAmIzM0O3BjaV9hZGRfZHluaWQmIzM0OywKICAgICYjMzQ7cGNpX21hdGNoX2lkJiMzNDssCiAgICAmIzM0O2F0YV9nZW5lcmljX2luaXRfb25lJiMzNDssCiAgICAmIzM0O2FncF9hbWRrN19wcm9iZSYjMzQ7LAogICAgJiMzNDthZ3BfdmlhX3Byb2JlJiMzNDssCiAgICAmIzM0O3RwY2kyMDBfcGNpX3Byb2JlJiMzNDssCiAgICAmIzM0O21seHN3X3BjaV9wcm9iZSYjMzQ7LAogICAgJiMzNDtuc3AzMl9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUENJIGNvcmUgdG8gcGFzcyBhIGNvcHkgb2YgdGhlIGR5bmFtaWMgcGNpX2RldmljZV9pZCB0byB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCBkeW5hbWljIElELCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBkeW5hbWljIElEIGlzIHJlbW92ZWQgdmlhIHN5c2ZzLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIHRoYXQgd2VyZSBpbmNvcnJlY3RseSBzYXZpbmcgdGhlIHBjaV9kZXZpY2VfaWQgcG9pbnRlciB0byBpbnN0ZWFkIHNhdmUgdGhlIGRyaXZlcl9kYXRhIG9yIG90aGVyIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBQQ0kgY29yZSBhbmQgZHJpdmVycywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYW5kIHByb2JpbmcsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBkeW5hbWljIElEcyB2aWEgc3lzZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUQV9HRU5FUklDJiMzNDssCiAgICAmIzM0O0FHUCYjMzQ7LAogICAgJiMzNDtBR1BfQU1EJiMzNDssCiAgICAmIzM0O0FHUF9WSUEmIzM0OywKICAgICYjMzQ7SVBBQ0tfQlVTJiMzNDssCiAgICAmIzM0O0JPQVJEX1RQQ0kyMDAmIzM0OywKICAgICYjMzQ7TUxYU1dfUENJJiMzNDssCiAgICAmIzM0O1NDU0lfTlNQMzImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19wY2lfYWRkX2R5bmlkJiMzNDssCiAgICAmIzM0O25ld19pZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfZGV2aWNlJiMzNDssCiAgICAmIzM0O2RvX3BjaV9tYXRjaF9pZCYjMzQ7LAogICAgJiMzNDtfX3BjaV9kZXZpY2VfcHJvYmUmIzM0OywKICAgICYjMzQ7cGNpX2FkZF9keW5pZCYjMzQ7LAogICAgJiMzNDtwY2lfbWF0Y2hfaWQmIzM0OywKICAgICYjMzQ7YXRhX2dlbmVyaWNfaW5pdF9vbmUmIzM0OywKICAgICYjMzQ7YWdwX2FtZGs3X3Byb2JlJiMzNDssCiAgICAmIzM0O2FncF92aWFfcHJvYmUmIzM0OywKICAgICYjMzQ7dHBjaTIwMF9wY2lfcHJvYmUmIzM0OywKICAgICYjMzQ7bWx4c3dfcGNpX3Byb2JlJiMzNDssCiAgICAmIzM0O25zcDMyX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgY29yZSB0byBwYXNzIGEgY29weSBvZiB0aGUgZHluYW1pYyBwY2lfZGV2aWNlX2lkIHRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gdGhlIGhlYXAtYWxsb2NhdGVkIGR5bmFtaWMgSUQsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGR5bmFtaWMgSUQgaXMgcmVtb3ZlZCB2aWEgc3lzZnMuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHNhdmluZyB0aGUgcGNpX2RldmljZV9pZCBwb2ludGVyIHRvIGluc3RlYWQgc2F2ZSB0aGUgZHJpdmVyX2RhdGEgb3Igb3RoZXIgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFBDSSBjb3JlIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gUENJIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGR5bmFtaWMgSURzIHZpYSBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ0OjQzLjYxNDIxODE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE5MjUwNjE3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRBX0dFTkVSSUNcIixcbiAgICBcIkFHUFwiLFxuICAgIFwiQUdQX0FNRFwiLFxuICAgIFwiQUdQX1ZJQVwiLFxuICAgIFwiSVBBQ0tfQlVTXCIsXG4gICAgXCJCT0FSRF9UUENJMjAwXCIsXG4gICAgXCJNTFhTV19QQ0lcIixcbiAgICBcIlNDU0lfTlNQMzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19wY2lfYWRkX2R5bmlkXCIsXG4gICAgXCJuZXdfaWRfc3RvcmVcIixcbiAgICBcInBjaV9tYXRjaF9kZXZpY2VcIixcbiAgICBcImRvX3BjaV9tYXRjaF9pZFwiLFxuICAgIFwiX19wY2lfZGV2aWNlX3Byb2JlXCIsXG4gICAgXCJwY2lfYWRkX2R5bmlkXCIsXG4gICAgXCJwY2lfbWF0Y2hfaWRcIixcbiAgICBcImF0YV9nZW5lcmljX2luaXRfb25lXCIsXG4gICAgXCJhZ3BfYW1kazdfcHJvYmVcIixcbiAgICBcImFncF92aWFfcHJvYmVcIixcbiAgICBcInRwY2kyMDBfcGNpX3Byb2JlXCIsXG4gICAgXCJtbHhzd19wY2lfcHJvYmVcIixcbiAgICBcIm5zcDMyX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBDSSBjb3JlIHRvIHBhc3MgYSBjb3B5IG9mIHRoZSBkeW5hbWljIHBjaV9kZXZpY2VfaWQgdG8gdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCBkeW5hbWljIElELCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBkeW5hbWljIElEIGlzIHJlbW92ZWQgdmlhIHN5c2ZzLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIHRoYXQgd2VyZSBpbmNvcnJlY3RseSBzYXZpbmcgdGhlIHBjaV9kZXZpY2VfaWQgcG9pbnRlciB0byBpbnN0ZWFkIHNhdmUgdGhlIGRyaXZlcl9kYXRhIG9yIG90aGVyIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBQQ0kgY29yZSBhbmQgZHJpdmVycywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYW5kIHByb2JpbmcsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBkeW5hbWljIElEcyB2aWEgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ0OjQzLjYxNDIyMzYzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1MzQ0OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNThiZTU4MTlmZmZkZDVmM2MxMWRkMWEyNmFhNTJkY2E1MGUwMjQwOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDIwOjQ0OjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jXFxuaW5kZXggZTcwYjZjMDg5Y2YxNzkuLjE4ZWE3NDBjYTU4MjkzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmNcXG4rKysgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jXFxuQEAgLTUxLDExICs1MSwxMSBAQCBlbnVtIHtcXG4gc3RhdGljIGludCBnZW5lcmljX3NldF9tb2RlKHN0cnVjdCBhdGFfbGluayAqbGluaywgc3RydWN0IGF0YV9kZXZpY2UgKip1bnVzZWQpXFxuIHtcXG4gXFx0c3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstXFx1MDAzZWFwO1xcbi1cXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQgPSBhcC1cXHUwMDNlaG9zdC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXHR1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpYXAtXFx1MDAzZWhvc3QtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFx0aW50IGRtYV9lbmFibGVkID0gMDtcXG4gXFx0c3RydWN0IGF0YV9kZXZpY2UgKmRldjtcXG4gXFxuLVxcdGlmIChpZC1cXHUwMDNlZHJpdmVyX2RhdGEgXFx1MDAyNiBBVEFfR0VOX0ZPUkNFX0RNQSkge1xcbitcXHRpZiAoZHJpdmVyX2RhdGEgXFx1MDAyNiBBVEFfR0VOX0ZPUkNFX0RNQSkge1xcbiBcXHRcXHRkbWFfZW5hYmxlZCA9IDB4ZmY7XFxuIFxcdH0gZWxzZSBpZiAoYXAtXFx1MDAzZWlvYWRkci5ibWRtYV9hZGRyKSB7XFxuIFxcdFxcdC8qIEJpdHMgNSBhbmQgNiBpbmRpY2F0ZSBpZiBETUEgaXMgYWN0aXZlIG9uIG1hc3Rlci9zbGF2ZSAqL1xcbkBAIC0yMDYsNyArMjA2LDcgQEAgc3RhdGljIGludCBhdGFfZ2VuZXJpY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZFxcbiBcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdFxcdHBjaW1fcGluX2RldmljZShkZXYpO1xcbiBcXHR9XFxuLVxcdHJldHVybiBhdGFfcGNpX2JtZG1hX2luaXRfb25lKGRldiwgcHBpLCBcXHUwMDI2Z2VuZXJpY19zaHQsICh2b2lkICopaWQsIDApO1xcbitcXHRyZXR1cm4gYXRhX3BjaV9ibWRtYV9pbml0X29uZShkZXYsIHBwaSwgXFx1MDAyNmdlbmVyaWNfc2h0LCAodm9pZCAqKWlkLVxcdTAwM2Vkcml2ZXJfZGF0YSwgMCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGFfZ2VuZXJpY1tdID0ge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jXFxuaW5kZXggODk4ZmYzMGZmZDQ2YjIuLjRkMjAxZTcxYzUxNzcyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jXFxuKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmNcXG5AQCAtMzg3LDM3ICszODcsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciBhbWRfaXJvbmdhdGVfZHJpdmVyID0ge1xcbiBcXHQuYWdwX3R5cGVfdG9fbWFza190eXBlICA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlLFxcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBhZ3BfZGV2aWNlX2lkcyBhbWRfYWdwX2RldmljZV9pZHNbXSA9XFxuLXtcXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMDYsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJJcm9uZ2F0ZVxcXCIsXFxuLVxcdH0sXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDBFLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiNzYxXFxcIixcXG4tXFx0fSxcXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEMsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCI3NjBNUFxcXCIsXFxuLVxcdH0sXFxuLVxcdHsgfSwgLyogZHVtbXkgZmluYWwgZW50cnksIGFsd2F5cyBwcmVzZW50ICovXFxuLX07XFxuLVxcbiBzdGF0aWMgaW50IGFncF9hbWRrN19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4ge1xcbiBcXHRzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7XFxuIFxcdHU4IGNhcF9wdHI7XFxuLVxcdGludCBqO1xcbiBcXG4gXFx0Y2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApO1xcbiBcXHRpZiAoIWNhcF9wdHIpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0aiA9IGVudCAtIGFncF9hbWRrN19wY2lfdGFibGU7XFxuLVxcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJBTUQgJXMgY2hpcHNldFxcXFxuXFxcIixcXG4tXFx0XFx0IGFtZF9hZ3BfZGV2aWNlX2lkc1tqXS5jaGlwc2V0X25hbWUpO1xcbitcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQU1EICVzIGNoaXBzZXRcXFxcblxcXCIsIChjb25zdCBjaGFyICopZW50LVxcdTAwM2Vkcml2ZXJfZGF0YSk7XFxuIFxcbiBcXHRicmlkZ2UgPSBhZ3BfYWxsb2NfYnJpZGdlKCk7XFxuIFxcdGlmICghYnJpZGdlKVxcbkBAIC00OTIsNyArNDcyLDYgQEAgc3RhdGljIGludCBhZ3BfYW1kazdfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIGFtZF9pcm9uZ2F0ZV9kcml2ZXIuY29uZmlndXJlKCk7XFxuIH1cXG4gXFxuLS8qIG11c3QgYmUgdGhlIHNhbWUgb3JkZXIgYXMgbmFtZSB0YWJsZSBhYm92ZSAqL1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xcbiBcXHR7XFxuIFxcdC5jbGFzc1xcdFxcdD0gKFBDSV9DTEFTU19CUklER0VfSE9TVCBcXHUwMDNjXFx1MDAzYyA4KSxcXG5AQCAtNTAxLDYgKzQ4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfYW1kazdfcGNpX3RhYmxlW10gPSB7XFxuIFxcdC5kZXZpY2VcXHRcXHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwNixcXG4gXFx0LnN1YnZlbmRvclxcdD0gUENJX0FOWV9JRCxcXG4gXFx0LnN1YmRldmljZVxcdD0gUENJX0FOWV9JRCxcXG4rXFx0LmRyaXZlcl9kYXRhXFx0PSAoa2VybmVsX3Vsb25nX3QpXFxcIklyb25nYXRlXFxcIixcXG4gXFx0fSxcXG4gXFx0e1xcbiBcXHQuY2xhc3NcXHRcXHQ9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgXFx1MDAzY1xcdTAwM2MgOCksXFxuQEAgLTUwOSw2ICs0ODksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xcbiBcXHQuZGV2aWNlXFx0XFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEUsXFxuIFxcdC5zdWJ2ZW5kb3JcXHQ9IFBDSV9BTllfSUQsXFxuIFxcdC5zdWJkZXZpY2VcXHQ9IFBDSV9BTllfSUQsXFxuK1xcdC5kcml2ZXJfZGF0YVxcdD0gKGtlcm5lbF91bG9uZ190KVxcXCI3NjFcXFwiLFxcbiBcXHR9LFxcbiBcXHR7XFxuIFxcdC5jbGFzc1xcdFxcdD0gKFBDSV9DTEFTU19CUklER0VfSE9TVCBcXHUwMDNjXFx1MDAzYyA4KSxcXG5AQCAtNTE3LDYgKzQ5OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfYW1kazdfcGNpX3RhYmxlW10gPSB7XFxuIFxcdC5kZXZpY2VcXHRcXHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQyxcXG4gXFx0LnN1YnZlbmRvclxcdD0gUENJX0FOWV9JRCxcXG4gXFx0LnN1YmRldmljZVxcdD0gUENJX0FOWV9JRCxcXG4rXFx0LmRyaXZlcl9kYXRhXFx0PSAoa2VybmVsX3Vsb25nX3QpXFxcIjc2ME1QXFxcIixcXG4gXFx0fSxcXG4gXFx0eyB9XFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmNcXG5pbmRleCA4YjE5YTVkMWEwOWI0OS4uYWIzYjczZGQwODBhZmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmNcXG4rKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuY1xcbkBAIC0yMjEsMjA0ICsyMjEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIHZpYV9kcml2ZXIgPSB7XFxuIFxcdC5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IGFncF9kZXZpY2VfaWRzIHZpYV9hZ3BfZGV2aWNlX2lkc1tdID1cXG4te1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5N18wLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiQXBvbGxvIFZQM1xcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8wLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiQXBvbGxvIE1WUDNcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJBcG9sbG8gTVZQNFxcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHQvKiBWVDg2MDEgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJBcG9sbG8gUHJvTWVkaWEvUExFMTMzVGFcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0LyogVlQ4MkM2OTNBIC8gVlQyOEM2OTRUICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJBcG9sbG8gUHJvIDEzM1xcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIktYMTMzXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFZUODYzMyAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg2MzNfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlBybyAyNjZcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV9YTjI2NixcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIkFwb2xsbyBQcm8yNjZcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0LyogVlQ4MzYxICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2MSxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIktMRTEzM1xcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHQvKiBWVDgzNjUgLyBWVDgzNjIgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJUd2lzdGVyLUsvS1QxMzN4L0tNMTMzXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFZUODc1M0EgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NzUzXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJQNFgyNjZcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0LyogVlQ4MzY2ICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2N18wLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiS1QyNjYvS1kyNjZ4L0tUMzMzXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFZUODYzMyAoZm9yIEN1TWluZS8gQ2VsZXJvbikgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJQcm8yNjZUXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIEtNMjY2IC8gUE0yNjYgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2NixcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlBNMjY2L0tNMjY2XFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIENMRTI2NiAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg2MlhfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIkNMRTI2NlxcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIktUNDAwL0tUNDAwQS9LVDYwMFxcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHQvKiBWVDg2MDQgLyBWVDg2MDUgLyBWVDg2MDNcXG4tXFx0ICogKEFwb2xsbyBQcm8xMzNBIGNoaXBzZXQgd2l0aCBTMyBTYXZhZ2U0KSAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlByb1NhdmFnZSBQTTEzMy9QTDEzMy9QTjEzM1xcXCJcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFA0TTI2NngvUDROMjY2ICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODcwM181MV8wLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiUDRNMjY2eC9QNE4yNjZcXFwiLFxcbi1cXHR9LFxcbi1cXG4tXFx0LyogVlQ4NzU0ICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODc1NENfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlBUODAwXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFA0WDYwMCAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3NjNfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlA0WDYwMFxcXCJcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIEtNNDAwICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODM3OF8wLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiS000MDAvS000MDBBXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFBUODgwICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfUFQ4ODAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJQVDg4MFxcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHQvKiBQVDg4MCBVbHRyYSAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BUODgwVUxUUkEsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJQVDg4MCBVbHRyYVxcXCIsXFxuLVxcdH0sXFxuLVxcbi1cXHQvKiBQVDg5MCAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlBUODkwXFxcIixcXG4tXFx0fSxcXG4tXFxuLVxcdC8qIFBNODAwL1BOODAwL1BNODgwL1BOODgwICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlBNODAwL1BOODAwL1BNODgwL1BOODgwXFxcIixcXG4tXFx0fSxcXG4tXFx0LyogS1Q4ODAgKi9cXG4tXFx0e1xcbi1cXHRcXHQuZGV2aWNlX2lkXFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzAsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJLVDg4MFxcXCIsXFxuLVxcdH0sXFxuLVxcdC8qIEtUeHh4L1B4OHh4ICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfODNfODdYWF8xLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lXFx0PSBcXFwiVlQ4M3h4L1ZUODd4eC9LVHh4eC9QeDh4eFxcXCIsXFxuLVxcdH0sXFxuLVxcdC8qIFA0TTgwMCAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWRcXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMCxcXG4tXFx0XFx0LmNoaXBzZXRfbmFtZVxcdD0gXFxcIlA0TTgwMFxcXCIsXFxuLVxcdH0sXFxuLVxcdC8qIFA0TTgwMENFICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZFxcdD0gUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWVcXHQ9IFxcXCJWVDMzMTRcXFwiLFxcbi1cXHR9LFxcbi1cXHQvKiBWVDMzMjQgLyBDWDcwMCAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0LFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lICAgPSBcXFwiQ1g3MDBcXFwiLFxcbi1cXHR9LFxcbi1cXHQvKiBWVDMzMzYgLSB0aGlzIGlzIGEgY2hpcHNldCBmb3IgQU1EIEF0aGxvbi9LOCBDUFUuIER1ZSB0byBLOCdzIHVuaXF1ZVxcbi1cXHQgKiBhcmNoaXRlY3R1cmUsIHRoZSBBR1AgcmVzb3VyY2UgYW5kIGJlaGF2aW9yIGFyZSBkaWZmZXJlbnQgZnJvbVxcbi1cXHQgKiB0aGUgdHJhZGl0aW9uYWwgQUdQIHdoaWNoIHJlc2lkZXMgb25seSBpbiBjaGlwc2V0LiBBR1AgaXMgdXNlZFxcbi1cXHQgKiBieSAzRCBkcml2ZXIgd2hpY2ggd2Fzbid0IGF2YWlsYWJsZSBmb3IgdGhlIFZUMzMzNiBhbmQgVlQzMzY0XFxuLVxcdCAqIGdlbmVyYXRpb24gdW50aWwgbm93LiAgVW5mb3J0dW5hdGVseSwgYnkgdGVzdGluZywgVlQzMzY0IHdvcmtzXFxuLVxcdCAqIGJ1dCBWVDMzMzYgZG9lc24ndC4gLSBleHBsYW5hdGlvbiBmcm9tIHZpYSwganVzdCBsZWF2ZSB0aGlzIGFzXFxuLVxcdCAqIGFzIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uXFxuLVxcdCAqL1xcbi0jaWYgMFxcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lICAgPSBcXFwiVlQzMzM2XFxcIixcXG4tXFx0fSxcXG4tI2VuZGlmXFxuLVxcdC8qIFA0TTg5MCAqL1xcbi1cXHR7XFxuLVxcdFxcdC5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfUDRNODkwLFxcbi1cXHRcXHQuY2hpcHNldF9uYW1lICAgPSBcXFwiUDRNODkwXFxcIixcXG4tXFx0fSxcXG4tXFx0LyogUDRNOTAwICovXFxuLVxcdHtcXG4tXFx0XFx0LmRldmljZV9pZCAgPSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzNjQsXFxuLVxcdFxcdC5jaGlwc2V0X25hbWUgICA9IFxcXCJQNE05MDBcXFwiLFxcbi1cXHR9LFxcbi1cXHR7IH0sIC8qIGR1bW15IGZpbmFsIGVudHJ5LCBhbHdheXMgcHJlc2VudCAqL1xcbi19O1xcbi1cXG4gXFxuIC8qXFxuICAqIFZJQSdzIEFHUDMgY2hpcHNldHMgZG8gbWFnaWNrIHRvIHB1dCB0aGUgQUdQIGJyaWRnZSBjb21wbGlhbnRcXG5AQCAtNDM3LDE3ICsyMzksMTQgQEAgc3RhdGljIHZvaWQgY2hlY2tfdmlhX2FncDMgKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSlcXG4gXFxuIHN0YXRpYyBpbnQgYWdwX3ZpYV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4ge1xcbi1cXHRzdHJ1Y3QgYWdwX2RldmljZV9pZHMgKmRldnMgPSB2aWFfYWdwX2RldmljZV9pZHM7XFxuIFxcdHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZTtcXG4tXFx0aW50IGogPSAwO1xcbiBcXHR1OCBjYXBfcHRyO1xcbiBcXG4gXFx0Y2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApO1xcbiBcXHRpZiAoIWNhcF9wdHIpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0aiA9IGVudCAtIGFncF92aWFfcGNpX3RhYmxlO1xcbi1cXHRwcmludGsgKEtFUk5fSU5GTyBQRlggXFxcIkRldGVjdGVkIFZJQSAlcyBjaGlwc2V0XFxcXG5cXFwiLCBkZXZzW2pdLmNoaXBzZXRfbmFtZSk7XFxuK1xcdGRldl9pbmZvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJEZXRlY3RlZCBWSUEgJXMgY2hpcHNldFxcXFxuXFxcIiwgKGNvbnN0IGNoYXIgKillbnQtXFx1MDAzZWRyaXZlcl9kYXRhKTtcXG4gXFxuIFxcdGJyaWRnZSA9IGFncF9hbGxvY19icmlkZ2UoKTtcXG4gXFx0aWYgKCFicmlkZ2UpXFxuQEAgLTUwMSw5ICszMDAsOCBAQCBzdGF0aWMgaW50IGFncF92aWFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLS8qIG11c3QgYmUgdGhlIHNhbWUgb3JkZXIgYXMgbmFtZSB0YWJsZSBhYm92ZSAqL1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX3ZpYV9wY2lfdGFibGVbXSA9IHtcXG4tI2RlZmluZSBJRCh4KSBcXFxcXFxuKyNkZWZpbmUgSUQoeCwgbmFtZSkgXFxcXFxcbiBcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQuY2xhc3NcXHRcXHQ9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgXFx1MDAzY1xcdTAwM2MgOCksXFx0XFxcXFxcbiBcXHQuY2xhc3NfbWFza1xcdD0gfjAsXFx0XFx0XFx0XFx0XFxcXFxcbkBAIC01MTEsMzkgKzMwOSw3NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX3ZpYV9wY2lfdGFibGVbXSA9IHtcXG4gXFx0LmRldmljZVxcdFxcdD0geCxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC5zdWJ2ZW5kb3JcXHQ9IFBDSV9BTllfSUQsXFx0XFx0XFx0XFxcXFxcbiBcXHQuc3ViZGV2aWNlXFx0PSBQQ0lfQU5ZX0lELFxcdFxcdFxcdFxcXFxcXG4rXFx0LmRyaXZlcl9kYXRhXFx0PSAoa2VybmVsX3Vsb25nX3QpbmFtZSxcXHRcXHRcXFxcXFxuIFxcdH1cXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OThfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDFfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzY5MV8wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3MV8wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYzM18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfWE4yNjYpLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYxKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM2M18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc1M18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM2N18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODY1M18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfWE0yNjYpLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc3XzApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjA1XzApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzAzXzUxXzApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzU0Q18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc2M18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3OF8wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODApLFxcbi1cXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MFVMVFJBKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc4M18wKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzMyNjlfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMCksXFxuLVxcdElEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0KSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODkwKSxcXG4tXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0KSxcXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzAsIFxcXCJBcG9sbG8gVlAzXFxcIiksXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8wLCBcXFwiQXBvbGxvIE1WUDNcXFwiKSxcXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODUwMV8wLCBcXFwiQXBvbGxvIE1WUDRcXFwiKSxcXG4rXFx0LyogVlQ4NjAxICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDFfMCwgXFxcIkFwb2xsbyBQcm9NZWRpYS9QTEUxMzNUYVxcXCIpLFxcbitcXHQvKiBWVDgyQzY5M0EgLyBWVDI4QzY5NFQgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAsIFxcXCJBcG9sbG8gUHJvIDEzM1xcXCIpLFxcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzAsIFxcXCJLWDEzM1xcXCIpLFxcbitcXHQvKiBWVDg2MzMgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYzM18wLCBcXFwiUHJvIDI2NlxcXCIpLFxcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9YTjI2NiwgXFxcIkFwb2xsbyBQcm8yNjZcXFwiKSxcXG4rXFx0LyogVlQ4MzYxICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjEsIFxcXCJLTEUxMzNcXFwiKSxcXG4rXFx0LyogVlQ4MzY1IC8gVlQ4MzYyICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjNfMCwgXFxcIlR3aXN0ZXItSy9LVDEzM3gvS00xMzNcXFwiKSxcXG4rXFx0LyogVlQ4NzUzQSAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzUzXzAsIFxcXCJQNFgyNjZcXFwiKSxcXG4rXFx0LyogVlQ4MzY2ICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjdfMCwgXFxcIktUMjY2L0tZMjY2eC9LVDMzM1xcXCIpLFxcbitcXHQvKiBWVDg2MzMgKGZvciBDdU1pbmUvIENlbGVyb24pICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2NTNfMCwgXFxcIlBybzI2NlRcXFwiKSxcXG4rXFx0LyogS00yNjYgLyBQTTI2NiAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2NiwgXFxcIlBNMjY2L0tNMjY2XFxcIiksXFxuK1xcdC8qIENMRTI2NiAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzAsIFxcXCJDTEUyNjZcXFwiKSxcXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3N18wLCBcXFwiS1Q0MDAvS1Q0MDBBL0tUNjAwXFxcIiksXFxuK1xcdC8qIFZUODYwNCAvIFZUODYwNSAvIFZUODYwMyAoQXBvbGxvIFBybzEzM0EgY2hpcHNldCB3aXRoIFMzIFNhdmFnZTQpICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCwgXFxcIlByb1NhdmFnZSBQTTEzMy9QTDEzMy9QTjEzM1xcXCIpLFxcbitcXHQvKiBQNE0yNjZ4L1A0TjI2NiAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzAzXzUxXzAsIFxcXCJQNE0yNjZ4L1A0TjI2NlxcXCIpLFxcbitcXHQvKiBWVDg3NTQgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODc1NENfMCwgXFxcIlBUODAwXFxcIiksXFxuK1xcdC8qIFA0WDYwMCAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzYzXzAsIFxcXCJQNFg2MDBcXFwiKSxcXG4rXFx0LyogS000MDAgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3OF8wLCBcXFwiS000MDAvS000MDBBXFxcIiksXFxuK1xcdC8qIFBUODgwICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBX1BUODgwLCBcXFwiUFQ4ODBcXFwiKSxcXG4rXFx0LyogUFQ4ODAgVWx0cmEgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSwgXFxcIlBUODgwIFVsdHJhXFxcIiksXFxuK1xcdC8qIFBUODkwICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCwgXFxcIlBUODkwXFxcIiksXFxuK1xcdC8qIFBNODAwL1BOODAwL1BNODgwL1BOODgwICovXFxuK1xcdElEKFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAsIFxcXCJQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MFxcXCIpLFxcbitcXHQvKiBLVDg4MCAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzAsIFxcXCJLVDg4MFxcXCIpLFxcbitcXHQvKiBLVHh4eC9QeDh4eCAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84M184N1hYXzEsIFxcXCJWVDgzeHgvVlQ4N3h4L0tUeHh4L1B4OHh4XFxcIiksXFxuK1xcdC8qIFA0TTgwMCAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjk2XzAsIFxcXCJQNE04MDBcXFwiKSxcXG4rXFx0LyogUDRNODAwQ0UgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UsIFxcXCJWVDMzMTRcXFwiKSxcXG4rXFx0LyogVlQzMzI0IC8gQ1g3MDAgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzI0LCBcXFwiQ1g3MDBcXFwiKSxcXG4rXFx0LyogVlQzMzM2IC0gdGhpcyBpcyBhIGNoaXBzZXQgZm9yIEFNRCBBdGhsb24vSzggQ1BVLiBEdWUgdG8gSzgncyB1bmlxdWVcXG4rXFx0ICogYXJjaGl0ZWN0dXJlLCB0aGUgQUdQIHJlc291cmNlIGFuZCBiZWhhdmlvciBhcmUgZGlmZmVyZW50IGZyb21cXG4rXFx0ICogdGhlIHRyYWRpdGlvbmFsIEFHUCB3aGljaCByZXNpZGVzIG9ubHkgaW4gY2hpcHNldC4gQUdQIGlzIHVzZWRcXG4rXFx0ICogYnkgM0QgZHJpdmVyIHdoaWNoIHdhc24ndCBhdmFpbGFibGUgZm9yIHRoZSBWVDMzMzYgYW5kIFZUMzM2NFxcbitcXHQgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3Jrc1xcbitcXHQgKiBidXQgVlQzMzM2IGRvZXNuJ3QuIC0gZXhwbGFuYXRpb24gZnJvbSB2aWEsIGp1c3QgbGVhdmUgdGhpcyBhc1xcbitcXHQgKiBhIHBsYWNlaG9sZGVyIHRvIGF2b2lkIGZ1dHVyZSBwYXRjaGVzIGFkZGluZyBpdCBiYWNrIGluLlxcbitcXHQgKi9cXG4rI2lmIDBcXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LCBcXFwiVlQzMzM2XFxcIiksXFxuKyNlbmRpZlxcbitcXHQvKiBQNE04OTAgKi9cXG4rXFx0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODkwLCBcXFwiUDRNODkwXFxcIiksXFxuK1xcdC8qIFA0TTkwMCAqL1xcbitcXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzNjQsIFxcXCJQNE05MDBcXFwiKSxcXG4gXFx0eyB9XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuYyBiL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jXFxuaW5kZXggMDVkY2I2Njc1Y2Q2NjEuLjFjZjUxZjc2MzI5MzJiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jXFxuKysrIGIvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmNcXG5AQCAtNTYyLDcgKzU2Miw2IEBAIHN0YXRpYyBpbnQgdHBjaTIwMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcbiBcXHQvKiBTYXZlIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgKi9cXG4gXFx0dHBjaTIwMC1cXHUwMDNlaW5mby1cXHUwMDNlcGRldiA9IHBkZXY7XFxuLVxcdHRwY2kyMDAtXFx1MDAzZWluZm8tXFx1MDAzZWlkX3RhYmxlID0gKHN0cnVjdCBwY2lfZGV2aWNlX2lkICopaWQ7XFxuIFxcbiBcXHQvKiByZWdpc3RlciB0aGUgZGV2aWNlIGFuZCBpbml0aWFsaXplIGl0ICovXFxuIFxcdHJldCA9IHRwY2kyMDBfaW5zdGFsbCh0cGNpMjAwKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmggYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaFxcbmluZGV4IGU3OWFjNjRhYmNmZmFjLi5hMmJmMzEyNTc5NGI3YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaFxcbisrKyBiL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oXFxuQEAgLTE0NSw3ICsxNDUsNiBAQCBzdHJ1Y3QgdHBjaTIwMF9zbG90IHtcXG4gICovXFxuIHN0cnVjdCB0cGNpMjAwX2luZm9zIHtcXG4gXFx0c3RydWN0IHBjaV9kZXZcXHRcXHRcXHQqcGRldjtcXG4tXFx0c3RydWN0IHBjaV9kZXZpY2VfaWRcXHRcXHQqaWRfdGFibGU7XFxuIFxcdHN0cnVjdCB0cGNpMjAwX3JlZ3MgX19pb21lbVxcdCppbnRlcmZhY2VfcmVncztcXG4gXFx0dm9pZCBfX2lvbWVtXFx0XFx0XFx0KmNmZ19yZWdzO1xcbiBcXHRzdHJ1Y3QgaXBhY2tfYnVzX2RldmljZVxcdFxcdCppcGFja19idXM7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmNcXG5pbmRleCAwZGE4NWQzNjY0N2Q5MS4uYmZlMzI2OGRmZGMxN2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuY1xcbkBAIC0xMzAsNyArMTMwLDYgQEAgc3RydWN0IG1seHN3X3BjaSB7XFxuIFxcdFxcdH0gY29tcDtcXG4gXFx0fSBjbWQ7XFxuIFxcdHN0cnVjdCBtbHhzd19idXNfaW5mbyBidXNfaW5mbztcXG4tXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xcbiBcXHRlbnVtIG1seHN3X3BjaV9jcWVfdiBtYXhfY3FlX3ZlcjsgLyogTWF4aW1hbCBzdXBwb3J0ZWQgQ1FFIHZlcnNpb24gKi9cXG4gXFx0dTggbnVtX2NxczsgLyogTnVtYmVyIG9mIENRcyAqL1xcbiBcXHR1OCBudW1fc2RxczsgLyogTnVtYmVyIG9mIFNEUXMgKi9cXG5AQCAtMTc2OCw3ICsxNzY3LDYgQEAgc3RhdGljIHZvaWQgbWx4c3dfcGNpX21ib3hfZnJlZShzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSxcXG4tXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCxcXG4gXFx0XFx0XFx0XFx0ICAgIHUzMiAqcF9zeXNfc3RhdHVzKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kO1xcbkBAIC0xODM5LDcgKzE4MzcsNyBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9yZXNldF9zdyhzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2kpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG4tbWx4c3dfcGNpX3Jlc2V0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbittbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpKVxcbiB7XFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWx4c3dfcGNpLVxcdTAwM2VwZGV2O1xcbiBcXHRib29sIHBjaV9yZXNldF9zYnJfc3VwcG9ydGVkID0gZmFsc2U7XFxuQEAgLTE4NDgsNyArMTg0Niw3IEBAIG1seHN3X3BjaV9yZXNldChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0dTMyIHN5c19zdGF0dXM7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCBpZCwgXFx1MDAyNnN5c19zdGF0dXMpO1xcbitcXHRlcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCBcXHUwMDI2c3lzX3N0YXR1cyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWNoIHN5c3RlbSByZWFkeSBzdGF0dXMgYmVmb3JlIHJlc2V0LiBTdGF0dXMgaXMgMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0c3lzX3N0YXR1cyk7XFxuQEAgLTE4ODAsNyArMTg3OCw3IEBAIG1seHN3X3BjaV9yZXNldChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGVyciA9IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChtbHhzd19wY2ksIGlkLCBcXHUwMDI2c3lzX3N0YXR1cyk7XFxuK1xcdGVyciA9IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChtbHhzd19wY2ksIFxcdTAwMjZzeXNfc3RhdHVzKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVhY2ggc3lzdGVtIHJlYWR5IHN0YXR1cyBhZnRlciByZXNldC4gU3RhdHVzIGlzIDB4JXhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHN5c19zdGF0dXMpO1xcbkBAIC0xOTMyLDcgKzE5MzAsNyBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9pbml0KHZvaWQgKmJ1c19wcml2LCBzdHJ1Y3QgbWx4c3dfY29yZSAqbWx4c3dfY29yZSxcXG4gXFx0aWYgKCFtYm94KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGVyciA9IG1seHN3X3BjaV9yZXNldChtbHhzd19wY2ksIG1seHN3X3BjaS1cXHUwMDNlaWQpO1xcbitcXHRlcnIgPSBtbHhzd19wY2lfcmVzZXQobWx4c3dfcGNpKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfcmVzZXQ7XFxuIFxcbkBAIC0yNDY0LDcgKzI0NjIsNiBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiBcXHRtbHhzd19wY2ktXFx1MDAzZWJ1c19pbmZvLmRldmljZV9uYW1lID0gcGNpX25hbWUobWx4c3dfcGNpLVxcdTAwM2VwZGV2KTtcXG4gXFx0bWx4c3dfcGNpLVxcdTAwM2VidXNfaW5mby5kZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiBcXHRtbHhzd19wY2ktXFx1MDAzZWJ1c19pbmZvLnJlYWRfY2xvY2tfY2FwYWJsZSA9IHRydWU7XFxuLVxcdG1seHN3X3BjaS1cXHUwMDNlaWQgPSBpZDtcXG4gXFxuIFxcdGVyciA9IG1seHN3X2NvcmVfYnVzX2RldmljZV9yZWdpc3RlcihcXHUwMDI2bWx4c3dfcGNpLVxcdTAwM2VidXNfaW5mbyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWx4c3dfcGNpX2J1cywgbWx4c3dfcGNpLCBmYWxzZSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXFxuaW5kZXggZjM2Nzc4ZTYyYWMxYTUuLjQ4NTEwNjFiYWJjYjVkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xcbkBAIC0yOSw2ICsyOSw0NyBAQCBzdHJ1Y3QgcGNpX2R5bmlkIHtcXG4gXFx0c3RydWN0IHBjaV9kZXZpY2VfaWQgaWQ7XFxuIH07XFxuIFxcbisvKipcXG4rICogZG9fcGNpX2FkZF9keW5pZCAtIGFkZCBhIG5ldyBQQ0kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyIGFuZCByZS1wcm9iZSBkZXZpY2VzXFxuKyAqIEBkcnY6IHRhcmdldCBwY2kgZHJpdmVyXFxuKyAqIEBpZDogSUQgdG8gYmUgYWRkZWRcXG4rICogQGNoZWNrX2R1cDogd2hldGhlciB0byBjaGVjayBpZiBtYXRjaGluZyBJRCBpcyBhbHJlYWR5IHByZXNlbnRcXG4rICpcXG4rICogQWRkcyBhIG5ldyBkeW5hbWljIHBjaSBkZXZpY2UgSUQgdG8gdGhpcyBkcml2ZXIgYW5kIGNhdXNlcyB0aGVcXG4rICogZHJpdmVyIHRvIHByb2JlIGZvciBhbGwgZGV2aWNlcyBhZ2Fpbi4gIEBkcnYgbXVzdCBoYXZlIGJlZW5cXG4rICogcmVnaXN0ZXJlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXFxuKyAqXFxuKyAqIENPTlRFWFQ6XFxuKyAqIERvZXMgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uLlxcbisgKlxcbisgKiBSRVRVUk5TOlxcbisgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbisgKi9cXG4rc3RhdGljIGludCBkb19wY2lfYWRkX2R5bmlkKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgYm9vbCBjaGVja19kdXApXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9keW5pZCAqZHluaWQsICpleGlzdGluZ19keW5pZDtcXG4rXFxuK1xcdGR5bmlkID0ga3phbGxvY19vYmooKmR5bmlkKTtcXG4rXFx0aWYgKCFkeW5pZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRkeW5pZC1cXHUwMDNlaWQgPSAqaWQ7XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZkcnYtXFx1MDAzZWR5bmlkcy5sb2NrKSB7XFxuK1xcdFxcdGlmIChjaGVja19kdXApIHtcXG4rXFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShleGlzdGluZ19keW5pZCwgXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxpc3QsIG5vZGUpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHBjaV9tYXRjaF9vbmVfaWQoXFx1MDAyNmV4aXN0aW5nX2R5bmlkLVxcdTAwM2VpZCwgaWQpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGtmcmVlKGR5bmlkKTtcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmR5bmlkLVxcdTAwM2Vub2RlLCBcXHUwMDI2ZHJ2LVxcdTAwM2VkeW5pZHMubGlzdCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBkcml2ZXJfYXR0YWNoKFxcdTAwMjZkcnYtXFx1MDAzZWRyaXZlcik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBwY2lfYWRkX2R5bmlkIC0gYWRkIGEgbmV3IFBDSSBkZXZpY2UgSUQgdG8gdGhpcyBkcml2ZXIgYW5kIHJlLXByb2JlIGRldmljZXNcXG4gICogQGRydjogdGFyZ2V0IHBjaSBkcml2ZXJcXG5AQCAtNTYsMjUgKzk3LDE3IEBAIGludCBwY2lfYWRkX2R5bmlkKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsXFxuIFxcdFxcdCAgdW5zaWduZWQgaW50IGNsYXNzLCB1bnNpZ25lZCBpbnQgY2xhc3NfbWFzayxcXG4gXFx0XFx0ICB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKVxcbiB7XFxuLVxcdHN0cnVjdCBwY2lfZHluaWQgKmR5bmlkO1xcbi1cXG4tXFx0ZHluaWQgPSBremFsbG9jX29iaigqZHluaWQpO1xcbi1cXHRpZiAoIWR5bmlkKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFxuLVxcdGR5bmlkLVxcdTAwM2VpZC52ZW5kb3IgPSB2ZW5kb3I7XFxuLVxcdGR5bmlkLVxcdTAwM2VpZC5kZXZpY2UgPSBkZXZpY2U7XFxuLVxcdGR5bmlkLVxcdTAwM2VpZC5zdWJ2ZW5kb3IgPSBzdWJ2ZW5kb3I7XFxuLVxcdGR5bmlkLVxcdTAwM2VpZC5zdWJkZXZpY2UgPSBzdWJkZXZpY2U7XFxuLVxcdGR5bmlkLVxcdTAwM2VpZC5jbGFzcyA9IGNsYXNzO1xcbi1cXHRkeW5pZC1cXHUwMDNlaWQuY2xhc3NfbWFzayA9IGNsYXNzX21hc2s7XFxuLVxcdGR5bmlkLVxcdTAwM2VpZC5kcml2ZXJfZGF0YSA9IGRyaXZlcl9kYXRhO1xcbi1cXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZkcnYtXFx1MDAzZWR5bmlkcy5sb2NrKTtcXG4tXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZHluaWQtXFx1MDAzZW5vZGUsIFxcdTAwMjZkcnYtXFx1MDAzZWR5bmlkcy5saXN0KTtcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxvY2spO1xcbi1cXG4tXFx0cmV0dXJuIGRyaXZlcl9hdHRhY2goXFx1MDAyNmRydi1cXHUwMDNlZHJpdmVyKTtcXG4rXFx0c3RydWN0IHBjaV9kZXZpY2VfaWQgaWQgPSB7XFxuK1xcdFxcdC52ZW5kb3IgPSB2ZW5kb3IsXFxuK1xcdFxcdC5kZXZpY2UgPSBkZXZpY2UsXFxuK1xcdFxcdC5zdWJ2ZW5kb3IgPSBzdWJ2ZW5kb3IsXFxuK1xcdFxcdC5zdWJkZXZpY2UgPSBzdWJkZXZpY2UsXFxuK1xcdFxcdC5jbGFzcyA9IGNsYXNzLFxcbitcXHRcXHQuY2xhc3NfbWFzayA9IGNsYXNzX21hc2ssXFxuK1xcdFxcdC5kcml2ZXJfZGF0YSA9IGRyaXZlcl9kYXRhLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIGRvX3BjaV9hZGRfZHluaWQoZHJ2LCBcXHUwMDI2aWQsIGZhbHNlKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfYWRkX2R5bmlkKTtcXG4gXFxuQEAgLTkwLDYgKzEyMywzMCBAQCBzdGF0aWMgdm9pZCBwY2lfZnJlZV9keW5pZHMoc3RydWN0IHBjaV9kcml2ZXIgKmRydilcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxvY2spO1xcbiB9XFxuIFxcbisvKipcXG4rICogZG9fcGNpX21hdGNoX2lkIC0gU2VlIGlmIGEgUENJIElEIG1hdGNoZXMgYSBnaXZlbiBwY2lfaWQgdGFibGVcXG4rICogQGlkczogYXJyYXkgb2YgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmVzIHRvIHNlYXJjaCBpblxcbisgKiBAZGV2X2lkOiB0aGUgYWN0dWFsIFBDSSBkZXZpY2UgSUQgc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3QuXFxuKyAqIEBpbmNsdWRlX292ZXJyaWRlX29ubHk6IGFsc28gbWF0Y2ggYWdhaW5zdCBkZXZpY2UgSUQgZW50cmllcyBtYXJrZWQgYXMgb3ZlcnJpZGUgb25seS5cXG4rICpcXG4rICogUmV0dXJucyB0aGUgbWF0Y2hpbmcgcGNpX2RldmljZV9pZCBzdHJ1Y3R1cmUgb3JcXG4rICogJU5VTEwgaWYgdGhlcmUgaXMgbm8gbWF0Y2guXFxuKyAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRvX3BjaV9tYXRjaF9pZChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZGV2X2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBib29sIGluY2x1ZGVfb3ZlcnJpZGVfb25seSlcXG4re1xcbitcXHRpZiAoaWRzKSB7XFxuK1xcdFxcdHdoaWxlIChpZHMtXFx1MDAzZXZlbmRvciB8fCBpZHMtXFx1MDAzZXN1YnZlbmRvciB8fCBpZHMtXFx1MDAzZWNsYXNzX21hc2spIHtcXG4rXFx0XFx0XFx0aWYgKCghaWRzLVxcdTAwM2VvdmVycmlkZV9vbmx5IHx8IGluY2x1ZGVfb3ZlcnJpZGVfb25seSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHBjaV9tYXRjaF9vbmVfaWQoaWRzLCBkZXZfaWQpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaWRzO1xcbitcXHRcXHRcXHRpZHMrKztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbiAvKipcXG4gICogcGNpX21hdGNoX2lkIC0gU2VlIGlmIGEgUENJIGRldmljZSBtYXRjaGVzIGEgZ2l2ZW4gcGNpX2lkIHRhYmxlXFxuICAqIEBpZHM6IGFycmF5IG9mIFBDSSBkZXZpY2UgSUQgc3RydWN0dXJlcyB0byBzZWFyY2ggaW5cXG5AQCAtMTA1LDE0ICsxNjIsOSBAQCBzdGF0aWMgdm9pZCBwY2lfZnJlZV9keW5pZHMoc3RydWN0IHBjaV9kcml2ZXIgKmRydilcXG4gY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9pZChjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzLFxcbiBcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBjaV9kZXYgKmRldilcXG4ge1xcbi1cXHRpZiAoaWRzKSB7XFxuLVxcdFxcdHdoaWxlIChpZHMtXFx1MDAzZXZlbmRvciB8fCBpZHMtXFx1MDAzZXN1YnZlbmRvciB8fCBpZHMtXFx1MDAzZWNsYXNzX21hc2spIHtcXG4tXFx0XFx0XFx0aWYgKHBjaV9tYXRjaF9vbmVfZGV2aWNlKGlkcywgZGV2KSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGlkcztcXG4tXFx0XFx0XFx0aWRzKys7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXHRyZXR1cm4gTlVMTDtcXG4rXFx0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkID0gcGNpX2lkX2Zyb21fZGV2aWNlKGRldik7XFxuK1xcbitcXHRyZXR1cm4gZG9fcGNpX21hdGNoX2lkKGlkcywgXFx1MDAyNmRldl9pZCwgdHJ1ZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChwY2lfbWF0Y2hfaWQpO1xcbiBcXG5AQCAtMTI3LDYgKzE3OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfZGV2aWNlX2lkX2FueSA9IHtcXG4gICogcGNpX21hdGNoX2RldmljZSAtIFNlZSBpZiBhIGRldmljZSBtYXRjaGVzIGEgZHJpdmVyJ3MgbGlzdCBvZiBJRHNcXG4gICogQGRydjogdGhlIFBDSSBkcml2ZXIgdG8gbWF0Y2ggYWdhaW5zdFxcbiAgKiBAZGV2OiB0aGUgUENJIGRldmljZSBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdFxcbisgKiBAaWRfY29weTogUGxhY2UgdG8gc3RvcmUgY29weSBvZiBwY2lfZGV2aWNlX2lkIGZvciBkeW5hbWljIElEXFxuICAqXFxuICAqIFVzZWQgYnkgYSBkcml2ZXIgdG8gY2hlY2sgd2hldGhlciBhIFBDSSBkZXZpY2UgaXMgaW4gaXRzIGxpc3Qgb2ZcXG4gICogc3VwcG9ydGVkIGRldmljZXMgb3IgaW4gdGhlIGR5bmlkcyBsaXN0LCB3aGljaCBtYXkgaGF2ZSBiZWVuIGF1Z21lbnRlZFxcbkBAIC0xMzQsMTAgKzE4NywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2RldmljZV9pZF9hbnkgPSB7XFxuICAqIHN0cnVjdHVyZSBvciAlTlVMTCBpZiB0aGVyZSBpcyBubyBtYXRjaC5cXG4gICovXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2RldmljZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBjaV9kZXYgKmRldilcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRfY29weSlcXG4ge1xcbi1cXHRzdHJ1Y3QgcGNpX2R5bmlkICpkeW5pZDtcXG4tXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkID0gTlVMTCwgKmlkcztcXG4rXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmZvdW5kX2lkID0gTlVMTDtcXG4rXFx0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0LyogV2hlbiBkcml2ZXJfb3ZlcnJpZGUgaXMgc2V0LCBvbmx5IGJpbmQgdG8gdGhlIG1hdGNoaW5nIGRyaXZlciAqL1xcbkBAIC0xNDUsNDUgKzE5OSwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9kZXZpY2Uoc3RydWN0IHBjaV9kcml2ZXIgKmRydixcXG4gXFx0aWYgKHJldCA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdGRldl9pZCA9IHBjaV9pZF9mcm9tX2RldmljZShkZXYpO1xcbiBcXHQvKiBMb29rIGF0IHRoZSBkeW5hbWljIGlkcyBmaXJzdCwgYmVmb3JlIHRoZSBzdGF0aWMgb25lcyAqL1xcbi1cXHRzcGluX2xvY2soXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxvY2spO1xcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGR5bmlkLCBcXHUwMDI2ZHJ2LVxcdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xcbi1cXHRcXHRpZiAocGNpX21hdGNoX29uZV9kZXZpY2UoXFx1MDAyNmR5bmlkLVxcdTAwM2VpZCwgZGV2KSkge1xcbi1cXHRcXHRcXHRmb3VuZF9pZCA9IFxcdTAwMjZkeW5pZC1cXHUwMDNlaWQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFxcdTAwMjZkcnYtXFx1MDAzZWR5bmlkcy5sb2NrKSB7XFxuK1xcdFxcdHN0cnVjdCBwY2lfZHluaWQgKmR5bmlkO1xcbitcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgXFx1MDAyNmRydi1cXHUwMDNlZHluaWRzLmxpc3QsIG5vZGUpIHtcXG4rXFx0XFx0XFx0aWYgKHBjaV9tYXRjaF9vbmVfaWQoXFx1MDAyNmR5bmlkLVxcdTAwM2VpZCwgXFx1MDAyNmRldl9pZCkpIHtcXG4rXFx0XFx0XFx0XFx0KmlkX2NvcHkgPSBkeW5pZC1cXHUwMDNlaWQ7XFxuK1xcdFxcdFxcdFxcdHJldHVybiBpZF9jb3B5O1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRzcGluX3VubG9jayhcXHUwMDI2ZHJ2LVxcdTAwM2VkeW5pZHMubG9jayk7XFxuIFxcbitcXHRmb3VuZF9pZCA9IGRvX3BjaV9tYXRjaF9pZChkcnYtXFx1MDAzZWlkX3RhYmxlLCBcXHUwMDI2ZGV2X2lkLCByZXQgXFx1MDAzZSAwKTtcXG4gXFx0aWYgKGZvdW5kX2lkKVxcbiBcXHRcXHRyZXR1cm4gZm91bmRfaWQ7XFxuIFxcbi1cXHRmb3IgKGlkcyA9IGRydi1cXHUwMDNlaWRfdGFibGU7IChmb3VuZF9pZCA9IHBjaV9tYXRjaF9pZChpZHMsIGRldikpO1xcbi1cXHQgICAgIGlkcyA9IGZvdW5kX2lkICsgMSkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBUaGUgbWF0Y2ggdGFibGUgaXMgc3BsaXQgYmFzZWQgb24gZHJpdmVyX292ZXJyaWRlLlxcbi1cXHRcXHQgKiBJbiBjYXNlIG92ZXJyaWRlX29ubHkgd2FzIHNldCwgZW5mb3JjZSBkcml2ZXJfb3ZlcnJpZGVcXG4tXFx0XFx0ICogbWF0Y2hpbmcuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZm91bmRfaWQtXFx1MDAzZW92ZXJyaWRlX29ubHkpIHtcXG4tXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApXFxuLVxcdFxcdFxcdFxcdHJldHVybiBmb3VuZF9pZDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cmV0dXJuIGZvdW5kX2lkO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuIFxcdC8qIGRyaXZlcl9vdmVycmlkZSB3aWxsIGFsd2F5cyBtYXRjaCwgc2VuZCBhIGR1bW15IGlkICovXFxuIFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbiBcXHRcXHRyZXR1cm4gXFx1MDAyNnBjaV9kZXZpY2VfaWRfYW55O1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX3BjaV9mcmVlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLXtcXG4tXFx0a2ZyZWUodG9fcGNpX2RldihkZXYpKTtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIG5ld19pZF9zdG9yZSAtIHN5c2ZzIGZyb250ZW5kIHRvIHBjaV9hZGRfZHluaWQoKVxcbiAgKiBAZHJpdmVyOiB0YXJnZXQgZGV2aWNlIGRyaXZlclxcbkBAIC0xOTcsMzggKzIzNSwyMiBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLFxcbiB7XFxuIFxcdHN0cnVjdCBwY2lfZHJpdmVyICpwZHJ2ID0gdG9fcGNpX2RyaXZlcihkcml2ZXIpO1xcbiBcXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzID0gcGRydi1cXHUwMDNlaWRfdGFibGU7XFxuLVxcdHUzMiB2ZW5kb3IsIGRldmljZSwgc3VidmVuZG9yID0gUENJX0FOWV9JRCxcXG4tXFx0XFx0c3ViZGV2aWNlID0gUENJX0FOWV9JRCwgY2xhc3MgPSAwLCBjbGFzc19tYXNrID0gMDtcXG4tXFx0dW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSA9IDA7XFxuK1xcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkID0ge1xcbitcXHRcXHQuc3VidmVuZG9yID0gUENJX0FOWV9JRCxcXG4rXFx0XFx0LnN1YmRldmljZSA9IFBDSV9BTllfSURcXG4rXFx0fTtcXG4gXFx0aW50IGZpZWxkcztcXG4gXFx0aW50IHJldHZhbCA9IDA7XFxuIFxcbiBcXHRmaWVsZHMgPSBzc2NhbmYoYnVmLCBcXFwiJXggJXggJXggJXggJXggJXggJWx4XFxcIixcXG4tXFx0XFx0XFx0XFx1MDAyNnZlbmRvciwgXFx1MDAyNmRldmljZSwgXFx1MDAyNnN1YnZlbmRvciwgXFx1MDAyNnN1YmRldmljZSxcXG4tXFx0XFx0XFx0XFx1MDAyNmNsYXNzLCBcXHUwMDI2Y2xhc3NfbWFzaywgXFx1MDAyNmRyaXZlcl9kYXRhKTtcXG4rXFx0XFx0XFx0XFx1MDAyNmlkLnZlbmRvciwgXFx1MDAyNmlkLmRldmljZSwgXFx1MDAyNmlkLnN1YnZlbmRvciwgXFx1MDAyNmlkLnN1YmRldmljZSxcXG4rXFx0XFx0XFx0XFx1MDAyNmlkLmNsYXNzLCBcXHUwMDI2aWQuY2xhc3NfbWFzaywgXFx1MDAyNmlkLmRyaXZlcl9kYXRhKTtcXG4gXFx0aWYgKGZpZWxkcyBcXHUwMDNjIDIpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKGZpZWxkcyAhPSA3KSB7XFxuLVxcdFxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0ga3phbGxvY19vYmooKnBkZXYpO1xcbi1cXHRcXHRpZiAoIXBkZXYpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXG4tXFx0XFx0cGRldi1cXHUwMDNldmVuZG9yID0gdmVuZG9yO1xcbi1cXHRcXHRwZGV2LVxcdTAwM2VkZXZpY2UgPSBkZXZpY2U7XFxuLVxcdFxcdHBkZXYtXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3IgPSBzdWJ2ZW5kb3I7XFxuLVxcdFxcdHBkZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2UgPSBzdWJkZXZpY2U7XFxuLVxcdFxcdHBkZXYtXFx1MDAzZWNsYXNzID0gY2xhc3M7XFxuLVxcdFxcdHBkZXYtXFx1MDAzZWRldi5yZWxlYXNlID0gX3BjaV9mcmVlX2RldmljZTtcXG4tXFxuLVxcdFxcdGRldmljZV9pbml0aWFsaXplKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbi1cXHRcXHRpZiAocGNpX21hdGNoX2RldmljZShwZHJ2LCBwZGV2KSlcXG4tXFx0XFx0XFx0cmV0dmFsID0gLUVFWElTVDtcXG4tXFxuLVxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuLVxcbi1cXHRcXHRpZiAocmV0dmFsKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbitcXHRcXHRpZiAoZG9fcGNpX21hdGNoX2lkKHBkcnYtXFx1MDAzZWlkX3RhYmxlLCBcXHUwMDI2aWQsIGZhbHNlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIE9ubHkgYWNjZXB0IGRyaXZlcl9kYXRhIHZhbHVlcyB0aGF0IG1hdGNoIGFuIGV4aXN0aW5nIGlkX3RhYmxlXFxuQEAgLTIzNiw3ICsyNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRpZiAoaWRzKSB7XFxuIFxcdFxcdHJldHZhbCA9IC1FSU5WQUw7XFxuIFxcdFxcdHdoaWxlIChpZHMtXFx1MDAzZXZlbmRvciB8fCBpZHMtXFx1MDAzZXN1YnZlbmRvciB8fCBpZHMtXFx1MDAzZWNsYXNzX21hc2spIHtcXG4tXFx0XFx0XFx0aWYgKGRyaXZlcl9kYXRhID09IGlkcy1cXHUwMDNlZHJpdmVyX2RhdGEpIHtcXG4rXFx0XFx0XFx0aWYgKGlkLmRyaXZlcl9kYXRhID09IGlkcy1cXHUwMDNlZHJpdmVyX2RhdGEpIHtcXG4gXFx0XFx0XFx0XFx0cmV0dmFsID0gMDtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG5AQCAtMjQ2LDggKzI2OCw3IEBAIHN0YXRpYyBzc2l6ZV90IG5ld19pZF9zdG9yZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLCBjb25zdCBjaGFyICpidWYsXFxuIFxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHZhbCA9IHBjaV9hZGRfZHluaWQocGRydiwgdmVuZG9yLCBkZXZpY2UsIHN1YnZlbmRvciwgc3ViZGV2aWNlLFxcbi1cXHRcXHRcXHQgICAgICAgY2xhc3MsIGNsYXNzX21hc2ssIGRyaXZlcl9kYXRhKTtcXG4rXFx0cmV0dmFsID0gZG9fcGNpX2FkZF9keW5pZChwZHJ2LCBcXHUwMDI2aWQsIGZpZWxkcyAhPSA3KTtcXG4gXFx0aWYgKHJldHZhbClcXG4gXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFx0cmV0dXJuIGNvdW50O1xcbkBAIC00NDUsMTIgKzQ2NiwxMyBAQCB2b2lkIHBjaV9wcm9iZV9mbHVzaF93b3JrcXVldWUodm9pZClcXG4gc3RhdGljIGludCBfX3BjaV9kZXZpY2VfcHJvYmUoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xcbitcXHRzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF9jb3B5O1xcbiBcXHRpbnQgZXJyb3IgPSAwO1xcbiBcXG4gXFx0aWYgKGRydi1cXHUwMDNlcHJvYmUpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbiBcXG4tXFx0XFx0aWQgPSBwY2lfbWF0Y2hfZGV2aWNlKGRydiwgcGNpX2Rldik7XFxuK1xcdFxcdGlkID0gcGNpX21hdGNoX2RldmljZShkcnYsIHBjaV9kZXYsIFxcdTAwMjZpZF9jb3B5KTtcXG4gXFx0XFx0aWYgKGlkKVxcbiBcXHRcXHRcXHRlcnJvciA9IHBjaV9jYWxsX3Byb2JlKGRydiwgcGNpX2RldiwgaWQpO1xcbiBcXHR9XFxuQEAgLTE1MzgsMTIgKzE1NjAsMTMgQEAgc3RhdGljIGludCBwY2lfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7XFxuIFxcdHN0cnVjdCBwY2lfZHJpdmVyICpwY2lfZHJ2O1xcbiBcXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmRfaWQ7XFxuK1xcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkX2NvcHk7XFxuIFxcbiBcXHRpZiAocGNpX2Rldl9iaW5kaW5nX2Rpc2FsbG93ZWQocGNpX2RldikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cGNpX2RydiA9IChzdHJ1Y3QgcGNpX2RyaXZlciAqKXRvX3BjaV9kcml2ZXIoZHJ2KTtcXG4tXFx0Zm91bmRfaWQgPSBwY2lfbWF0Y2hfZGV2aWNlKHBjaV9kcnYsIHBjaV9kZXYpO1xcbitcXHRmb3VuZF9pZCA9IHBjaV9tYXRjaF9kZXZpY2UocGNpX2RydiwgcGNpX2RldiwgXFx1MDAyNmlkX2NvcHkpO1xcbiBcXHRpZiAoZm91bmRfaWQpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaFxcbmluZGV4IDQ0NjllMWE3N2YzYzEzLi4wNTY3YTg3NjJiYWEwOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS9wY2kuaFxcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oXFxuQEAgLTQ0MiwyMSArNDQyLDM3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9zZXR1cF9jYXJkYnVzKGNoYXIgKnN0cikgeyByZXR1cm4gLUVOT0VOVDsgfVxcbiAjZW5kaWYgLyogQ09ORklHX0NBUkRCVVMgKi9cXG4gXFxuIC8qKlxcbi0gKiBwY2lfbWF0Y2hfb25lX2RldmljZSAtIFRlbGwgaWYgYSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSBoYXMgYSBtYXRjaGluZ1xcbi0gKlxcdFxcdFxcdCAgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmVcXG4tICogQGlkOiBzaW5nbGUgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmUgdG8gbWF0Y2hcXG4tICogQGRldjogdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3RcXG4rICogcGNpX2lkX2Zyb21fZGV2aWNlIC0gT2J0YWluIGEgcGNpX2RldmljZV9pZCBmcm9tIGEgUENJIGRldmljZVxcbisgKiBAZGV2OiB0aGUgUENJIGRldmljZVxcbisgKlxcbisgKiBSZXR1cm5zIGEgcGNpX2RldmljZV9pZCBmaWxsZWQuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZF9mcm9tX2RldmljZShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbit7XFxuK1xcdHJldHVybiAoc3RydWN0IHBjaV9kZXZpY2VfaWQpIHtcXG4rXFx0XFx0LnZlbmRvciA9IGRldi1cXHUwMDNldmVuZG9yLFxcbitcXHRcXHQuZGV2aWNlID0gZGV2LVxcdTAwM2VkZXZpY2UsXFxuK1xcdFxcdC5zdWJ2ZW5kb3IgPSBkZXYtXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3IsXFxuK1xcdFxcdC5zdWJkZXZpY2UgPSBkZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2UsXFxuK1xcdFxcdC5jbGFzcyA9IGRldi1cXHUwMDNlY2xhc3MsXFxuK1xcdH07XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwY2lfbWF0Y2hfb25lX2lkIC0gVGVsbCBpZiBhIFBDSSBkZXZpY2UgSUQgbWF0Y2hlcyBhIG5lZWRsZSBQQ0kgZGV2aWNlIGlkXFxuKyAqIEBpZDogc2luZ2xlIFBDSSBkZXZpY2UgaWQgc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3QgKG5lZWRsZSlcXG4rICogQGRldl9pZDogdGhlIGFjdHVhbCBJRCBmcm9tIHRoZSBQQ0kgZGV2aWNlIChjYW4gYmUgY3JlYXRlZCB2aWEgcGNpX2lkX2Zyb21fZGV2aWNlKVxcbiAgKlxcbiAgKiBSZXR1cm5zIHRoZSBtYXRjaGluZyBwY2lfZGV2aWNlX2lkIHN0cnVjdHVyZSBvciAlTlVMTCBpZiB0aGVyZSBpcyBubyBtYXRjaC5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKlxcbi1wY2lfbWF0Y2hfb25lX2RldmljZShjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuK3BjaV9tYXRjaF9vbmVfaWQoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZGV2X2lkKVxcbiB7XFxuLVxcdGlmICgoaWQtXFx1MDAzZXZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVxcdTAwM2V2ZW5kb3IgPT0gZGV2LVxcdTAwM2V2ZW5kb3IpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoaWQtXFx1MDAzZWRldmljZSA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVxcdTAwM2VkZXZpY2UgPT0gZGV2LVxcdTAwM2VkZXZpY2UpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoaWQtXFx1MDAzZXN1YnZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVxcdTAwM2VzdWJ2ZW5kb3IgPT0gZGV2LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKGlkLVxcdTAwM2VzdWJkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC1cXHUwMDNlc3ViZGV2aWNlID09IGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICEoKGlkLVxcdTAwM2VjbGFzcyBeIGRldi1cXHUwMDNlY2xhc3MpIFxcdTAwMjYgaWQtXFx1MDAzZWNsYXNzX21hc2spKVxcbitcXHRpZiAoKGlkLVxcdTAwM2V2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC1cXHUwMDNldmVuZG9yID09IGRldl9pZC1cXHUwMDNldmVuZG9yKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGlkLVxcdTAwM2VkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC1cXHUwMDNlZGV2aWNlID09IGRldl9pZC1cXHUwMDNlZGV2aWNlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGlkLVxcdTAwM2VzdWJ2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC1cXHUwMDNlc3VidmVuZG9yID09IGRldl9pZC1cXHUwMDNlc3VidmVuZG9yKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGlkLVxcdTAwM2VzdWJkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC1cXHUwMDNlc3ViZGV2aWNlID09IGRldl9pZC1cXHUwMDNlc3ViZGV2aWNlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgISgoaWQtXFx1MDAzZWNsYXNzIF4gZGV2X2lkLVxcdTAwM2VjbGFzcykgXFx1MDAyNiBpZC1cXHUwMDNlY2xhc3NfbWFzaykpXFxuIFxcdFxcdHJldHVybiBpZDtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guY1xcbmluZGV4IGUzZDMxNzdmY2U1NDllLi5jOGM0YmZlNzgxN2IwMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS9zZWFyY2guY1xcbisrKyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jXFxuQEAgLTI0NSw4ICsyNDUsMTAgQEAgc3RhdGljIGludCBtYXRjaF9wY2lfZGV2X2J5X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcXG4gXFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkID0gZGF0YTtcXG4rXFx0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkO1xcbiBcXG4tXFx0aWYgKHBjaV9tYXRjaF9vbmVfZGV2aWNlKGlkLCBwZGV2KSlcXG4rXFx0ZGV2X2lkID0gcGNpX2lkX2Zyb21fZGV2aWNlKHBkZXYpO1xcbitcXHRpZiAocGNpX21hdGNoX29uZV9pZChpZCwgXFx1MDAyNmRldl9pZCkpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC00MTgsNyArNDIwLDcgQEAgRVhQT1JUX1NZTUJPTChwY2lfZ2V0X2NsYXNzKTtcXG4gICpcXG4gICogSXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBrbm93biBQQ0kgZGV2aWNlcy4gSWYgYSBQQ0kgZGV2aWNlIGlzIGZvdW5kXFxuICAqIHdpdGggYSBtYXRjaGluZyBiYXNlIGNsYXNzIGNvZGUsIHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGhlIGRldmljZSBpc1xcbi0gKiBpbmNyZW1lbnRlZC4gU2VlIHBjaV9tYXRjaF9vbmVfZGV2aWNlKCkgdG8gZmlndXJlIG91dCBob3cgZG9lcyB0aGlzIHdvcmtzLlxcbisgKiBpbmNyZW1lbnRlZC4gU2VlIHBjaV9tYXRjaF9vbmVfaWQoKSB0byBmaWd1cmUgb3V0IGhvdyBkb2VzIHRoaXMgd29ya3MuXFxuICAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuXFxuICAqIE90aGVyd2lzZSBpZiBAZnJvbSBpcyBub3QgJU5VTEwsIHNlYXJjaGVzIGNvbnRpbnVlIGZyb20gbmV4dCBkZXZpY2Ugb24gdGhlXFxuICAqIGdsb2JhbCBsaXN0LiBUaGUgcmVmZXJlbmNlIGNvdW50IGZvciBAZnJvbSBpcyBhbHdheXMgZGVjcmVtZW50ZWQgaWYgaXQgaXNcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyLmMgYi9kcml2ZXJzL3Njc2kvbnNwMzIuY1xcbmluZGV4IGU4OTNkNTY3NzI0MTdhLi45YzkyODEyMjJhMGFjZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Njc2kvbnNwMzIuY1xcbisrKyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5jXFxuQEAgLTE0NzAsNyArMTQ3MCw3IEBAIHN0YXRpYyBpbnQgbnNwMzJfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IFNjc2lfSG9zdCAqaG9zdClcXG4gXFx0XFx0ICAgKG5zcDMyX3JlYWQyKGJhc2UsIElOREVYX1JFRykgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweGZmKTtcXG4gXFxuIFxcdG1vZGVfcmVnID0gbnNwMzJfaW5kZXhfcmVhZDEoYmFzZSwgQ0hJUF9NT0RFKTtcXG4tXFx0bW9kZWwgICAgPSBkYXRhLVxcdTAwM2VwY2lfZGV2aWQtXFx1MDAzZWRyaXZlcl9kYXRhO1xcbitcXHRtb2RlbCAgICA9IGRhdGEtXFx1MDAzZW1vZGVsO1xcbiBcXG4gI2lmZGVmIENPTkZJR19QTVxcbiBcXHRzZXFfcHJpbnRmKG0sIFxcXCJQb3dlciBNYW5hZ2VtZW50OiAgICAgICVzXFxcXG5cXFwiLFxcbkBAIC0yOTA3LDggKzI5MDcsOCBAQCBzdGF0aWMgaW50IG5zcDMyX2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpXFxuICAqL1xcbiBzdGF0aWMgaW50IG5zcDMyX2dldHByb21fcGFyYW0obnNwMzJfaHdfZGF0YSAqZGF0YSlcXG4ge1xcbi1cXHRpbnQgdmVuZG9yID0gZGF0YS1cXHUwMDNlcGNpX2RldmlkLVxcdTAwM2V2ZW5kb3I7XFxuLVxcdGludCBkZXZpY2UgPSBkYXRhLVxcdTAwM2VwY2lfZGV2aWQtXFx1MDAzZWRldmljZTtcXG4rXFx0aW50IHZlbmRvciA9IGRhdGEtXFx1MDAzZVBjaS1cXHUwMDNldmVuZG9yO1xcbitcXHRpbnQgZGV2aWNlID0gZGF0YS1cXHUwMDNlUGNpLVxcdTAwM2VkZXZpY2U7XFxuIFxcdGludCByZXQsIGk7XFxuIFxcdGludCBfX21heWJlX3VudXNlZCB2YWw7XFxuIFxcbkBAIC0zMzQwLDcgKzMzNDAsNyBAQCBzdGF0aWMgaW50IG5zcDMyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuIFxcdH1cXG4gXFxuIFxcdGRhdGEtXFx1MDAzZVBjaVxcdCAgPSBwZGV2O1xcbi1cXHRkYXRhLVxcdTAwM2VwY2lfZGV2aWQgICA9IGlkO1xcbitcXHRkYXRhLVxcdTAwM2Vtb2RlbCAgICAgICA9IGlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4gXFx0ZGF0YS1cXHUwMDNlSXJxTnVtYmVyICAgPSBwZGV2LVxcdTAwM2VpcnE7XFxuIFxcdGRhdGEtXFx1MDAzZUJhc2VBZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApO1xcbiBcXHRkYXRhLVxcdTAwM2VOdW1BZGRyZXNzICA9IHBjaV9yZXNvdXJjZV9sZW4gIChwZGV2LCAwKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25zcDMyLmggYi9kcml2ZXJzL3Njc2kvbnNwMzIuaFxcbmluZGV4IDkyNDg4OWY4YmQzN2U3Li45ZTY1NzcxY2I1OTI4NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Njc2kvbnNwMzIuaFxcbisrKyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oXFxuQEAgLTU2NCwxMCArNTY0LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9uc3AzMl9od19kYXRhIHtcXG4gXFxuIFxcdHN0cnVjdCBzY3NpX2NtbmQgKkN1cnJlbnRTQztcXG4gXFxuLVxcdHN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICpQY2k7XFxuLVxcdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2aWQ7XFxuLVxcdHN0cnVjdCBTY3NpX0hvc3QgICAgICAgICAgICpIb3N0O1xcbi1cXHRzcGlubG9ja190ICAgICAgICAgICAgICAgICAgTG9jaztcXG4rXFx0c3RydWN0IHBjaV9kZXYgICAgKlBjaTtcXG4rXFx0aW50ICAgICAgICAgICAgICAgIG1vZGVsO1xcbitcXHRzdHJ1Y3QgU2NzaV9Ib3N0ICAqSG9zdDtcXG4rXFx0c3BpbmxvY2tfdCAgICAgICAgIExvY2s7XFxuIFxcbiBcXHRjaGFyIGluZm9fc3RyWzEwMF07XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li45MmMxN2MxMTZkZTZkMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbkBAIC05NzksNiArOTc5LDcgQEAgc3RydWN0IG1vZHVsZTtcXG4gICpcXHRcXHRmdW5jdGlvbiByZXR1cm5zIHplcm8gd2hlbiB0aGUgZHJpdmVyIGNob29zZXMgdG9cXG4gICpcXHRcXHR0YWtlIFxcXCJvd25lcnNoaXBcXFwiIG9mIHRoZSBkZXZpY2Ugb3IgYW4gZXJyb3IgY29kZVxcbiAgKlxcdFxcdChuZWdhdGl2ZSBudW1iZXIpIG90aGVyd2lzZS5cXG4rICpcXHRcXHRUaGUgcGNpX2RldmljZV9pZCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcgcHJvYmUuXFxuICAqXFx0XFx0VGhlIHByb2JlIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3NcXG4gICpcXHRcXHRjb250ZXh0LCBzbyBpdCBjYW4gc2xlZXAuXFxuICAqIEByZW1vdmU6XFx0VGhlIHJlbW92ZSgpIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgZGV2aWNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ0OjQ0LjQ1MDQ4ODE5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEwODg3Nzc0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRBX0dFTkVSSUNcIixcbiAgICBcIkFHUFwiLFxuICAgIFwiQUdQX0FNRFwiLFxuICAgIFwiQUdQX1ZJQVwiLFxuICAgIFwiSVBBQ0tfQlVTXCIsXG4gICAgXCJCT0FSRF9UUENJMjAwXCIsXG4gICAgXCJNTFhTV19QQ0lcIixcbiAgICBcIlNDU0lfTlNQMzJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19wY2lfYWRkX2R5bmlkXCIsXG4gICAgXCJuZXdfaWRfc3RvcmVcIixcbiAgICBcInBjaV9tYXRjaF9kZXZpY2VcIixcbiAgICBcImRvX3BjaV9tYXRjaF9pZFwiLFxuICAgIFwiX19wY2lfZGV2aWNlX3Byb2JlXCIsXG4gICAgXCJwY2lfYWRkX2R5bmlkXCIsXG4gICAgXCJwY2lfbWF0Y2hfaWRcIixcbiAgICBcImF0YV9nZW5lcmljX2luaXRfb25lXCIsXG4gICAgXCJhZ3BfYW1kazdfcHJvYmVcIixcbiAgICBcImFncF92aWFfcHJvYmVcIixcbiAgICBcInRwY2kyMDBfcGNpX3Byb2JlXCIsXG4gICAgXCJtbHhzd19wY2lfcHJvYmVcIixcbiAgICBcIm5zcDMyX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBDSSBjb3JlIHRvIHBhc3MgYSBjb3B5IG9mIHRoZSBkeW5hbWljIHBjaV9kZXZpY2VfaWQgdG8gdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCBkeW5hbWljIElELCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBkeW5hbWljIElEIGlzIHJlbW92ZWQgdmlhIHN5c2ZzLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIHRoYXQgd2VyZSBpbmNvcnJlY3RseSBzYXZpbmcgdGhlIHBjaV9kZXZpY2VfaWQgcG9pbnRlciB0byBpbnN0ZWFkIHNhdmUgdGhlIGRyaXZlcl9kYXRhIG9yIG90aGVyIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBQQ0kgY29yZSBhbmQgZHJpdmVycywgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYW5kIHByb2JpbmcsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBkeW5hbWljIElEcyB2aWEgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNThiZTU4MTlmZmZkZDVmM2MxMWRkMWEyNmFhNTJkY2E1MGUwMjQwOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMjA6NDQ6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuY1xuaW5kZXggZTcwYjZjMDg5Y2YxNzkuLjE4ZWE3NDBjYTU4MjkzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuY1xuKysrIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuY1xuQEAgLTUxLDExICs1MSwxMSBAQCBlbnVtIHtcbiBzdGF0aWMgaW50IGdlbmVyaWNfc2V0X21vZGUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnVudXNlZClcbiB7XG4gXHRzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay1cdTAwM2VhcDtcbi1cdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCA9IGFwLVx1MDAzZWhvc3QtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0dW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFwLVx1MDAzZWhvc3QtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0aW50IGRtYV9lbmFibGVkID0gMDtcbiBcdHN0cnVjdCBhdGFfZGV2aWNlICpkZXY7XG4gXG4tXHRpZiAoaWQtXHUwMDNlZHJpdmVyX2RhdGEgXHUwMDI2IEFUQV9HRU5fRk9SQ0VfRE1BKSB7XG4rXHRpZiAoZHJpdmVyX2RhdGEgXHUwMDI2IEFUQV9HRU5fRk9SQ0VfRE1BKSB7XG4gXHRcdGRtYV9lbmFibGVkID0gMHhmZjtcbiBcdH0gZWxzZSBpZiAoYXAtXHUwMDNlaW9hZGRyLmJtZG1hX2FkZHIpIHtcbiBcdFx0LyogQml0cyA1IGFuZCA2IGluZGljYXRlIGlmIERNQSBpcyBhY3RpdmUgb24gbWFzdGVyL3NsYXZlICovXG5AQCAtMjA2LDcgKzIwNiw3IEBAIHN0YXRpYyBpbnQgYXRhX2dlbmVyaWNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWRcbiBcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdHBjaW1fcGluX2RldmljZShkZXYpO1xuIFx0fVxuLVx0cmV0dXJuIGF0YV9wY2lfYm1kbWFfaW5pdF9vbmUoZGV2LCBwcGksIFx1MDAyNmdlbmVyaWNfc2h0LCAodm9pZCAqKWlkLCAwKTtcbitcdHJldHVybiBhdGFfcGNpX2JtZG1hX2luaXRfb25lKGRldiwgcHBpLCBcdTAwMjZnZW5lcmljX3NodCwgKHZvaWQgKilpZC1cdTAwM2Vkcml2ZXJfZGF0YSwgMCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGFfZ2VuZXJpY1tdID0ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmNcbmluZGV4IDg5OGZmMzBmZmQ0NmIyLi40ZDIwMWU3MWM1MTc3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jXG4rKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuY1xuQEAgLTM4NywzNyArMzg3LDE3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgYW1kX2lyb25nYXRlX2RyaXZlciA9IHtcbiBcdC5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGFncF9kZXZpY2VfaWRzIGFtZF9hZ3BfZGV2aWNlX2lkc1tdID1cbi17XG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDA2LFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiSXJvbmdhdGVcIixcbi1cdH0sXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDBFLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiNzYxXCIsXG4tXHR9LFxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQyxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIjc2ME1QXCIsXG4tXHR9LFxuLVx0eyB9LCAvKiBkdW1teSBmaW5hbCBlbnRyeSwgYWx3YXlzIHByZXNlbnQgKi9cbi19O1xuLVxuIHN0YXRpYyBpbnQgYWdwX2FtZGs3X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4ge1xuIFx0c3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlO1xuIFx0dTggY2FwX3B0cjtcbi1cdGludCBqO1xuIFxuIFx0Y2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApO1xuIFx0aWYgKCFjYXBfcHRyKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdGogPSBlbnQgLSBhZ3BfYW1kazdfcGNpX3RhYmxlO1xuLVx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiQU1EICVzIGNoaXBzZXRcXG5cIixcbi1cdFx0IGFtZF9hZ3BfZGV2aWNlX2lkc1tqXS5jaGlwc2V0X25hbWUpO1xuK1x0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiQU1EICVzIGNoaXBzZXRcXG5cIiwgKGNvbnN0IGNoYXIgKillbnQtXHUwMDNlZHJpdmVyX2RhdGEpO1xuIFxuIFx0YnJpZGdlID0gYWdwX2FsbG9jX2JyaWRnZSgpO1xuIFx0aWYgKCFicmlkZ2UpXG5AQCAtNDkyLDcgKzQ3Miw2IEBAIHN0YXRpYyBpbnQgYWdwX2FtZGs3X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gYW1kX2lyb25nYXRlX2RyaXZlci5jb25maWd1cmUoKTtcbiB9XG4gXG4tLyogbXVzdCBiZSB0aGUgc2FtZSBvcmRlciBhcyBuYW1lIHRhYmxlIGFib3ZlICovXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF9hbWRrN19wY2lfdGFibGVbXSA9IHtcbiBcdHtcbiBcdC5jbGFzc1x0XHQ9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgXHUwMDNjXHUwMDNjIDgpLFxuQEAgLTUwMSw2ICs0ODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xuIFx0LmRldmljZVx0XHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwNixcbiBcdC5zdWJ2ZW5kb3JcdD0gUENJX0FOWV9JRCxcbiBcdC5zdWJkZXZpY2VcdD0gUENJX0FOWV9JRCxcbitcdC5kcml2ZXJfZGF0YVx0PSAoa2VybmVsX3Vsb25nX3QpXCJJcm9uZ2F0ZVwiLFxuIFx0fSxcbiBcdHtcbiBcdC5jbGFzc1x0XHQ9IChQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgXHUwMDNjXHUwMDNjIDgpLFxuQEAgLTUwOSw2ICs0ODksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX2FtZGs3X3BjaV90YWJsZVtdID0ge1xuIFx0LmRldmljZVx0XHQ9IFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwRSxcbiBcdC5zdWJ2ZW5kb3JcdD0gUENJX0FOWV9JRCxcbiBcdC5zdWJkZXZpY2VcdD0gUENJX0FOWV9JRCxcbitcdC5kcml2ZXJfZGF0YVx0PSAoa2VybmVsX3Vsb25nX3QpXCI3NjFcIixcbiBcdH0sXG4gXHR7XG4gXHQuY2xhc3NcdFx0PSAoUENJX0NMQVNTX0JSSURHRV9IT1NUIFx1MDAzY1x1MDAzYyA4KSxcbkBAIC01MTcsNiArNDk4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF9hbWRrN19wY2lfdGFibGVbXSA9IHtcbiBcdC5kZXZpY2VcdFx0PSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEMsXG4gXHQuc3VidmVuZG9yXHQ9IFBDSV9BTllfSUQsXG4gXHQuc3ViZGV2aWNlXHQ9IFBDSV9BTllfSUQsXG4rXHQuZHJpdmVyX2RhdGFcdD0gKGtlcm5lbF91bG9uZ190KVwiNzYwTVBcIixcbiBcdH0sXG4gXHR7IH1cbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmNcbmluZGV4IDhiMTlhNWQxYTA5YjQ5Li5hYjNiNzNkZDA4MGFmZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jXG4rKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuY1xuQEAgLTIyMSwyMDQgKzIyMSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgdmlhX2RyaXZlciA9IHtcbiBcdC5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gYWdwX2dlbmVyaWNfdHlwZV90b19tYXNrX3R5cGUsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGFncF9kZXZpY2VfaWRzIHZpYV9hZ3BfZGV2aWNlX2lkc1tdID1cbi17XG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJBcG9sbG8gVlAzXCIsXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiQXBvbGxvIE1WUDNcIixcbi1cdH0sXG4tXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODUwMV8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiQXBvbGxvIE1WUDRcIixcbi1cdH0sXG4tXG4tXHQvKiBWVDg2MDEgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJBcG9sbG8gUHJvTWVkaWEvUExFMTMzVGFcIixcbi1cdH0sXG4tXG4tXHQvKiBWVDgyQzY5M0EgLyBWVDI4QzY5NFQgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2OTFfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIkFwb2xsbyBQcm8gMTMzXCIsXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIktYMTMzXCIsXG4tXHR9LFxuLVxuLVx0LyogVlQ4NjMzICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODYzM18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiUHJvIDI2NlwiLFxuLVx0fSxcbi1cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV9YTjI2Nixcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIkFwb2xsbyBQcm8yNjZcIixcbi1cdH0sXG4tXG4tXHQvKiBWVDgzNjEgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84MzYxLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiS0xFMTMzXCIsXG4tXHR9LFxuLVxuLVx0LyogVlQ4MzY1IC8gVlQ4MzYyICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODM2M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiVHdpc3Rlci1LL0tUMTMzeC9LTTEzM1wiLFxuLVx0fSxcbi1cbi1cdC8qIFZUODc1M0EgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NzUzXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQNFgyNjZcIixcbi1cdH0sXG4tXG4tXHQvKiBWVDgzNjYgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84MzY3XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJLVDI2Ni9LWTI2NngvS1QzMzNcIixcbi1cdH0sXG4tXG4tXHQvKiBWVDg2MzMgKGZvciBDdU1pbmUvIENlbGVyb24pICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODY1M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiUHJvMjY2VFwiLFxuLVx0fSxcbi1cbi1cdC8qIEtNMjY2IC8gUE0yNjYgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2Nixcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIlBNMjY2L0tNMjY2XCIsXG4tXHR9LFxuLVxuLVx0LyogQ0xFMjY2ICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODYyWF8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiQ0xFMjY2XCIsXG4tXHR9LFxuLVxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzNzdfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIktUNDAwL0tUNDAwQS9LVDYwMFwiLFxuLVx0fSxcbi1cbi1cdC8qIFZUODYwNCAvIFZUODYwNSAvIFZUODYwM1xuLVx0ICogKEFwb2xsbyBQcm8xMzNBIGNoaXBzZXQgd2l0aCBTMyBTYXZhZ2U0KSAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIlByb1NhdmFnZSBQTTEzMy9QTDEzMy9QTjEzM1wiXG4tXHR9LFxuLVxuLVx0LyogUDRNMjY2eC9QNE4yNjYgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84NzAzXzUxXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQNE0yNjZ4L1A0TjI2NlwiLFxuLVx0fSxcbi1cbi1cdC8qIFZUODc1NCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQVDgwMFwiLFxuLVx0fSxcbi1cbi1cdC8qIFA0WDYwMCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzg3NjNfMCxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIlA0WDYwMFwiXG4tXHR9LFxuLVxuLVx0LyogS000MDAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJLTTQwMC9LTTQwMEFcIixcbi1cdH0sXG4tXG4tXHQvKiBQVDg4MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BUODgwLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiUFQ4ODBcIixcbi1cdH0sXG4tXG4tXHQvKiBQVDg4MCBVbHRyYSAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BUODgwVUxUUkEsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQVDg4MCBVbHRyYVwiLFxuLVx0fSxcbi1cbi1cdC8qIFBUODkwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfODc4M18wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiUFQ4OTBcIixcbi1cdH0sXG4tXG4tXHQvKiBQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQTTgwMC9QTjgwMC9QTTg4MC9QTjg4MFwiLFxuLVx0fSxcbi1cdC8qIEtUODgwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWRcdD0gUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiS1Q4ODBcIixcbi1cdH0sXG4tXHQvKiBLVHh4eC9QeDh4eCAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSxcbi1cdFx0LmNoaXBzZXRfbmFtZVx0PSBcIlZUODN4eC9WVDg3eHgvS1R4eHgvUHg4eHhcIixcbi1cdH0sXG4tXHQvKiBQNE04MDAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZFx0PSBQQ0lfREVWSUNFX0lEX1ZJQV8zMjk2XzAsXG4tXHRcdC5jaGlwc2V0X25hbWVcdD0gXCJQNE04MDBcIixcbi1cdH0sXG4tXHQvKiBQNE04MDBDRSAqL1xuLVx0e1xuLVx0XHQuZGV2aWNlX2lkXHQ9IFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFLFxuLVx0XHQuY2hpcHNldF9uYW1lXHQ9IFwiVlQzMzE0XCIsXG4tXHR9LFxuLVx0LyogVlQzMzI0IC8gQ1g3MDAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZCAgPSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMjQsXG4tXHRcdC5jaGlwc2V0X25hbWUgICA9IFwiQ1g3MDBcIixcbi1cdH0sXG4tXHQvKiBWVDMzMzYgLSB0aGlzIGlzIGEgY2hpcHNldCBmb3IgQU1EIEF0aGxvbi9LOCBDUFUuIER1ZSB0byBLOCdzIHVuaXF1ZVxuLVx0ICogYXJjaGl0ZWN0dXJlLCB0aGUgQUdQIHJlc291cmNlIGFuZCBiZWhhdmlvciBhcmUgZGlmZmVyZW50IGZyb21cbi1cdCAqIHRoZSB0cmFkaXRpb25hbCBBR1Agd2hpY2ggcmVzaWRlcyBvbmx5IGluIGNoaXBzZXQuIEFHUCBpcyB1c2VkXG4tXHQgKiBieSAzRCBkcml2ZXIgd2hpY2ggd2Fzbid0IGF2YWlsYWJsZSBmb3IgdGhlIFZUMzMzNiBhbmQgVlQzMzY0XG4tXHQgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3Jrc1xuLVx0ICogYnV0IFZUMzMzNiBkb2Vzbid0LiAtIGV4cGxhbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXNcbi1cdCAqIGFzIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uXG4tXHQgKi9cbi0jaWYgMFxuLVx0e1xuLVx0XHQuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMzNixcbi1cdFx0LmNoaXBzZXRfbmFtZSAgID0gXCJWVDMzMzZcIixcbi1cdH0sXG4tI2VuZGlmXG4tXHQvKiBQNE04OTAgKi9cbi1cdHtcbi1cdFx0LmRldmljZV9pZCAgPSBQQ0lfREVWSUNFX0lEX1ZJQV9QNE04OTAsXG4tXHRcdC5jaGlwc2V0X25hbWUgICA9IFwiUDRNODkwXCIsXG4tXHR9LFxuLVx0LyogUDRNOTAwICovXG4tXHR7XG4tXHRcdC5kZXZpY2VfaWQgID0gUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0LFxuLVx0XHQuY2hpcHNldF9uYW1lICAgPSBcIlA0TTkwMFwiLFxuLVx0fSxcbi1cdHsgfSwgLyogZHVtbXkgZmluYWwgZW50cnksIGFsd2F5cyBwcmVzZW50ICovXG4tfTtcbi1cbiBcbiAvKlxuICAqIFZJQSdzIEFHUDMgY2hpcHNldHMgZG8gbWFnaWNrIHRvIHB1dCB0aGUgQUdQIGJyaWRnZSBjb21wbGlhbnRcbkBAIC00MzcsMTcgKzIzOSwxNCBAQCBzdGF0aWMgdm9pZCBjaGVja192aWFfYWdwMyAoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlKVxuIFxuIHN0YXRpYyBpbnQgYWdwX3ZpYV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4tXHRzdHJ1Y3QgYWdwX2RldmljZV9pZHMgKmRldnMgPSB2aWFfYWdwX2RldmljZV9pZHM7XG4gXHRzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7XG4tXHRpbnQgaiA9IDA7XG4gXHR1OCBjYXBfcHRyO1xuIFxuIFx0Y2FwX3B0ciA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9BR1ApO1xuIFx0aWYgKCFjYXBfcHRyKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdGogPSBlbnQgLSBhZ3BfdmlhX3BjaV90YWJsZTtcbi1cdHByaW50ayAoS0VSTl9JTkZPIFBGWCBcIkRldGVjdGVkIFZJQSAlcyBjaGlwc2V0XFxuXCIsIGRldnNbal0uY2hpcHNldF9uYW1lKTtcbitcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcIkRldGVjdGVkIFZJQSAlcyBjaGlwc2V0XFxuXCIsIChjb25zdCBjaGFyICopZW50LVx1MDAzZWRyaXZlcl9kYXRhKTtcbiBcbiBcdGJyaWRnZSA9IGFncF9hbGxvY19icmlkZ2UoKTtcbiBcdGlmICghYnJpZGdlKVxuQEAgLTUwMSw5ICszMDAsOCBAQCBzdGF0aWMgaW50IGFncF92aWFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKiBtdXN0IGJlIHRoZSBzYW1lIG9yZGVyIGFzIG5hbWUgdGFibGUgYWJvdmUgKi9cbiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWdwX3ZpYV9wY2lfdGFibGVbXSA9IHtcbi0jZGVmaW5lIElEKHgpIFxcXG4rI2RlZmluZSBJRCh4LCBuYW1lKSBcXFxuIFx0e1x0XHRcdFx0XHRcdFxcXG4gXHQuY2xhc3NcdFx0PSAoUENJX0NMQVNTX0JSSURHRV9IT1NUIFx1MDAzY1x1MDAzYyA4KSxcdFxcXG4gXHQuY2xhc3NfbWFza1x0PSB+MCxcdFx0XHRcdFxcXG5AQCAtNTExLDM5ICszMDksNzcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF92aWFfcGNpX3RhYmxlW10gPSB7XG4gXHQuZGV2aWNlXHRcdD0geCxcdFx0XHRcdFxcXG4gXHQuc3VidmVuZG9yXHQ9IFBDSV9BTllfSUQsXHRcdFx0XFxcbiBcdC5zdWJkZXZpY2VcdD0gUENJX0FOWV9JRCxcdFx0XHRcXFxuK1x0LmRyaXZlcl9kYXRhXHQ9IChrZXJuZWxfdWxvbmdfdCluYW1lLFx0XHRcXFxuIFx0fVxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODUwMV8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDFfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM2OTFfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYzM18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2KSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjEpLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODM2M18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzY3XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODY1M18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2KSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MlhfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc3XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODYwNV8wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzU0Q18wKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NjNfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NzgzXzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjY5XzApLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfODNfODdYWF8xKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMCksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04MDBDRSksXG4tXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMjQpLFxuLVx0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODkwKSxcbi1cdElEKFBDSV9ERVZJQ0VfSURfVklBX1ZUMzM2NCksXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMCwgXCJBcG9sbG8gVlAzXCIpLFxuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAsIFwiQXBvbGxvIE1WUDNcIiksXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzAsIFwiQXBvbGxvIE1WUDRcIiksXG4rXHQvKiBWVDg2MDEgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg2MDFfMCwgXCJBcG9sbG8gUHJvTWVkaWEvUExFMTMzVGFcIiksXG4rXHQvKiBWVDgyQzY5M0EgLyBWVDI4QzY5NFQgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgyQzY5MV8wLCBcIkFwb2xsbyBQcm8gMTMzXCIpLFxuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3MV8wLCBcIktYMTMzXCIpLFxuK1x0LyogVlQ4NjMzICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjMzXzAsIFwiUHJvIDI2NlwiKSxcbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2LCBcIkFwb2xsbyBQcm8yNjZcIiksXG4rXHQvKiBWVDgzNjEgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjEsIFwiS0xFMTMzXCIpLFxuK1x0LyogVlQ4MzY1IC8gVlQ4MzYyICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzAsIFwiVHdpc3Rlci1LL0tUMTMzeC9LTTEzM1wiKSxcbitcdC8qIFZUODc1M0EgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCwgXCJQNFgyNjZcIiksXG4rXHQvKiBWVDgzNjYgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzNjdfMCwgXCJLVDI2Ni9LWTI2NngvS1QzMzNcIiksXG4rXHQvKiBWVDg2MzMgKGZvciBDdU1pbmUvIENlbGVyb24pICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzAsIFwiUHJvMjY2VFwiKSxcbitcdC8qIEtNMjY2IC8gUE0yNjYgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2LCBcIlBNMjY2L0tNMjY2XCIpLFxuK1x0LyogQ0xFMjY2ICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzAsIFwiQ0xFMjY2XCIpLFxuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODM3N18wLCBcIktUNDAwL0tUNDAwQS9LVDYwMFwiKSxcbitcdC8qIFZUODYwNCAvIFZUODYwNSAvIFZUODYwMyAoQXBvbGxvIFBybzEzM0EgY2hpcHNldCB3aXRoIFMzIFNhdmFnZTQpICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84NjA1XzAsIFwiUHJvU2F2YWdlIFBNMTMzL1BMMTMzL1BOMTMzXCIpLFxuK1x0LyogUDRNMjY2eC9QNE4yNjYgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCwgXCJQNE0yNjZ4L1A0TjI2NlwiKSxcbitcdC8qIFZUODc1NCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODc1NENfMCwgXCJQVDgwMFwiKSxcbitcdC8qIFA0WDYwMCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODc2M18wLCBcIlA0WDYwMFwiKSxcbitcdC8qIEtNNDAwICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzAsIFwiS000MDAvS000MDBBXCIpLFxuK1x0LyogUFQ4ODAgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1BUODgwLCBcIlBUODgwXCIpLFxuK1x0LyogUFQ4ODAgVWx0cmEgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1BUODgwVUxUUkEsIFwiUFQ4ODAgVWx0cmFcIiksXG4rXHQvKiBQVDg5MCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfODc4M18wLCBcIlBUODkwXCIpLFxuK1x0LyogUE04MDAvUE44MDAvUE04ODAvUE44ODAgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAsIFwiUE04MDAvUE44MDAvUE04ODAvUE44ODBcIiksXG4rXHQvKiBLVDg4MCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wLCBcIktUODgwXCIpLFxuK1x0LyogS1R4eHgvUHg4eHggKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSwgXCJWVDgzeHgvVlQ4N3h4L0tUeHh4L1B4OHh4XCIpLFxuK1x0LyogUDRNODAwICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjk2XzAsIFwiUDRNODAwXCIpLFxuK1x0LyogUDRNODAwQ0UgKi9cbitcdElEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFLCBcIlZUMzMxNFwiKSxcbitcdC8qIFZUMzMyNCAvIENYNzAwICovXG4rXHRJRChQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMjQsIFwiQ1g3MDBcIiksXG4rXHQvKiBWVDMzMzYgLSB0aGlzIGlzIGEgY2hpcHNldCBmb3IgQU1EIEF0aGxvbi9LOCBDUFUuIER1ZSB0byBLOCdzIHVuaXF1ZVxuK1x0ICogYXJjaGl0ZWN0dXJlLCB0aGUgQUdQIHJlc291cmNlIGFuZCBiZWhhdmlvciBhcmUgZGlmZmVyZW50IGZyb21cbitcdCAqIHRoZSB0cmFkaXRpb25hbCBBR1Agd2hpY2ggcmVzaWRlcyBvbmx5IGluIGNoaXBzZXQuIEFHUCBpcyB1c2VkXG4rXHQgKiBieSAzRCBkcml2ZXIgd2hpY2ggd2Fzbid0IGF2YWlsYWJsZSBmb3IgdGhlIFZUMzMzNiBhbmQgVlQzMzY0XG4rXHQgKiBnZW5lcmF0aW9uIHVudGlsIG5vdy4gIFVuZm9ydHVuYXRlbHksIGJ5IHRlc3RpbmcsIFZUMzM2NCB3b3Jrc1xuK1x0ICogYnV0IFZUMzMzNiBkb2Vzbid0LiAtIGV4cGxhbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXNcbitcdCAqIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uXG4rXHQgKi9cbisjaWYgMFxuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2LCBcIlZUMzMzNlwiKSxcbisjZW5kaWZcbitcdC8qIFA0TTg5MCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfUDRNODkwLCBcIlA0TTg5MFwiKSxcbitcdC8qIFA0TTkwMCAqL1xuK1x0SUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0LCBcIlA0TTkwMFwiKSxcbiBcdHsgfVxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmMgYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuY1xuaW5kZXggMDVkY2I2Njc1Y2Q2NjEuLjFjZjUxZjc2MzI5MzJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmNcbisrKyBiL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5jXG5AQCAtNTYyLDcgKzU2Miw2IEBAIHN0YXRpYyBpbnQgdHBjaTIwMF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXG4gXHQvKiBTYXZlIHN0cnVjdCBwY2lfZGV2IHBvaW50ZXIgKi9cbiBcdHRwY2kyMDAtXHUwMDNlaW5mby1cdTAwM2VwZGV2ID0gcGRldjtcbi1cdHRwY2kyMDAtXHUwMDNlaW5mby1cdTAwM2VpZF90YWJsZSA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKWlkO1xuIFxuIFx0LyogcmVnaXN0ZXIgdGhlIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBpdCAqL1xuIFx0cmV0ID0gdHBjaTIwMF9pbnN0YWxsKHRwY2kyMDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oIGIvZHJpdmVycy9pcGFjay9jYXJyaWVycy90cGNpMjAwLmhcbmluZGV4IGU3OWFjNjRhYmNmZmFjLi5hMmJmMzEyNTc5NGI3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaXBhY2svY2FycmllcnMvdHBjaTIwMC5oXG4rKysgYi9kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL3RwY2kyMDAuaFxuQEAgLTE0NSw3ICsxNDUsNiBAQCBzdHJ1Y3QgdHBjaTIwMF9zbG90IHtcbiAgKi9cbiBzdHJ1Y3QgdHBjaTIwMF9pbmZvcyB7XG4gXHRzdHJ1Y3QgcGNpX2Rldlx0XHRcdCpwZGV2O1xuLVx0c3RydWN0IHBjaV9kZXZpY2VfaWRcdFx0KmlkX3RhYmxlO1xuIFx0c3RydWN0IHRwY2kyMDBfcmVncyBfX2lvbWVtXHQqaW50ZXJmYWNlX3JlZ3M7XG4gXHR2b2lkIF9faW9tZW1cdFx0XHQqY2ZnX3JlZ3M7XG4gXHRzdHJ1Y3QgaXBhY2tfYnVzX2RldmljZVx0XHQqaXBhY2tfYnVzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvcGNpLmNcbmluZGV4IDBkYTg1ZDM2NjQ3ZDkxLi5iZmUzMjY4ZGZkYzE3ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3BjaS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9wY2kuY1xuQEAgLTEzMCw3ICsxMzAsNiBAQCBzdHJ1Y3QgbWx4c3dfcGNpIHtcbiBcdFx0fSBjb21wO1xuIFx0fSBjbWQ7XG4gXHRzdHJ1Y3QgbWx4c3dfYnVzX2luZm8gYnVzX2luZm87XG4tXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQ7XG4gXHRlbnVtIG1seHN3X3BjaV9jcWVfdiBtYXhfY3FlX3ZlcjsgLyogTWF4aW1hbCBzdXBwb3J0ZWQgQ1FFIHZlcnNpb24gKi9cbiBcdHU4IG51bV9jcXM7IC8qIE51bWJlciBvZiBDUXMgKi9cbiBcdHU4IG51bV9zZHFzOyAvKiBOdW1iZXIgb2YgU0RRcyAqL1xuQEAgLTE3NjgsNyArMTc2Nyw2IEBAIHN0YXRpYyB2b2lkIG1seHN3X3BjaV9tYm94X2ZyZWUoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpLFxuIH1cbiBcbiBzdGF0aWMgaW50IG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksXG4tXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkLFxuIFx0XHRcdFx0ICAgIHUzMiAqcF9zeXNfc3RhdHVzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kO1xuQEAgLTE4MzksNyArMTgzNyw3IEBAIHN0YXRpYyBpbnQgbWx4c3dfcGNpX3Jlc2V0X3N3KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSlcbiB9XG4gXG4gc3RhdGljIGludFxuLW1seHN3X3BjaV9yZXNldChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbittbHhzd19wY2lfcmVzZXQoc3RydWN0IG1seHN3X3BjaSAqbWx4c3dfcGNpKVxuIHtcbiBcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWx4c3dfcGNpLVx1MDAzZXBkZXY7XG4gXHRib29sIHBjaV9yZXNldF9zYnJfc3VwcG9ydGVkID0gZmFsc2U7XG5AQCAtMTg0OCw3ICsxODQ2LDcgQEAgbWx4c3dfcGNpX3Jlc2V0KHN0cnVjdCBtbHhzd19wY2kgKm1seHN3X3BjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0dTMyIHN5c19zdGF0dXM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KG1seHN3X3BjaSwgaWQsIFx1MDAyNnN5c19zdGF0dXMpO1xuK1x0ZXJyID0gbWx4c3dfcGNpX3N5c19yZWFkeV93YWl0KG1seHN3X3BjaSwgXHUwMDI2c3lzX3N0YXR1cyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWNoIHN5c3RlbSByZWFkeSBzdGF0dXMgYmVmb3JlIHJlc2V0LiBTdGF0dXMgaXMgMHgleFxcblwiLFxuIFx0XHRcdHN5c19zdGF0dXMpO1xuQEAgLTE4ODAsNyArMTg3OCw3IEBAIG1seHN3X3BjaV9yZXNldChzdHJ1Y3QgbWx4c3dfcGNpICptbHhzd19wY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRlcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCBpZCwgXHUwMDI2c3lzX3N0YXR1cyk7XG4rXHRlcnIgPSBtbHhzd19wY2lfc3lzX3JlYWR5X3dhaXQobWx4c3dfcGNpLCBcdTAwMjZzeXNfc3RhdHVzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVhY2ggc3lzdGVtIHJlYWR5IHN0YXR1cyBhZnRlciByZXNldC4gU3RhdHVzIGlzIDB4JXhcXG5cIixcbiBcdFx0XHRzeXNfc3RhdHVzKTtcbkBAIC0xOTMyLDcgKzE5MzAsNyBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9pbml0KHZvaWQgKmJ1c19wcml2LCBzdHJ1Y3QgbWx4c3dfY29yZSAqbWx4c3dfY29yZSxcbiBcdGlmICghbWJveClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRlcnIgPSBtbHhzd19wY2lfcmVzZXQobWx4c3dfcGNpLCBtbHhzd19wY2ktXHUwMDNlaWQpO1xuK1x0ZXJyID0gbWx4c3dfcGNpX3Jlc2V0KG1seHN3X3BjaSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9yZXNldDtcbiBcbkBAIC0yNDY0LDcgKzI0NjIsNiBAQCBzdGF0aWMgaW50IG1seHN3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0bWx4c3dfcGNpLVx1MDAzZWJ1c19pbmZvLmRldmljZV9uYW1lID0gcGNpX25hbWUobWx4c3dfcGNpLVx1MDAzZXBkZXYpO1xuIFx0bWx4c3dfcGNpLVx1MDAzZWJ1c19pbmZvLmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIFx0bWx4c3dfcGNpLVx1MDAzZWJ1c19pbmZvLnJlYWRfY2xvY2tfY2FwYWJsZSA9IHRydWU7XG4tXHRtbHhzd19wY2ktXHUwMDNlaWQgPSBpZDtcbiBcbiBcdGVyciA9IG1seHN3X2NvcmVfYnVzX2RldmljZV9yZWdpc3RlcihcdTAwMjZtbHhzd19wY2ktXHUwMDNlYnVzX2luZm8sXG4gXHRcdFx0XHRcdCAgICAgXHUwMDI2bWx4c3dfcGNpX2J1cywgbWx4c3dfcGNpLCBmYWxzZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmNcbmluZGV4IGYzNjc3OGU2MmFjMWE1Li40ODUxMDYxYmFiY2I1ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuY1xuKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jXG5AQCAtMjksNiArMjksNDcgQEAgc3RydWN0IHBjaV9keW5pZCB7XG4gXHRzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZDtcbiB9O1xuIFxuKy8qKlxuKyAqIGRvX3BjaV9hZGRfZHluaWQgLSBhZGQgYSBuZXcgUENJIGRldmljZSBJRCB0byB0aGlzIGRyaXZlciBhbmQgcmUtcHJvYmUgZGV2aWNlc1xuKyAqIEBkcnY6IHRhcmdldCBwY2kgZHJpdmVyXG4rICogQGlkOiBJRCB0byBiZSBhZGRlZFxuKyAqIEBjaGVja19kdXA6IHdoZXRoZXIgdG8gY2hlY2sgaWYgbWF0Y2hpbmcgSUQgaXMgYWxyZWFkeSBwcmVzZW50XG4rICpcbisgKiBBZGRzIGEgbmV3IGR5bmFtaWMgcGNpIGRldmljZSBJRCB0byB0aGlzIGRyaXZlciBhbmQgY2F1c2VzIHRoZVxuKyAqIGRyaXZlciB0byBwcm9iZSBmb3IgYWxsIGRldmljZXMgYWdhaW4uICBAZHJ2IG11c3QgaGF2ZSBiZWVuXG4rICogcmVnaXN0ZXJlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4rICpcbisgKiBDT05URVhUOlxuKyAqIERvZXMgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uLlxuKyAqXG4rICogUkVUVVJOUzpcbisgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxuKyAqL1xuK3N0YXRpYyBpbnQgZG9fcGNpX2FkZF9keW5pZChzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQsIGJvb2wgY2hlY2tfZHVwKVxuK3tcbitcdHN0cnVjdCBwY2lfZHluaWQgKmR5bmlkLCAqZXhpc3RpbmdfZHluaWQ7XG4rXG4rXHRkeW5pZCA9IGt6YWxsb2Nfb2JqKCpkeW5pZCk7XG4rXHRpZiAoIWR5bmlkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGR5bmlkLVx1MDAzZWlkID0gKmlkO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spIHtcbitcdFx0aWYgKGNoZWNrX2R1cCkge1xuK1x0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZXhpc3RpbmdfZHluaWQsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xuK1x0XHRcdFx0aWYgKHBjaV9tYXRjaF9vbmVfaWQoXHUwMDI2ZXhpc3RpbmdfZHluaWQtXHUwMDNlaWQsIGlkKSkge1xuK1x0XHRcdFx0XHRrZnJlZShkeW5pZCk7XG4rXHRcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmR5bmlkLVx1MDAzZW5vZGUsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZHJpdmVyX2F0dGFjaChcdTAwMjZkcnYtXHUwMDNlZHJpdmVyKTtcbit9XG4rXG4gLyoqXG4gICogcGNpX2FkZF9keW5pZCAtIGFkZCBhIG5ldyBQQ0kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyIGFuZCByZS1wcm9iZSBkZXZpY2VzXG4gICogQGRydjogdGFyZ2V0IHBjaSBkcml2ZXJcbkBAIC01NiwyNSArOTcsMTcgQEAgaW50IHBjaV9hZGRfZHluaWQoc3RydWN0IHBjaV9kcml2ZXIgKmRydixcbiBcdFx0ICB1bnNpZ25lZCBpbnQgY2xhc3MsIHVuc2lnbmVkIGludCBjbGFzc19tYXNrLFxuIFx0XHQgIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpXG4ge1xuLVx0c3RydWN0IHBjaV9keW5pZCAqZHluaWQ7XG4tXG4tXHRkeW5pZCA9IGt6YWxsb2Nfb2JqKCpkeW5pZCk7XG4tXHRpZiAoIWR5bmlkKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGR5bmlkLVx1MDAzZWlkLnZlbmRvciA9IHZlbmRvcjtcbi1cdGR5bmlkLVx1MDAzZWlkLmRldmljZSA9IGRldmljZTtcbi1cdGR5bmlkLVx1MDAzZWlkLnN1YnZlbmRvciA9IHN1YnZlbmRvcjtcbi1cdGR5bmlkLVx1MDAzZWlkLnN1YmRldmljZSA9IHN1YmRldmljZTtcbi1cdGR5bmlkLVx1MDAzZWlkLmNsYXNzID0gY2xhc3M7XG4tXHRkeW5pZC1cdTAwM2VpZC5jbGFzc19tYXNrID0gY2xhc3NfbWFzaztcbi1cdGR5bmlkLVx1MDAzZWlkLmRyaXZlcl9kYXRhID0gZHJpdmVyX2RhdGE7XG4tXG4tXHRzcGluX2xvY2soXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5sb2NrKTtcbi1cdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZHluaWQtXHUwMDNlbm9kZSwgXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5saXN0KTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubG9jayk7XG4tXG4tXHRyZXR1cm4gZHJpdmVyX2F0dGFjaChcdTAwMjZkcnYtXHUwMDNlZHJpdmVyKTtcbitcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkID0ge1xuK1x0XHQudmVuZG9yID0gdmVuZG9yLFxuK1x0XHQuZGV2aWNlID0gZGV2aWNlLFxuK1x0XHQuc3VidmVuZG9yID0gc3VidmVuZG9yLFxuK1x0XHQuc3ViZGV2aWNlID0gc3ViZGV2aWNlLFxuK1x0XHQuY2xhc3MgPSBjbGFzcyxcbitcdFx0LmNsYXNzX21hc2sgPSBjbGFzc19tYXNrLFxuK1x0XHQuZHJpdmVyX2RhdGEgPSBkcml2ZXJfZGF0YSxcbitcdH07XG4rXG4rXHRyZXR1cm4gZG9fcGNpX2FkZF9keW5pZChkcnYsIFx1MDAyNmlkLCBmYWxzZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9hZGRfZHluaWQpO1xuIFxuQEAgLTkwLDYgKzEyMywzMCBAQCBzdGF0aWMgdm9pZCBwY2lfZnJlZV9keW5pZHMoc3RydWN0IHBjaV9kcml2ZXIgKmRydilcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubG9jayk7XG4gfVxuIFxuKy8qKlxuKyAqIGRvX3BjaV9tYXRjaF9pZCAtIFNlZSBpZiBhIFBDSSBJRCBtYXRjaGVzIGEgZ2l2ZW4gcGNpX2lkIHRhYmxlXG4rICogQGlkczogYXJyYXkgb2YgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmVzIHRvIHNlYXJjaCBpblxuKyAqIEBkZXZfaWQ6IHRoZSBhY3R1YWwgUENJIGRldmljZSBJRCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdC5cbisgKiBAaW5jbHVkZV9vdmVycmlkZV9vbmx5OiBhbHNvIG1hdGNoIGFnYWluc3QgZGV2aWNlIElEIGVudHJpZXMgbWFya2VkIGFzIG92ZXJyaWRlIG9ubHkuXG4rICpcbisgKiBSZXR1cm5zIHRoZSBtYXRjaGluZyBwY2lfZGV2aWNlX2lkIHN0cnVjdHVyZSBvclxuKyAqICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuKyAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZG9fcGNpX21hdGNoX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsXG4rXHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRldl9pZCxcbitcdFx0XHRcdFx0XHQgICBib29sIGluY2x1ZGVfb3ZlcnJpZGVfb25seSlcbit7XG4rXHRpZiAoaWRzKSB7XG4rXHRcdHdoaWxlIChpZHMtXHUwMDNldmVuZG9yIHx8IGlkcy1cdTAwM2VzdWJ2ZW5kb3IgfHwgaWRzLVx1MDAzZWNsYXNzX21hc2spIHtcbitcdFx0XHRpZiAoKCFpZHMtXHUwMDNlb3ZlcnJpZGVfb25seSB8fCBpbmNsdWRlX292ZXJyaWRlX29ubHkpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBwY2lfbWF0Y2hfb25lX2lkKGlkcywgZGV2X2lkKSlcbitcdFx0XHRcdHJldHVybiBpZHM7XG4rXHRcdFx0aWRzKys7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiBOVUxMO1xuK31cbitcbiAvKipcbiAgKiBwY2lfbWF0Y2hfaWQgLSBTZWUgaWYgYSBQQ0kgZGV2aWNlIG1hdGNoZXMgYSBnaXZlbiBwY2lfaWQgdGFibGVcbiAgKiBAaWRzOiBhcnJheSBvZiBQQ0kgZGV2aWNlIElEIHN0cnVjdHVyZXMgdG8gc2VhcmNoIGluXG5AQCAtMTA1LDE0ICsxNjIsOSBAQCBzdGF0aWMgdm9pZCBwY2lfZnJlZV9keW5pZHMoc3RydWN0IHBjaV9kcml2ZXIgKmRydilcbiBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbi1cdGlmIChpZHMpIHtcbi1cdFx0d2hpbGUgKGlkcy1cdTAwM2V2ZW5kb3IgfHwgaWRzLVx1MDAzZXN1YnZlbmRvciB8fCBpZHMtXHUwMDNlY2xhc3NfbWFzaykge1xuLVx0XHRcdGlmIChwY2lfbWF0Y2hfb25lX2RldmljZShpZHMsIGRldikpXG4tXHRcdFx0XHRyZXR1cm4gaWRzO1xuLVx0XHRcdGlkcysrO1xuLVx0XHR9XG4tXHR9XG4tXHRyZXR1cm4gTlVMTDtcbitcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRldl9pZCA9IHBjaV9pZF9mcm9tX2RldmljZShkZXYpO1xuK1xuK1x0cmV0dXJuIGRvX3BjaV9tYXRjaF9pZChpZHMsIFx1MDAyNmRldl9pZCwgdHJ1ZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wocGNpX21hdGNoX2lkKTtcbiBcbkBAIC0xMjcsNiArMTc5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9kZXZpY2VfaWRfYW55ID0ge1xuICAqIHBjaV9tYXRjaF9kZXZpY2UgLSBTZWUgaWYgYSBkZXZpY2UgbWF0Y2hlcyBhIGRyaXZlcidzIGxpc3Qgb2YgSURzXG4gICogQGRydjogdGhlIFBDSSBkcml2ZXIgdG8gbWF0Y2ggYWdhaW5zdFxuICAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0XG4rICogQGlkX2NvcHk6IFBsYWNlIHRvIHN0b3JlIGNvcHkgb2YgcGNpX2RldmljZV9pZCBmb3IgZHluYW1pYyBJRFxuICAqXG4gICogVXNlZCBieSBhIGRyaXZlciB0byBjaGVjayB3aGV0aGVyIGEgUENJIGRldmljZSBpcyBpbiBpdHMgbGlzdCBvZlxuICAqIHN1cHBvcnRlZCBkZXZpY2VzIG9yIGluIHRoZSBkeW5pZHMgbGlzdCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBhdWdtZW50ZWRcbkBAIC0xMzQsMTAgKzE4NywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2RldmljZV9pZF9hbnkgPSB7XG4gICogc3RydWN0dXJlIG9yICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICAqL1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2RldmljZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LFxuLVx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuK1x0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRfY29weSlcbiB7XG4tXHRzdHJ1Y3QgcGNpX2R5bmlkICpkeW5pZDtcbi1cdGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpmb3VuZF9pZCA9IE5VTEwsICppZHM7XG4rXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmRfaWQgPSBOVUxMO1xuK1x0c3RydWN0IHBjaV9kZXZpY2VfaWQgZGV2X2lkO1xuIFx0aW50IHJldDtcbiBcbiBcdC8qIFdoZW4gZHJpdmVyX292ZXJyaWRlIGlzIHNldCwgb25seSBiaW5kIHRvIHRoZSBtYXRjaGluZyBkcml2ZXIgKi9cbkBAIC0xNDUsNDUgKzE5OSwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9kZXZpY2Uoc3RydWN0IHBjaV9kcml2ZXIgKmRydixcbiBcdGlmIChyZXQgPT0gMClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRkZXZfaWQgPSBwY2lfaWRfZnJvbV9kZXZpY2UoZGV2KTtcbiBcdC8qIExvb2sgYXQgdGhlIGR5bmFtaWMgaWRzIGZpcnN0LCBiZWZvcmUgdGhlIHN0YXRpYyBvbmVzICovXG4tXHRzcGluX2xvY2soXHUwMDI2ZHJ2LVx1MDAzZWR5bmlkcy5sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xuLVx0XHRpZiAocGNpX21hdGNoX29uZV9kZXZpY2UoXHUwMDI2ZHluaWQtXHUwMDNlaWQsIGRldikpIHtcbi1cdFx0XHRmb3VuZF9pZCA9IFx1MDAyNmR5bmlkLVx1MDAzZWlkO1xuLVx0XHRcdGJyZWFrO1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spIHtcbitcdFx0c3RydWN0IHBjaV9keW5pZCAqZHluaWQ7XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsIFx1MDAyNmRydi1cdTAwM2VkeW5pZHMubGlzdCwgbm9kZSkge1xuK1x0XHRcdGlmIChwY2lfbWF0Y2hfb25lX2lkKFx1MDAyNmR5bmlkLVx1MDAzZWlkLCBcdTAwMjZkZXZfaWQpKSB7XG4rXHRcdFx0XHQqaWRfY29weSA9IGR5bmlkLVx1MDAzZWlkO1xuK1x0XHRcdFx0cmV0dXJuIGlkX2NvcHk7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4tXHRzcGluX3VubG9jayhcdTAwMjZkcnYtXHUwMDNlZHluaWRzLmxvY2spO1xuIFxuK1x0Zm91bmRfaWQgPSBkb19wY2lfbWF0Y2hfaWQoZHJ2LVx1MDAzZWlkX3RhYmxlLCBcdTAwMjZkZXZfaWQsIHJldCBcdTAwM2UgMCk7XG4gXHRpZiAoZm91bmRfaWQpXG4gXHRcdHJldHVybiBmb3VuZF9pZDtcbiBcbi1cdGZvciAoaWRzID0gZHJ2LVx1MDAzZWlkX3RhYmxlOyAoZm91bmRfaWQgPSBwY2lfbWF0Y2hfaWQoaWRzLCBkZXYpKTtcbi1cdCAgICAgaWRzID0gZm91bmRfaWQgKyAxKSB7XG4tXHRcdC8qXG4tXHRcdCAqIFRoZSBtYXRjaCB0YWJsZSBpcyBzcGxpdCBiYXNlZCBvbiBkcml2ZXJfb3ZlcnJpZGUuXG4tXHRcdCAqIEluIGNhc2Ugb3ZlcnJpZGVfb25seSB3YXMgc2V0LCBlbmZvcmNlIGRyaXZlcl9vdmVycmlkZVxuLVx0XHQgKiBtYXRjaGluZy5cbi1cdFx0ICovXG4tXHRcdGlmIChmb3VuZF9pZC1cdTAwM2VvdmVycmlkZV9vbmx5KSB7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbi1cdFx0XHRcdHJldHVybiBmb3VuZF9pZDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXR1cm4gZm91bmRfaWQ7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdC8qIGRyaXZlcl9vdmVycmlkZSB3aWxsIGFsd2F5cyBtYXRjaCwgc2VuZCBhIGR1bW15IGlkICovXG4gXHRpZiAocmV0IFx1MDAzZSAwKVxuIFx0XHRyZXR1cm4gXHUwMDI2cGNpX2RldmljZV9pZF9hbnk7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX3BjaV9mcmVlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4te1xuLVx0a2ZyZWUodG9fcGNpX2RldihkZXYpKTtcbi19XG4tXG4gLyoqXG4gICogbmV3X2lkX3N0b3JlIC0gc3lzZnMgZnJvbnRlbmQgdG8gcGNpX2FkZF9keW5pZCgpXG4gICogQGRyaXZlcjogdGFyZ2V0IGRldmljZSBkcml2ZXJcbkBAIC0xOTcsMzggKzIzNSwyMiBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLFxuIHtcbiBcdHN0cnVjdCBwY2lfZHJpdmVyICpwZHJ2ID0gdG9fcGNpX2RyaXZlcihkcml2ZXIpO1xuIFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcyA9IHBkcnYtXHUwMDNlaWRfdGFibGU7XG4tXHR1MzIgdmVuZG9yLCBkZXZpY2UsIHN1YnZlbmRvciA9IFBDSV9BTllfSUQsXG4tXHRcdHN1YmRldmljZSA9IFBDSV9BTllfSUQsIGNsYXNzID0gMCwgY2xhc3NfbWFzayA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhID0gMDtcbitcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkID0ge1xuK1x0XHQuc3VidmVuZG9yID0gUENJX0FOWV9JRCxcbitcdFx0LnN1YmRldmljZSA9IFBDSV9BTllfSURcbitcdH07XG4gXHRpbnQgZmllbGRzO1xuIFx0aW50IHJldHZhbCA9IDA7XG4gXG4gXHRmaWVsZHMgPSBzc2NhbmYoYnVmLCBcIiV4ICV4ICV4ICV4ICV4ICV4ICVseFwiLFxuLVx0XHRcdFx1MDAyNnZlbmRvciwgXHUwMDI2ZGV2aWNlLCBcdTAwMjZzdWJ2ZW5kb3IsIFx1MDAyNnN1YmRldmljZSxcbi1cdFx0XHRcdTAwMjZjbGFzcywgXHUwMDI2Y2xhc3NfbWFzaywgXHUwMDI2ZHJpdmVyX2RhdGEpO1xuK1x0XHRcdFx1MDAyNmlkLnZlbmRvciwgXHUwMDI2aWQuZGV2aWNlLCBcdTAwMjZpZC5zdWJ2ZW5kb3IsIFx1MDAyNmlkLnN1YmRldmljZSxcbitcdFx0XHRcdTAwMjZpZC5jbGFzcywgXHUwMDI2aWQuY2xhc3NfbWFzaywgXHUwMDI2aWQuZHJpdmVyX2RhdGEpO1xuIFx0aWYgKGZpZWxkcyBcdTAwM2MgMilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoZmllbGRzICE9IDcpIHtcbi1cdFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBremFsbG9jX29iaigqcGRldik7XG4tXHRcdGlmICghcGRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdFx0cGRldi1cdTAwM2V2ZW5kb3IgPSB2ZW5kb3I7XG4tXHRcdHBkZXYtXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xuLVx0XHRwZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3IgPSBzdWJ2ZW5kb3I7XG4tXHRcdHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZSA9IHN1YmRldmljZTtcbi1cdFx0cGRldi1cdTAwM2VjbGFzcyA9IGNsYXNzO1xuLVx0XHRwZGV2LVx1MDAzZWRldi5yZWxlYXNlID0gX3BjaV9mcmVlX2RldmljZTtcbi1cbi1cdFx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuLVx0XHRpZiAocGNpX21hdGNoX2RldmljZShwZHJ2LCBwZGV2KSlcbi1cdFx0XHRyZXR2YWwgPSAtRUVYSVNUO1xuLVxuLVx0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbi1cbi1cdFx0aWYgKHJldHZhbClcbi1cdFx0XHRyZXR1cm4gcmV0dmFsO1xuK1x0XHRpZiAoZG9fcGNpX21hdGNoX2lkKHBkcnYtXHUwMDNlaWRfdGFibGUsIFx1MDAyNmlkLCBmYWxzZSkpXG4rXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHR9XG4gXG4gXHQvKiBPbmx5IGFjY2VwdCBkcml2ZXJfZGF0YSB2YWx1ZXMgdGhhdCBtYXRjaCBhbiBleGlzdGluZyBpZF90YWJsZVxuQEAgLTIzNiw3ICsyNTgsNyBAQCBzdGF0aWMgc3NpemVfdCBuZXdfaWRfc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLFxuIFx0aWYgKGlkcykge1xuIFx0XHRyZXR2YWwgPSAtRUlOVkFMO1xuIFx0XHR3aGlsZSAoaWRzLVx1MDAzZXZlbmRvciB8fCBpZHMtXHUwMDNlc3VidmVuZG9yIHx8IGlkcy1cdTAwM2VjbGFzc19tYXNrKSB7XG4tXHRcdFx0aWYgKGRyaXZlcl9kYXRhID09IGlkcy1cdTAwM2Vkcml2ZXJfZGF0YSkge1xuK1x0XHRcdGlmIChpZC5kcml2ZXJfZGF0YSA9PSBpZHMtXHUwMDNlZHJpdmVyX2RhdGEpIHtcbiBcdFx0XHRcdHJldHZhbCA9IDA7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG5AQCAtMjQ2LDggKzI2OCw3IEBAIHN0YXRpYyBzc2l6ZV90IG5ld19pZF9zdG9yZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLCBjb25zdCBjaGFyICpidWYsXG4gXHRcdFx0cmV0dXJuIHJldHZhbDtcbiBcdH1cbiBcbi1cdHJldHZhbCA9IHBjaV9hZGRfZHluaWQocGRydiwgdmVuZG9yLCBkZXZpY2UsIHN1YnZlbmRvciwgc3ViZGV2aWNlLFxuLVx0XHRcdCAgICAgICBjbGFzcywgY2xhc3NfbWFzaywgZHJpdmVyX2RhdGEpO1xuK1x0cmV0dmFsID0gZG9fcGNpX2FkZF9keW5pZChwZHJ2LCBcdTAwMjZpZCwgZmllbGRzICE9IDcpO1xuIFx0aWYgKHJldHZhbClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcdHJldHVybiBjb3VudDtcbkBAIC00NDUsMTIgKzQ2NiwxMyBAQCB2b2lkIHBjaV9wcm9iZV9mbHVzaF93b3JrcXVldWUodm9pZClcbiBzdGF0aWMgaW50IF9fcGNpX2RldmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQ7XG4rXHRzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF9jb3B5O1xuIFx0aW50IGVycm9yID0gMDtcbiBcbiBcdGlmIChkcnYtXHUwMDNlcHJvYmUpIHtcbiBcdFx0ZXJyb3IgPSAtRU5PREVWO1xuIFxuLVx0XHRpZCA9IHBjaV9tYXRjaF9kZXZpY2UoZHJ2LCBwY2lfZGV2KTtcbitcdFx0aWQgPSBwY2lfbWF0Y2hfZGV2aWNlKGRydiwgcGNpX2RldiwgXHUwMDI2aWRfY29weSk7XG4gXHRcdGlmIChpZClcbiBcdFx0XHRlcnJvciA9IHBjaV9jYWxsX3Byb2JlKGRydiwgcGNpX2RldiwgaWQpO1xuIFx0fVxuQEAgLTE1MzgsMTIgKzE1NjAsMTMgQEAgc3RhdGljIGludCBwY2lfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcbiBcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpO1xuIFx0c3RydWN0IHBjaV9kcml2ZXIgKnBjaV9kcnY7XG4gXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmRfaWQ7XG4rXHRzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF9jb3B5O1xuIFxuIFx0aWYgKHBjaV9kZXZfYmluZGluZ19kaXNhbGxvd2VkKHBjaV9kZXYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHBjaV9kcnYgPSAoc3RydWN0IHBjaV9kcml2ZXIgKil0b19wY2lfZHJpdmVyKGRydik7XG4tXHRmb3VuZF9pZCA9IHBjaV9tYXRjaF9kZXZpY2UocGNpX2RydiwgcGNpX2Rldik7XG4rXHRmb3VuZF9pZCA9IHBjaV9tYXRjaF9kZXZpY2UocGNpX2RydiwgcGNpX2RldiwgXHUwMDI2aWRfY29weSk7XG4gXHRpZiAoZm91bmRfaWQpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IDQ0NjllMWE3N2YzYzEzLi4wNTY3YTg3NjJiYWEwOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuaFxuQEAgLTQ0MiwyMSArNDQyLDM3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9zZXR1cF9jYXJkYnVzKGNoYXIgKnN0cikgeyByZXR1cm4gLUVOT0VOVDsgfVxuICNlbmRpZiAvKiBDT05GSUdfQ0FSREJVUyAqL1xuIFxuIC8qKlxuLSAqIHBjaV9tYXRjaF9vbmVfZGV2aWNlIC0gVGVsbCBpZiBhIFBDSSBkZXZpY2Ugc3RydWN0dXJlIGhhcyBhIG1hdGNoaW5nXG4tICpcdFx0XHQgIFBDSSBkZXZpY2UgaWQgc3RydWN0dXJlXG4tICogQGlkOiBzaW5nbGUgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmUgdG8gbWF0Y2hcbi0gKiBAZGV2OiB0aGUgUENJIGRldmljZSBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdFxuKyAqIHBjaV9pZF9mcm9tX2RldmljZSAtIE9idGFpbiBhIHBjaV9kZXZpY2VfaWQgZnJvbSBhIFBDSSBkZXZpY2VcbisgKiBAZGV2OiB0aGUgUENJIGRldmljZVxuKyAqXG4rICogUmV0dXJucyBhIHBjaV9kZXZpY2VfaWQgZmlsbGVkLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkX2Zyb21fZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3QgcGNpX2RldmljZV9pZCkge1xuK1x0XHQudmVuZG9yID0gZGV2LVx1MDAzZXZlbmRvcixcbitcdFx0LmRldmljZSA9IGRldi1cdTAwM2VkZXZpY2UsXG4rXHRcdC5zdWJ2ZW5kb3IgPSBkZXYtXHUwMDNlc3Vic3lzdGVtX3ZlbmRvcixcbitcdFx0LnN1YmRldmljZSA9IGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlLFxuK1x0XHQuY2xhc3MgPSBkZXYtXHUwMDNlY2xhc3MsXG4rXHR9O1xuK31cbitcbisvKipcbisgKiBwY2lfbWF0Y2hfb25lX2lkIC0gVGVsbCBpZiBhIFBDSSBkZXZpY2UgSUQgbWF0Y2hlcyBhIG5lZWRsZSBQQ0kgZGV2aWNlIGlkXG4rICogQGlkOiBzaW5nbGUgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggYWdhaW5zdCAobmVlZGxlKVxuKyAqIEBkZXZfaWQ6IHRoZSBhY3R1YWwgSUQgZnJvbSB0aGUgUENJIGRldmljZSAoY2FuIGJlIGNyZWF0ZWQgdmlhIHBjaV9pZF9mcm9tX2RldmljZSlcbiAgKlxuICAqIFJldHVybnMgdGhlIG1hdGNoaW5nIHBjaV9kZXZpY2VfaWQgc3RydWN0dXJlIG9yICVOVUxMIGlmIHRoZXJlIGlzIG5vIG1hdGNoLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKlxuLXBjaV9tYXRjaF9vbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldilcbitwY2lfbWF0Y2hfb25lX2lkKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRldl9pZClcbiB7XG4tXHRpZiAoKGlkLVx1MDAzZXZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVx1MDAzZXZlbmRvciA9PSBkZXYtXHUwMDNldmVuZG9yKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoaWQtXHUwMDNlZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlZGV2aWNlID09IGRldi1cdTAwM2VkZXZpY2UpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChpZC1cdTAwM2VzdWJ2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC1cdTAwM2VzdWJ2ZW5kb3IgPT0gZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3IpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChpZC1cdTAwM2VzdWJkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC1cdTAwM2VzdWJkZXZpY2UgPT0gZGV2LVx1MDAzZXN1YnN5c3RlbV9kZXZpY2UpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEoKGlkLVx1MDAzZWNsYXNzIF4gZGV2LVx1MDAzZWNsYXNzKSBcdTAwMjYgaWQtXHUwMDNlY2xhc3NfbWFzaykpXG4rXHRpZiAoKGlkLVx1MDAzZXZlbmRvciA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVx1MDAzZXZlbmRvciA9PSBkZXZfaWQtXHUwMDNldmVuZG9yKSBcdTAwMjZcdTAwMjZcbitcdCAgICAoaWQtXHUwMDNlZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtXHUwMDNlZGV2aWNlID09IGRldl9pZC1cdTAwM2VkZXZpY2UpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChpZC1cdTAwM2VzdWJ2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC1cdTAwM2VzdWJ2ZW5kb3IgPT0gZGV2X2lkLVx1MDAzZXN1YnZlbmRvcikgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGlkLVx1MDAzZXN1YmRldmljZSA9PSBQQ0lfQU5ZX0lEIHx8IGlkLVx1MDAzZXN1YmRldmljZSA9PSBkZXZfaWQtXHUwMDNlc3ViZGV2aWNlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhKChpZC1cdTAwM2VjbGFzcyBeIGRldl9pZC1cdTAwM2VjbGFzcykgXHUwMDI2IGlkLVx1MDAzZWNsYXNzX21hc2spKVxuIFx0XHRyZXR1cm4gaWQ7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guY1xuaW5kZXggZTNkMzE3N2ZjZTU0OWUuLmM4YzRiZmU3ODE3YjAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvc2VhcmNoLmNcbisrKyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jXG5AQCAtMjQ1LDggKzI0NSwxMCBAQCBzdGF0aWMgaW50IG1hdGNoX3BjaV9kZXZfYnlfaWQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpO1xuIFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkID0gZGF0YTtcbitcdHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRldl9pZDtcbiBcbi1cdGlmIChwY2lfbWF0Y2hfb25lX2RldmljZShpZCwgcGRldikpXG4rXHRkZXZfaWQgPSBwY2lfaWRfZnJvbV9kZXZpY2UocGRldik7XG4rXHRpZiAocGNpX21hdGNoX29uZV9pZChpZCwgXHUwMDI2ZGV2X2lkKSlcbiBcdFx0cmV0dXJuIDE7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNDE4LDcgKzQyMCw3IEBAIEVYUE9SVF9TWU1CT0wocGNpX2dldF9jbGFzcyk7XG4gICpcbiAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBsaXN0IG9mIGtub3duIFBDSSBkZXZpY2VzLiBJZiBhIFBDSSBkZXZpY2UgaXMgZm91bmRcbiAgKiB3aXRoIGEgbWF0Y2hpbmcgYmFzZSBjbGFzcyBjb2RlLCB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHRoZSBkZXZpY2UgaXNcbi0gKiBpbmNyZW1lbnRlZC4gU2VlIHBjaV9tYXRjaF9vbmVfZGV2aWNlKCkgdG8gZmlndXJlIG91dCBob3cgZG9lcyB0aGlzIHdvcmtzLlxuKyAqIGluY3JlbWVudGVkLiBTZWUgcGNpX21hdGNoX29uZV9pZCgpIHRvIGZpZ3VyZSBvdXQgaG93IGRvZXMgdGhpcyB3b3Jrcy5cbiAgKiBBIG5ldyBzZWFyY2ggaXMgaW5pdGlhdGVkIGJ5IHBhc3NpbmcgJU5VTEwgYXMgdGhlIEBmcm9tIGFyZ3VtZW50LlxuICAqIE90aGVyd2lzZSBpZiBAZnJvbSBpcyBub3QgJU5VTEwsIHNlYXJjaGVzIGNvbnRpbnVlIGZyb20gbmV4dCBkZXZpY2Ugb24gdGhlXG4gICogZ2xvYmFsIGxpc3QuIFRoZSByZWZlcmVuY2UgY291bnQgZm9yIEBmcm9tIGlzIGFsd2F5cyBkZWNyZW1lbnRlZCBpZiBpdCBpc1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jIGIvZHJpdmVycy9zY3NpL25zcDMyLmNcbmluZGV4IGU4OTNkNTY3NzI0MTdhLi45YzkyODEyMjJhMGFjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jXG4rKysgYi9kcml2ZXJzL3Njc2kvbnNwMzIuY1xuQEAgLTE0NzAsNyArMTQ3MCw3IEBAIHN0YXRpYyBpbnQgbnNwMzJfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IFNjc2lfSG9zdCAqaG9zdClcbiBcdFx0ICAgKG5zcDMyX3JlYWQyKGJhc2UsIElOREVYX1JFRykgXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmKTtcbiBcbiBcdG1vZGVfcmVnID0gbnNwMzJfaW5kZXhfcmVhZDEoYmFzZSwgQ0hJUF9NT0RFKTtcbi1cdG1vZGVsICAgID0gZGF0YS1cdTAwM2VwY2lfZGV2aWQtXHUwMDNlZHJpdmVyX2RhdGE7XG4rXHRtb2RlbCAgICA9IGRhdGEtXHUwMDNlbW9kZWw7XG4gXG4gI2lmZGVmIENPTkZJR19QTVxuIFx0c2VxX3ByaW50ZihtLCBcIlBvd2VyIE1hbmFnZW1lbnQ6ICAgICAgJXNcXG5cIixcbkBAIC0yOTA3LDggKzI5MDcsOCBAQCBzdGF0aWMgaW50IG5zcDMyX2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpXG4gICovXG4gc3RhdGljIGludCBuc3AzMl9nZXRwcm9tX3BhcmFtKG5zcDMyX2h3X2RhdGEgKmRhdGEpXG4ge1xuLVx0aW50IHZlbmRvciA9IGRhdGEtXHUwMDNlcGNpX2RldmlkLVx1MDAzZXZlbmRvcjtcbi1cdGludCBkZXZpY2UgPSBkYXRhLVx1MDAzZXBjaV9kZXZpZC1cdTAwM2VkZXZpY2U7XG4rXHRpbnQgdmVuZG9yID0gZGF0YS1cdTAwM2VQY2ktXHUwMDNldmVuZG9yO1xuK1x0aW50IGRldmljZSA9IGRhdGEtXHUwMDNlUGNpLVx1MDAzZWRldmljZTtcbiBcdGludCByZXQsIGk7XG4gXHRpbnQgX19tYXliZV91bnVzZWQgdmFsO1xuIFxuQEAgLTMzNDAsNyArMzM0MCw3IEBAIHN0YXRpYyBpbnQgbnNwMzJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdH1cbiBcbiBcdGRhdGEtXHUwMDNlUGNpXHQgID0gcGRldjtcbi1cdGRhdGEtXHUwMDNlcGNpX2RldmlkICAgPSBpZDtcbitcdGRhdGEtXHUwMDNlbW9kZWwgICAgICAgPSBpZC1cdTAwM2Vkcml2ZXJfZGF0YTtcbiBcdGRhdGEtXHUwMDNlSXJxTnVtYmVyICAgPSBwZGV2LVx1MDAzZWlycTtcbiBcdGRhdGEtXHUwMDNlQmFzZUFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7XG4gXHRkYXRhLVx1MDAzZU51bUFkZHJlc3MgID0gcGNpX3Jlc291cmNlX2xlbiAgKHBkZXYsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oIGIvZHJpdmVycy9zY3NpL25zcDMyLmhcbmluZGV4IDkyNDg4OWY4YmQzN2U3Li45ZTY1NzcxY2I1OTI4NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oXG4rKysgYi9kcml2ZXJzL3Njc2kvbnNwMzIuaFxuQEAgLTU2NCwxMCArNTY0LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9uc3AzMl9od19kYXRhIHtcbiBcbiBcdHN0cnVjdCBzY3NpX2NtbmQgKkN1cnJlbnRTQztcbiBcbi1cdHN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICpQY2k7XG4tXHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldmlkO1xuLVx0c3RydWN0IFNjc2lfSG9zdCAgICAgICAgICAgKkhvc3Q7XG4tXHRzcGlubG9ja190ICAgICAgICAgICAgICAgICAgTG9jaztcbitcdHN0cnVjdCBwY2lfZGV2ICAgICpQY2k7XG4rXHRpbnQgICAgICAgICAgICAgICAgbW9kZWw7XG4rXHRzdHJ1Y3QgU2NzaV9Ib3N0ICAqSG9zdDtcbitcdHNwaW5sb2NrX3QgICAgICAgICBMb2NrO1xuIFxuIFx0Y2hhciBpbmZvX3N0clsxMDBdO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5pbmRleCA2NGIzMDhiNmU2MWMxOS4uOTJjMTdjMTE2ZGU2ZDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5AQCAtOTc5LDYgKzk3OSw3IEBAIHN0cnVjdCBtb2R1bGU7XG4gICpcdFx0ZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHdoZW4gdGhlIGRyaXZlciBjaG9vc2VzIHRvXG4gICpcdFx0dGFrZSBcIm93bmVyc2hpcFwiIG9mIHRoZSBkZXZpY2Ugb3IgYW4gZXJyb3IgY29kZVxuICAqXHRcdChuZWdhdGl2ZSBudW1iZXIpIG90aGVyd2lzZS5cbisgKlx0XHRUaGUgcGNpX2RldmljZV9pZCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBkdXJpbmcgcHJvYmUuXG4gICpcdFx0VGhlIHByb2JlIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3NcbiAgKlx0XHRjb250ZXh0LCBzbyBpdCBjYW4gc2xlZXAuXG4gICogQHJlbW92ZTpcdFRoZSByZW1vdmUoKSBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuZXZlciBhIGRldmljZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDQ6NDQuNDUwNDkwNDY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA2ODU5NjA2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUENJIE1hdGNoaW5nIFJlZmFjdG9yaW5nIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgUENJIGRldmljZSBJRHMgYXJlIG1hdGNoZWQsIHBhcnRpY3VsYXJseSBmb3IgZHluYW1pYyBJRHMgYWRkZWQgdmlhIHN5c2ZzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiB0aGF0IGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHRoZSBzaGlmdCBpbiBob3cgYHBjaV9tYXRjaF9kZXZpY2VgIHdvcmtzLCBlc3BlY2lhbGx5IGl0cyBpbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWNhbGx5IGFkZGVkIElEcy5cblxuSGVyZSdzIG15IGJyZWFrZG93bjpcblxuKiAgICoqQ29yZSBDaGFuZ2U6KiogVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgUENJIG1hdGNoaW5nIGxvZ2ljIHRvIHBhc3MgYSBjb3B5IG9mIHRoZSBtYXRjaGVkIGBwY2lfZGV2aWNlX2lkYCAoYGlkX2NvcHlgKSB0byB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24sIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBJRCAod2hpY2gsIGluIHRoZSBjYXNlIG9mIGR5bmFtaWMgSURzLCBjb3VsZCBiZSBoZWFwLWFsbG9jYXRlZCkuXG4qICAgKipNb3RpdmF0aW9uOioqIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbjogcHJldmlvdXNseSwgZHJpdmVycyBjb3VsZCBzdG9yZSBhIHBvaW50ZXIgdG8gYSBgcGNpX2RldmljZV9pZGAgdGhhdCBtaWdodCBiZWNvbWUgaW52YWxpZCAoZS5nLiwgaWYgdGhlIGR5bmFtaWMgSUQgd2FzIHJlbW92ZWQpLiBUaGUgbmV3IGFwcHJvYWNoIGZvcmNlcyBkcml2ZXJzIHRvIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeSBgZHJpdmVyX2RhdGFgIG9yIHNpbWlsYXIgaW5mb3JtYXRpb24gKmR1cmluZyogdGhlIHByb2JlIGFuZCBub3QgdG8gc3RvcmUgdGhlIG5vdyB0ZW1wb3JhcnkgYHBjaV9kZXZpY2VfaWRgIHBvaW50ZXIuXG4qICAgKipJbXBhY3Q6KiogVGhpcyBpcyBhIGJpZyBkZWFsLiBTZXZlcmFsIGRyaXZlcnMsIGluY2x1ZGluZyBBVEEsIEFHUCwgTWVsbGFub3gsIGFuZCBvdGhlcnMsIGFyZSBkaXJlY3RseSBtb2RpZmllZCB0byByZWZsZWN0IHRoaXMgbmV3IHBhcmFkaWdtLiBUaGVzZSBkcml2ZXJzIG5vdyBuZWVkIHRvIHN0b3JlIGFuZCBhY2Nlc3MgZHJpdmVyLXNwZWNpZmljIGRhdGEgZHVyaW5nIHRoZSBwcm9iZSBpbnN0ZWFkIG9mIHRoZSBgcGNpX2RldmljZV9pZGAgcG9pbnRlciBpdHNlbGYuXG4qICAgKipGdXp6aW5nIFBvdGVudGlhbDoqKiBUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCBmdXp6aW5nLXdpc2UsIGlzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN5c2ZzIChgbmV3X2lkYCksIGR5bmFtaWMgSUQgaGFuZGxpbmcsIGFuZCB0aGUgUENJIG1hdGNoaW5nIGNvcmUuIFN5emthbGxlciBjYW4gZWFzaWx5IGludGVyYWN0IHdpdGggc3lzZnMgYW5kIGFkZCBkeW5hbWljIElEcyAodHJpZ2dlcmluZyBgbmV3X2lkX3N0b3JlYCwgd2hpY2ggY2FsbHMgYGRvX3BjaV9hZGRfZHluaWRgKS4gVGhlIHByb2JpbmcgcHJvY2VzcyB0aGVuIGdvZXMgdGhyb3VnaCBgcGNpX21hdGNoX2RldmljZWAgYW5kIGBwY2lfbWF0Y2hfb25lX2lkYC4gVGhlIGNoYW5nZWQgbG9naWMgaXMgaW50ZXJlc3RpbmcuXG4qICAgKipGdXp6aW5nIFRhcmdldHM6KiogSSd2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcyBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0czpcbiAgICAqICAgYGRvX3BjaV9hZGRfZHluaWRgXG4gICAgKiAgIGBuZXdfaWRfc3RvcmVgXG4gICAgKiAgIGBwY2lfbWF0Y2hfZGV2aWNlYFxuICAgICogICBgcGNpX21hdGNoX29uZV9pZGBcbiAgICAqICAgYF9fcGNpX2RldmljZV9wcm9iZWBcbiogICAqKk1vZGlmaWVkIERyaXZlcnMgKGFsc28gdG8gZnV6eik6KipcbiAgICAqICAgYGF0YV9nZW5lcmljX2luaXRfb25lYFxuICAgICogICBgYWdwX2FtZGs3X3Byb2JlYFxuICAgICogICBgYWdwX3ZpYV9wcm9iZWBcbiAgICAqICAgYHRwY2kyMDBfcGNpX3Byb2JlYFxuICAgICogICBgbWx4c3dfcGNpX3Byb2JlYFxuICAgICogICBgbnNwMzJfcHJvYmVgXG4qICAgKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zOioqIEkgbmVlZCB0byB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbW9kaWZpZWQgZHJpdmVycyB0byBiZSBlbmFibGVkLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBjaGVjayBmb3I6XG4gICAgKiAgIGBBVEFfR0VORVJJQ2BcbiAgICAqICAgYEFHUF9BTUQ2NGAgb3IgYEFHUF9BTURLN2BcbiAgICAqICAgYEFHUF9WSUFgXG4gICAgKiAgIGBUUENJMjAwYFxuICAgICogICBgTUxYU1dfUENJYFxuICAgICogICBgU0NTSV9OU1AzMmBcbiAgICAqICBgQ09ORklHX1BDSWAgKHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdClcblxuU3l6a2FsbGVyIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYG5ld19pZGAgc3lzZnMgZW50cnkgYW5kIGNhbiB0cmlnZ2VyIGR5bmFtaWMgSUQgYWRkaXRpb24sIGxlYWRpbmcgdG8gZXhlY3V0aW9uIG9mIHRoZSBQQ0kgcHJvYmluZyBmdW5jdGlvbnMgd2hpY2ggaW4gdHVybiBjYWxscyB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgc2V0IG9mIGNoYW5nZXMgb2ZmZXJzIGludGVyZXN0aW5nIGZ1enppbmcgc2NlbmFyaW9zLiBUaGUgZHJpdmVycyB0aGF0IHdlcmUgY2hhbmdlZCB3aWxsIG5lZWQgdG8gYmUgZnV6emVkIGFzIHdlbGwgdG8gdGVzdCB0aGUgZXh0cmFjdGlvbiBhbmQgc3RvcmFnZSBvZiBkcml2ZXIgZGF0YSBkdXJpbmcgcHJvYmluZy4gSXQgYWxsIGNvbWVzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTowNS4xMzY0NTM3OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MjEzMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEFfR0VORVJJQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2F0YS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hdGEvS2NvbmZpZz0xMTYzPWNvbmZpZyBQQVRBX0FDUElcXG4tLVxcbmRyaXZlcnMvYXRhL0tjb25maWctMTE3Mi1cXG5kcml2ZXJzL2F0YS9LY29uZmlnOjExNzM6Y29uZmlnIEFUQV9HRU5FUklDXFxuZHJpdmVycy9hdGEvS2NvbmZpZy0xMTc0LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIEFUQSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTowNS4yNTU2NzI5MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA5MTYwMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipJbnRlcm5hbCBNdXNpbmdzIG9uIEFUQV9HRU5FUklDKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMuLi4gYEFUQV9HRU5FUklDYC4gSG1tLCBsZXQncyBzZWUuIFRoZSB0ZXh0IHNheXMuLi4gd2VsbCwgaXQgKmlzKiBgQVRBX0dFTkVSSUNgLiBPa2F5LCB0aGF0J3Mgbm90IGV4YWN0bHkgcmV2ZWxhdG9yeSwgaXMgaXQ/IENsZWFybHksIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudCBpcyB0aGF0IGBBVEFfR0VORVJJQ2AgaXMsIGluIGZhY3QsIGBBVEFfR0VORVJJQ2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBJIHdvbmRlciB3aHkgdGhpcyBzdGF0ZW1lbnQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBub3RlZC4gSXMgaXQgc2ltcGx5IGEgbWF0dGVyIG9mIGVzdGFibGlzaGluZyB0aGUgZ3JvdW5kd29yayBmb3IgbW9yZSBjb21wbGV4IGludGVyYWN0aW9ucz8gSXMgdGhlcmUgYSBuZWVkIHRvIGRlZmluZSB0aGUgdGhpbmcgYXMgaXRzZWxmLCBwZXJoYXBzIHdpdGhpbiB0aGUgY29udGV4dCBvZiBzb21lIGJyb2FkZXIgc3lzdGVtIG9yIHNwZWNpZmljYXRpb24/IEl0IHNlZW1zIGxpa2UgdGhpcyBtaWdodCBiZSBtb3JlIG9mIGEgcGxhY2Vob2xkZXIgdGhhbiBhIHJldmVsYXRpb24uIFNvLCBJIG5lZWQgdG8gc3RhcnQgYnVpbGRpbmcgY29udGV4dC4gSG93IGNhbiBJIGV4cGFuZCB1cG9uIHRoaXMgaW4gYSBtZWFuaW5nZnVsIHdheT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTowOC4xNjQ4MzYxMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTczNDA0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFHUF9BTURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9jaGFyL2FncC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jaGFyL2FncC9LY29uZmlnPTQ1PWNvbmZpZyBBR1BfQVRJXFxuLS1cXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctNTEtXFxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnOjUyOmNvbmZpZyBBR1BfQU1EXFxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctNTgtXFxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnOjU5OmNvbmZpZyBBR1BfQU1ENjRcXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWctNjAtXFx0dHJpc3RhdGUgXFxcIkFNRCBPcHRlcm9uL0F0aGxvbjY0IG9uLUNQVSBHQVJUIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjA4LjI4MjE4NzgwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDM0MDY0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEFHUF9BTUQgVmFyaWFibGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFNlZWluZyBcIkFHUFxcX0FNRFwiIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gQWNjZWxlcmF0ZWQgR3JhcGhpY3MgUG9ydCAoQUdQKSBhbmQgQU1EIGhhcmR3YXJlLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIHVuZGVyc2NvcmUgaXMgaW50ZXJlc3RpbmcsIGl0IGltcGxpZXMgYSB2YXJpYWJsZSBvciBhIGxhYmVsLCBub3QgYSBkaXJlY3QgY29tbWFuZCBvciBmaWxlbmFtZS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcImlzIHRoaXMgYSBzeXN0ZW0gdmFyaWFibGUsIGEgZHJpdmVyIHNldHRpbmcsIGEgcmVnaXN0cnkga2V5LCBvciBwYXJ0IG9mIGEgY29uZmlndXJhdGlvbiBmaWxlP1wiIFdpdGhvdXQgbW9yZSBjb250ZXh0LCBpdCdzIGltcG9zc2libGUgdG8gc2F5IGZvciBzdXJlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBJJ20gZW5jb3VudGVyaW5nIHRoaXMgdGV4dC5cblxuSWYgSSB3ZXJlIHRvIHRha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MsIEnigJlkIHByZXN1bWUgaXQgcmVmZXJzIHRvIGEgcGFydGljdWxhciBBR1Agc2V0dGluZyBvciBhIGZlYXR1cmUgdGhhdOKAmXMgc3BlY2lmaWMgdG8gQU1EIGhhcmR3YXJlLCBwb3NzaWJseSBpbiBhIGRyaXZlciBjb25maWd1cmF0aW9uLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIEFHUCBhcGVydHVyZSBzaXplLCBBR1AgdHJhbnNmZXIgcmF0ZSBtb2RlcyAobGlrZSA0eCBvciA4eCksIG9yIHBlcmhhcHMgZXZlbiBzb21lIHByb3ByaWV0YXJ5IEFNRCBleHRlbnNpb24gZm9yIEFHUC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRvIGludmVzdGlnYXRlIHBvdGVudGlhbCBkcml2ZXIgc2V0dGluZ3Mgb3IgQklPUyBzZXR0aW5ncyBmb3IgYW4gQU1ELWJhc2VkIHN5c3RlbSB3aXRoIEFHUC4gVGhlIHZhcmlhYmxlIGl0c2VsZiwgYnkgbmFtaW5nIHRoZSBoYXJkd2FyZSAqYW5kKiB0aGUgdGVjaG5vbG9neSwgc3VnZ2VzdHMgYW4gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBUaGUgcHJlY2lzZSBtZWFuaW5nLCB0aG91Z2gsIGlzIGVudGlyZWx5IGRlcGVuZGVudCBvbiB0aGUgc3lzdGVtIG9yIGNvZGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NToxMS45MjU1OTY4NzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg1NzA3MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBR1BfVklBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvY2hhci9hZ3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZz05OD1jb25maWcgQUdQX1NXT1JLU1xcbi0tXFxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnLTEwNC1cXG5kcml2ZXJzL2NoYXIvYWdwL0tjb25maWc6MTA1OmNvbmZpZyBBR1BfVklBXFxuZHJpdmVycy9jaGFyL2FncC9LY29uZmlnLTEwNi1cXHR0cmlzdGF0ZSBcXFwiVklBIGNoaXBzZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6MTIuMzExMzA5NTI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxODA1NDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiB0ZWNobmljYWwgY29uY2VwdHM6XG5cbioqVGhlIENvcmUgSWRlbnRpdHkgb2YgQUdQX1ZJQSoqXG5cbkhtbSwgc28gdGhlIHRob3VnaHQgaXMgc2ltcGx5IFwiQUdQX1ZJQSBpcyBgQUdQX1ZJQWAuXCIgSW50ZXJlc3RpbmcuIE9uIHRoZSBzdXJmYWNlLCBpdCBzZWVtcyBhbG1vc3QgdGF1dG9sb2dpY2FsLCBhIHZlcnkgYmFzaWMgaWRlbnRpdHkgc3RhdGVtZW50LiBCdXQgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhlcmUncyBtb3JlIGJlbmVhdGggdGhlIHN1cmZhY2UuIEl0J3Mgbm90IGp1c3QgYSBkZWNsYXJhdGlvbjsgaXQncyBhIGZvdW5kYXRpb25hbCB1bmRlcnN0YW5kaW5nLiBJdCdzIGFja25vd2xlZGdpbmcgdGhhdCB0aGUgaWRlbnRpZmllciBcIkFHUF9WSUFcIiByZXByZXNlbnRzLCBieSBkZWZpbml0aW9uLCAqQUdQX1ZJQSouIFRoZXJlJ3Mgbm8gaGlkZGVuIHZhcmlhYmxlLCBubyBhbWJpZ3VpdHkuIEl0IGFzc2VydHMgdGhlIGNvcmUgZXNzZW5jZSBvZiB0aGF0IHNwZWNpZmljIGVsZW1lbnQsIHdoYXRldmVyIGl0J3MgcmVmZXJyaW5nIHRvLCBpcyBpdHMgb3duIGlkZW50aWZpZXIuIEl0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6MTUuMzI5MzY2NDI1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTUxNzE5NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRQQ0kyMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pcGFjay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjE1LjQxODg5NjU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTQxODI5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gbG9jYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIFwidHBjaTIwMCxcIiBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmUgZm9yIElQQUNLIGNhcnJpZXJzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL2lwYWNrL2NhcnJpZXJzL0tjb25maWdgLiBJdCdzIGFsbW9zdCByZWZsZXhpdmUgYXQgdGhpcyBwb2ludCDigJMgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gVGhleSdyZSB3aGVyZSB0aGVzZSBraW5kcyBvZiBoYXJkd2FyZSBvcHRpb25zIGFyZSB1c3VhbGx5IGRlZmluZWQgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBlc3RhYmxpc2hlZC4gSnVtcGluZyBpbnRvIHRoaXMgZGlyZWN0b3J5IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBmaXJzdCBzdGVwLiBJIHN1c3BlY3QgdGhhdCBlaXRoZXIgXCJ0cGNpMjAwXCIgaXMgZXhwbGljaXRseSBuYW1lZCBpbiBhIG1lbnUgZW50cnksIG9yIGl0J3MgcGFydCBvZiBhIGJyb2FkZXIgc2V0IG9mIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBJIGNhbiB0aGVuIHRyYWNlLiBJdCBpcyB2ZXJ5IGxpa2VseSBhIGJvb2xlYW4gb3B0aW9uLCBwb3NzaWJseSBkZXBlbmRlbnQgb24gYW5vdGhlciBtb3JlIGdlbmVyaWMgYm9hcmQgb3B0aW9uLiBJdCBjb3VsZCBhbHNvIGJlIGRlZmluZWQgaW4gYW4gaW5jbHVkZXMgZmlsZSBhbmQgcHVsbGVkIGludG8gdGhpcyBLY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgyNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjE5LjIzMzA4MjUxMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2NzQyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lwYWNrL2NhcnJpZXJzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pcGFjay9jYXJyaWVycy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pcGFjay9jYXJyaWVycy9LY29uZmlnOjI6Y29uZmlnIEJPQVJEX1RQQ0kyMDBcXG5kcml2ZXJzL2lwYWNrL2NhcnJpZXJzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgdGhlIFRFV1MgVFBDSS0yMDAgSW5kdXN0cnlQYWNrIGNhcnJpZXIgYm9hcmRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjE5LjMxNjc2NDE4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTcxNTAyOTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWNvZGluZyBCT0FSRF9UUENJMjAwOiBBIENvbmNpc2UgUmVmbGVjdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gU2VlaW5nIFwiQk9BUkRfVFBDSTIwMCBpcyBgQk9BUkRfVFBDSTIwMGBcIiBpcyBlc3NlbnRpYWxseSBhIHRhdXRvbG9neS4gSXQncyBhIHN0YXRlbWVudCBvZiBpZGVudGl0eSwgbm90aGluZyBtb3JlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHJlY29nbml6ZSB0aGlzIGFzIGEgcGxhY2Vob2xkZXIsIHBlcmhhcHMgaW4gc29tZSBjb2RlIG9yIGRvY3VtZW50YXRpb24uIEl0J3MgYSBiYXNpYyBhc3NpZ25tZW50LlxuXG5UaGUga2V5IGxpZXMgaW4gKndoeSogaXQncyBwcmVzZW50ZWQgdGhpcyB3YXkuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBkZWJ1Z2dpbmcgc2NlbmFyaW8/IEEgcnVkaW1lbnRhcnkgY2hlY2s/IE9yIHBlcmhhcHMgaXQncyBhIGNvbXBvbmVudCBpbiBhIGxhcmdlciBzeXN0ZW0gd2hlcmUgdGhlIGFjdHVhbCB2YWx1ZSBpcyBkZXJpdmVkIG9yIGR5bmFtaWNhbGx5IGFzc2lnbmVkIGxhdGVyIGFuZCB0aGlzIGlzIHRoZSBpbml0aWFsIGFzc2lnbm1lbnQgcGxhY2Vob2xkZXI/IEknZCBuZWVkIG1vcmUgY29udGV4dC5cblxuVGhlIGZvcm0gc3VnZ2VzdHMgYSBzeW1ib2wgYW5kIGEgbGl0ZXJhbCByZWZlcmVuY2UgdG8gaXRzZWxmLiBJdCdzIGFsbW9zdCB0b28gc2ltcGxpc3RpYy4gVGhlIHJlYWwgaW50ZXJlc3QgaXMgdGhlICpwdXJwb3NlKiBiZWhpbmQgaXQsIHdoYXQgdGhpcyByZXByZXNlbnRzIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBJcyBpdCBhIGNvbnN0YW50LCBhIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2l0aG91dCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBJJ20gbGVmdCB0byBzcGVjdWxhdGUgb24gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uIFRoZSBpbW1lZGlhdGUgcmVzcG9uc2UgaXMgdG8gY29uc2lkZXIgaXQgYSBiYXNpYyBidWlsZGluZyBibG9jaywgYSBrbm93biBxdWFudGl0eSwgYSBcImtub3duIGtub3duLFwiIGlmIHlvdSB3aWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE3NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjI0LjQ4ODI3MDE1MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2ODA1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1MWFNXX1BDSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZz0yNT1jb25maWcgTUxYU1dfQ09SRV9USEVSTUFMXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTMyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc6MzM6Y29uZmlnIE1MWFNXX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzQtXFx0dHJpc3RhdGUgXFxcIlBDSSBidXMgaW1wbGVtZW50YXRpb24gZm9yIE1lbGxhbm94IFRlY2hub2xvZ2llcyBTd2l0Y2ggQVNJQ3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjI0LjU4Njk1NTg3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUwOTc0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBJbW1lZGlhdGUgQXNzZXNzbWVudDogTUxYU1dfUENJKipcblxuUmlnaHQsIHNvLCB0aGUgaW5wdXQgc2ltcGx5IHN0YXRlcyBcIk1MWFNXX1BDSSBpcyBgTUxYU1dfUENJYC5cIiBUaGlzIGlzIGEgZnVuZGFtZW50YWwsIHRhdXRvbG9naWNhbCBzdGF0ZW1lbnQuIEVzc2VudGlhbGx5LCBpdCdzIGFuIGFzc2VydGlvbiB0aGF0IHNvbWV0aGluZyDigJMgKk1MWFNXX1BDSSog4oCTIGlzIGVxdWFsIHRvIGl0c2VsZi4gSXQncyBhIHBsYWNlaG9sZGVyLCBhIHN0YXJ0aW5nIHBvaW50LiBJdCdzIG5vdCBwcm92aWRpbmcgYW55IG5ldyBpbmZvcm1hdGlvbiBvciBpbnNpZ2h0IG9uIGl0cyBvd24uIEl0J3MgdGhlIGVxdWl2YWxlbnQgb2Ygc2F5aW5nIFwiYSB0cmVlIGlzIGEgdHJlZS5cIiBXaGlsZSBvYnZpb3VzLCBpdCBjb3VsZCBiZSB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIG1vcmUgY29tcGxleCBjb25jZXB0cyBidWlsZC4gVGhpcyBiZWdzIHRoZSBxdWVzdGlvbiwgd2hlcmUgd2lsbCB0aGlzIHRha2UgbWU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6MjcuODM3OTMyMzI0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI5NTIxOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNDU0lfTlNQMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvS2NvbmZpZz0xMTkxPWNvbmZpZyBTQ1NJX0FNNTNDOTc0XFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xMjA2LVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnOjEyMDc6Y29uZmlnIFNDU0lfTlNQMzJcXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xMjA4LVxcdHRyaXN0YXRlIFxcXCJXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NToyOC4wMDA4ODg4MjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5Njk3MzEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0NTSV9OU1AzMiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYFNDU0lfTlNQMzJgIGlzLCB3ZWxsLCBgU0NTSV9OU1AzMmAuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBUaGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGFyZTogYEFUQV9HRU5FUklDYCwgYEFHUF9BTURgLCBgQUdQX1ZJQWAsIGBCT0FSRF9UUENJMjAwYCwgYE1MWFNXX1BDSWAsIGFuZCBgU0NTSV9OU1AzMmAuXG5cbk5vdywgc29tZXRoaW5nJ3MgbmFnZ2luZyBhdCBtZSBhYm91dCBgU0NTSV9OU1AzMmAuIEkgaGF2ZSBhIGZlZWxpbmcgaXQgY291bGQgYmUgZGVwZW5kZW50IG9uIHNvbWV0aGluZyBsaWtlIGBQQ01DSUFgIG9yIGEgc2ltaWxhciBsZWdhY3kgaW50ZXJmYWNlLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAgdG8gYXZvaWQgcG90ZW50aWFsIGNvbmZsaWN0cyBvciB1bmZvcmVzZWVuIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggb2xkZXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6MzEuNDk3ODY0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMTQ4MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTQ1NJX05TUDMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvc2NzaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvc2NzaS9LY29uZmlnPTExOTE9Y29uZmlnIFNDU0lfQU01M0M5NzRcXG4tLVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTEyMDYtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6MTIwNzpjb25maWcgU0NTSV9OU1AzMlxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTEyMDgtXFx0dHJpc3RhdGUgXFxcIldvcmtiaXQgTmluamFTQ1NJLTMyQmkvVURFIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjMxLjU5OTAxNjc0MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU3NjEwMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBjbGVhci4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIG5vdyBpczogTGV0J3MgcmVhZCB0aGUgZGVwZW5kZW5jaWVzLiBCZWZvcmUgSSBjYW4gZWZmZWN0aXZlbHkgZGlhZ25vc2UsIHJlZmFjdG9yLCBvciBldmVuIGp1c3QgKnVuZGVyc3RhbmQqIHRoZSBzeXN0ZW0gaW4gZnJvbnQgb2YgbWUsIEkgbmVlZCB0byBrbm93IHdoYXQgaXQgcmVsaWVzIG9uLiBJJ20gbm90IGxvb2tpbmcgZm9yIGEgc3VwZXJmaWNpYWwgb3ZlcnZpZXc7IEkgbmVlZCBhIGRldGFpbGVkIHBpY3R1cmUuIEknbSBmb2N1c2luZyBvbiB0aGVpciB2ZXJzaW9ucywgdGhlIGludGVycmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZW0sIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBqdW1wIG91dC4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgaG93IGVhY2ggZGVwZW5kZW5jeSBjb250cmlidXRlcywgYW5kIHdoZXJlIHRoZSBtb3N0IGNvbXBsZXggaW50ZXJhY3Rpb25zIGxpZS4gVGhpcyBmaXJzdCBzdGVwIGlzIGFic29sdXRlbHkgY3J1Y2lhbC4gV2l0aG91dCB0aGlzIGRldGFpbGVkIHZpZXcsIGFueSBmdXJ0aGVyIGFuYWx5c2lzIHdpbGwgYmUgaGFwaGF6YXJkIGFuZCBsaWtlbHkgbGVhZCB0byBlcnJvcnMgZG93biB0aGUgbGluZS4gSXQncyB0aGUgZm91bmRhdGlvbiBvZiBhIHNvdW5kIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzQzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTozNC41NTY2MzA5MTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDc6XFx0Y29uZmlnIFNDU0lfTlNQMzJcXG4xMjA4OlxcdFxcdHRyaXN0YXRlIFxcXCJXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBzdXBwb3J0XFxcIlxcbjEyMDk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgU0NTSSBcXHUwMDI2XFx1MDAyNiAhNjRCSVQgXFx1MDAyNlxcdTAwMjYgSEFTX0lPUE9SVFxcbjEyMTA6XFx0XFx0aGVscFxcbjEyMTE6XFx0XFx0ICBUaGlzIGlzIHN1cHBvcnQgZm9yIHRoZSBXb3JrYml0IE5pbmphU0NTSS0zMkJpL1VERSBQQ0kvQ2FyZGJ1c1xcbjEyMTI6XFx0XFx0ICBTQ1NJIGhvc3QgYWRhcHRlci4gUGxlYXNlIHJlYWQgdGhlIFNDU0ktSE9XVE8sIGF2YWlsYWJsZSBmcm9tXFxuMTIxMzpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1xcdTAwM2UuXFxuMTIxNDpcXHRcXG4xMjE1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuMTIxNjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBuc3AzMi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6MzQuNTU2NzczMjM0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDM5NDU2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgU3l6a2FsbGVyJ3MgQXJjaGl0ZWN0dXJhbCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIHRoYXQgdGhpcyB3aG9sZSBsaW5lIG9mIHRoaW5raW5nIGlzIGRlcGVuZGVudCBvbiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSA2NC1iaXQgYXJjaGl0ZWN0dXJlLCB3aGljaCBTeXprYWxsZXIsIGluIGl0cyB0eXBpY2FsIGNvbmZpZ3VyYXRpb25zICh4ODZfNjQgYW5kIGFybTY0KSwgdGVuZHMgdG8gYmUuIElmIHRoaXMgY29kZSBwYXRoIGlzIGNvbmRpdGlvbmVkIG9uIGAhNjRCSVRgLCB0aGVuIHRoZSBwcmFjdGljYWxpdHkgb2YgdGVzdGluZyBgU0NTSV9OU1AzMmAgYmVjb21lcyBxdWVzdGlvbmFibGUgaW4gb3VyIHVzdWFsIFN5emthbGxlciBlbnZpcm9ubWVudC4gSXQgbWlnaHQgbm90IGV2ZW4gKmJlKiB0ZXN0YWJsZSwgYnV0IHRoYXQgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHdlIHNob3VsZCBleGNsdWRlIGl0IGZyb20gYSBsaXN0LCByaWdodD8gV2UgY2FuIGNlcnRhaW5seSAqbGlzdCogaXQuIFdlIHNob3VsZCBkZWZpbml0ZWx5IGxpc3QgaXQuXG5cbk5vdywgc2hpZnRpbmcgZ2VhcnMuLi5sZXQncyBnbyBhaGVhZCBhbmQgZHJpbGwgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJPQVJEX1RQQ0kyMDBgLiBMZXQncyBzZWUgd2hhdCB0aGF0IGltcGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTozOC41MDA3MjExMDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pcGFjay9jYXJyaWVycy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQk9BUkRfVFBDSTIwMFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgZm9yIHRoZSBURVdTIFRQQ0ktMjAwIEluZHVzdHJ5UGFjayBjYXJyaWVyIGJvYXJkXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJUEFDS19CVVNcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFRFV1MgVFBDSTIwMCBJbmR1c3RyeVBhY2sgY2FycmllciBib2FyZC5cXG4gICA4OlxcdFxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTozOC41MDA3Nzk2NjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NzMyOTk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBjb250aW5nZW50IG9uIGBJUEFDS19CVVNgLiBUaGF0J3MgdGhlIGtleSB2YXJpYWJsZSwgdGhlIGxpbmNocGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IHdoYXQgKnByZWNpc2VseSogYWJvdXQgYElQQUNLX0JVU2A/IElzIGl0IHRoZSB2YWx1ZSwgdGhlIHN0YXRlLCB0aGUgYXZhaWxhYmlsaXR5LCB0aGUgY29uZmlndXJhdGlvbiwgdGhlIHByb3RvY29sIGJlaW5nIHVzZWQgb24gaXQsIHRoZSBkYXRhIHRyYW5zbWl0dGVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGRlcGVuZGVuY3kgaXMgc3RhdGVkLCBidXQgdGhlIG5hdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSBpc24ndC5cblxuTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGNvdWxkIG1lYW4gYSBtdWx0aXR1ZGUgb2YgdGhpbmdzLiBXZSBuZWVkIHRvIGRyaWxsIGRvd24uIElzIHRoaXMgYW4gaW5wdXQgdG8gYSBzcGVjaWZpYyBjYWxjdWxhdGlvbj8gQSBjb25kaXRpb24gZm9yIHRyaWdnZXJpbmcgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIG1vZHVsZT8gSXMgdGhlIHN5c3RlbSBzdGF0ZSBkZWZpbmVkPyBJcyB0aGVyZSBhbiBpbXBsaWVkIGNvbnN0cmFpbnQgaW4gdGhlIGRlc2lnbj8gSXMgYElQQUNLX0JVU2AgYmVpbmcgdHJlYXRlZCBhcyBhIGJsYWNrYm94IGhlcmUsIG9yIGNhbiBpdHMgaW5uZXIgd29ya2luZ3MgYmUgZGVmaW5lZD8gV2l0aG91dCBmdXJ0aGVyIGNvbnRleHQsIHRoZSBtZWFuaW5nIGlzIGVzc2VudGlhbGx5IG9wYXF1ZS4gV2hhdCBpcyBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0PyBXaXRob3V0IG1vcmUgaW5mb3JtYXRpb24sIEknbSBsZWZ0IGd1ZXNzaW5nLiBJIG5lZWQgbW9yZSBkYXRhIHRvIG1lYW5pbmdmdWxseSBpbnRlcnByZXQgdGhlICdkZXBlbmRlbmN5Jy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6NDEuNzQ4MTEyMTAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIwNjA3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQQUNLX0JVU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lwYWNrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pcGFjay9LY29uZmlnLTUtXFxuZHJpdmVycy9pcGFjay9LY29uZmlnOjY6bWVudWNvbmZpZyBJUEFDS19CVVNcXG5kcml2ZXJzL2lwYWNrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSW5kdXN0cnlQYWNrIGJ1cyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTo0MS45MDAxNzgyMjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5OTg1OTE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkNvbnNpZGVyaW5nIEJ1cyBBcmNoaXRlY3R1cmVzKipcblxuUmlnaHQsIHNvIEkgc2VlIHdlIGFic29sdXRlbHkgbmVlZCB0byBpbmNvcnBvcmF0ZSBgSVBBQ0tfQlVTYCBpbnRvIHRoZSBkZXNpZ24uIFRoYXQncyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50LiBOb3csIGxldCdzIGNpcmNsZSBiYWNrIHRvIG90aGVyIGNvbW1vbiBhcmNoaXRlY3R1cmVzLiBXZSBzaG91bGQgcmV2aXNpdCB0aGUgc3BlY2lmaWNzIG9mIGBBR1BfQU1EYCBhbmQgYEFHUF9WSUFgLiBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXRzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhleSBtaWdodCBpbmZsdWVuY2UgdGhlIGVuZCBwcm9kdWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU1MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDIwOjQ1OjQ1LjIwMDA0MDAxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NoYXIvYWdwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTI6XFx0Y29uZmlnIEFHUF9BTURcXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0IHN1cHBvcnRcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIEFHUCBcXHUwMDI2XFx1MDAyNiBYODZfMzJcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZlxcbiAgNTc6XFx0XFx0ICBYIG9uIEFNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXRzLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRjb25maWcgQUdQX0FNRDY0XFxuICA2MDpcXHRcXHR0cmlzdGF0ZSBcXFwiQU1EIE9wdGVyb24vQXRobG9uNjQgb24tQ1BVIEdBUlQgc3VwcG9ydFxcXCJcXG4gIDYxOlxcdFxcdGRlcGVuZHMgb24gQUdQIFxcdTAwMjZcXHUwMDI2IFg4NiBcXHUwMDI2XFx1MDAyNiBBTURfTkJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6NDUuMjAwMDk2MDQ2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTUzOTI5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQXNzZXNzbWVudCBvZiBBR1AgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIGBBR1BfQU1EYCBpcyBleHBsaWNpdGx5IHJlbGlhbnQgb24gdGhlIGBYODZfMzJgIGFyY2hpdGVjdHVyZS4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIHNpZ25hbC4gR2l2ZW4gdGhhdCBkZXBlbmRlbmN5LCBpdCdzIGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCB3ZSAqd29uJ3QqIG5lZWQgdG8gYm90aGVyIHdpdGggdGVzdGluZyB0aGF0IHBhcnRpY3VsYXIgbW9kdWxlIG9uIGEgNjQtYml0IHN5c3RlbS4gVGhlIGRlcGVuZGVuY3kgd2lsbCBibG9jayBpdC4gV2UgY2FuIHNhZmVseSBza2lwIHRoZSA2NC1iaXQgdGVzdGluZyBpbiB0aGF0IGNhc2UuXG5cbkhtbSwgbm93LCB3aGF0IGFib3V0IGBBR1BfVklBYD8gSXMgaXQgdGhlIHNhbWU/IEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBBR1BfVklBYCBiZWZvcmUgbWFraW5nIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkwNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6NDguMjk1NDkxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NoYXIvYWdwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTA1OlxcdGNvbmZpZyBBR1BfVklBXFxuIDEwNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVklBIGNoaXBzZXQgc3VwcG9ydFxcXCJcXG4gMTA3OlxcdFxcdGRlcGVuZHMgb24gQUdQIFxcdTAwMjZcXHUwMDI2IFg4NlxcbiAxMDg6XFx0XFx0aGVscFxcbiAxMDk6XFx0XFx0ICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mXFxuIDExMDpcXHRcXHQgIFggb24gVklBIE1WUDMvQXBvbGxvIFBybyBjaGlwc2V0cy5cXG4gMTExOlxcdFxcbiAxMTI6XFx0Y29uZmlnIEFHUF9QQVJJU0NcXG4gMTEzOlxcdFxcdHRyaXN0YXRlIFxcXCJIUCBRdWlja3NpbHZlciBBR1Agc3VwcG9ydFxcXCJcXG4gMTE0OlxcdFxcdGRlcGVuZHMgb24gQUdQIFxcdTAwMjZcXHUwMDI2IFBBUklTQyBcXHUwMDI2XFx1MDAyNiA2NEJJVCBcXHUwMDI2XFx1MDAyNiBJT01NVV9TQkFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6NDguMjk1NTcyMjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5NzIzNjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBSZXF1aXJlbWVudHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBpcyB0aGF0IGBBR1BfVklBYCAqYWJzb2x1dGVseSogaGluZ2VzIG9uIGBBR1BgICphbmQqIGBYODZgLiBUaGF0J3Mgbm9uLW5lZ290aWFibGUuIFNvLCBmaXJzdCBhbmQgZm9yZW1vc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgYEFHUGAgaXMgY29uZmlndXJlZCBhbmQgYXZhaWxhYmxlLiBJdCdzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlIGhlcmUuXG5cbk5vdywgSSdtIHNoaWZ0aW5nIGdlYXJzLi4uIHdoYXQgYWJvdXQgYEFUQV9HRU5FUklDYD8gRG9lcyB0aGlzIGludGVyZmFjZSBwbGF5IGludG8gYEFHUF9WSUFgIGF0IGFsbD8gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgaW50ZXJjb25uZWN0ZWQgcGllY2VzIG9mIHRoZSBwdXp6bGUgYmVmb3JlIHByb2NlZWRpbmcuIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0IGZpdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzA1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQyMDo0NTo1MS4xOTI4MTE2MDlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYXRhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3MyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3MzpcXHRjb25maWcgQVRBX0dFTkVSSUNcXG4xMTc0OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIEFUQSBzdXBwb3J0XFxcIlxcbjExNzU6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgQVRBX0JNRE1BXFxuMTE3NjpcXHRcXHRzZWxlY3QgU0FUQV9IT1NUXFxuMTE3NzpcXHRcXHRoZWxwXFxuMTE3ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgZ2VuZXJpYyBCSU9TIGNvbmZpZ3VyZWRcXG4xMTc5OlxcdFxcdCAgQVRBIGNvbnRyb2xsZXJzIHZpYSB0aGUgbmV3IEFUQSBsYXllclxcbjExODA6XFx0XFxuMTE4MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMTE4MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDU6NTEuMTkyOTIwODM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MjAzOTgxNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUENJIENvcmUgYW5kIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGhpbmdlcyBvbiBgQVRBX0JNRE1BYCwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBGaXJzdCwgbGV0J3MgbGlzdCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlOiBgQVRBX0dFTkVSSUNgLCBgQUdQX1ZJQWAsIGBCT0FSRF9UUENJMjAwYCwgYElQQUNLX0JVU2AsIGBNTFhTV19QQ0lgLCBhbmQgYEFHUGAuIE9oLCBhbmQgSSBzaG91bGQgbm90ZSBgU0NTSV9OU1AzMmAgYW5kIGBBR1BfQU1EYCB3aGljaCBhcmUgMzItYml0IHNwZWNpZmljLCBidXQgc3RpbGwgcmVsZXZhbnQuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBjaGFuZ2VzIHRvIFBDSSBkZXZpY2UgbWF0Y2hpbmcgYW5kIHByb2JpbmcuIEkgbmVlZCB0byBmb2N1cyBvbiBzcGVjaWZpYyBzeW1ib2xzOiBgZG9fcGNpX2FkZF9keW5pZGAsIGBuZXdfaWRfc3RvcmVgLCBgcGNpX21hdGNoX2RldmljZWAsIGBwY2lfbWF0Y2hfaWRgLCBgX19wY2lfZGV2aWNlX3Byb2JlYCwgYGF0YV9nZW5lcmljX2luaXRfb25lYCwgYGFncF9hbWRrN19wcm9iZWAsIGBhZ3BfdmlhX3Byb2JlYCwgYHRwY2kyMDBfcGNpX3Byb2JlYCwgYG1seHN3X3BjaV9wcm9iZWAsIGFuZCBgbnNwMzJfcHJvYmVgLlxuXG5XYWl0IGEgbWludXRlLCBgcGNpX21hdGNoX29uZV9pZGAgaXMgYWN0dWFsbHkgYW4gaW5saW5lIGZ1bmN0aW9uIGluIGBpbmNsdWRlL2xpbnV4L3BjaS5oYC4gSXQgd29uJ3QgYmUgYSBzeW1ib2wgaW4gdGhlIGtlcm5lbCBpbWFnZSBkaXJlY3RseSwgYnV0IGl0J3MgdXNlZCB3aXRoaW4gb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGRvX3BjaV9tYXRjaF9pZGAsIGBtYXRjaF9wY2lfZGV2X2J5X2lkYCwgYGRvX3BjaV9hZGRfZHluaWRgLCBhbmQgYHBjaV9tYXRjaF9kZXZpY2VgLiBTbyBJJ2xsIGxpc3QgYGRvX3BjaV9tYXRjaF9pZGAgaW5zdGVhZC5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rpb25zIEkgbGlzdGVkIGFyZSBzdGF0aWMuIGBfX3BjaV9kZXZpY2VfcHJvYmVgIGlzIHN0YXRpYywgd2hpY2ggaXMgZmluZSwgYXMgaXMgYG5ld19pZF9zdG9yZWAuIGBkb19wY2lfYWRkX2R5bmlkYCBpcyBhbHNvIHN0YXRpYy4gT2theS5cblxuTGV0J3Mgc2VlIGlmIG90aGVyIGZ1bmN0aW9ucyBhcmUgdG91Y2hlZC4gVGhlcmUncyBgbWx4c3dfcGNpX3Jlc2V0YCwgYG1seHN3X3BjaV9zeXNfcmVhZHlfd2FpdGAsIGBtbHhzd19wY2lfaW5pdGAsIGBuc3AzMl9zaG93X2luZm9gLCBgbnNwMzJfZ2V0cHJvbV9wYXJhbWAsIGBwY2lfbWF0Y2hfaWRgLCBhbmQgYHBjaV9hZGRfZHluaWRgLiBUaGVzZSBhcmUgYWxsIGltcG9ydGFudCB0b28sIHNvIEknbGwgYWRkIGBwY2lfYWRkX2R5bmlkYCBhbmQgYHBjaV9tYXRjaF9pZGAuXG5cbk5vdywgbGV0J3MgcmVjYXAgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcy4gVGhlIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB0aGUgUENJIGNvcmUgaGFuZGxlcyBkeW5hbWljIGBwY2lfZGV2aWNlX2lkYCBlbnRyaWVzLiBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBwb2ludGVyIHRvIHRoZSBoZWFwLWFsbG9jYXRlZCBJRCB0byB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24sIGl0J3MgcGFzc2luZyBhIGNvcHkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhhdCBkeW5hbWljIElEIGdldHMgcmVtb3ZlZCB0aHJvdWdoIHN5c2ZzLiBUaGVyZSBhcmUgYWxzbyBkcml2ZXIgdXBkYXRlcyB0byBmaXggdGhlbSBzYXZpbmcgdGhlIGBwY2lfZGV2aWNlX2lkYCBwb2ludGVyIGFuZCBpbnN0ZWFkIHNhdmluZyByZWxldmFudCBmaWVsZHMuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGJvdGggdGhlIFBDSSBjb3JlIGFuZCBhZmZlY3RlZCBkcml2ZXJzLiBUaGlzIGlzIGFsbCByaXBlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBQQ0kgZGV2aWNlIG1hdGNoaW5nIGFuZCBwcm9iaW5nLCBlc3BlY2lhbGx5IHdpdGggdGhvc2UgZHluYW1pYyBJRHMgY29taW5nIGZyb20gc3lzZnMuXG5cbkhlcmUgYXJlIHRoZSBjb25maWdzIGFnYWluLCBub3cgdGhhdCBJJ3ZlIGZvY3VzZWQgbXkgYXR0ZW50aW9uOlxuYEFUQV9HRU5FUklDYFxuYEFHUGBcbmBBR1BfQU1EYFxuYEFHUF9WSUFgXG5gSVBBQ0tfQlVTYFxuYEJPQVJEX1RQQ0kyMDBgXG5gTUxYU1dfUENJYFxuYFNDU0lfTlNQMzJgXG5cbkFuZCBoZXJlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb246XG5gZG9fcGNpX2FkZF9keW5pZGBcbmBuZXdfaWRfc3RvcmVgXG5gcGNpX21hdGNoX2RldmljZWBcbmBkb19wY2lfbWF0Y2hfaWRgXG5gX19wY2lfZGV2aWNlX3Byb2JlYFxuYHBjaV9hZGRfZHluaWRgXG5gcGNpX21hdGNoX2lkYFxuYGF0YV9nZW5lcmljX2luaXRfb25lYFxuYGFncF9hbWRrN19wcm9iZWBcbmBhZ3BfdmlhX3Byb2JlYFxuYHRwY2kyMDBfcGNpX3Byb2JlYFxuYG1seHN3X3BjaV9wcm9iZWBcbmBuc3AzMl9wcm9iZWBcblxuRmluYWxseSwgYHBjaV9tYXRjaF9vbmVfZGV2aWNlYCBoYXMgYmVlbiByZXBsYWNlZCBieSBgcGNpX21hdGNoX29uZV9pZGAsIHdoaWNoIGlzIGlubGluZS5cblxuUmlnaHQsIEknbSByZWFkeSB0byBzZXQgdGhlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY2MiwiT3V0cHV0VG9rZW5zIjozNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMjA6NDY6MDUuMzk2OTA0NzE0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMzU0NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVEFfR0VORVJJQ1wiLFxuICAgIFwiQUdQXCIsXG4gICAgXCJBR1BfQU1EXCIsXG4gICAgXCJBR1BfVklBXCIsXG4gICAgXCJJUEFDS19CVVNcIixcbiAgICBcIkJPQVJEX1RQQ0kyMDBcIixcbiAgICBcIk1MWFNXX1BDSVwiLFxuICAgIFwiU0NTSV9OU1AzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3BjaV9hZGRfZHluaWRcIixcbiAgICBcIm5ld19pZF9zdG9yZVwiLFxuICAgIFwicGNpX21hdGNoX2RldmljZVwiLFxuICAgIFwiZG9fcGNpX21hdGNoX2lkXCIsXG4gICAgXCJfX3BjaV9kZXZpY2VfcHJvYmVcIixcbiAgICBcInBjaV9hZGRfZHluaWRcIixcbiAgICBcInBjaV9tYXRjaF9pZFwiLFxuICAgIFwiYXRhX2dlbmVyaWNfaW5pdF9vbmVcIixcbiAgICBcImFncF9hbWRrN19wcm9iZVwiLFxuICAgIFwiYWdwX3ZpYV9wcm9iZVwiLFxuICAgIFwidHBjaTIwMF9wY2lfcHJvYmVcIixcbiAgICBcIm1seHN3X3BjaV9wcm9iZVwiLFxuICAgIFwibnNwMzJfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUENJIGNvcmUgdG8gcGFzcyBhIGNvcHkgb2YgdGhlIGR5bmFtaWMgcGNpX2RldmljZV9pZCB0byB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gdGhlIGhlYXAtYWxsb2NhdGVkIGR5bmFtaWMgSUQsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGR5bmFtaWMgSUQgaXMgcmVtb3ZlZCB2aWEgc3lzZnMuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHNhdmluZyB0aGUgcGNpX2RldmljZV9pZCBwb2ludGVyIHRvIGluc3RlYWQgc2F2ZSB0aGUgZHJpdmVyX2RhdGEgb3Igb3RoZXIgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFBDSSBjb3JlIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gUENJIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGR5bmFtaWMgSURzIHZpYSBzeXNmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVEFfR0VORVJJQ1wiLFxuICAgIFwiQUdQXCIsXG4gICAgXCJBR1BfQU1EXCIsXG4gICAgXCJBR1BfVklBXCIsXG4gICAgXCJJUEFDS19CVVNcIixcbiAgICBcIkJPQVJEX1RQQ0kyMDBcIixcbiAgICBcIk1MWFNXX1BDSVwiLFxuICAgIFwiU0NTSV9OU1AzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3BjaV9hZGRfZHluaWRcIixcbiAgICBcIm5ld19pZF9zdG9yZVwiLFxuICAgIFwicGNpX21hdGNoX2RldmljZVwiLFxuICAgIFwiZG9fcGNpX21hdGNoX2lkXCIsXG4gICAgXCJfX3BjaV9kZXZpY2VfcHJvYmVcIixcbiAgICBcInBjaV9hZGRfZHluaWRcIixcbiAgICBcInBjaV9tYXRjaF9pZFwiLFxuICAgIFwiYXRhX2dlbmVyaWNfaW5pdF9vbmVcIixcbiAgICBcImFncF9hbWRrN19wcm9iZVwiLFxuICAgIFwiYWdwX3ZpYV9wcm9iZVwiLFxuICAgIFwidHBjaTIwMF9wY2lfcHJvYmVcIixcbiAgICBcIm1seHN3X3BjaV9wcm9iZVwiLFxuICAgIFwibnNwMzJfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUENJIGNvcmUgdG8gcGFzcyBhIGNvcHkgb2YgdGhlIGR5bmFtaWMgcGNpX2RldmljZV9pZCB0byB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gdGhlIGhlYXAtYWxsb2NhdGVkIGR5bmFtaWMgSUQsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIGR5bmFtaWMgSUQgaXMgcmVtb3ZlZCB2aWEgc3lzZnMuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgdGhhdCB3ZXJlIGluY29ycmVjdGx5IHNhdmluZyB0aGUgcGNpX2RldmljZV9pZCBwb2ludGVyIHRvIGluc3RlYWQgc2F2ZSB0aGUgZHJpdmVyX2RhdGEgb3Igb3RoZXIgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFBDSSBjb3JlIGFuZCBkcml2ZXJzLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gUENJIGRldmljZSBtYXRjaGluZyBhbmQgcHJvYmluZywgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGR5bmFtaWMgSURzIHZpYSBzeXNmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowp46hx[1] Phase: Succeeded StartedAt: 2026-07-06 20:46:16 +0000 UTC FinishedAt: 2026-07-06 20:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 20:46:16 +0000 UTC FinishedAt: 2026-07-06 20:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2] Phase: Succeeded StartedAt: 2026-07-06 20:46:16 +0000 UTC FinishedAt: 2026-07-06 22:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-06 20:46:16 +0000 UTC FinishedAt: 2026-07-06 22:43:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-06 20:46:16 +0000 UTC FinishedAt: 2026-07-06 20:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-06 20:46:16 +0000 UTC FinishedAt: 2026-07-06 20:46:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp46hx/series-workflowp46hx-convert-artifact-1940043699/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-06 20:46:37 +0000 UTC FinishedAt: 2026-07-06 21:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-06 20:46:37 +0000 UTC FinishedAt: 2026-07-06 21:12:17 +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:*a410191d-cc55-474c-a9af-895d2ca11fb3,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-workflowp46hx/series-workflowp46hx-convert-artifact-1940043699/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": "b8f1a520-dc38-4099-99bf-ee9d01a4f419", "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-workflowp46hx/series-workflowp46hx-build-action-789111393/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-06 20:46:37 +0000 UTC FinishedAt: 2026-07-06 21:12:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a410191d-cc55-474c-a9af-895d2ca11fb3,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-workflowp46hx/series-workflowp46hx-convert-artifact-1940043699/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": "b8f1a520-dc38-4099-99bf-ee9d01a4f419", "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-workflowp46hx/series-workflowp46hx-build-action-789111393/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-06 21:12:17 +0000 UTC FinishedAt: 2026-07-06 21:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-06 21:12:17 +0000 UTC FinishedAt: 2026-07-06 21:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-06 21:12:17 +0000 UTC FinishedAt: 2026-07-06 21:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-06 21:12:17 +0000 UTC FinishedAt: 2026-07-06 21:12:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp46hx/series-workflowp46hx-convert-artifact-921588650/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-06 21:12:27 +0000 UTC FinishedAt: 2026-07-06 21:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-06 21:12:27 +0000 UTC FinishedAt: 2026-07-06 21:14:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b8f1a520-dc38-4099-99bf-ee9d01a4f419,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-workflowp46hx/series-workflowp46hx-build-action-789111393/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-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-06 21:14:36 +0000 UTC FinishedAt: 2026-07-06 21:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-06 21:14:36 +0000 UTC FinishedAt: 2026-07-06 21:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-06 21:14:36 +0000 UTC FinishedAt: 2026-07-06 21:46:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-06 21:14:36 +0000 UTC FinishedAt: 2026-07-06 21:46:31 +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:*a410191d-cc55-474c-a9af-895d2ca11fb3,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-workflowp46hx/series-workflowp46hx-convert-artifact-921588650/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": "ae6e3365-1ee1-407e-9deb-af3ca41aa249", "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-workflowp46hx/series-workflowp46hx-build-action-3237178062/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-06 21:14:36 +0000 UTC FinishedAt: 2026-07-06 21:46: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:*a410191d-cc55-474c-a9af-895d2ca11fb3,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-workflowp46hx/series-workflowp46hx-convert-artifact-921588650/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": "ae6e3365-1ee1-407e-9deb-af3ca41aa249", "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-workflowp46hx/series-workflowp46hx-build-action-3237178062/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-06 21:46:31 +0000 UTC FinishedAt: 2026-07-06 21:46:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-06 21:46:31 +0000 UTC FinishedAt: 2026-07-06 21:46:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-06 21:46:31 +0000 UTC FinishedAt: 2026-07-06 21:48:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-06 21:46:31 +0000 UTC FinishedAt: 2026-07-06 21:48:35 +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:*ae6e3365-1ee1-407e-9deb-af3ca41aa249,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-workflowp46hx/series-workflowp46hx-build-action-3237178062/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-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-06 21:48:45 +0000 UTC FinishedAt: 2026-07-06 22:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-06 21:48:45 +0000 UTC FinishedAt: 2026-07-06 22:43:03 +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":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"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:*b8f1a520-dc38-4099-99bf-ee9d01a4f419,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae6e3365-1ee1-407e-9deb-af3ca41aa249,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-workflowp46hx/series-workflowp46hx-build-action-789111393/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-workflowp46hx/series-workflowp46hx-build-action-3237178062/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-06 21:48:45 +0000 UTC FinishedAt: 2026-07-06 21:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-06 21:48:45 +0000 UTC FinishedAt: 2026-07-06 21:48:53 +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":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"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-workflowp46hx/series-workflowp46hx-convert-artifact-3595740479/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-06 21:48:45 +0000 UTC FinishedAt: 2026-07-06 21:48:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-06 21:48:45 +0000 UTC FinishedAt: 2026-07-06 21:48:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-06 21:48:45 +0000 UTC FinishedAt: 2026-07-06 21:48:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-06 21:48:55 +0000 UTC FinishedAt: 2026-07-06 22:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp46hx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_pci_add_dynid","new_id_store","pci_match_device","do_pci_match_id","__pci_device_probe","pci_add_dynid","pci_match_id","ata_generic_init_one","agp_amdk7_probe","agp_via_probe","tpci200_pci_probe","mlxsw_pci_probe","nsp32_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cdeaa50eae8dad34885515f62559ee83e7e8dda","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATA_GENERIC","AGP","AGP_AMD","AGP_VIA","IPACK_BUS","BOARD_TPCI200","MLXSW_PCI","SCSI_NSP32"],"series_id":"c8ad27ae-4632-4771-9d93-b3b4069c723f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-06 21:48:55 +0000 UTC FinishedAt: 2026-07-06 22:42:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b8f1a520-dc38-4099-99bf-ee9d01a4f419,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae6e3365-1ee1-407e-9deb-af3ca41aa249,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-workflowp46hx/series-workflowp46hx-build-action-789111393/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-workflowp46hx/series-workflowp46hx-build-action-3237178062/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-workflowp46hx/series-workflowp46hx-convert-artifact-3595740479/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,}