Name: series-workflowwth57 Phase: Succeeded StartedAt: 2026-09-11 06:30:32 +0000 UTC FinishedAt: 2026-09-11 10:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[0] Phase: Succeeded StartedAt: 2026-09-11 06:30:32 +0000 UTC FinishedAt: 2026-09-11 06:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 06:30:32 +0000 UTC FinishedAt: 2026-09-11 06:47:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7aba99722271e184e2aae7fa71206dc8367c56c0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7aba99722271e184e2aae7fa71206dc8367c56c0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM" ], "series_id": "ef1c6799-8ce4-4d76-b466-414fb4c83f68" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_device_collect_folio", "migrate_device_range", "migrate_device_pfns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2RldmljZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2RldmljZV9wZm5zJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGJ5IGZhY3RvcmluZyBvdXQgZHVwbGljYXRlZCBjb2RlIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIChuciwgcGZuLCBpKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGRlc3RpbmF0aW9uIFBGTiBhcnJheSBlbnRyaWVzIGFyZSBleHBsaWNpdGx5IHdyaXR0ZW4gb3IgemVyb2VkIHZpYSBtZW1zZXQoKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbiAoZS5nLiwgYXJyYXkgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBvciBmb2xpbyBsb2NraW5nL3JlZmNvdW50aW5nIGlzc3VlcykgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlYTMzOTY3NDI0NTRiZWZiYTJkZDhkZWFmNjIwZWY1NDU5ZTNiMTE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDY6NDY6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbmluZGV4IDAwOWJmYThiMjEyZDUuLmM1N2VhZGVhNjU2NTEgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlX2RldmljZS5jXG5AQCAtMTM5Miw2ICYjNDM7MTM5MiwzOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcbiBcdHJldHVybiBtaWdyYXRlX3BmbihwZm4pIHwgTUlHUkFURV9QRk5fTUlHUkFURTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIENvbGxlY3QgYSBkZXZpY2UgZm9saW8gaW50byB0aGUgcGFnZS1ncmFudWxhciBQRk4gYXJyYXkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY29uc3VtZWQsIG9yIDAgaWYgdGhlIGZvbGlvIGRvZXMgbm90IGZpdCBpblxuJiM0MzsgKiB0aGUgcmVtYWluaW5nIGFycmF5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXG4mIzQzO1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHBmbixcbiYjNDM7XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGZuX3RvX3BhZ2UocGZuKSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yO1xuJiM0MztcbiYjNDM7XHQqc3JjX3BmbiA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7XG4mIzQzO1x0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UobnIgXHUwMDNlIHJlbWFpbmluZykpIHtcbiYjNDM7XHRcdGlmICgqc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xuJiM0MztcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bWVtc2V0KHNyY19wZm4sIDAsIHJlbWFpbmluZyAqIHNpemVvZigqc3JjX3BmbikpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnIgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdCpzcmNfcGZuIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuJiM0MztcdFx0bWVtc2V0KHNyY19wZm4gJiM0MzsgMSwgMCwgKG5yIC0gMSkgKiBzaXplb2YoKnNyY19wZm4pKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBucjtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBtaWdyYXRlX2RldmljZV9yYW5nZSgpIC0gbWlncmF0ZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG5vcm1hbCBtZW1vcnkuXG4gICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuXG5AQCAtMTQxMCwzNSAmIzQzOzE0NDMsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4gICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbiYjMzk7dCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxuICAqIGFsbG9jYXRlIGRlc3RpbmF0aW9uIHBhZ2VzIGFuZCBzdGFydCBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlIHRvIENQVVxuICAqIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBtaWdyYXRlX2RldmljZV9wYWdlcygpLlxuJiM0MzsgKlxuJiM0MzsgKiBBIGNvbXBvdW5kIGZvbGlvIG11c3QgZml0IGVudGlyZWx5IGluIHRoZSByZW1haW5pbmcgcmFuZ2UuXG4gICovXG4gaW50IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgaSwgaiwgcGZuO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaSwgcGZuO1xuIFxuIFx0Zm9yIChwZm4gPSBzdGFydCwgaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgcGZuJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdFx0dW5zaWduZWQgaW50IG5yID0gMTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBucjtcbiBcbi1cdFx0c3JjX3BmbnNbaV0gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pO1xuLVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi1cdFx0aWYgKG5yIFx1MDAzZSBucGFnZXMgLSBpKSB7XG4tXHRcdFx0aWYgKHNyY19wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7XG4tXHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHR9XG4tXHRcdFx0bWVtc2V0KFx1MDAyNnNyY19wZm5zW2ldLCAwLFxuLVx0XHRcdCAgICAgICAobnBhZ2VzIC0gaSkgKiBzaXplb2YoKnNyY19wZm5zKSk7XG4mIzQzO1x0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG4mIzQzO1x0XHRpZiAoIW5yKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGlmIChuciBcdTAwM2UgMSkge1xuLVx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRcdHNyY19wZm5zW2kmIzQzO2pdID0gMDtcbi1cdFx0XHRpICYjNDM7PSBqIC0gMTtcbi1cdFx0XHRwZm4gJiM0Mzs9IGogLSAxO1xuLVx0XHR9XG4mIzQzO1x0XHRpICYjNDM7PSBuciAtIDE7XG4mIzQzO1x0XHRwZm4gJiM0Mzs9IG5yIC0gMTtcbiBcdH1cbiBcbiBcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xuQEAgLTE0NTQsMzMgJiM0MzsxNDc0LDIxIEBAIEVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcmFuZ2UpO1xuICAqXG4gICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkXG4gICogYXJyYXkgb2YgZGV2aWNlIHBhZ2VzIHRvIG1pZ3JhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyBQRk4gYXJyYXkuXG4gICovXG4gaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgaSwgajtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2Uoc3JjX3BmbnNbaV0pO1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdFx0dW5zaWduZWQgaW50IG5yID0gMTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuID0gc3JjX3BmbnNbaV07XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgbnI7XG4gXG4tXHRcdHNyY19wZm5zW2ldID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2soc3JjX3BmbnNbaV0pO1xuLVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi1cdFx0aWYgKG5yIFx1MDAzZSBucGFnZXMgLSBpKSB7XG4tXHRcdFx0aWYgKHNyY19wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7XG4tXHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHR9XG4tXHRcdFx0bWVtc2V0KFx1MDAyNnNyY19wZm5zW2ldLCAwLFxuLVx0XHRcdCAgICAgICAobnBhZ2VzIC0gaSkgKiBzaXplb2YoKnNyY19wZm5zKSk7XG4mIzQzO1x0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG4mIzQzO1x0XHRpZiAoIW5yKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGlmIChuciBcdTAwM2UgMSkge1xuLVx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRcdHNyY19wZm5zW2kmIzQzO2pdID0gMDtcbi1cdFx0XHRpICYjNDM7PSBqIC0gMTtcbi1cdFx0fVxuJiM0MztcdFx0aSAmIzQzOz0gbnIgLSAxO1xuIFx0fVxuIFxuIFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7VEVTVF9ITU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3JhbmdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BmbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYTMzOTY3NDI0NTRiZWZiYTJkZDhkZWFmNjIwZWY1NDU5ZTNiMTE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDY6NDY6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuYwppbmRleCAwMDliZmE4YjIxMmQ1Li5jNTdlYWRlYTY1NjUxIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTEzOTIsNiAmIzQzOzEzOTIsMzkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pCiAJcmV0dXJuIG1pZ3JhdGVfcGZuKHBmbikgfCBNSUdSQVRFX1BGTl9NSUdSQVRFOwogfQogCiYjNDM7LyoKJiM0MzsgKiBDb2xsZWN0IGEgZGV2aWNlIGZvbGlvIGludG8gdGhlIHBhZ2UtZ3JhbnVsYXIgUEZOIGFycmF5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBjb25zdW1lZCwgb3IgMCBpZiB0aGUgZm9saW8gZG9lcyBub3QgZml0IGluCiYjNDM7ICogdGhlIHJlbWFpbmluZyBhcnJheS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3BmbiwKJiM0MzsJCQkJCQkgdW5zaWduZWQgbG9uZyBwZm4sCiYjNDM7CQkJCQkJIHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGZuX3RvX3BhZ2UocGZuKSk7CiYjNDM7CXVuc2lnbmVkIGludCBucjsKJiM0MzsKJiM0MzsJKnNyY19wZm4gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pOwomIzQzOwluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShuciAmZ3Q7IHJlbWFpbmluZykpIHsKJiM0MzsJCWlmICgqc3JjX3BmbiAmYW1wOyBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7CiYjNDM7CQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJfQomIzQzOwkJbWVtc2V0KHNyY19wZm4sIDAsIHJlbWFpbmluZyAqIHNpemVvZigqc3JjX3BmbikpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG5yICZndDsgMSkgewomIzQzOwkJKnNyY19wZm4gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7CiYjNDM7CQltZW1zZXQoc3JjX3BmbiAmIzQzOyAxLCAwLCAobnIgLSAxKSAqIHNpemVvZigqc3JjX3BmbikpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBucjsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS4KICAqIEBzcmNfcGZuczogYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgbWlncmF0aW5nIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zLgpAQCAtMTQxMCwzNSAmIzQzOzE0NDMsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pCiAgKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJiMzOTt0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuCiAgKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFUKICAqIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBtaWdyYXRlX2RldmljZV9wYWdlcygpLgomIzQzOyAqCiYjNDM7ICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIHJhbmdlLgogICovCiBpbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQl1bnNpZ25lZCBsb25nIG5wYWdlcykKIHsKLQl1bnNpZ25lZCBsb25nIGksIGosIHBmbjsKJiM0MzsJdW5zaWduZWQgbG9uZyBpLCBwZm47CiAKIAlmb3IgKHBmbiA9IHN0YXJ0LCBpID0gMDsgaSAmbHQ7IG5wYWdlczsgcGZuJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKLQkJdW5zaWduZWQgaW50IG5yID0gMTsKJiM0MzsJCXVuc2lnbmVkIGludCBucjsKIAotCQlzcmNfcGZuc1tpXSA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7Ci0JCW5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwotCQlpZiAobnIgJmd0OyBucGFnZXMgLSBpKSB7Ci0JCQlpZiAoc3JjX3BmbnNbaV0gJmFtcDsgTUlHUkFURV9QRk5fTUlHUkFURSkgewotCQkJCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCX0KLQkJCW1lbXNldCgmYW1wO3NyY19wZm5zW2ldLCAwLAotCQkJICAgICAgIChucGFnZXMgLSBpKSAqIHNpemVvZigqc3JjX3BmbnMpKTsKJiM0MzsJCW5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygmYW1wO3NyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpOwomIzQzOwkJaWYgKCFucikKIAkJCWJyZWFrOwotCQl9Ci0JCWlmIChuciAmZ3Q7IDEpIHsKLQkJCXNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EOwotCQkJZm9yIChqID0gMTsgaiAmbHQ7IG5yOyBqJiM0MzsmIzQzOykKLQkJCQlzcmNfcGZuc1tpJiM0MztqXSA9IDA7Ci0JCQlpICYjNDM7PSBqIC0gMTsKLQkJCXBmbiAmIzQzOz0gaiAtIDE7Ci0JCX0KJiM0MzsJCWkgJiM0Mzs9IG5yIC0gMTsKJiM0MzsJCXBmbiAmIzQzOz0gbnIgLSAxOwogCX0KIAogCW1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpOwpAQCAtMTQ1NCwzMyAmIzQzOzE0NzQsMjEgQEAgRVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9yYW5nZSk7CiAgKgogICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkCiAgKiBhcnJheSBvZiBkZXZpY2UgcGFnZXMgdG8gbWlncmF0ZS4KJiM0MzsgKgomIzQzOyAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyBQRk4gYXJyYXkuCiAgKi8KIGludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcykKIHsKLQl1bnNpZ25lZCBsb25nIGksIGo7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2Uoc3JjX3BmbnNbaV0pOwotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKLQkJdW5zaWduZWQgaW50IG5yID0gMTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuID0gc3JjX3BmbnNbaV07CiYjNDM7CQl1bnNpZ25lZCBpbnQgbnI7CiAKLQkJc3JjX3BmbnNbaV0gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhzcmNfcGZuc1tpXSk7Ci0JCW5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwotCQlpZiAobnIgJmd0OyBucGFnZXMgLSBpKSB7Ci0JCQlpZiAoc3JjX3BmbnNbaV0gJmFtcDsgTUlHUkFURV9QRk5fTUlHUkFURSkgewotCQkJCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCX0KLQkJCW1lbXNldCgmYW1wO3NyY19wZm5zW2ldLCAwLAotCQkJICAgICAgIChucGFnZXMgLSBpKSAqIHNpemVvZigqc3JjX3BmbnMpKTsKJiM0MzsJCW5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygmYW1wO3NyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpOwomIzQzOwkJaWYgKCFucikKIAkJCWJyZWFrOwotCQl9Ci0JCWlmIChuciAmZ3Q7IDEpIHsKLQkJCXNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EOwotCQkJZm9yIChqID0gMTsgaiAmbHQ7IG5yOyBqJiM0MzsmIzQzOykKLQkJCQlzcmNfcGZuc1tpJiM0MztqXSA9IDA7Ci0JCQlpICYjNDM7PSBqIC0gMTsKLQkJfQomIzQzOwkJaSAmIzQzOz0gbnIgLSAxOwogCX0KIAogCW1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjExCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9saW8gQ29sbGVjdGlvbiBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBleGlzdGluZyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgZnVuY3Rpb25zLiBUaGlzIHR5cGUgb2YgbW9kdWxhcml6YXRpb24gaXMgZ2VuZXJhbGx5IGEgZ29vZCBzaWduIOKAkyBjbGVhbmVyIGNvZGUsIHBvdGVudGlhbGx5IGVhc2llciBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLCBob3BlZnVsbHkgbGVhZGluZyB0byBmZXdlciBlcnJvcnMuIEkgc2VlIGEgbmV3IGBXQVJOX09OX09OQ0VgIGluIHRoZSBoZWxwZXIuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbiByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YgZm9saW9zIGJlaW5nIGNvbGxlY3RlZC4gSXQgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24uCgpOb3csIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2FsbGVycyBleGlzdCBmb3IgdGhpcyBuZXcgZnVuY3Rpb24sIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBlbmFibGUgdGhpcyBjb2RlIHBhdGgsIGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBjb2RlIGFyZWEgdGhhdCYjMzk7cyByZWFjaGFibGUgZW5vdWdoIHRvIGJlIHdvcnRoIGZ1cnRoZXIgZnV6emluZyBvciBtb3JlIGluLWRlcHRoIHRlc3RpbmcuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgZWZmaWNpZW50bHkgaXMgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYW5kIGFsc28gcXVpY2tseSBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgdG8gaWRlbnRpZnkgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVW5kZXJzdGFuZGluZyByZWFjaGFiaWxpdHkgYW5kIGRlcGVuZGVuY2llcyBpcyBrZXkgaGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9kZXZpY2VfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2d1cC5jPTIzMTY9bWlncmF0ZV9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcyhzdHJ1Y3QgbGlzdF9oZWFkICptb3ZhYmxlX2ZvbGlvX2xpc3QsXG4tLVxubW0vZ3VwLmMtMjMzNC1cbm1tL2d1cC5jOjIzMzU6XHRcdFx0aWYgKG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKGZvbGlvKSkge1xubW0vZ3VwLmMtMjMzNi1cdFx0XHRcdHJldCA9IC1FQlVTWTtcbi0tXG5tbS9pbnRlcm5hbC5oPTEyNjM9dm9pZCBmcmVlX3pvbmVfZGV2aWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaW50ZXJuYWwuaDoxMjY0OmludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2ludGVybmFsLmgtMTI2NS1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTU0Mj1zdGF0aWMgYm9vbCBtaWdyYXRlX3ZtYV9jaGVja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZSAqZmF1bHRfcGFnZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTU3MC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTcxOnN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3VubWFwKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxubW0vbWlncmF0ZV9kZXZpY2UuYy01NzItXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucGFnZXMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz02NzA9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxubW0vbWlncmF0ZV9kZXZpY2UuYy02NzEte1xubW0vbWlncmF0ZV9kZXZpY2UuYzo2NzI6XHRtaWdyYXRlLVx1MDAzZWNwYWdlcyA9IG1pZ3JhdGVfZGV2aWNlX3VubWFwKG1pZ3JhdGUtXHUwMDNlc3JjLCBtaWdyYXRlLVx1MDAzZW5wYWdlcyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjczLVx0XHRcdFx0XHRtaWdyYXRlLVx1MDAzZWZhdWx0X3BhZ2UpO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTc2PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTExMDgtXG5tbS9taWdyYXRlX2RldmljZS5jOjExMDk6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTExMC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTExMzgtXHRcdFx0ICogVGhlIG9ubHkgdGltZSB0aGVyZSBpcyBubyB2bWEgaXMgd2hlbiBjYWxsZWQgZnJvbVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTM5Olx0XHRcdCAqIG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKCkuIEhvd2V2ZXIgdGhpcyBpc24mIzM5O3Rcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTE0MC1cdFx0XHQgKiBjYWxsZWQgaWYgdGhlIHBhZ2UgY291bGQgbm90IGJlIHVubWFwcGVkLlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2Mi0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2MzogKiBtaWdyYXRlX2RldmljZV9wYWdlcygpIC0gbWlncmF0ZSBtZXRhLWRhdGEgZnJvbSBzcmMgcGFnZSB0byBkc3QgcGFnZVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjY0OiAqIEBzcmNfcGZuczogc3JjX3BmbnMgcmV0dXJuZWQgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjUtICogQGRzdF9wZm5zOiBhcnJheSBvZiBwZm5zIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIHRvIG1pZ3JhdGUgbWVtb3J5IHRvXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjcwLSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjcxOnZvaWQgbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjcyLVx0XHRcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjczLXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3NDpcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjc1LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3NjpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3Ny1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyODY9dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXG5tbS9taWdyYXRlX2RldmljZS5jLTEyODcte1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjg4Olx0X19taWdyYXRlX2RldmljZV9wYWdlcyhtaWdyYXRlLVx1MDAzZXNyYywgbWlncmF0ZS1cdTAwM2Vkc3QsIG1pZ3JhdGUtXHUwMDNlbnBhZ2VzLCBtaWdyYXRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI4OS19XG5tbS9taWdyYXRlX2RldmljZS5jPTEyOTA9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9wYWdlcyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyOTEtXG5tbS9taWdyYXRlX2RldmljZS5jOjEyOTI6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9maW5hbGl6ZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI5My1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM0NC0vKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzQ1OiAqIG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKCkgLSBjb21wbGV0ZSBwYWdlIG1pZ3JhdGlvblxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzQ2OiAqIEBzcmNfcGZuczogc3JjX3BmbnMgcmV0dXJuZWQgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDctICogQGRzdF9wZm5zOiBhcnJheSBvZiBwZm5zIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIHRvIG1pZ3JhdGUgbWVtb3J5IHRvXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzUzLSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzU0OnZvaWQgbWlncmF0ZV9kZXZpY2VfZmluYWxpemUodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTUtXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpkc3RfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTYte1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzU3Olx0cmV0dXJuIF9fbWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU4LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1OTpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM2MC1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNzI9dm9pZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNzMte1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzc0Olx0X19taWdyYXRlX2RldmljZV9maW5hbGl6ZShtaWdyYXRlLVx1MDAzZXNyYywgbWlncmF0ZS1cdTAwM2Vkc3QsIG1pZ3JhdGUtXHUwMDNlbnBhZ2VzLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzc1LVx0XHRcdFx0ICBtaWdyYXRlLVx1MDAzZWZhdWx0X3BhZ2UpO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3Nz1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX2ZpbmFsaXplKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3OC1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM3OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4MC17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAwLSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDAxOnN0YXRpYyB1bnNpZ25lZCBpbnQgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyh1bnNpZ25lZCBsb25nICpzcmNfcGZuLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDctXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MDg6XHQqc3JjX3BmbiA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDktXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MjgtLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0Mjk6ICogbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LlxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDMwLSAqIEBzcmNfcGZuczogYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgbWlncmF0aW5nIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zLlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0NC0gKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ0NTogKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0Ni0gKlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0OC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ0OTppbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTAtXHRcdFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDU2LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDU3Olx0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTgtXHRcdGlmICghbnIpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYzLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDY0Olx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjUtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDY3LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2OS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3MC0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3MTogKiBtaWdyYXRlX2RldmljZV9wZm5zKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Mi0gKiBAc3JjX3BmbnM6IHByZS1wb3B1bGF0ZWQgYXJyYXkgb2Ygc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbWlncmF0ZS5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzQtICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3NTogKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWRcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Ni0gKiBhcnJheSBvZiBkZXZpY2UgcGFnZXMgdG8gbWlncmF0ZS5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzktICovXG5tbS9taWdyYXRlX2RldmljZS5jOjE0ODA6aW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgxLXtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODctXG5tbS9taWdyYXRlX2RldmljZS5jOjE0ODg6XHRcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4OS1cdFx0aWYgKCFucilcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTMtXG5tbS9taWdyYXRlX2RldmljZS5jOjE0OTQ6XHRtaWdyYXRlX2RldmljZV91bm1hcChzcmNfcGZucywgbnBhZ2VzLCBOVUxMKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5NS1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTctfVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk4OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGZucyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTktXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTA0LSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTA1OmludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTA2LXtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MTktXHQgKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUyMDpcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKFx1MDAyNnNyY19wZm4sIDEsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTIxLVx0aWYgKCEoc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTI5LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTMwOlx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoXHUwMDI2c3JjX3BmbiwgXHUwMDI2ZHN0X3BmbiwgMSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE1MzEtXHRpZiAoc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUzMi1cdFx0Zm9saW9fY29weShkZm9saW8sIGZvbGlvKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUzMzpcdG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKFx1MDAyNnNyY19wZm4sIFx1MDAyNmRzdF9wZm4sIDEpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgIFVzYWdlKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhvc2UgYG1pZ3JhdGVfZGV2aWNlXypgIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBhcmUgdGhlc2UgY2FsbGVkIHRocm91Z2hvdXQgdGhlIGtlcm5lbD8mIzM0OyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciB1c2FnZSBjb250ZXh0IGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyB0aGVpciBpbXBhY3Qgb3IgcG90ZW50aWFsIGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgY2FsbCBzaXRlcyBmb3IgYm90aCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdHJhY2tpbmcgZG93biBldmVyeSBpbnN0YW5jZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2guIFdoYXQgYXJjaGl0ZWN0dXJlcyBhbmQgc3Vic3lzdGVtcyBhcmUgdGhleSB0b3VjaGluZz8gQXJlIHRoZXNlIGNvcmUgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3IgbW9yZSBwZXJpcGhlcmFsPyBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBwb3RlbnRpYWwgcmVmYWN0b3JpbmcuIEkmIzM5O2xsIGhhdmUgdG8gbG9vayBmb3IgaW5kaXJlY3QgY2FsbHMsIGNvbmRpdGlvbmFsIGludm9jYXRpb25zLCBhbmQgYW55IHNwZWNpYWwgdXNlIGNhc2VzLiBJdCYjMzk7cyBnb2luZyB0byBiZSBhIGRlZXAgZGl2ZSwgYnV0IGEgbmVjZXNzYXJ5IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZV8ocmFuZ2V8cGZucykmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9OTE2PXN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk1MS1cdFx0ICogbWlncmF0ZV92bWFfY29sbGVjdF9wbWQoKSBvciwgZm9yIHRoZSBldmljdGlvbiBwYXRoLCBieVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTUyOlx0XHQgKiBtaWdyYXRlX2RldmljZV9wZm5zKCkuIEJvdGggdGhlIG9yZGVyLTAgZmFsbGJhY2sgYmVsb3cgYW5kXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05NTMtXHRcdCAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKCkgcmVseSBvbiB0aGF0LCBhc1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEzMTI9aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzQ1LVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM0NjpcdGVyciA9IG1pZ3JhdGVfZGV2aWNlX3BmbnMoc3JjLCBucGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTM0Ny1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9NDg5PW5vdXZlYXVfZG1lbV9ldmljdF9jaHVuayhzdHJ1Y3Qgbm91dmVhdV9kbWVtX2NodW5rICpjaHVuaylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy00OTktXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo1MDA6XHRtaWdyYXRlX2RldmljZV9yYW5nZShzcmNfcGZucywgY2h1bmstXHUwMDNlcGFnZW1hcC5yYW5nZS5zdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTUwMS1cdFx0XHRucGFnZXMpO1xuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE5Nz12b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTg6aW50IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk5LVx0XHRcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjIwMDppbnQgbWlncmF0ZV9kZXZpY2VfcGZucyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMjAxLXZvaWQgbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxuLS1cbmxpYi90ZXN0X2htbS5jPTE4OD1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXG4tLVxubGliL3Rlc3RfaG1tLmMtMjAwLVxubGliL3Rlc3RfaG1tLmM6MjAxOlx0bWlncmF0ZV9kZXZpY2VfcmFuZ2Uoc3JjX3BmbnMsIHN0YXJ0X3BmbiwgbnBhZ2VzKTtcbmxpYi90ZXN0X2htbS5jLTIwMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaSYjNDM7JiM0MzspIHtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTExMDk9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjMtICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2Vcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2NDogKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjY1LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTI5Mj1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM0NS0gKiBtaWdyYXRlX2RldmljZV9maW5hbGl6ZSgpIC0gY29tcGxldGUgcGFnZSBtaWdyYXRpb25cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM0NjogKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzQ3LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQwMT1zdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3Bmbixcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MjgtLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0Mjk6ICogbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LlxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDMwLSAqIEBzcmNfcGZuczogYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgbWlncmF0aW5nIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zLlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0OC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ0OTppbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTAtXHRcdFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDY3LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2OS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3MC0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3MTogKiBtaWdyYXRlX2RldmljZV9wZm5zKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Mi0gKiBAc3JjX3BmbnM6IHByZS1wb3B1bGF0ZWQgYXJyYXkgb2Ygc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbWlncmF0ZS5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzQtICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3NTogKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWRcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Ni0gKiBhcnJheSBvZiBkZXZpY2UgcGFnZXMgdG8gbWlncmF0ZS5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzktICovXG5tbS9taWdyYXRlX2RldmljZS5jOjE0ODA6aW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgxLXtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTctfVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk4OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGZucyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIyMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEhNTSBUZXN0IEhhcm5lc3MqKgoKUmlnaHQsIG15IGF0dGVudGlvbiYjMzk7cyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IGBsaWIvdGVzdF9obW0uY2AgZmlsZS4gSG1tLCBhIGhpZGRlbiBNYXJrb3YgbW9kZWwgdGVzdCwgaW50ZXJlc3RpbmchIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8gKmRlZXAgZGl2ZSogaW50byBgdGVzdF9obW0uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBJIHdhbnQgdG8ga25vdyBleGFjdGx5IHdoYXQgdGhlIHRlc3QgZG9lcywgdGhlIHRlc3Qgc3RyYXRlZ3kgdXNlZCwgYW5kIGhvdyBpdCBpcyBlbXBsb3llZCB3aXRoaW4gdGhlIG92ZXJhbGwgdGVzdGluZyBmcmFtZXdvcmsuCgpCZXlvbmQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRlc3QgaXRzZWxmLCBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3Vycm91bmRpbmcgYERFVklDRV9QUklWQVRFYCBhbmQgYE1JR1JBVEVfREVWSUNFYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZXkgbWF5IGJlIHJlbGF0ZWQgdG8gZGV2aWNlIG1hbmFnZW1lbnQgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVpciBzZXR0aW5ncyBjb3VsZCBoYXZlIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgdGhlIEhNTSB0ZXN0IGZ1bmN0aW9ucywgb3IgZXZlbiB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQgYXQgYWxsLiBUaGlzIGlzIGNydWNpYWwgZm9yIHZlcmlmeWluZyB0aGF0IHRoZSB0ZXN0IGlzIGFjdHVhbGx5IHJ1bm5pbmcgaW4gdGhlIGV4cGVjdGVkIGVudmlyb25tZW50LCBhbmQgbm90IGdldHRpbmcgdW5pbnRlbnRpb25hbGx5IHNraXBwZWQgb3IgY29uZmlndXJlZCBpbnRvIGEgYmFkIHN0YXRlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSB0ZXN0IGVudmlyb25tZW50IG1hdGNoZXMgdGhlIGludGVuZGVkIGVudmlyb25tZW50IGZvciB0aGUgSE1NIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfZGV2aWNlLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MjMxNj1taWdyYXRlX2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKHN0cnVjdCBsaXN0X2hlYWQgKm1vdmFibGVfZm9saW9fbGlzdCxcbi0tXG5tbS9ndXAuYy0yMzM0LVxubW0vZ3VwLmM6MjMzNTpcdFx0XHRpZiAobWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oZm9saW8pKSB7XG5tbS9ndXAuYy0yMzM2LVx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuLS1cbm1tL2ludGVybmFsLmg9MTI2Mz12b2lkIGZyZWVfem9uZV9kZXZpY2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9pbnRlcm5hbC5oOjEyNjQ6aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaW50ZXJuYWwuaC0xMjY1LVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTEzOC1cdFx0XHQgKiBUaGUgb25seSB0aW1lIHRoZXJlIGlzIG5vIHZtYSBpcyB3aGVuIGNhbGxlZCBmcm9tXG5tbS9taWdyYXRlX2RldmljZS5jOjExMzk6XHRcdFx0ICogbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oKS4gSG93ZXZlciB0aGlzIGlzbiYjMzk7dFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTQwLVx0XHRcdCAqIGNhbGxlZCBpZiB0aGUgcGFnZSBjb3VsZCBub3QgYmUgdW5tYXBwZWQuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQwMTpzdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3Bmbixcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDQ5PWludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTYtXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NTc6XHRcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ1OC1cdFx0aWYgKCFucilcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTE0ODA9aW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4Ny1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4ODpcdFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg5LVx0XHRpZiAoIW5yKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ5OD1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3BmbnMpO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUwNTppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNDUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbiBmb3IgYG1pZ3JhdGVfZGV2aWNlLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBgbWlncmF0ZV9kZXZpY2UuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gbGF5cyBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29tcGlsYXRpb24gcnVsZXMgZm9yIGZpbGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBCeSBleGFtaW5pbmcgdGhlIE1ha2VmaWxlLCBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGBDT05GSUdgIG9wdGlvbnMsIGlmIGFueSwgYG1pZ3JhdGVfZGV2aWNlLmNgIGdldHMgY29tcGlsZWQuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoaWNoIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyBpdCYjMzk7cyBpbnRlbmRlZCB0byBzdXBwb3J0LiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgTWFrZWZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTUzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIHdhbGtpbmcgdGhyb3VnaCBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKktjb25maWcgUmV2aWV3IC0gQ29uZmlndXJhdGlvbiBTY2VuYXJpb3MqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGNoZWNrIGEgZmV3IHNwZWNpZmljIEtjb25maWcgc3ltYm9scywgbmFtZWx5IGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAsIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgLCBhbmQgYENPTkZJR19URVNUX0hNTV9VQVBJYC4gVGhpbmtpbmcgdGhyb3VnaCB0aGlzLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBnZW5lcmFsIGFyZWEgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVsYXRlIHRvPyBCYXNlZCBvbiB0aGUgbmFtaW5nLCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgcmV2b2x2ZXMgYXJvdW5kIGRldmljZSBtYW5hZ2VtZW50IGFuZCB1c2VyLXNwYWNlIEFQSSBpbnRlcmFjdGlvbnMsIHBvc3NpYmx5IGV2ZW4gdGVzdGluZyBlbnZpcm9ubWVudHMuCgoqICAgYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYDogVGhpcyBzb3VuZHMgbGlrZSBpdCBkZWFscyB3aXRoIGhvdyBkZXZpY2VzIGFyZSBtb3ZlZCBvciByZS1hc3NpZ25lZCB3aXRoaW4gdGhlIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgdmFsdWVzIGZvciB0aGlzIGZsYWcgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hhdCB0cmlnZ2VycyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGNvbmZpZy4gV2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgZG9lcyBpdCByZWx5IG9uPyBXaGF0IG1vZHVsZXMgb3IgZHJpdmVycyBkb2VzIGl0IGFmZmVjdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcz8gSXMgdGhpcyByZWxhdGVkIHRvIGhvdHBsdWdnaW5nLCBwZXJzaXN0ZW50IHN0b3JhZ2UsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoKKiAgIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgOiBUaGUgJiMzNDtwcml2YXRlJiMzNDsgYXNwZWN0IGlzIGludHJpZ3VpbmcuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gYWNjZXNzIGNvbnRyb2wgYW5kIHNlY3VyaXR5IGFyb3VuZCBkZXZpY2UgcmVzb3VyY2VzLiBJIHNob3VsZCBjb25zaWRlciBob3cgaXQgaW50ZXJhY3RzIHdpdGggc2VjdXJpdHkgbW9kZWxzLiBEb2VzIGl0IGltcGx5IHRoYXQgYSBnaXZlbiBkZXZpY2UgaXMgKm9ubHkqIGFjY2Vzc2libGUgdG8gY2VydGFpbiBwcm9jZXNzZXMgb3IgYSBwYXJ0aWN1bGFyIHNldCBvZiB1c2Vycz8gQ291bGQgdGhpcyBiZSByZWxhdGVkIHRvIGlzb2xhdGlvbiwgb3IgZXZlbiBwYXJ0aXRpb25pbmc/IEkgbmVlZCB0byByZXZpZXcgcmVsYXRlZCBkb2N1bWVudGF0aW9uLgoKKiAgIGBDT05GSUdfVEVTVF9ITU1fVUFQSWA6IFRoaXMgaXMgcHJldHR5IGNsZWFyLiBUaGlzIGlzIHByb2JhYmx5IGEgdGVzdGluZyByZWxhdGVkIGNvbmZpZ3VyYXRpb24sIGxpa2VseSBmb3Igc29tZSBzb3J0IG9mIHVzZXItc3BhY2UgaW50ZXJmYWNlLiAmIzM0O0hNTSYjMzQ7IGhpbnRzIGF0IHNvbWUgaGFyZHdhcmUgbWVtb3J5IG1hbmFnZW1lbnQuIElzIGl0IGZvciB0ZXN0aW5nIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHdpdGggZGV2aWNlIGRyaXZlcnM/IE9yIHZhbGlkYXRpbmcgYSBtZW1vcnktbWFuYWdlbWVudCBtZWNoYW5pc20gZm9yIHRoZSBrZXJuZWw/IE15IGZpcnN0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgdG8gbG9vayBmb3IgJiMzNDtITU0mIzM0OyBpbiB0aGUga2VybmVsIGRvY3VtZW50YXRpb24uIFdoYXQgdGVzdHMgYXJlIGVuYWJsZWQgd2hlbiB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZD8gV2hhdCBidWlsZCBlbnZpcm9ubWVudCBpcyByZXF1aXJlZD8KClVsdGltYXRlbHksIHRoaXMgaXMgYSBzeXN0ZW1hdGljIHByb2Nlc3MuIEkgd2lsbCByZXZpZXcgZWFjaCBzeW1ib2wmIzM5O3MgZGVmaW5pdGlvbiwgaGVscCB0ZXh0LCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHZhbHVlcy4gSSYjMzk7bGwgbGlrZWx5IGNyb3NzLXJlZmVyZW5jZSB0aGVzZSBhZ2FpbnN0IHJlbGV2YW50IGRvY3VtZW50YXRpb24gYW5kIGV4aXN0aW5nIGNvZGUgY29tbWVudHMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlaXIgZnVuY3Rpb24gYW5kIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVklDRV9NSUdSQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02Nzk9Y29uZmlnIE1JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjgyLVxubW0vS2NvbmZpZzo2ODM6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbm1tL0tjb25maWctNjg0LVx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZTogSW52ZXN0aWdhdGluZyBaT05FX0RFVklDRSBhbmQgVEVTVF9ITU0qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgWk9ORV9ERVZJQ0VgIGFuZCBgVEVTVF9ITU1gLiYjMzQ7IEkmIzM5O20gbWVudGFsbHkgY2hlY2tpbmcgdGhlaXIgZGVmaW5pdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGxvb2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0czoKCiogICAqKmBaT05FX0RFVklDRWA6KiogSXMgdGhpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgLSBJcyBpdCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlPyBEb2VzIGl0IGludGVyYWN0IHdpdGggTlVNQSBub2RlcyBvciBzcGVjaWZpYyBoYXJkd2FyZT8gV2hhdCBpbXBhY3QgZG9lcyBpdCBoYXZlIG9uIHRoZSBtZW1vcnkgYWxsb2NhdG9yIGFuZCByZWNsYWltZXJzPyBBbnkgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgaG90cGx1Zz8KCiogICAqKmBURVNUX0hNTWA6KiogSSYjMzk7bSBndWVzc2luZyB0aGlzIGlzIGxpa2VseSBhIHRlc3QgY2FzZSBvciBzb21lIHNvcnQgb2YgcHJvb2Ytb2YtY29uY2VwdCBmb3IgYSBoZXRlcm9nZW5lb3VzIG1lbW9yeSBtYW5hZ2VtZW50IChITU0pIGZlYXR1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEhNTSBpbXBsZW1lbnRhdGlvbiBpdCYjMzk7cyB0ZXN0aW5nLiBJcyB0aGlzIHJlbGF0ZWQgdG8gdGhlIG1vcmUgbWF0dXJlIEhNTSBmcmFtZXdvcmssIG9yIGlzIGl0IGFuIG9sZGVyIG9yIGV4cGVyaW1lbnRhbCBpbXBsZW1lbnRhdGlvbj8gV2hhdCYjMzk7cyB0aGUgdGVzdCBjYXNlIGFjdHVhbGx5IGRvaW5nPyBJcyBpdCBleGVyY2lzaW5nIHRoZSBiYXNpYyBITU0gQVBJLCB0ZXN0aW5nIG1lbW9yeSBtaWdyYXRpb24sIG9yIHZlcmlmeWluZyBzcGVjaWZpYyBjb3JuZXIgY2FzZXM/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBpZiBhbnkuIElzIGBURVNUX0hNTWAgZGVwZW5kZW50IG9uIGBaT05FX0RFVklDRWAsIG9yIGFyZSB0aGV5IG9ydGhvZ29uYWw/IElzIHRoZSB0ZXN0IGV2ZW4gc3RpbGwgcmVsZXZhbnQsIG9yIGlzIGl0IGFuIGFydGlmYWN0IG9mIGFuIG9sZGVyIGZlYXR1cmUgdGhhdCYjMzk7cyBzaW5jZSBiZWVuIHJlcGxhY2VkPyBDaGVja2luZyB2ZXJzaW9uIGhpc3RvcnkgaW4gZ2l0IGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICYjMzQ7d2h5JiMzNDsgYW5kICYjMzQ7aG93JiMzNDsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RFU1RfSE1NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMTc9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjQtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI1OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzMyNi1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuLS1cbmxpYi9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSAmIzQzOz0gdGVzdF9sb2NrdXAub1xubGliL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfVEVTVF9ITU0pICYjNDM7PSB0ZXN0X2htbS5vXG5saWIvTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICYjNDM7PSB0ZXN0X2ZyZWVfcGFnZXMub1xuLS1cbmxpYi90ZXN0X2htbV91YXBpLmgtNi0gKi9cbmxpYi90ZXN0X2htbV91YXBpLmg6NzojaWZuZGVmIF9MSUJfVEVTVF9ITU1fVUFQSV9IXG5saWIvdGVzdF9obW1fdWFwaS5oOjg6I2RlZmluZSBfTElCX1RFU1RfSE1NX1VBUElfSFxubGliL3Rlc3RfaG1tX3VhcGkuaC05LVxuLS1cbmxpYi90ZXN0X2htbV91YXBpLmg9NzU9ZW51bSB7XG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaC04MC1cbmxpYi90ZXN0X2htbV91YXBpLmg6ODE6I2VuZGlmIC8qIF9MSUJfVEVTVF9ITU1fVUFQSV9IICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTU9Q09ORklHX0RFVklDRV9QUklWQVRFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzo2OkNPTkZJR19URVNUX0hNTT1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNy1DT05GSUdfR1VQX1RFU1Q9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoPTIxPWNoZWNrX3Rlc3RfcmVxdWlyZW1lbnRzKClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0zNS1cdFx0ZWNobyBcJiMzNDskMDogWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWw6XCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaDozNjpcdFx0ZWNobyBcJiMzNDtDT05GSUdfVEVTVF9ITU09bVwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2gtMzctXHRcdGV4aXQgJGtzZnRfc2tpcFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA2MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGxpYi9LY29uZmlnLmRlYnVnYCBhbmQgYFRFU1RfSE1NYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgZmlsZS4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyByZWxldmFudCBhcm91bmQgYFRFU1RfSE1NYC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyB0aGVyZSYjMzk7cyBwcm9iYWJseSBhIGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byB0aGF0IHN5bWJvbC4gVGhpcyBsaWtlbHkgbWVhbnMgc29tZSBkZWJ1Z2dpbmcgZmVhdHVyZXMsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3Igc29tZSBzcGVjaWZpYyBoYXJkd2FyZSB0ZXN0cywgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhpcyBgVEVTVF9ITU1gIHNldHRpbmcuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0aW5nIHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgcmV2ZWFsZWQgYXMgSSBsb29rIGF0IHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IHN5bWJvbC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBkZWZpbml0aW9ucywgY29uZGl0aW9uYWwgYmxvY2tzICggYGlmYCBzdGF0ZW1lbnRzKSwgYW5kIGFueSByZWZlcmVuY2VzIHRvIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBzeW1ib2xzLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBsb2dpYyB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHRlc3Qgb3IgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkgcmVsYXRpbmcgdG8gSE1NIChwZXJoYXBzIEhhcmR3YXJlIE1hbmFnZWQgTWVtb3J5PykgaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE3PWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI0LVxubGliL0tjb25maWcuZGVidWc6MzMyNTpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjYtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGdldCBncmFudWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgYW5kIGZvY3VzIG9uIGxpbmVzIDMzMjAgdGhyb3VnaCAzMzUwLiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIHBhcnNlIHRoZSBsaWtlbHkgY29udGVudDogaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGRlYnVnIGZlYXR1cmUsIGxpa2VseSBhIGNvbXBsZXggb25lIGp1ZGdpbmcgYnkgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB3aXRoaW4gYSBLY29uZmlnIGZpbGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleXdvcmRzIGxpa2UgJiMzNDtkZWJ1ZywmIzM0OyAmIzM0O3RyYWNpbmcsJiMzNDsgJiMzNDtsb2dnaW5nLCYjMzQ7IG9yIHNwZWNpZmljIGhhcmR3YXJlLXJlbGF0ZWQgdGVybXMgaWYgaXQgcGVydGFpbnMgdG8gb24tY2hpcCBkZWJ1ZyBjYXBhYmlsaXRpZXMuIEkgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgYGNvbmZpZ2AgYmxvY2tzLCBgYm9vbGAgb3IgYHRyaXN0YXRlYCBvcHRpb25zLCBgZGVwZW5kcyBvbmAgY2xhdXNlcywgYW5kIHBvdGVudGlhbGx5IHNvbWUgaGVscCB0ZXh0IHRoYXQgd2lsbCBwcm92aWRlIHRoZSBjcml0aWNhbCBjb250ZXh0IGZvciB0aGlzIHNlY3Rpb24uIFRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGEgcGFydGljdWxhciBkZWJ1ZyBvcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSwgc28gSSBjYW4gcHJlZGljdCBpdHMgYmVoYXZpb3IgYW5kIGluZmx1ZW5jZSBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoZXJlLiBJJiMzOTttIGhvcGluZyBpdCBwcm92aWRlcyB0aGUgbWlzc2luZyBwaWVjZSBJIG5lZWQgdG8gcmVzb2x2ZSB0aGlzIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzIwOlx0XHQgIFRlc3QgaWYgdGhlIGtlcm5lbCBpcyB6ZXJvLWluaXRpYWxpemluZyBoZWFwIGFuZCBwYWdlIGFsbG9jYXRpb25zLlxuMzMyMTpcdFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXG4zMzIyOlx0XG4zMzIzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzI0Olx0XG4zMzI1Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzMjc6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzMjg6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzMjk6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzMwOlx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzMxOlx0XHRoZWxwXG4zMzMyOlx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzMzMzpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzM0Olx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzMzU6XHRcbjMzMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzMzc6XHRcbjMzMzg6XHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXG4zMzM5Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IGZyZWVpbmcgcGFnZXNcJiMzNDtcbjMzNDA6XHRcdGhlbHBcbjMzNDE6XHRcdCAgVGVzdCB0aGF0IGEgbWVtb3J5IGxlYWsgZG9lcyBub3Qgb2NjdXIgZHVlIHRvIGEgcmFjZSBiZXR3ZWVuXG4zMzQyOlx0XHQgIGZyZWVpbmcgYSBibG9jayBvZiBwYWdlcyBhbmQgYSBzcGVjdWxhdGl2ZSBwYWdlIHJlZmVyZW5jZS5cbjMzNDM6XHRcdCAgTG9hZGluZyB0aGlzIG1vZHVsZSBpcyBzYWZlIGlmIHlvdXIga2VybmVsIGhhcyB0aGUgYnVnIGZpeGVkLlxuMzM0NDpcdFx0ICBJZiB0aGUgYnVnIGlzIG5vdCBmaXhlZCwgaXQgd2lsbCBsZWFrIGdpZ2FieXRlcyBvZiBtZW1vcnkgYW5kXG4zMzQ1Olx0XHQgIHByb2JhYmx5IE9PTSB5b3VyIHN5c3RlbS5cbjMzNDY6XHRcbjMzNDc6XHRjb25maWcgVEVTVF9GUFVcbjMzNDg6XHRcdHRyaXN0YXRlIFwmIzM0O1Rlc3QgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBpbiBrZXJuZWwgc3BhY2VcJiMzNDtcbjMzNDk6XHRcdGRlcGVuZHMgb24gQVJDSF9IQVNfS0VSTkVMX0ZQVV9TVVBQT1JUIFx1MDAyNlx1MDAyNiAhS0NPVl9JTlNUUlVNRU5UX0FMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIxMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYFRFU1RfSE1NYCBNb2R1bGUqKgoKT2theSwgc28gYFRFU1RfSE1NYCBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGVzZSBjaGFyYWN0ZXIgZGV2aWNlcywgYC9kZXYvaG1tX2RtaXJyb3IwYCwgYC9kZXYvaG1tX2RtaXJyb3IxYCwgYW5kIHRoZSBsaWtlLiBUaGF0JiMzOTtzIHRoZSBiYXNpYyBpbmZyYXN0cnVjdHVyZSwgdGhlIGVudHJ5IHBvaW50cy4gQW5kIGl0JiMzOTtzIGRvaW5nIHRoaXMgdG8gcHJvdmlkZSBhIHdheSB0byBtb3ZlIG1lbW9yeSBwYWdlcyBhcm91bmQgdGhyb3VnaCBpb2N0bHMuIFNwZWNpZmljYWxseSwgSSBzZWUgYEhNTV9ETUlSUk9SX01JR1JBVEVgIGFuZCBvdGhlciBzaW1pbGFyIG9wZXJhdGlvbnMuIFRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGF0IG1pZ3JhdGlvbiBwcm9jZXNzLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLgoKVGhlIGtleSB0byBmaWd1cmluZyB0aGlzIG91dCBsaWVzIGluIGhvdyBpdCAqdXNlcyogYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUgaGVhcnQgb2YgdGhlIHBhZ2UgbWlncmF0aW9uIGxvZ2ljLCBhbmQgdW5kZXJzdGFuZGluZyAqaXRzKiBjb250ZXh0IGlzIGNydWNpYWwuIFRpbWUgdG8gZGl2ZSBpbnRvIGBsaWIvdGVzdF9obW0uY2AgdG8gc2VlIGhvdyB0aG9zZSBpb2N0bHMgYXJlIHVsdGltYXRlbHkgY2FsbGluZyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBhbmQgdW5kZXJzdGFuZCB0aGUgaW5wdXRzIGFuZCBwYXJhbWV0ZXJzLiBXaGF0IGtpbmQgb2YgYWRkcmVzc2VzIGFyZSBiZWluZyBwYXNzZWQsIGhvdyBpcyB0aGUgZGV2aWNlIHJhbmdlIGRlZmluZWQsIGFuZCB3aGF0JiMzOTtzIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgaXQmIzM5O3Mgb3BlcmF0aW5nIGluPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTE2Mj1zdGF0aWMgaW50IGRtaXJyb3JfZm9wc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE4Ny1cbmxpYi90ZXN0X2htbS5jOjE4ODpzdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXG5saWIvdGVzdF9obW0uYy0xODkte1xuLS1cbmxpYi90ZXN0X2htbS5jPTIzOD1zdGF0aWMgaW50IGRtaXJyb3JfZm9wc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmxpYi90ZXN0X2htbS5jLTI1MC1cbmxpYi90ZXN0X2htbS5jOjI1MTpcdFx0XHRkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhkZXZtZW0pO1xubGliL3Rlc3RfaG1tLmMtMjUyLVx0XHR9XG4tLVxubGliL3Rlc3RfaG1tLmM9MTU3Nz1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmVfY2h1bmtzKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcbi0tXG5saWIvdGVzdF9obW0uYy0xNTkxLVxubGliL3Rlc3RfaG1tLmM6MTU5MjpcdFx0XHRkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhkZXZtZW0pO1xubGliL3Rlc3RfaG1tLmMtMTU5My1cdFx0XHRtZW11bm1hcF9wYWdlcyhcdTAwMjZkZXZtZW0tXHUwMDNlcGFnZW1hcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRyaWFnZSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmc/KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGBtaWdyYXRlX3ZtYV8qYCBhbmQgYG1pZ3JhdGVfZGV2aWNlXypgLCB3aGljaCBhcmUgc3F1YXJlbHkgd2l0aGluIHRoZSBgbW0vYCBtZW1vcnkgbWFuYWdlbWVudCBjb3JlIHN1YnN5c3RlbS4gRXhjZWxsZW50LCB0aGF0JiMzOTtzIHN0ZXAgb25lLiBOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBoaXRzIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGNyaXRlcmlhLgoKVGhlIHRyaWFnZSBndWlkZWxpbmVzIHN0YXRlIHdlIHNob3VsZCByZXR1cm4gYHRydWVgIGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEFuZCB3ZSYjMzk7dmUgZ290IGEgbGlzdCBvZiBwb3NpdGl2ZSBpbmRpY2F0b3JzLiAgV2UgbmVlZCB0byBzZWUgaWYgdGhpcyBtYXRjaGVzIG9uZSBvZiB0aGVtLiAgU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgYXNzZXNzIGl0IGFnYWluc3QgdGhlc2U6CgoxLiAgKipDb3JlIFN1YnN5c3RlbXM6KiogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLykuCjIuICAqKlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoqKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCjMuICAqKlJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoqKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCgpIZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBzZWVpbmc6ICBUaGlzIHBhdGNoIGlzICphYnNvbHV0ZWx5KiByZWxldmFudC4KCiogICAqKlN1YnN5c3RlbToqKiBJdCYjMzk7cyBpbiBgbW0vYCDigJMgbWVtb3J5IG1hbmFnZW1lbnQsIHRpY2suCiogICAqKkNoYW5nZXM6KiogV2UgaGF2ZSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBmb2xpbyBjb2xsZWN0aW9uIGxvb3AgaW4gYG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZucygpYC4gIFBsdXMsIGEgbmV3IGZ1bmN0aW9uLCBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpYC4gQ3JpdGljYWxseSwgdGhlcmUmIzM5O3MgYSBgV0FSTl9PTl9PTkNFYCBhc3NlcnRpb24gYWRkZWQgKGBXQVJOX09OX09OQ0UobnIgJmd0OyByZW1haW5pbmcpYCksICphbmQqIG1vZGlmaWNhdGlvbnMgdG8gZm9saW8gbG9ja2luZy91bmxvY2tpbmcgYW5kIGFycmF5IGJvdW5kcyBoYW5kbGluZy4gVGhhdCYjMzk7cyBhIHRyaXBsZSB0aHJlYXQhCiogICAqKlJlYWNoYWJpbGl0eToqKiAgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gIFdlIGNhbiBoaXQgaXQgdGhyb3VnaCBgdGVzdF9obW1gLCB3aGljaCBjYW4gYmUgZHJpdmVuIGluIFFFTVUvc3l6a2FsbGVyLiBUaGF0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEFsc28sIGBub3V2ZWF1YCwgYGRybV9wYWdlbWFwYCwgb3IgYW55IGRyaXZlciB0aGF0IHVzZXMgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBvciBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgaXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuCiogICAqKkNvbmZpZ3VyYXRpb246KiogV2UmIzM5O3ZlIGdvdCBmbGFncyBsaWtlIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgREVWSUNFX01JR1JBVElPTmAgaW4gcGxheSwgc28gd2UgbmVlZCB0byBjb25maXJtIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzZXR1cCwgYnkgY2hlY2tpbmcgdGhlIG1tL0tjb25maWcgZm9yIHRoZWlyIGF2YWlsYWJpbGl0eS4KCkdpdmVuIHRoZSBzdWJzeXN0ZW0gaW52b2x2ZW1lbnQsIHJlZmFjdG9yaW5nLCAqYW5kKiB0aGUgaW50cm9kdWN0aW9uIG9mIGFuIGFzc2VydGlvbiwgdGhpcyBpcyBhIGNsZWFyICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0Oy4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgcmVzdHJ1Y3R1cmluZyBkYXRhIGZsb3csIGFuZCBhZGRpbmcgYSBkZWZlbnNpdmUgY2hlY2sgaW4gYSByZWFjaGFibGUgcGF0aC4gRXhjZWxsZW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgKERFVklDRV9QUklWQVRFfFpPTkVfREVWSUNFfERFVklDRV9NSUdSQVRJT04pJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njc5PWNvbmZpZyBNSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY4Mi1cbm1tL0tjb25maWc6NjgzOmNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4NC1cdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0Vcbi0tXG5tbS9LY29uZmlnPTEyMTU9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMTktXG5tbS9LY29uZmlnOjEyMjA6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjEtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTEyNDc9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWctMTI0OS1cbm1tL0tjb25maWc6MTI1MDpjb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI1MS1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZGV2aWNlIHpvbmVzIGFyZSBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb25zIGZvciBgWk9ORV9ERVZJQ0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgb3B0aW9ucyBhcmUgYWN0dWFsbHkgY29uZmlndXJhYmxlIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb24gYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoZSBgY29uZmlnYCBzdGF0ZW1lbnRzLCB0aGVpciBkZXBlbmRlbmNpZXMgKGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGV0Yy4pLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBoZWxwIHRleHQsIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBpbnRlbnRpb25zLiBJIGFsc28gd2FudCB0byBzZWUgaWYgdGhlc2UgYXJlIG1lcmVseSBjb21waWxlLXRpbWUgb3B0aW9ucyBvciBpZiBydW50aW1lIGNvbmZpZ3VyYXRpb24gaXMgaW52b2x2ZWQsIGJ1dCB0aGUgS2NvbmZpZyB3aWxsIGxpa2VseSBvbmx5IGhhdmUgdGhlIGNvbXBpbGUtdGltZSBpbmZvcm1hdGlvbi4gR3JhYmJpbmcgdGhlc2Ugc3BlY2lmaWNzIHdpbGwgZ2l2ZSBtZSB0aGUgcHJvcGVyIGZvdW5kYXRpb24gdG8gcmVhc29uIGFib3V0IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIGFzc29jaWF0ZWQgd2l0aCB0aG9zZSB6b25lcy4gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMTg6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIxOTpcdFxuMTIyMDpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIyMTpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjIyOlx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMjM6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyMjQ6XHRcbjEyMjU6XHRcdGhlbHBcbjEyMjY6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyMjc6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyMjg6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjI5Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTIzMDpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjMxOlx0XG4xMjMyOlx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyMzM6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTIzNDpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjM1Olx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTIzNjpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyMzc6XHRcbjEyMzg6XHQjXG4xMjM5Olx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXG4xMjQwOlx0IyB0YWJsZXMuXG4xMjQxOlx0I1xuMTI0MjpcdGNvbmZpZyBITU1fTUlSUk9SXG4xMjQzOlx0XHRib29sXG4xMjQ0Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTI0NTpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuMTI0NjpcdFxuMTI0NzpcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbjEyNDg6XHRcdGJvb2xcbjEyNDk6XHRcbjEyNTA6XHRjb25maWcgREVWSUNFX1BSSVZBVEVcbjEyNTE6XHRcdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4xMjUyOlx0XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4xMjUzOlx0XHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4xMjU0Olx0XG4xMjU1Olx0XHRoZWxwXG4xMjU2Olx0XHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXG4xMjU3Olx0XHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcbjEyNTg6XHRcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxuMTI1OTpcdFxuMTI2MDpcdGNvbmZpZyBWTUFQX1BGTlxuMTI2MTpcdFx0Ym9vbFxuMTI2MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAzMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBNaWdyYXRpb24gQ29uZmlndXJhdGlvbiBpbiBtbS9LY29uZmlnKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7UmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiYjMzQ7IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBgTUlHUkFUSU9OYCBvcHRpb25zIHdpdGhpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBvciBwb3RlbnRpYWxseSB0d2Vha2luZyB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtaWdyYXRpb24gY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGVzZSBjb25maWd1cmF0aW9ucywgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIG1lbW9yeSwgc28gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggbWlncmF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgc2V0IGFuZCBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyB1bnVzdWFsIG9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZCBpbiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzb21ldGhpbmcgSSYjMzk7bSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGgsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIGRldGFpbHMgYXMgd2VsbCBhcyB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjc1Olx0XHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXG4gNjc2Olx0XHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcbiA2Nzc6XHRcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxuIDY3ODpcdFxuIDY3OTpcdGNvbmZpZyBNSUdSQVRJT05cbiA2ODA6XHRcdGJvb2xcbiA2ODE6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjgyOlx0XG4gNjgzOlx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbiA2ODQ6XHRcdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0VcbiA2ODU6XHRcbiA2ODY6XHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXG4gNjg3Olx0XHRib29sXG4gNjg4Olx0XG4gNjg5Olx0Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4gNjkwOlx0XHRib29sXG4gNjkxOlx0XG4gNjkyOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG4gNjkzOlx0XHRkZWZfYm9vbCBuXG4gNjk0Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTE0CgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDY3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEZXZpY2UgTWlncmF0aW9uIENvZGUgYW5kIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBlbmFibGluZyBgREVWSUNFX1BSSVZBVEVgLCBgWk9ORV9ERVZJQ0VgLCBvciBgVEVTVF9ITU1gIGluZGlyZWN0bHkgZW5hYmxlcyBkZXZpY2UgbWlncmF0aW9uIGJlY2F1c2Ugb2YgdGhlIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIGhpbmdlcyBvbiBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYCwgd2hpbGUgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgWk9ORV9ERVZJQ0VgLiBUaGVuLCBgQ09ORklHX1RFU1RfSE1NYCBuZWVkcyBib3RoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIFRoaXMgbWVhbnMgYWN0aXZhdGluZyBhbnkgb2YgdGhvc2UgY29uZmlncyBhbGxvd3MgdXMgdG8gdHJpZ2dlciB0aGUgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBtb2RpZmljYXRpb25zLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBhcmUgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBJJiMzOTttIHNlZWluZyBhIG5ldywgc3RhdGljIGZ1bmN0aW9uIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvYCBpbnRyb2R1Y2VkLiBUaGUgZXhpc3RpbmcgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQgdG8gdXNlIGl0LiBJbXBvcnRhbnRseSwgYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gIGlzICpzdGF0aWMqLCBzbyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoYXQgZmlsZSwgYW5kIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYCBhcmUgdGhlIGV4cG9ydGVkIHN5bWJvbHMgdGhhdCB3aWxsIGFjdHVhbGx5IGNhbGwgaXQuIFRob3NlIHRocmVlIGZ1bmN0aW9ucywgY29sbGVjdGl2ZWx5LCBhcmUgdGhlICpGb2N1c1N5bWJvbHMqLgoKSSYjMzk7dmUgdmVyaWZpZWQgdGhhdCB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgYXJlIGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgVEVTVF9ITU1gLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZnV6emluZyBjcml0ZXJpYS4gVGhlIGFuYWx5c2lzIGNsYWltcyB0aGlzIGlzIHdvcnRoIGZ1enppbmcsIGFuZCBJIGFncmVlLiBUaGUganVzdGlmaWNhdGlvbiBzZWVtcyBzb3VuZDogdGhlcmUgYXJlIGxvZ2ljIG1vZGlmaWNhdGlvbnMgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gKGBtbS9taWdyYXRlX2RldmljZS5jYCksIGluY2x1ZGluZyBhIHJlZmFjdG9yaW5nIG9mIGZvbGlvIGhhbmRsaW5nLCBwbHVzIGFuIGFkZGVkIGFzc2VydGlvbiAoYFdBUk5fT05fT05DRWApIGluIHRoZSBuZXcgYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gLiBUaGlzIHN1Z2dlc3RzIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MuIEZ1cnRoZXJtb3JlLCBJIHNlZSB0aGlzIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHZpYSBgdGVzdF9obW1gIG9yIGV2ZW4gdGhlIERSTSBwYWdlbWFwLCBzbyB0aGVyZSBhcmUgZ29vZCB0ZXN0IHZlY3RvcnMuCgpJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGV2ZXJ5dGhpbmcgbWVldHMgdGhlIGNyaXRlcmlhLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCB0byB0cnVlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIEFuZCBmaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkIGFzIGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgVEVTVF9ITU1gLgoKVGhlIHJlYXNvbmluZyBpcyBhY2N1cmF0ZSBhbmQgY29uY2lzZTogdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZGV2aWNlIHByaXZhdGUgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbnRvIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpYCwgdXNlZCBieSBgbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zKClgLiBJdCBhZGRzIGEgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uIHRvIGNoZWNrIGJvdW5kcyBhZ2FpbnN0IHJlbWFpbmluZyBhcnJheSBjYXBhY2l0eSwgYW5kIHRoZSBjb2RlIGlzIHRlc3RhYmxlIHZpYSBgdGVzdF9obW1gLgoKU28sIGl0JiMzOTtzIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIHRvb2wgY2FsbCB3aXRoIHRob3NlIHNldHRpbmdzLiBMb29rcyBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7VEVTVF9ITU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3JhbmdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BmbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2RldmljZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2RldmljZV9wZm5zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGludG8gYSBuZXcgaGVscGVyIGZ1bmN0aW9uIG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oKSBjYWxsZWQgYnkgbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpLCBhbmQgaW50cm9kdWNlcyBhIG5ldyBXQVJOX09OX09OQ0UgYXNzZXJ0aW9uIHRvIHZlcmlmeSBib3VuZHMgYWdhaW5zdCB0aGUgcmVtYWluaW5nIGFycmF5IGNhcGFjaXR5LiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGNhbiBiZSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHRoZSB0ZXN0X2htbSBwc2V1ZG8tZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGJ5IGZhY3RvcmluZyBvdXQgZHVwbGljYXRlZCBjb2RlIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIChuciwgcGZuLCBpKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGRlc3RpbmF0aW9uIFBGTiBhcnJheSBlbnRyaWVzIGFyZSBleHBsaWNpdGx5IHdyaXR0ZW4gb3IgemVyb2VkIHZpYSBtZW1zZXQoKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbiAoZS5nLiwgYXJyYXkgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBvciBmb2xpbyBsb2NraW5nL3JlZmNvdW50aW5nIGlzc3VlcykgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVhMzM5Njc0MjQ1NGJlZmJhMmRkOGRlYWY2MjBlZjU0NTllM2IxMTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwNjo0NjoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVfZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jCmluZGV4IDAwOWJmYThiMjEyZDUuLmM1N2VhZGVhNjU2NTEgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZV9kZXZpY2UuYwpAQCAtMTM5Miw2ICYjNDM7MTM5MiwzOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbikKIAlyZXR1cm4gbWlncmF0ZV9wZm4ocGZuKSB8IE1JR1JBVEVfUEZOX01JR1JBVEU7CiB9CiAKJiM0MzsvKgomIzQzOyAqIENvbGxlY3QgYSBkZXZpY2UgZm9saW8gaW50byB0aGUgcGFnZS1ncmFudWxhciBQRk4gYXJyYXkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGNvbnN1bWVkLCBvciAwIGlmIHRoZSBmb2xpbyBkb2VzIG5vdCBmaXQgaW4KJiM0MzsgKiB0aGUgcmVtYWluaW5nIGFycmF5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyh1bnNpZ25lZCBsb25nICpzcmNfcGZuLAomIzQzOwkJCQkJCSB1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsJCQkJCQkgdW5zaWduZWQgbG9uZyByZW1haW5pbmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwZm5fdG9fcGFnZShwZm4pKTsKJiM0MzsJdW5zaWduZWQgaW50IG5yOwomIzQzOwomIzQzOwkqc3JjX3BmbiA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7CiYjNDM7CW5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG5yICZndDsgcmVtYWluaW5nKSkgewomIzQzOwkJaWYgKCpzcmNfcGZuICZhbXA7IE1JR1JBVEVfUEZOX01JR1JBVEUpIHsKJiM0MzsJCQlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQl9CiYjNDM7CQltZW1zZXQoc3JjX3BmbiwgMCwgcmVtYWluaW5nICogc2l6ZW9mKCpzcmNfcGZuKSk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnIgJmd0OyAxKSB7CiYjNDM7CQkqc3JjX3BmbiB8PSBNSUdSQVRFX1BGTl9DT01QT1VORDsKJiM0MzsJCW1lbXNldChzcmNfcGZuICYjNDM7IDEsIDAsIChuciAtIDEpICogc2l6ZW9mKCpzcmNfcGZuKSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yOwomIzQzO30KJiM0MzsKIC8qKgogICogbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LgogICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuCkBAIC0xNDEwLDM1ICYjNDM7MTQ0MywyMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbikKICAqIG1pZ3JhdGluZyBwYWdlcyB0aGF0IGFyZW4mIzM5O3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW4KICAqIGFsbG9jYXRlIGRlc3RpbmF0aW9uIHBhZ2VzIGFuZCBzdGFydCBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlIHRvIENQVQogICogbWVtb3J5IGJlZm9yZSBjYWxsaW5nIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCkuCiYjNDM7ICoKJiM0MzsgKiBBIGNvbXBvdW5kIGZvbGlvIG11c3QgZml0IGVudGlyZWx5IGluIHRoZSByZW1haW5pbmcgcmFuZ2UuCiAgKi8KIGludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCXVuc2lnbmVkIGxvbmcgbnBhZ2VzKQogewotCXVuc2lnbmVkIGxvbmcgaSwgaiwgcGZuOwomIzQzOwl1bnNpZ25lZCBsb25nIGksIHBmbjsKIAogCWZvciAocGZuID0gc3RhcnQsIGkgPSAwOyBpICZsdDsgbnBhZ2VzOyBwZm4mIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwotCQl1bnNpZ25lZCBpbnQgbnIgPSAxOwomIzQzOwkJdW5zaWduZWQgaW50IG5yOwogCi0JCXNyY19wZm5zW2ldID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2socGZuKTsKLQkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Ci0JCWlmIChuciAmZ3Q7IG5wYWdlcyAtIGkpIHsKLQkJCWlmIChzcmNfcGZuc1tpXSAmYW1wOyBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7Ci0JCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJCQlmb2xpb19wdXQoZm9saW8pOwotCQkJfQotCQkJbWVtc2V0KCZhbXA7c3JjX3BmbnNbaV0sIDAsCi0JCQkgICAgICAgKG5wYWdlcyAtIGkpICogc2l6ZW9mKCpzcmNfcGZucykpOwomIzQzOwkJbnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCZhbXA7c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7CiYjNDM7CQlpZiAoIW5yKQogCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG5yICZndDsgMSkgewotCQkJc3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7Ci0JCQlmb3IgKGogPSAxOyBqICZsdDsgbnI7IGomIzQzOyYjNDM7KQotCQkJCXNyY19wZm5zW2kmIzQzO2pdID0gMDsKLQkJCWkgJiM0Mzs9IGogLSAxOwotCQkJcGZuICYjNDM7PSBqIC0gMTsKLQkJfQomIzQzOwkJaSAmIzQzOz0gbnIgLSAxOwomIzQzOwkJcGZuICYjNDM7PSBuciAtIDE7CiAJfQogCiAJbWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7CkBAIC0xNDU0LDMzICYjNDM7MTQ3NCwyMSBAQCBFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTsKICAqCiAgKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWQKICAqIGFycmF5IG9mIGRldmljZSBwYWdlcyB0byBtaWdyYXRlLgomIzQzOyAqCiYjNDM7ICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIFBGTiBhcnJheS4KICAqLwogaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQogewotCXVuc2lnbmVkIGxvbmcgaSwgajsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShzcmNfcGZuc1tpXSk7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwotCQl1bnNpZ25lZCBpbnQgbnIgPSAxOwomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4gPSBzcmNfcGZuc1tpXTsKJiM0MzsJCXVuc2lnbmVkIGludCBucjsKIAotCQlzcmNfcGZuc1tpXSA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHNyY19wZm5zW2ldKTsKLQkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Ci0JCWlmIChuciAmZ3Q7IG5wYWdlcyAtIGkpIHsKLQkJCWlmIChzcmNfcGZuc1tpXSAmYW1wOyBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7Ci0JCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJCQlmb2xpb19wdXQoZm9saW8pOwotCQkJfQotCQkJbWVtc2V0KCZhbXA7c3JjX3BmbnNbaV0sIDAsCi0JCQkgICAgICAgKG5wYWdlcyAtIGkpICogc2l6ZW9mKCpzcmNfcGZucykpOwomIzQzOwkJbnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCZhbXA7c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7CiYjNDM7CQlpZiAoIW5yKQogCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG5yICZndDsgMSkgewotCQkJc3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7Ci0JCQlmb3IgKGogPSAxOyBqICZsdDsgbnI7IGomIzQzOyYjNDM7KQotCQkJCXNyY19wZm5zW2kmIzQzO2pdID0gMDsKLQkJCWkgJiM0Mzs9IGogLSAxOwotCQl9CiYjNDM7CQlpICYjNDM7PSBuciAtIDE7CiAJfQogCiAJbWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDIzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgQW5hbHlzaXM6IEEgUXVpY2sgTG9vayBhdCB0aGUgTWlncmF0ZSBEZXZpY2UgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gZnV6emluZyBpcyBuZWNlc3NhcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjaGFuZ2VzIHdpdGhpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgcHVsbGVkIG91dCBhIGhlbHBlciBmdW5jdGlvbiwgYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gLCBmcm9tIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucy4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSG93IGFyZSBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AsIGFuZCB0aGUgbmV3IGhlbHBlciwgYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gLCBpbnRlcmFjdGluZz8gQSBxdWljayByZWFkIG9mIGBtbS9taWdyYXRlX2RldmljZS5jYCBzaG91bGQgY2xhcmlmeSB0aGVpciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCwgY3JpdGljYWxseSwgaG93IHRoZXkgYXJlIGJlaW5nICp1c2VkKi4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBhcmVhIGlzIGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGRhdGEgcmFjZXMgb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBLTVNBTiBtaWdodCBleHBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfZGV2aWNlXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz01NDI9c3RhdGljIGJvb2wgbWlncmF0ZV92bWFfY2hlY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2UgKmZhdWx0X3BhZ2UpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy01NzAtICovXG5tbS9taWdyYXRlX2RldmljZS5jOjU3MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV91bm1hcCh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTcyLVx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NjcwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjcxLXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NjcyOlx0bWlncmF0ZS1cdTAwM2VjcGFnZXMgPSBtaWdyYXRlX2RldmljZV91bm1hcChtaWdyYXRlLVx1MDAzZXNyYywgbWlncmF0ZS1cdTAwM2VucGFnZXMsXG5tbS9taWdyYXRlX2RldmljZS5jLTY3My1cdFx0XHRcdFx0bWlncmF0ZS1cdTAwM2VmYXVsdF9wYWdlKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTk3Nj1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTA4LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTA5OnN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG5tbS9taWdyYXRlX2RldmljZS5jLTExMTAtXHRcdFx0XHR1bnNpZ25lZCBsb25nICpkc3RfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTM4LVx0XHRcdCAqIFRoZSBvbmx5IHRpbWUgdGhlcmUgaXMgbm8gdm1hIGlzIHdoZW4gY2FsbGVkIGZyb21cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTEzOTpcdFx0XHQgKiBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbygpLiBIb3dldmVyIHRoaXMgaXNuJiMzOTt0XG5tbS9taWdyYXRlX2RldmljZS5jLTExNDAtXHRcdFx0ICogY2FsbGVkIGlmIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSB1bm1hcHBlZC5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjItLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNjM6ICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2Vcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2NDogKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjY1LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3MTp2b2lkIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3Mi1cdFx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcylcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3My17XG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzQ6XHRfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyY19wZm5zLCBkc3RfcGZucywgbnBhZ2VzLCBOVUxMKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3NS19XG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzY6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNzctXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjg2PXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjg3LXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI4ODpcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMobWlncmF0ZS1cdTAwM2VzcmMsIG1pZ3JhdGUtXHUwMDNlZHN0LCBtaWdyYXRlLVx1MDAzZW5wYWdlcywgbWlncmF0ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyODktfVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjkwPUVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfcGFnZXMpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjkxLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjkyOnN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfZmluYWxpemUodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG5tbS9taWdyYXRlX2RldmljZS5jLTEyOTMtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDQtLypcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM0NTogKiBtaWdyYXRlX2RldmljZV9maW5hbGl6ZSgpIC0gY29tcGxldGUgcGFnZSBtaWdyYXRpb25cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM0NjogKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzQ3LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1My0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1NDp2b2lkIG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU1LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU2LXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1NzpcdHJldHVybiBfX21pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHNyY19wZm5zLCBkc3RfcGZucywgbnBhZ2VzLCBOVUxMKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1OC19XG5tbS9taWdyYXRlX2RldmljZS5jOjEzNTk6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9maW5hbGl6ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEzNjAtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzcyPXZvaWQgbWlncmF0ZV92bWFfZmluYWxpemUoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzczLXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM3NDpcdF9fbWlncmF0ZV9kZXZpY2VfZmluYWxpemUobWlncmF0ZS1cdTAwM2VzcmMsIG1pZ3JhdGUtXHUwMDNlZHN0LCBtaWdyYXRlLVx1MDAzZW5wYWdlcyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3NS1cdFx0XHRcdCAgbWlncmF0ZS1cdTAwM2VmYXVsdF9wYWdlKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNzc9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9maW5hbGl6ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEzNzgtXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNzk6c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG5tbS9taWdyYXRlX2RldmljZS5jLTEzODAte1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQwMTpzdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3Bmbixcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDA3LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDA4Olx0KnNyY19wZm4gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDA5LVx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDI4LS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDI5OiAqIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQzMC0gKiBAc3JjX3BmbnM6IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIG1pZ3JhdGluZyBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucy5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDQtICogYWxsb2NhdGUgZGVzdGluYXRpb24gcGFnZXMgYW5kIHN0YXJ0IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gQ1BVXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NDU6ICogbWVtb3J5IGJlZm9yZSBjYWxsaW5nIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCkuXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDYtICpcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDgtICovXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NDk6aW50IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDUwLVx0XHRcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ1Ni1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ1NzpcdFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDU4LVx0XHRpZiAoIW5yKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2My1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2NDpcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDY1LVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2Ny19XG5tbS9taWdyYXRlX2RldmljZS5jOjE0Njg6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9yYW5nZSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjktXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzAtLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzE6ICogbWlncmF0ZV9kZXZpY2VfcGZucygpIC0gbWlncmF0ZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG5vcm1hbCBtZW1vcnkuXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzItICogQHNyY19wZm5zOiBwcmUtcG9wdWxhdGVkIGFycmF5IG9mIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG1pZ3JhdGUuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc0LSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzU6ICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzYtICogYXJyYXkgb2YgZGV2aWNlIHBhZ2VzIHRvIG1pZ3JhdGUuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc5LSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDgwOmludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4MS17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg3LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDg4Olx0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODktXHRcdGlmICghbnIpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDkzLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk0Olx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTUtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk3LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ5ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3BmbnMpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk5LVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUwNTppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNi17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTE5LVx0ICovXG5tbS9taWdyYXRlX2RldmljZS5jOjE1MjA6XHRtaWdyYXRlX2RldmljZV91bm1hcChcdTAwMjZzcmNfcGZuLCAxLCBOVUxMKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUyMS1cdGlmICghKHNyY19wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUyOS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUzMDpcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKFx1MDAyNnNyY19wZm4sIFx1MDAyNmRzdF9wZm4sIDEpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTMxLVx0aWYgKHNyY19wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MzItXHRcdGZvbGlvX2NvcHkoZGZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlX2RldmljZS5jOjE1MzM6XHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShcdTAwMjZzcmNfcGZuLCBcdTAwMjZkc3RfcGZuLCAxKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNvZGUgTWlncmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZGV2aWNlLXJlbGF0ZWQgbWVtb3J5LiBUaGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZSBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIFRoZXNlIHNvdW5kIGxpa2UgdGhlIGNvcmUgY29tcG9uZW50cyBvZiBtb3ZpbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2UuCgpgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AgbGlrZWx5IGhhbmRsZXMgZ2F0aGVyaW5nIGluZm9ybWF0aW9uIG9yIHByZXBhcmluZyB0aGUgbWVtb3J5IHVuaXRzIGF0IHRoZSBmb2xpbyBsZXZlbC4gRm9saW9zIGFyZSB0aGUgcHJlZmVycmVkIG5ldyBtZW1vcnkgbWFuYWdlbWVudCB1bml0cywgYW5kIGdpdmVuIHRoZSBuYW1lLCBpdCBtaWdodCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGNvbGxlY3RpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhZ2VzIHRvIGJlIG1pZ3JhdGVkLiBJIGJldCBpdCBpcyBoYW5kbGluZyB0aGluZ3MgbGlrZSBsb2NraW5nLCBlcnJvciBjaGVja2luZywgYW5kIG1ha2luZyBzdXJlIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIHBhZ2VzIGFyZSByZWFkeS4KClRoZW4sIGBtaWdyYXRlX2RldmljZV9yYW5nZWAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gb3BlcmF0ZSBhdCBhIHJhbmdlIG9mIG1lbW9yeSBhZGRyZXNzZXMuIEl0IGxpa2VseSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBwYWdlcyBvciBzbWFsbGVyIGNodW5rcyBpZGVudGlmaWVkIGJ5IHRoZSBmb2xpbyBsZXZlbCwgb3JjaGVzdHJhdGluZyB0aGUgYWN0dWFsIGRhdGEgbW92ZW1lbnQgZm9yIGEgcGFydGljdWxhciByZWdpb24uIEnigJltIHRoaW5raW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBoYW5kbGluZyB0aGUgZGV0YWlscyBvZiB0aGUgRE1BIHRyYW5zZmVycyBvciB3aGF0ZXZlciBtZWNoYW5pc20gaXMgdXNlZCB0byBtb3ZlIGRhdGEgb24gdGhpcyBzcGVjaWZpYyBoYXJkd2FyZS4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIG1vc3QgZGV2aWNlLXNwZWNpZmljIHBhcnQgb2YgdGhlIHByb2Nlc3MuIEkgd29uZGVyIGlmIGl04oCZcyBkZXNpZ25lZCB0byBiZSBhc3luY2hyb25vdXMsIGdpdmVuIHRoZSBuYXR1cmUgb2YgZGV2aWNlIG9wZXJhdGlvbnMuCgpGaW5hbGx5LCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIE5vdywgJiMzOTtQRk4mIzM5OyB1c3VhbGx5IHJlZmVycyB0byBQaHlzaWNhbCBGcmFtZSBOdW1iZXIuIFNvLCB0aGlzIHNvdW5kcyBsaWtlIHRoZSBsb3dlc3QtbGV2ZWwgZnVuY3Rpb24sIGRlYWxpbmcgZGlyZWN0bHkgd2l0aCBpbmRpdmlkdWFsIHBoeXNpY2FsIHBhZ2VzLiBUaGlzIGlzIHByb2JhYmx5IHRoZSBsYXN0IHN0ZXA6IHRyYW5zZm9ybWluZyB0aGUgaWRlbnRpZmllZCBwYWdlcyBhbmQgYWN0dWFsbHkgdXBkYXRpbmcgdGhlaXIgZW50cmllcy4gTWlnaHQgYmUgY2hlY2tpbmcgaWYgdGhlIHBhZ2VzIGFyZSBjbGVhbiwgZGlydHksIG9yIHNoYXJlZC4gSXTigJlzIHRoZSBwb2ludCB3aGVyZSB0aGUgZGV2aWNlIG1lbW9yeSBpcyBwaHlzaWNhbGx5IG1hcHBlZCB0byB0aGUgbmV3IGxvY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0eXBlIG9mIG1pZ3JhdGlvbiBpdCBkb2VzIHRvIGRldGVybWluZSBpdHMgb3ZlcmhlYWQ6IGhvdCBtaWdyYXRpb24sIGNvbGQgbWlncmF0aW9uLCBldGMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBJcyBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AgY2FsbGVkIGZpcnN0LCBzZXR0aW5nIHRoZSBzdGFnZSwgdGhlbiBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIG1hbmFnZXMgdGhlIGJsb2NrcywgYW5kIGZpbmFsbHksIGBtaWdyYXRlX2RldmljZV9wZm5zYCBoYW5kbGVzIHRoZSBpbmRpdmlkdWFsIHBhZ2UgdHJhbnNmZXJzPyBPciBpcyB0aGUgb3JnYW5pemF0aW9uIHNsaWdodGx5IGRpZmZlcmVudD8gSXQmIzM5O3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFuZCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBjb21wbGV4aXRpZXMgb2YgZGV2aWNlIG1lbW9yeSBkdXJpbmcgdGhlIG1pZ3JhdGlvbi4gTm93IGxldCYjMzk7cyBleGFtaW5lIHRoZSBjYWxsaW5nIHN0cnVjdHVyZSBhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTA6XHRcdH1cbjEzOTE6XHRcbjEzOTI6XHRcdHJldHVybiBtaWdyYXRlX3BmbihwZm4pIHwgTUlHUkFURV9QRk5fTUlHUkFURTtcbjEzOTM6XHR9XG4xMzk0Olx0XG4xMzk1Olx0LypcbjEzOTY6XHQgKiBDb2xsZWN0IGEgZGV2aWNlIGZvbGlvIGludG8gdGhlIHBhZ2UtZ3JhbnVsYXIgUEZOIGFycmF5LlxuMTM5NzpcdCAqXG4xMzk4Olx0ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBjb25zdW1lZCwgb3IgMCBpZiB0aGUgZm9saW8gZG9lcyBub3QgZml0IGluXG4xMzk5Olx0ICogdGhlIHJlbWFpbmluZyBhcnJheS5cbjE0MDA6XHQgKi9cbjE0MDE6XHRzdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3BmbixcbjE0MDI6XHRcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBwZm4sXG4xNDAzOlx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKVxuMTQwNDpcdHtcbjE0MDU6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKHBmbikpO1xuMTQwNjpcdFx0dW5zaWduZWQgaW50IG5yO1xuMTQwNzpcdFxuMTQwODpcdFx0KnNyY19wZm4gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pO1xuMTQwOTpcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4xNDEwOlx0XG4xNDExOlx0XHRpZiAoV0FSTl9PTl9PTkNFKG5yIFx1MDAzZSByZW1haW5pbmcpKSB7XG4xNDEyOlx0XHRcdGlmICgqc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xuMTQxMzpcdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4xNDE0Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjE0MTU6XHRcdFx0fVxuMTQxNjpcdFx0XHRtZW1zZXQoc3JjX3BmbiwgMCwgcmVtYWluaW5nICogc2l6ZW9mKCpzcmNfcGZuKSk7XG4xNDE3Olx0XHRcdHJldHVybiAwO1xuMTQxODpcdFx0fVxuMTQxOTpcdFxuMTQyMDpcdFx0aWYgKG5yIFx1MDAzZSAxKSB7XG4xNDIxOlx0XHRcdCpzcmNfcGZuIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuMTQyMjpcdFx0XHRtZW1zZXQoc3JjX3BmbiAmIzQzOyAxLCAwLCAobnIgLSAxKSAqIHNpemVvZigqc3JjX3BmbikpO1xuMTQyMzpcdFx0fVxuMTQyNDpcdFxuMTQyNTpcdFx0cmV0dXJuIG5yO1xuMTQyNjpcdH1cbjE0Mjc6XHRcbjE0Mjg6XHQvKipcbjE0Mjk6XHQgKiBtaWdyYXRlX2RldmljZV9yYW5nZSgpIC0gbWlncmF0ZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG5vcm1hbCBtZW1vcnkuXG4xNDMwOlx0ICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuXG4xNDMxOlx0ICogQHN0YXJ0OiBzdGFydGluZyBwZm4gaW4gdGhlIHJhbmdlIHRvIG1pZ3JhdGUuXG4xNDMyOlx0ICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIG1pZ3JhdGUuXG4xNDMzOlx0ICpcbjE0MzQ6XHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIGlzIHNpbWlsYXIgaW4gY29uY2VwdCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpIGV4Y2VwdCB0aGF0XG4xNDM1Olx0ICogaW5zdGVhZCBvZiBsb29raW5nIHVwIHBhZ2VzIGJhc2VkIG9uIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBhIHJhbmdlIG9mXG4xNDM2Olx0ICogZGV2aWNlIHBmbnMgdGhhdCBzaG91bGQgYmUgbWlncmF0ZWQgdG8gc3lzdGVtIG1lbW9yeSBpcyB1c2VkIGluc3RlYWQuXG4xNDM3Olx0ICpcbjE0Mzg6XHQgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgZHJpdmVyIG5lZWRzIHRvIGZyZWUgZGV2aWNlIG1lbW9yeSBidXQgZG9lc24mIzM5O3Qga25vdyB0aGVcbjE0Mzk6XHQgKiB2aXJ0dWFsIG1hcHBpbmdzIG9mIGV2ZXJ5IHBhZ2UgdGhhdCBtYXkgYmUgaW4gZGV2aWNlIG1lbW9yeS4gRm9yIGV4YW1wbGUgdGhpc1xuMTQ0MDpcdCAqIGlzIG9mdGVuIHRoZSBjYXNlIHdoZW4gYSBkcml2ZXIgaXMgYmVpbmcgdW5sb2FkZWQgb3IgdW5ib3VuZCBmcm9tIGEgZGV2aWNlLlxuMTQ0MTpcdCAqXG4xNDQyOlx0ICogTGlrZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJlbmNlIGFuZCBsb2NrIGFueVxuMTQ0MzpcdCAqIG1pZ3JhdGluZyBwYWdlcyB0aGF0IGFyZW4mIzM5O3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW5cbjE0NDQ6XHQgKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFVcbjE0NDU6XHQgKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cbjE0NDY6XHQgKlxuMTQ0NzpcdCAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyByYW5nZS5cbjE0NDg6XHQgKi9cbjE0NDk6XHRpbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4xNDUwOlx0XHRcdFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXG4xNDUxOlx0e1xuMTQ1MjpcdFx0dW5zaWduZWQgbG9uZyBpLCBwZm47XG4xNDUzOlx0XG4xNDU0Olx0XHRmb3IgKHBmbiA9IHN0YXJ0LCBpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOyBwZm4mIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuMTQ1NTpcdFx0XHR1bnNpZ25lZCBpbnQgbnI7XG4xNDU2Olx0XG4xNDU3Olx0XHRcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcbjE0NTg6XHRcdFx0aWYgKCFucilcbjE0NTk6XHRcdFx0XHRicmVhaztcbjE0NjA6XHRcdFx0aSAmIzQzOz0gbnIgLSAxO1xuMTQ2MTpcdFx0XHRwZm4gJiM0Mzs9IG5yIC0gMTtcbjE0NjI6XHRcdH1cbjE0NjM6XHRcbjE0NjQ6XHRcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xuMTQ2NTpcdFxuMTQ2NjpcdFx0cmV0dXJuIDA7XG4xNDY3Olx0fVxuMTQ2ODpcdEVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcmFuZ2UpO1xuMTQ2OTpcdFxuMTQ3MDpcdC8qKlxuMTQ3MTpcdCAqIG1pZ3JhdGVfZGV2aWNlX3BmbnMoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LlxuMTQ3MjpcdCAqIEBzcmNfcGZuczogcHJlLXBvcHVsYXRlZCBhcnJheSBvZiBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucyB0byBtaWdyYXRlLlxuMTQ3MzpcdCAqIEBucGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBtaWdyYXRlLlxuMTQ3NDpcdCAqXG4xNDc1Olx0ICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkXG4xNDc2Olx0ICogYXJyYXkgb2YgZGV2aWNlIHBhZ2VzIHRvIG1pZ3JhdGUuXG4xNDc3Olx0ICpcbjE0Nzg6XHQgKiBBIGNvbXBvdW5kIGZvbGlvIG11c3QgZml0IGVudGlyZWx5IGluIHRoZSByZW1haW5pbmcgUEZOIGFycmF5LlxuMTQ3OTpcdCAqL1xuMTQ4MDpcdGludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbjE0ODE6XHR7XG4xNDgyOlx0XHR1bnNpZ25lZCBsb25nIGk7XG4xNDgzOlx0XG4xNDg0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4xNDg1Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuID0gc3JjX3BmbnNbaV07XG4xNDg2Olx0XHRcdHVuc2lnbmVkIGludCBucjtcbjE0ODc6XHRcbjE0ODg6XHRcdFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xuMTQ4OTpcdFx0XHRpZiAoIW5yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTIxCgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDE0ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgdGhlIERldmljZSBQYWdlIE1pZ3JhdGlvbiBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHJlZmFjdG9yaW5nIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGFuZCBlbnN1cmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuCgpJbml0aWFsbHksIEkgc2VlIHRoZSByZWZhY3RvcmluZyBpcyBjZW50ZXJlZCBhcm91bmQgdGhlIHBhZ2UgbWlncmF0aW9uIHJvdXRpbmVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gIFRoZSBvcmlnaW5hbCBjb2RlLCB3aGlsZSBmdW5jdGlvbmFsLCBjb250YWluZWQgZHVwbGljYXRlZCBsb2dpYyBmb3IgY29sbGVjdGluZyBhbmQgbG9ja2luZyBwYWdlIGZyYW1lIG51bWJlcnMgKFBGTnMpLiBUaGUgcGF0Y2ggY2xlYXJseSBleHRyYWN0cyB0aGlzIGNvbW1vbmFsaXR5IGludG8gYSBuZXcgZnVuY3Rpb24sIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgLiBTbWFydCBtb3ZlIOKAkyBnb29kIGZvciBtYWludGFpbmFiaWxpdHkuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGludm9sdmVzIHRoaXMgbmV3IGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgIGZ1bmN0aW9uLCB3aGljaCBub3cgaGFuZGxlcyB0aGUgbG9ja2luZywgdGhlIGNvbXBvdW5kIHBhZ2UgZGV0ZWN0aW9uLCBhbmQgdGhlIHplcm9pbmcgb2Ygc3Vic2VxdWVudCBQRk4gZW50cmllcyBpZiBhIGNvbXBvdW5kIGZvbGlvIGlzIGZvdW5kLiBUaGUgb3JpZ2luYWwgbG9vcHMgd2l0aGluIHRoZSB0d28gbWFpbiBmdW5jdGlvbnMgYXJlIHN0cmVhbWxpbmVkIHRvIGNhbGwgdGhpcyBuZXcgdXRpbGl0eSBmdW5jdGlvbiwgcGFzc2luZyB0aGUgcmVsZXZhbnQgUEZOIGFuZCByZW1haW5pbmcgcGFnZSBjb3VudC4gVGhlIHVzZSBvZiBgbWVtc2V0YCBpcyBkZWZpbml0ZWx5IG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9yaWdpbmFsIGxvb3AgdG8gemVybyB0aGUgdHJhaWxpbmcgUEZOcyBvZiBhIGNvbXBvdW5kIHBhZ2UuCgpUaGUgZXh0cmFjdGlvbiBpcyBjbGVhbiBhbmQgdGhlIHBhcmFtZXRlciBwYXNzaW5nIGxvb2tzIHNvdW5kLiBOb3csIHRpbWUgZm9yIGEgcmlnb3JvdXMgY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCknigJltIG1ldGljdWxvdXNseSBzY2FubmluZyB0aGUgY29kZSwgY29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhIEkmIzM5O20gd2VsbCBmYW1pbGlhciB3aXRoLiBGaXJzdCwgSSBoYXZlIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbi4gTm9wZSwgdGhlIGNoYW5nZXMgc29sZWx5IGZvY3VzIG9uIGtlcm5lbC1zcGFjZSBhcnJheXMgKGBzcmNfcGZuc2ApIGludm9sdmVkIGluIGRldmljZSBtaWdyYXRpb24sIG5vdCB1c2VyLWFjY2Vzc2libGUgbWVtb3J5LgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFyZSBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBJIHNlZSBhbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIOKAkyBgbnJgLCBgcGZuYCwgYGlgIGFyZSBhbGwgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEdvb2QuCgpCb3VuZHMgY2hlY2tpbmcgaXMgYWxzbyBjcnVjaWFsLiBUaGUgYFdBUk5fT05fT05DRWAgaW4gYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oKWAgbG9va3MgbGlrZSB0aGUga2V5LiBJdCYjMzk7cyBwcm9wZXJseSBwcmVzZXJ2aW5nIHRoZSBib3VuZHMgY2hlY2sgKGBuciAmZ3Q7IHJlbWFpbmluZ2ApLiBJZiB0aGUgY29uZGl0aW9uIGlzIHRydWUsIHRoZXJlIGlzIGEgYG1lbXNldGAgb24gdGhlIHJlbWFpbmluZyBlbnRyaWVzIHRvIHplcm8gdGhlbS4gSWYgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZSwgdGhlbiB0aGUgZnVuY3Rpb24gemVyb2VzIHRoZSB0cmFpbGluZyBlbnRyaWVzLiBUaGUgY29kZSBpcyBjYXJlZnVsbHkgY2hlY2tpbmcgaWYgY29tcG91bmQgZm9saW9zIHNwYW4gbXVsdGlwbGUgYXJyYXkgZW50cmllcyB0byBoYW5kbGUgdGhlbSBjb3JyZWN0bHkuCgpUaGUgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgIGZ1bmN0aW9uIGlzIGFsc28gc2FmZS4gYHBmbmAgaXMgcmVhZCBiZWZvcmUgY2FsbGluZyB0aGUgZnVuY3Rpb24gYXMgdGhlIGFyZ3VtZW50LiBUaGUgaW5kZXhpbmcgbG9va3MgY29ycmVjdCBhbmQgc2hvdWxkIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3Nlcy4gTm8gaW5mbyBsZWFrcywgY29tcGxleCBzdHJ1Y3QgYWxsb2NhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHNvIHRoZSByaXNrIGlzIGxvdy4KCkdpdmVuIHRoYXQgdGhpcyBpcyBpbnRlcm5hbCBrZXJuZWwgcmVmYWN0b3Jpbmcgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgdGhlIHBvdGVudGlhbCBidWdzIHdpbGwgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGluZGV4IGNhbGN1bGF0aW9ucywgYXJyYXkgb3V0LW9mLWJvdW5kcywgb3IgbG9ja2luZyBpc3N1ZXMgKGFsbCB0aGUgdXN1YWwgc3VzcGVjdHMpLCBhbmQgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBLQVNBTi9MT0NLREVQIHdpbGwgY2F0Y2ggdGhvc2UuCgpPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgS01TQU4gYXNzZXNzbWVudC4KCjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2Vyc3BhY2UsIHNvIG5vIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQgYXJlIGF0IHBsYXkuCjIuICBObyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLgo0LiAgTm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy4KCknigJltIGNvbmZpZGVudCB0aGUgcmVmYWN0b3JpbmcgaXMgc2FmZSBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlcnNwZWN0aXZlLiBJJiMzOTttIHJlYWR5IHRvIG1hcmsgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgYnkgZmFjdG9yaW5nIG91dCBkdXBsaWNhdGVkIGNvZGUgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCkuXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgKG5yLCBwZm4sIGkpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgZGVzdGluYXRpb24gUEZOIGFycmF5IGVudHJpZXMgYXJlIGV4cGxpY2l0bHkgd3JpdHRlbiBvciB6ZXJvZWQgdmlhIG1lbXNldCgpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9uIChlLmcuLCBhcnJheSBvdXQtb2YtYm91bmRzIGluZGV4aW5nIG9yIGZvbGlvIGxvY2tpbmcvcmVmY291bnRpbmcgaXNzdWVzKSBmYWxscyBzcXVhcmVseSB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGJ5IGZhY3RvcmluZyBvdXQgZHVwbGljYXRlZCBjb2RlIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIChuciwgcGZuLCBpKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGRlc3RpbmF0aW9uIFBGTiBhcnJheSBlbnRyaWVzIGFyZSBleHBsaWNpdGx5IHdyaXR0ZW4gb3IgemVyb2VkIHZpYSBtZW1zZXQoKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbiAoZS5nLiwgYXJyYXkgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBvciBmb2xpbyBsb2NraW5nL3JlZmNvdW50aW5nIGlzc3VlcykgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6MjAuMzA2NTQxNjA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0MjI4MDQ1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJURVNUX0hNTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9cIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3JhbmdlXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9wZm5zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgYnkgZmFjdG9yaW5nIG91dCBkdXBsaWNhdGVkIGNvZGUgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCkuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAobnIsIHBmbiwgaSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBkZXN0aW5hdGlvbiBQRk4gYXJyYXkgZW50cmllcyBhcmUgZXhwbGljaXRseSB3cml0dGVuIG9yIHplcm9lZCB2aWEgbWVtc2V0KCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgaW5mby1sZWFrcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb24gKGUuZy4sIGFycmF5IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgb3IgZm9saW8gbG9ja2luZy9yZWZjb3VudGluZyBpc3N1ZXMpIGZhbGxzIHNxdWFyZWx5IHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjIwLjMwNjU0NzU4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MzE0OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWEzMzk2NzQyNDU0YmVmYmEyZGQ4ZGVhZjYyMGVmNTQ1OWUzYjExNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNjo0NjoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbmluZGV4IDAwOWJmYThiMjEyZDUuLmM1N2VhZGVhNjU2NTEgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5AQCAtMTM5Miw2ICsxMzkyLDM5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRyZXR1cm4gbWlncmF0ZV9wZm4ocGZuKSB8IE1JR1JBVEVfUEZOX01JR1JBVEU7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENvbGxlY3QgYSBkZXZpY2UgZm9saW8gaW50byB0aGUgcGFnZS1ncmFudWxhciBQRk4gYXJyYXkuXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY29uc3VtZWQsIG9yIDAgaWYgdGhlIGZvbGlvIGRvZXMgbm90IGZpdCBpblxcbisgKiB0aGUgcmVtYWluaW5nIGFycmF5LlxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHBmbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKVxcbit7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKHBmbikpO1xcbitcXHR1bnNpZ25lZCBpbnQgbnI7XFxuK1xcbitcXHQqc3JjX3BmbiA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7XFxuK1xcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRShuciBcXHUwMDNlIHJlbWFpbmluZykpIHtcXG4rXFx0XFx0aWYgKCpzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xcbitcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1lbXNldChzcmNfcGZuLCAwLCByZW1haW5pbmcgKiBzaXplb2YoKnNyY19wZm4pKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChuciBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0KnNyY19wZm4gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XFxuK1xcdFxcdG1lbXNldChzcmNfcGZuICsgMSwgMCwgKG5yIC0gMSkgKiBzaXplb2YoKnNyY19wZm4pKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG5yO1xcbit9XFxuK1xcbiAvKipcXG4gICogbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LlxcbiAgKiBAc3JjX3BmbnM6IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIG1pZ3JhdGluZyBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucy5cXG5AQCAtMTQxMCwzNSArMTQ0MywyMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcXG4gICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbid0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXFxuICAqIGFsbG9jYXRlIGRlc3RpbmF0aW9uIHBhZ2VzIGFuZCBzdGFydCBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlIHRvIENQVVxcbiAgKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cXG4rICpcXG4rICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIHJhbmdlLlxcbiAgKi9cXG4gaW50IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGksIGosIHBmbjtcXG4rXFx0dW5zaWduZWQgbG9uZyBpLCBwZm47XFxuIFxcbiBcXHRmb3IgKHBmbiA9IHN0YXJ0LCBpID0gMDsgaSBcXHUwMDNjIG5wYWdlczsgcGZuKyssIGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuLVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbnIgPSAxO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcbi1cXHRcXHRzcmNfcGZuc1tpXSA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7XFxuLVxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbi1cXHRcXHRpZiAobnIgXFx1MDAzZSBucGFnZXMgLSBpKSB7XFxuLVxcdFxcdFxcdGlmIChzcmNfcGZuc1tpXSBcXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpIHtcXG4tXFx0XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRtZW1zZXQoXFx1MDAyNnNyY19wZm5zW2ldLCAwLFxcbi1cXHRcXHRcXHQgICAgICAgKG5wYWdlcyAtIGkpICogc2l6ZW9mKCpzcmNfcGZucykpO1xcbitcXHRcXHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xcbitcXHRcXHRpZiAoIW5yKVxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAobnIgXFx1MDAzZSAxKSB7XFxuLVxcdFxcdFxcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbi1cXHRcXHRcXHRmb3IgKGogPSAxOyBqIFxcdTAwM2MgbnI7IGorKylcXG4tXFx0XFx0XFx0XFx0c3JjX3BmbnNbaStqXSA9IDA7XFxuLVxcdFxcdFxcdGkgKz0gaiAtIDE7XFxuLVxcdFxcdFxcdHBmbiArPSBqIC0gMTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpICs9IG5yIC0gMTtcXG4rXFx0XFx0cGZuICs9IG5yIC0gMTtcXG4gXFx0fVxcbiBcXG4gXFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XFxuQEAgLTE0NTQsMzMgKzE0NzQsMjEgQEAgRVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9yYW5nZSk7XFxuICAqXFxuICAqIFNpbWlsYXIgdG8gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBidXQgc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgcHJlLXBvcHVsYXRlZFxcbiAgKiBhcnJheSBvZiBkZXZpY2UgcGFnZXMgdG8gbWlncmF0ZS5cXG4rICpcXG4rICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIFBGTiBhcnJheS5cXG4gICovXFxuIGludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGksIGo7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHNyY19wZm5zW2ldKTtcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBuciA9IDE7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuID0gc3JjX3BmbnNbaV07XFxuK1xcdFxcdHVuc2lnbmVkIGludCBucjtcXG4gXFxuLVxcdFxcdHNyY19wZm5zW2ldID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2soc3JjX3BmbnNbaV0pO1xcbi1cXHRcXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tXFx0XFx0aWYgKG5yIFxcdTAwM2UgbnBhZ2VzIC0gaSkge1xcbi1cXHRcXHRcXHRpZiAoc3JjX3BmbnNbaV0gXFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7XFxuLVxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZzcmNfcGZuc1tpXSwgMCxcXG4tXFx0XFx0XFx0ICAgICAgIChucGFnZXMgLSBpKSAqIHNpemVvZigqc3JjX3BmbnMpKTtcXG4rXFx0XFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFxcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcXG4rXFx0XFx0aWYgKCFucilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKG5yIFxcdTAwM2UgMSkge1xcbi1cXHRcXHRcXHRzcmNfcGZuc1tpXSB8PSBNSUdSQVRFX1BGTl9DT01QT1VORDtcXG4tXFx0XFx0XFx0Zm9yIChqID0gMTsgaiBcXHUwMDNjIG5yOyBqKyspXFxuLVxcdFxcdFxcdFxcdHNyY19wZm5zW2kral0gPSAwO1xcbi1cXHRcXHRcXHRpICs9IGogLSAxO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGkgKz0gbnIgLSAxO1xcbiBcXHR9XFxuIFxcbiBcXHRtaWdyYXRlX2RldmljZV91bm1hcChzcmNfcGZucywgbnBhZ2VzLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6MjAuNzY1NzQxNjkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDgyODMxNDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb1wiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfcmFuZ2VcIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BmbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgZGV2aWNlIGZvbGlvIGNvbGxlY3Rpb24gbG9naWMgaW4gbW0vbWlncmF0ZV9kZXZpY2UuYyBpbnRvIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCkgY2FsbGVkIGJ5IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYW5kIG1pZ3JhdGVfZGV2aWNlX3BmbnMoKSwgYW5kIGludHJvZHVjZXMgYSBuZXcgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiB0byB2ZXJpZnkgYm91bmRzIGFnYWluc3QgdGhlIHJlbWFpbmluZyBhcnJheSBjYXBhY2l0eS4gVGhlc2UgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBjYW4gYmUgZXhlcmNpc2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB0aGUgdGVzdF9obW0gcHNldWRvLWRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYTMzOTY3NDI0NTRiZWZiYTJkZDhkZWFmNjIwZWY1NDU5ZTNiMTE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDY6NDY6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggMDA5YmZhOGIyMTJkNS4uYzU3ZWFkZWE2NTY1MSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbkBAIC0xMzkyLDYgKzEzOTIsMzkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gbWlncmF0ZV9wZm4ocGZuKSB8IE1JR1JBVEVfUEZOX01JR1JBVEU7XG4gfVxuIFxuKy8qXG4rICogQ29sbGVjdCBhIGRldmljZSBmb2xpbyBpbnRvIHRoZSBwYWdlLWdyYW51bGFyIFBGTiBhcnJheS5cbisgKlxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY29uc3VtZWQsIG9yIDAgaWYgdGhlIGZvbGlvIGRvZXMgbm90IGZpdCBpblxuKyAqIHRoZSByZW1haW5pbmcgYXJyYXkuXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXG4rXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcGZuLFxuK1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHJlbWFpbmluZylcbit7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwZm5fdG9fcGFnZShwZm4pKTtcbitcdHVuc2lnbmVkIGludCBucjtcbitcbitcdCpzcmNfcGZuID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2socGZuKTtcbitcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShuciBcdTAwM2UgcmVtYWluaW5nKSkge1xuK1x0XHRpZiAoKnNyY19wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpIHtcbitcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRcdH1cbitcdFx0bWVtc2V0KHNyY19wZm4sIDAsIHJlbWFpbmluZyAqIHNpemVvZigqc3JjX3BmbikpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmIChuciBcdTAwM2UgMSkge1xuK1x0XHQqc3JjX3BmbiB8PSBNSUdSQVRFX1BGTl9DT01QT1VORDtcbitcdFx0bWVtc2V0KHNyY19wZm4gKyAxLCAwLCAobnIgLSAxKSAqIHNpemVvZigqc3JjX3BmbikpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yO1xuK31cbitcbiAvKipcbiAgKiBtaWdyYXRlX2RldmljZV9yYW5nZSgpIC0gbWlncmF0ZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG5vcm1hbCBtZW1vcnkuXG4gICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuXG5AQCAtMTQxMCwzNSArMTQ0MywyMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcbiAgKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJ3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW5cbiAgKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFVcbiAgKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cbisgKlxuKyAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyByYW5nZS5cbiAgKi9cbiBpbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBpLCBqLCBwZm47XG4rXHR1bnNpZ25lZCBsb25nIGksIHBmbjtcbiBcbiBcdGZvciAocGZuID0gc3RhcnQsIGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IHBmbisrLCBpKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdFx0dW5zaWduZWQgaW50IG5yID0gMTtcbitcdFx0dW5zaWduZWQgaW50IG5yO1xuIFxuLVx0XHRzcmNfcGZuc1tpXSA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7XG4tXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuLVx0XHRpZiAobnIgXHUwMDNlIG5wYWdlcyAtIGkpIHtcbi1cdFx0XHRpZiAoc3JjX3BmbnNbaV0gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpIHtcbi1cdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdH1cbi1cdFx0XHRtZW1zZXQoXHUwMDI2c3JjX3BmbnNbaV0sIDAsXG4tXHRcdFx0ICAgICAgIChucGFnZXMgLSBpKSAqIHNpemVvZigqc3JjX3BmbnMpKTtcbitcdFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xuK1x0XHRpZiAoIW5yKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGlmIChuciBcdTAwM2UgMSkge1xuLVx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqKyspXG4tXHRcdFx0XHRzcmNfcGZuc1tpK2pdID0gMDtcbi1cdFx0XHRpICs9IGogLSAxO1xuLVx0XHRcdHBmbiArPSBqIC0gMTtcbi1cdFx0fVxuK1x0XHRpICs9IG5yIC0gMTtcbitcdFx0cGZuICs9IG5yIC0gMTtcbiBcdH1cbiBcbiBcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xuQEAgLTE0NTQsMzMgKzE0NzQsMjEgQEAgRVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9yYW5nZSk7XG4gICpcbiAgKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWRcbiAgKiBhcnJheSBvZiBkZXZpY2UgcGFnZXMgdG8gbWlncmF0ZS5cbisgKlxuKyAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyBQRk4gYXJyYXkuXG4gICovXG4gaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgaSwgajtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaSsrKSB7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2Uoc3JjX3BmbnNbaV0pO1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdFx0dW5zaWduZWQgaW50IG5yID0gMTtcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4gPSBzcmNfcGZuc1tpXTtcbitcdFx0dW5zaWduZWQgaW50IG5yO1xuIFxuLVx0XHRzcmNfcGZuc1tpXSA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHNyY19wZm5zW2ldKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tXHRcdGlmIChuciBcdTAwM2UgbnBhZ2VzIC0gaSkge1xuLVx0XHRcdGlmIChzcmNfcGZuc1tpXSBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xuLVx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0fVxuLVx0XHRcdG1lbXNldChcdTAwMjZzcmNfcGZuc1tpXSwgMCxcbi1cdFx0XHQgICAgICAgKG5wYWdlcyAtIGkpICogc2l6ZW9mKCpzcmNfcGZucykpO1xuK1x0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG4rXHRcdGlmICghbnIpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aWYgKG5yIFx1MDAzZSAxKSB7XG4tXHRcdFx0c3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XG4tXHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnI7IGorKylcbi1cdFx0XHRcdHNyY19wZm5zW2kral0gPSAwO1xuLVx0XHRcdGkgKz0gaiAtIDE7XG4tXHRcdH1cbitcdFx0aSArPSBuciAtIDE7XG4gXHR9XG4gXG4gXHRtaWdyYXRlX2RldmljZV91bm1hcChzcmNfcGZucywgbnBhZ2VzLCBOVUxMKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjIwLjc2NTc0Mzk2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxMTg1MjI2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGb2xpbyBDb2xsZWN0aW9uIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBleGlzdGluZyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgZnVuY3Rpb25zLiBUaGlzIHR5cGUgb2YgbW9kdWxhcml6YXRpb24gaXMgZ2VuZXJhbGx5IGEgZ29vZCBzaWduIOKAkyBjbGVhbmVyIGNvZGUsIHBvdGVudGlhbGx5IGVhc2llciBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLCBob3BlZnVsbHkgbGVhZGluZyB0byBmZXdlciBlcnJvcnMuIEkgc2VlIGEgbmV3IGBXQVJOX09OX09OQ0VgIGluIHRoZSBoZWxwZXIuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9uIHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZiBmb2xpb3MgYmVpbmcgY29sbGVjdGVkLiBJdCB3YXJyYW50cyBjbG9zZXIgaW5zcGVjdGlvbi5cblxuTm93LCBJIHdhbnQgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNhbGxlcnMgZXhpc3QgZm9yIHRoaXMgbmV3IGZ1bmN0aW9uLCB3aGF0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBuZWNlc3NhcnkgdG8gZW5hYmxlIHRoaXMgY29kZSBwYXRoLCBhbmQgd2hldGhlciB0aGlzIGlzIGEgY29kZSBhcmVhIHRoYXQncyByZWFjaGFibGUgZW5vdWdoIHRvIGJlIHdvcnRoIGZ1cnRoZXIgZnV6emluZyBvciBtb3JlIGluLWRlcHRoIHRlc3RpbmcuIEknbSB0aGlua2luZyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBlZmZpY2llbnRseSBpcyB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBtbS9taWdyYXRlX2RldmljZS5jYCBhbmQgYWxzbyBxdWlja2x5IGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSB0byBpZGVudGlmeSBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHJlYWNoYWJpbGl0eSBhbmQgZGVwZW5kZW5jaWVzIGlzIGtleSBoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjExLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6MjcuODg0MjY4NTExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODAwOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfZGV2aWNlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjMxNj1taWdyYXRlX2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKHN0cnVjdCBsaXN0X2hlYWQgKm1vdmFibGVfZm9saW9fbGlzdCxcXG4tLVxcbm1tL2d1cC5jLTIzMzQtXFxubW0vZ3VwLmM6MjMzNTpcXHRcXHRcXHRpZiAobWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oZm9saW8pKSB7XFxubW0vZ3VwLmMtMjMzNi1cXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTEyNjM9dm9pZCBmcmVlX3pvbmVfZGV2aWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmg6MTI2NDppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaW50ZXJuYWwuaC0xMjY1LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01NDI9c3RhdGljIGJvb2wgbWlncmF0ZV92bWFfY2hlY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2UgKmZhdWx0X3BhZ2UpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTU3MC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjU3MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV91bm1hcCh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTU3Mi1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz02NzA9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjcxLXtcXG5tbS9taWdyYXRlX2RldmljZS5jOjY3MjpcXHRtaWdyYXRlLVxcdTAwM2VjcGFnZXMgPSBtaWdyYXRlX2RldmljZV91bm1hcChtaWdyYXRlLVxcdTAwM2VzcmMsIG1pZ3JhdGUtXFx1MDAzZW5wYWdlcyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTY3My1cXHRcXHRcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VmYXVsdF9wYWdlKTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTc2PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTEwOC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjExMDk6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTExMTAtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTM4LVxcdFxcdFxcdCAqIFRoZSBvbmx5IHRpbWUgdGhlcmUgaXMgbm8gdm1hIGlzIHdoZW4gY2FsbGVkIGZyb21cXG5tbS9taWdyYXRlX2RldmljZS5jOjExMzk6XFx0XFx0XFx0ICogbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oKS4gSG93ZXZlciB0aGlzIGlzbid0XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTQwLVxcdFxcdFxcdCAqIGNhbGxlZCBpZiB0aGUgcGFnZSBjb3VsZCBub3QgYmUgdW5tYXBwZWQuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjItLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjYzOiAqIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCkgLSBtaWdyYXRlIG1ldGEtZGF0YSBmcm9tIHNyYyBwYWdlIHRvIGRzdCBwYWdlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjY0OiAqIEBzcmNfcGZuczogc3JjX3BmbnMgcmV0dXJuZWQgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjY1LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjcwLSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3MTp2b2lkIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNzItXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjczLXtcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzQ6XFx0X19taWdyYXRlX2RldmljZV9wYWdlcyhzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcywgTlVMTCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjc1LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzY6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjc3LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjg2PXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI4Ny17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjg4OlxcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMobWlncmF0ZS1cXHUwMDNlc3JjLCBtaWdyYXRlLVxcdTAwM2Vkc3QsIG1pZ3JhdGUtXFx1MDAzZW5wYWdlcywgbWlncmF0ZSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjg5LX1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEyOTA9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9wYWdlcyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjkxLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI5MjpzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI5My1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM0NC0vKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM0NTogKiBtaWdyYXRlX2RldmljZV9maW5hbGl6ZSgpIC0gY29tcGxldGUgcGFnZSBtaWdyYXRpb25cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNDY6ICogQHNyY19wZm5zOiBzcmNfcGZucyByZXR1cm5lZCBmcm9tIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDctICogQGRzdF9wZm5zOiBhcnJheSBvZiBwZm5zIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIHRvIG1pZ3JhdGUgbWVtb3J5IHRvXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTMtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzU0OnZvaWQgbWlncmF0ZV9kZXZpY2VfZmluYWxpemUodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU1LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1Ni17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzU3OlxcdHJldHVybiBfX21pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHNyY19wZm5zLCBkc3RfcGZucywgbnBhZ2VzLCBOVUxMKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTgtfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1OTpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNjAtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNzI9dm9pZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzczLXtcXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNzQ6XFx0X19taWdyYXRlX2RldmljZV9maW5hbGl6ZShtaWdyYXRlLVxcdTAwM2VzcmMsIG1pZ3JhdGUtXFx1MDAzZWRzdCwgbWlncmF0ZS1cXHUwMDNlbnBhZ2VzLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3NS1cXHRcXHRcXHRcXHQgIG1pZ3JhdGUtXFx1MDAzZWZhdWx0X3BhZ2UpO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzc3PUVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfZmluYWxpemUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3OC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNzk6c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzgwLXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MDE6c3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwNy1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MDg6XFx0KnNyY19wZm4gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwOS1cXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQyOC0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0Mjk6ICogbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5Llxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQzMC0gKiBAc3JjX3BmbnM6IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIG1pZ3JhdGluZyBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucy5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0NC0gKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFVcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NDU6ICogbWVtb3J5IGJlZm9yZSBjYWxsaW5nIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCkuXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDQ2LSAqXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDgtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDQ5OmludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTAtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTYtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDU3OlxcdFxcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDU4LVxcdFxcdGlmICghbnIpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjMtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDY0OlxcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2NS1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2Ny19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDY4OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcmFuZ2UpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2OS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzAtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDcxOiAqIG1pZ3JhdGVfZGV2aWNlX3BmbnMoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5Llxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Mi0gKiBAc3JjX3BmbnM6IHByZS1wb3B1bGF0ZWQgYXJyYXkgb2Ygc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbWlncmF0ZS5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3NC0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3NTogKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWRcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzYtICogYXJyYXkgb2YgZGV2aWNlIHBhZ2VzIHRvIG1pZ3JhdGUuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzktICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDgwOmludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODEte1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg3LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4ODpcXHRcXHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4OS1cXHRcXHRpZiAoIW5yKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDkzLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ5NDpcXHRtaWdyYXRlX2RldmljZV91bm1hcChzcmNfcGZucywgbnBhZ2VzLCBOVUxMKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTUtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTctfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ5ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3BmbnMpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5OS1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjE1MDU6aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTA2LXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUxOS1cXHQgKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjE1MjA6XFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoXFx1MDAyNnNyY19wZm4sIDEsIE5VTEwpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUyMS1cXHRpZiAoIShzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MjktXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTMwOlxcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKFxcdTAwMjZzcmNfcGZuLCBcXHUwMDI2ZHN0X3BmbiwgMSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTMxLVxcdGlmIChzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MzItXFx0XFx0Zm9saW9fY29weShkZm9saW8sIGZvbGlvKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjE1MzM6XFx0bWlncmF0ZV9kZXZpY2VfZmluYWxpemUoXFx1MDAyNnNyY19wZm4sIFxcdTAwMjZkc3RfcGZuLCAxKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjI3Ljk0MTA3NjQwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MzQwOTk2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgVXNhZ2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRob3NlIGBtaWdyYXRlX2RldmljZV8qYCBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlIGV4YWN0bHkgYXJlIHRoZXNlIGNhbGxlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWw/XCIgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgdXNhZ2UgY29udGV4dCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgdGhlaXIgaW1wYWN0IG9yIHBvdGVudGlhbCBpc3N1ZXMuIEknbGwgbmVlZCB0byBpZGVudGlmeSBhbGwgY2FsbCBzaXRlcyBmb3IgYm90aCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdHJhY2tpbmcgZG93biBldmVyeSBpbnN0YW5jZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2guIFdoYXQgYXJjaGl0ZWN0dXJlcyBhbmQgc3Vic3lzdGVtcyBhcmUgdGhleSB0b3VjaGluZz8gQXJlIHRoZXNlIGNvcmUgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3IgbW9yZSBwZXJpcGhlcmFsPyBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBwb3RlbnRpYWwgcmVmYWN0b3JpbmcuIEknbGwgaGF2ZSB0byBsb29rIGZvciBpbmRpcmVjdCBjYWxscywgY29uZGl0aW9uYWwgaW52b2NhdGlvbnMsIGFuZCBhbnkgc3BlY2lhbCB1c2UgY2FzZXMuIEl0J3MgZ29pbmcgdG8gYmUgYSBkZWVwIGRpdmUsIGJ1dCBhIG5lY2Vzc2FyeSBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NjozMC43NzUxNzk5MTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2NTk3NzQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZV8ocmFuZ2V8cGZucylcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9OTE2PXN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTUxLVxcdFxcdCAqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgb3IsIGZvciB0aGUgZXZpY3Rpb24gcGF0aCwgYnlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5NTI6XFx0XFx0ICogbWlncmF0ZV9kZXZpY2VfcGZucygpLiBCb3RoIHRoZSBvcmRlci0wIGZhbGxiYWNrIGJlbG93IGFuZFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk1My1cXHRcXHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIHJlbHkgb24gdGhhdCwgYXNcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEzMTI9aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNDUtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM0NjpcXHRlcnIgPSBtaWdyYXRlX2RldmljZV9wZm5zKHNyYywgbnBhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzQ3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz00ODk9bm91dmVhdV9kbWVtX2V2aWN0X2NodW5rKHN0cnVjdCBub3V2ZWF1X2RtZW1fY2h1bmsgKmNodW5rKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtNDk5LVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjUwMDpcXHRtaWdyYXRlX2RldmljZV9yYW5nZShzcmNfcGZucywgY2h1bmstXFx1MDAzZXBhZ2VtYXAucmFuZ2Uuc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy01MDEtXFx0XFx0XFx0bnBhZ2VzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE5Nz12b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTk4OmludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xOTktXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjIwMDppbnQgbWlncmF0ZV9kZXZpY2VfcGZucyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTIwMS12b2lkIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE4OD1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXFxuLS1cXG5saWIvdGVzdF9obW0uYy0yMDAtXFxubGliL3Rlc3RfaG1tLmM6MjAxOlxcdG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHNyY19wZm5zLCBzdGFydF9wZm4sIG5wYWdlcyk7XFxubGliL3Rlc3RfaG1tLmMtMjAyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7IGkrKykge1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMTA5PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjMtICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2VcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNjQ6ICogQHNyY19wZm5zOiBzcmNfcGZucyByZXR1cm5lZCBmcm9tIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjUtICogQGRzdF9wZm5zOiBhcnJheSBvZiBwZm5zIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIHRvIG1pZ3JhdGUgbWVtb3J5IHRvXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEyOTI9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9maW5hbGl6ZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM0NS0gKiBtaWdyYXRlX2RldmljZV9maW5hbGl6ZSgpIC0gY29tcGxldGUgcGFnZSBtaWdyYXRpb25cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNDY6ICogQHNyY19wZm5zOiBzcmNfcGZucyByZXR1cm5lZCBmcm9tIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDctICogQGRzdF9wZm5zOiBhcnJheSBvZiBwZm5zIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIHRvIG1pZ3JhdGUgbWVtb3J5IHRvXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0MDE9c3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MjgtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDI5OiAqIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MzAtICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDgtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDQ5OmludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTAtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjctfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjktXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDcwLS8qKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3MTogKiBtaWdyYXRlX2RldmljZV9wZm5zKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzItICogQHNyY19wZm5zOiBwcmUtcG9wdWxhdGVkIGFycmF5IG9mIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG1pZ3JhdGUuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzQtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzU6ICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc2LSAqIGFycmF5IG9mIGRldmljZSBwYWdlcyB0byBtaWdyYXRlLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc5LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4MDppbnQgbWlncmF0ZV9kZXZpY2VfcGZucyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgxLXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5Ny19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk4OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGZucyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NjozMy4zNDExNjMyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NjI4Njc3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEhNTSBUZXN0IEhhcm5lc3MqKlxuXG5SaWdodCwgbXkgYXR0ZW50aW9uJ3MgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhhdCBgbGliL3Rlc3RfaG1tLmNgIGZpbGUuIEhtbSwgYSBoaWRkZW4gTWFya292IG1vZGVsIHRlc3QsIGludGVyZXN0aW5nISBNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvICpkZWVwIGRpdmUqIGludG8gYHRlc3RfaG1tLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIGtub3cgZXhhY3RseSB3aGF0IHRoZSB0ZXN0IGRvZXMsIHRoZSB0ZXN0IHN0cmF0ZWd5IHVzZWQsIGFuZCBob3cgaXQgaXMgZW1wbG95ZWQgd2l0aGluIHRoZSBvdmVyYWxsIHRlc3RpbmcgZnJhbWV3b3JrLlxuXG5CZXlvbmQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRlc3QgaXRzZWxmLCBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3Vycm91bmRpbmcgYERFVklDRV9QUklWQVRFYCBhbmQgYE1JR1JBVEVfREVWSUNFYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZXkgbWF5IGJlIHJlbGF0ZWQgdG8gZGV2aWNlIG1hbmFnZW1lbnQgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVpciBzZXR0aW5ncyBjb3VsZCBoYXZlIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgdGhlIEhNTSB0ZXN0IGZ1bmN0aW9ucywgb3IgZXZlbiB3aGV0aGVyIGl0J3MgZW5hYmxlZCBhdCBhbGwuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoYXQgdGhlIHRlc3QgaXMgYWN0dWFsbHkgcnVubmluZyBpbiB0aGUgZXhwZWN0ZWQgZW52aXJvbm1lbnQsIGFuZCBub3QgZ2V0dGluZyB1bmludGVudGlvbmFsbHkgc2tpcHBlZCBvciBjb25maWd1cmVkIGludG8gYSBiYWQgc3RhdGUuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIHRlc3QgZW52aXJvbm1lbnQgbWF0Y2hlcyB0aGUgaW50ZW5kZWQgZW52aXJvbm1lbnQgZm9yIHRoZSBITU0gaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMjEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NjozNS44MDQwMzUxNTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMDYzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9kZXZpY2UuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjMxNj1taWdyYXRlX2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKHN0cnVjdCBsaXN0X2hlYWQgKm1vdmFibGVfZm9saW9fbGlzdCxcXG4tLVxcbm1tL2d1cC5jLTIzMzQtXFxubW0vZ3VwLmM6MjMzNTpcXHRcXHRcXHRpZiAobWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oZm9saW8pKSB7XFxubW0vZ3VwLmMtMjMzNi1cXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTEyNjM9dm9pZCBmcmVlX3pvbmVfZGV2aWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmg6MTI2NDppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaW50ZXJuYWwuaC0xMjY1LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMTA5PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTExMzgtXFx0XFx0XFx0ICogVGhlIG9ubHkgdGltZSB0aGVyZSBpcyBubyB2bWEgaXMgd2hlbiBjYWxsZWQgZnJvbVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTEzOTpcXHRcXHRcXHQgKiBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbygpLiBIb3dldmVyIHRoaXMgaXNuJ3RcXG5tbS9taWdyYXRlX2RldmljZS5jLTExNDAtXFx0XFx0XFx0ICogY2FsbGVkIGlmIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSB1bm1hcHBlZC5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MDE6c3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ0OT1pbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTYtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDU3OlxcdFxcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDU4LVxcdFxcdGlmICghbnIpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0ODA9aW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg3LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4ODpcXHRcXHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4OS1cXHRcXHRpZiAoIW5yKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDk4PUVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGZucyk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MDQtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTA1OmludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjM1Ljg2NDI0NzkyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3OTMyMzA0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBDb25maWd1cmF0aW9uIGZvciBgbWlncmF0ZV9kZXZpY2UuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYG1pZ3JhdGVfZGV2aWNlLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gbGF5cyBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29tcGlsYXRpb24gcnVsZXMgZm9yIGZpbGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBCeSBleGFtaW5pbmcgdGhlIE1ha2VmaWxlLCBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGBDT05GSUdgIG9wdGlvbnMsIGlmIGFueSwgYG1pZ3JhdGVfZGV2aWNlLmNgIGdldHMgY29tcGlsZWQuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoaWNoIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyBpdCdzIGludGVuZGVkIHRvIHN1cHBvcnQuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBMZXQncyBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjQ1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6MzcuNjU3NDgzNjE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcyODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6MzcuNzA5MjIxNjI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTkxNTM3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIHdhbGtpbmcgdGhyb3VnaCBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2NvbmZpZyBSZXZpZXcgLSBDb25maWd1cmF0aW9uIFNjZW5hcmlvcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBjaGVjayBhIGZldyBzcGVjaWZpYyBLY29uZmlnIHN5bWJvbHMsIG5hbWVseSBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gLCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCwgYW5kIGBDT05GSUdfVEVTVF9ITU1fVUFQSWAuIFRoaW5raW5nIHRocm91Z2ggdGhpcywgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBnZW5lcmFsIGFyZWEgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVsYXRlIHRvPyBCYXNlZCBvbiB0aGUgbmFtaW5nLCBJJ20gZ3Vlc3NpbmcgdGhpcyByZXZvbHZlcyBhcm91bmQgZGV2aWNlIG1hbmFnZW1lbnQgYW5kIHVzZXItc3BhY2UgQVBJIGludGVyYWN0aW9ucywgcG9zc2libHkgZXZlbiB0ZXN0aW5nIGVudmlyb25tZW50cy5cblxuKiAgIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmA6IFRoaXMgc291bmRzIGxpa2UgaXQgZGVhbHMgd2l0aCBob3cgZGV2aWNlcyBhcmUgbW92ZWQgb3IgcmUtYXNzaWduZWQgd2l0aGluIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgdmFsdWVzIGZvciB0aGlzIGZsYWcgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hhdCB0cmlnZ2VycyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGNvbmZpZy4gV2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgZG9lcyBpdCByZWx5IG9uPyBXaGF0IG1vZHVsZXMgb3IgZHJpdmVycyBkb2VzIGl0IGFmZmVjdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcz8gSXMgdGhpcyByZWxhdGVkIHRvIGhvdHBsdWdnaW5nLCBwZXJzaXN0ZW50IHN0b3JhZ2UsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuXG4qICAgYENPTkZJR19ERVZJQ0VfUFJJVkFURWA6IFRoZSBcInByaXZhdGVcIiBhc3BlY3QgaXMgaW50cmlndWluZy4gVGhpcyBsaWtlbHkgcmVsYXRlcyB0byBhY2Nlc3MgY29udHJvbCBhbmQgc2VjdXJpdHkgYXJvdW5kIGRldmljZSByZXNvdXJjZXMuIEkgc2hvdWxkIGNvbnNpZGVyIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBzZWN1cml0eSBtb2RlbHMuIERvZXMgaXQgaW1wbHkgdGhhdCBhIGdpdmVuIGRldmljZSBpcyAqb25seSogYWNjZXNzaWJsZSB0byBjZXJ0YWluIHByb2Nlc3NlcyBvciBhIHBhcnRpY3VsYXIgc2V0IG9mIHVzZXJzPyBDb3VsZCB0aGlzIGJlIHJlbGF0ZWQgdG8gaXNvbGF0aW9uLCBvciBldmVuIHBhcnRpdGlvbmluZz8gSSBuZWVkIHRvIHJldmlldyByZWxhdGVkIGRvY3VtZW50YXRpb24uXG5cbiogICBgQ09ORklHX1RFU1RfSE1NX1VBUElgOiBUaGlzIGlzIHByZXR0eSBjbGVhci4gVGhpcyBpcyBwcm9iYWJseSBhIHRlc3RpbmcgcmVsYXRlZCBjb25maWd1cmF0aW9uLCBsaWtlbHkgZm9yIHNvbWUgc29ydCBvZiB1c2VyLXNwYWNlIGludGVyZmFjZS4gXCJITU1cIiBoaW50cyBhdCBzb21lIGhhcmR3YXJlIG1lbW9yeSBtYW5hZ2VtZW50LiBJcyBpdCBmb3IgdGVzdGluZyB1c2VyLXNwYWNlIGludGVyYWN0aW9ucyB3aXRoIGRldmljZSBkcml2ZXJzPyBPciB2YWxpZGF0aW5nIGEgbWVtb3J5LW1hbmFnZW1lbnQgbWVjaGFuaXNtIGZvciB0aGUga2VybmVsPyBNeSBmaXJzdCBzdGVwIGlzIGdvaW5nIHRvIGJlIHRvIGxvb2sgZm9yIFwiSE1NXCIgaW4gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uLiBXaGF0IHRlc3RzIGFyZSBlbmFibGVkIHdoZW4gdGhpcyBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQ/IFdoYXQgYnVpbGQgZW52aXJvbm1lbnQgaXMgcmVxdWlyZWQ/XG5cblVsdGltYXRlbHksIHRoaXMgaXMgYSBzeXN0ZW1hdGljIHByb2Nlc3MuIEkgd2lsbCByZXZpZXcgZWFjaCBzeW1ib2wncyBkZWZpbml0aW9uLCBoZWxwIHRleHQsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzLiBJJ2xsIGxpa2VseSBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgYWdhaW5zdCByZWxldmFudCBkb2N1bWVudGF0aW9uIGFuZCBleGlzdGluZyBjb2RlIGNvbW1lbnRzIGluIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZWlyIGZ1bmN0aW9uIGFuZCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTUzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6NDEuODY4Mzc4MjM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY5MjIxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njc5PWNvbmZpZyBNSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjgyLVxcbm1tL0tjb25maWc6NjgzOmNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODQtXFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjQ0LjAzNzYwNTEwOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDYzMjI5OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmU6IEludmVzdGlnYXRpbmcgWk9ORV9ERVZJQ0UgYW5kIFRFU1RfSE1NKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggYFpPTkVfREVWSUNFYCBhbmQgYFRFU1RfSE1NYC5cIiBJJ20gbWVudGFsbHkgY2hlY2tpbmcgdGhlaXIgZGVmaW5pdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGxvb2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0czpcblxuKiAgICoqYFpPTkVfREVWSUNFYDoqKiBJcyB0aGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQ/IEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSAtIElzIGl0IHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmU/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBOVU1BIG5vZGVzIG9yIHNwZWNpZmljIGhhcmR3YXJlPyBXaGF0IGltcGFjdCBkb2VzIGl0IGhhdmUgb24gdGhlIG1lbW9yeSBhbGxvY2F0b3IgYW5kIHJlY2xhaW1lcnM/IEFueSBwb3RlbnRpYWwgaW1wYWN0IG9uIG1lbW9yeSBob3RwbHVnP1xuXG4qICAgKipgVEVTVF9ITU1gOioqIEknbSBndWVzc2luZyB0aGlzIGlzIGxpa2VseSBhIHRlc3QgY2FzZSBvciBzb21lIHNvcnQgb2YgcHJvb2Ytb2YtY29uY2VwdCBmb3IgYSBoZXRlcm9nZW5lb3VzIG1lbW9yeSBtYW5hZ2VtZW50IChITU0pIGZlYXR1cmUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgSE1NIGltcGxlbWVudGF0aW9uIGl0J3MgdGVzdGluZy4gSXMgdGhpcyByZWxhdGVkIHRvIHRoZSBtb3JlIG1hdHVyZSBITU0gZnJhbWV3b3JrLCBvciBpcyBpdCBhbiBvbGRlciBvciBleHBlcmltZW50YWwgaW1wbGVtZW50YXRpb24/IFdoYXQncyB0aGUgdGVzdCBjYXNlIGFjdHVhbGx5IGRvaW5nPyBJcyBpdCBleGVyY2lzaW5nIHRoZSBiYXNpYyBITU0gQVBJLCB0ZXN0aW5nIG1lbW9yeSBtaWdyYXRpb24sIG9yIHZlcmlmeWluZyBzcGVjaWZpYyBjb3JuZXIgY2FzZXM/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28sIGlmIGFueS4gSXMgYFRFU1RfSE1NYCBkZXBlbmRlbnQgb24gYFpPTkVfREVWSUNFYCwgb3IgYXJlIHRoZXkgb3J0aG9nb25hbD8gSXMgdGhlIHRlc3QgZXZlbiBzdGlsbCByZWxldmFudCwgb3IgaXMgaXQgYW4gYXJ0aWZhY3Qgb2YgYW4gb2xkZXIgZmVhdHVyZSB0aGF0J3Mgc2luY2UgYmVlbiByZXBsYWNlZD8gQ2hlY2tpbmcgdmVyc2lvbiBoaXN0b3J5IGluIGdpdCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBcIndoeVwiIGFuZCBcImhvd1wiLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjUwLjEwMDgzNzk1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNDQ1OTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJURVNUX0hNTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE3PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjQtXFxubGliL0tjb25maWcuZGVidWc6MzMyNTpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI2LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuLS1cXG5saWIvTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19URVNUX0xPQ0tVUCkgKz0gdGVzdF9sb2NrdXAub1xcbmxpYi9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX1RFU1RfSE1NKSArPSB0ZXN0X2htbS5vXFxubGliL01ha2VmaWxlLTEwNS1vYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSArPSB0ZXN0X2ZyZWVfcGFnZXMub1xcbi0tXFxubGliL3Rlc3RfaG1tX3VhcGkuaC02LSAqL1xcbmxpYi90ZXN0X2htbV91YXBpLmg6NzojaWZuZGVmIF9MSUJfVEVTVF9ITU1fVUFQSV9IXFxubGliL3Rlc3RfaG1tX3VhcGkuaDo4OiNkZWZpbmUgX0xJQl9URVNUX0hNTV9VQVBJX0hcXG5saWIvdGVzdF9obW1fdWFwaS5oLTktXFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oPTc1PWVudW0ge1xcbi0tXFxubGliL3Rlc3RfaG1tX3VhcGkuaC04MC1cXG5saWIvdGVzdF9obW1fdWFwaS5oOjgxOiNlbmRpZiAvKiBfTElCX1RFU1RfSE1NX1VBUElfSCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTU9Q09ORklHX0RFVklDRV9QUklWQVRFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc6NjpDT05GSUdfVEVTVF9ITU09bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZy03LUNPTkZJR19HVVBfVEVTVD15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaD0yMT1jaGVja190ZXN0X3JlcXVpcmVtZW50cygpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0zNS1cXHRcXHRlY2hvIFxcXCIkMDogWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWw6XFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoOjM2OlxcdFxcdGVjaG8gXFxcIkNPTkZJR19URVNUX0hNTT1tXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoLTM3LVxcdFxcdGV4aXQgJGtzZnRfc2tpcFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0Njo1Mi4xMzUzMDM3NDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwMTEwOTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgbGliL0tjb25maWcuZGVidWdgIGFuZCBgVEVTVF9ITU1gKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbGliL0tjb25maWcuZGVidWdgIGZpbGUuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgcmVsZXZhbnQgYXJvdW5kIGBURVNUX0hNTWAuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyB0aGVyZSdzIHByb2JhYmx5IGEgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoYXQgc3ltYm9sLiBUaGlzIGxpa2VseSBtZWFucyBzb21lIGRlYnVnZ2luZyBmZWF0dXJlcywgcG9zc2libHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciBzb21lIHNwZWNpZmljIGhhcmR3YXJlIHRlc3RzLCBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGlzIGBURVNUX0hNTWAgc2V0dGluZy4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdGluZyBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIHJldmVhbGVkIGFzIEkgbG9vayBhdCB0aGUgY29udGV4dCBhcm91bmQgdGhhdCBzeW1ib2wuIEknbSBnb2luZyB0byBsb29rIGZvciBkZWZpbml0aW9ucywgY29uZGl0aW9uYWwgYmxvY2tzICggYGlmYCBzdGF0ZW1lbnRzKSwgYW5kIGFueSByZWZlcmVuY2VzIHRvIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBzeW1ib2xzLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBJJ20gbG9va2luZyBmb3IgdGhlIGxvZ2ljIHRoYXQgY29udHJvbHMgd2hldGhlciBhIHBhcnRpY3VsYXIgdGVzdCBvciBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0eSByZWxhdGluZyB0byBITU0gKHBlcmhhcHMgSGFyZHdhcmUgTWFuYWdlZCBNZW1vcnk/KSBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIExldCdzIGdldCBjcmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNjIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0Njo1NC4yMzY0MTYyODZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjYyODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBURVNUX0hNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE3PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjQtXFxubGliL0tjb25maWcuZGVidWc6MzMyNTpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI2LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjU0LjI4NzA4NDQ5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTI0OTUyNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGdyYW51bGFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbGliL0tjb25maWcuZGVidWdgIGFuZCBmb2N1cyBvbiBsaW5lcyAzMzIwIHRocm91Z2ggMzM1MC4gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBwYXJzZSB0aGUgbGlrZWx5IGNvbnRlbnQ6IGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGRlYnVnIGZlYXR1cmUsIGxpa2VseSBhIGNvbXBsZXggb25lIGp1ZGdpbmcgYnkgdGhlIGZhY3QgdGhhdCBpdCdzIHdpdGhpbiBhIEtjb25maWcgZmlsZS4gSSdsbCBiZSBsb29raW5nIGZvciBrZXl3b3JkcyBsaWtlIFwiZGVidWcsXCIgXCJ0cmFjaW5nLFwiIFwibG9nZ2luZyxcIiBvciBzcGVjaWZpYyBoYXJkd2FyZS1yZWxhdGVkIHRlcm1zIGlmIGl0IHBlcnRhaW5zIHRvIG9uLWNoaXAgZGVidWcgY2FwYWJpbGl0aWVzLiBJIGFudGljaXBhdGUgZW5jb3VudGVyaW5nIGBjb25maWdgIGJsb2NrcywgYGJvb2xgIG9yIGB0cmlzdGF0ZWAgb3B0aW9ucywgYGRlcGVuZHMgb25gIGNsYXVzZXMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGhlbHAgdGV4dCB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgY3JpdGljYWwgY29udGV4dCBmb3IgdGhpcyBzZWN0aW9uLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBhIHBhcnRpY3VsYXIgZGVidWcgb3B0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBhcmUsIHNvIEkgY2FuIHByZWRpY3QgaXRzIGJlaGF2aW9yIGFuZCBpbmZsdWVuY2UgaXQuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUuIEknbSBob3BpbmcgaXQgcHJvdmlkZXMgdGhlIG1pc3NpbmcgcGllY2UgSSBuZWVkIHRvIHJlc29sdmUgdGhpcyBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0Njo1OS4yMTIwNDEwMDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMjA6XFx0XFx0ICBUZXN0IGlmIHRoZSBrZXJuZWwgaXMgemVyby1pbml0aWFsaXppbmcgaGVhcCBhbmQgcGFnZSBhbGxvY2F0aW9ucy5cXG4zMzIxOlxcdFxcdCAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHRlc3QgaW5pdF9vbl9hbGxvYyBhbmQgaW5pdF9vbl9mcmVlIGZlYXR1cmVzLlxcbjMzMjI6XFx0XFxuMzMyMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMzMyNDpcXHRcXG4zMzI1OlxcdGNvbmZpZyBURVNUX0hNTVxcbjMzMjY6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG4zMzI3OlxcdFxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4zMzI4OlxcdFxcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcXG4zMzI5OlxcdFxcdHNlbGVjdCBITU1fTUlSUk9SXFxuMzMzMDpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuMzMzMTpcXHRcXHRoZWxwXFxuMzMzMjpcXHRcXHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxcbjMzMzM6XFx0XFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXFxuMzMzNDpcXHRcXHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cXG4zMzM1OlxcdFxcbjMzMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMzc6XFx0XFxuMzMzODpcXHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXFxuMzMzOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBmcmVlaW5nIHBhZ2VzXFxcIlxcbjMzNDA6XFx0XFx0aGVscFxcbjMzNDE6XFx0XFx0ICBUZXN0IHRoYXQgYSBtZW1vcnkgbGVhayBkb2VzIG5vdCBvY2N1ciBkdWUgdG8gYSByYWNlIGJldHdlZW5cXG4zMzQyOlxcdFxcdCAgZnJlZWluZyBhIGJsb2NrIG9mIHBhZ2VzIGFuZCBhIHNwZWN1bGF0aXZlIHBhZ2UgcmVmZXJlbmNlLlxcbjMzNDM6XFx0XFx0ICBMb2FkaW5nIHRoaXMgbW9kdWxlIGlzIHNhZmUgaWYgeW91ciBrZXJuZWwgaGFzIHRoZSBidWcgZml4ZWQuXFxuMzM0NDpcXHRcXHQgIElmIHRoZSBidWcgaXMgbm90IGZpeGVkLCBpdCB3aWxsIGxlYWsgZ2lnYWJ5dGVzIG9mIG1lbW9yeSBhbmRcXG4zMzQ1OlxcdFxcdCAgcHJvYmFibHkgT09NIHlvdXIgc3lzdGVtLlxcbjMzNDY6XFx0XFxuMzM0NzpcXHRjb25maWcgVEVTVF9GUFVcXG4zMzQ4OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgaW4ga2VybmVsIHNwYWNlXFxcIlxcbjMzNDk6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19LRVJORUxfRlBVX1NVUFBPUlQgXFx1MDAyNlxcdTAwMjYgIUtDT1ZfSU5TVFJVTUVOVF9BTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6NTkuMjEyMjc5MTMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTA2NjkzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgYFRFU1RfSE1NYCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBgVEVTVF9ITU1gIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZXNlIGNoYXJhY3RlciBkZXZpY2VzLCBgL2Rldi9obW1fZG1pcnJvcjBgLCBgL2Rldi9obW1fZG1pcnJvcjFgLCBhbmQgdGhlIGxpa2UuIFRoYXQncyB0aGUgYmFzaWMgaW5mcmFzdHJ1Y3R1cmUsIHRoZSBlbnRyeSBwb2ludHMuIEFuZCBpdCdzIGRvaW5nIHRoaXMgdG8gcHJvdmlkZSBhIHdheSB0byBtb3ZlIG1lbW9yeSBwYWdlcyBhcm91bmQgdGhyb3VnaCBpb2N0bHMuIFNwZWNpZmljYWxseSwgSSBzZWUgYEhNTV9ETUlSUk9SX01JR1JBVEVgIGFuZCBvdGhlciBzaW1pbGFyIG9wZXJhdGlvbnMuIFRoZXkncmUgZGVzaWduZWQgdG8gaGFuZGxlIHRoYXQgbWlncmF0aW9uIHByb2Nlc3MsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuXG5cblRoZSBrZXkgdG8gZmlndXJpbmcgdGhpcyBvdXQgbGllcyBpbiBob3cgaXQgKnVzZXMqIGBtaWdyYXRlX2RldmljZV9yYW5nZWAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIGhlYXJ0IG9mIHRoZSBwYWdlIG1pZ3JhdGlvbiBsb2dpYywgYW5kIHVuZGVyc3RhbmRpbmcgKml0cyogY29udGV4dCBpcyBjcnVjaWFsLiBUaW1lIHRvIGRpdmUgaW50byBgbGliL3Rlc3RfaG1tLmNgIHRvIHNlZSBob3cgdGhvc2UgaW9jdGxzIGFyZSB1bHRpbWF0ZWx5IGNhbGxpbmcgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgYW5kIHVuZGVyc3RhbmQgdGhlIGlucHV0cyBhbmQgcGFyYW1ldGVycy4gV2hhdCBraW5kIG9mIGFkZHJlc3NlcyBhcmUgYmVpbmcgcGFzc2VkLCBob3cgaXMgdGhlIGRldmljZSByYW5nZSBkZWZpbmVkLCBhbmQgd2hhdCdzIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgaXQncyBvcGVyYXRpbmcgaW4/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NzowMS43NjI5NTE4MDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NDY5NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfZGV2aWNlX2V2aWN0X2NodW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi90ZXN0X2htbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2htbS5jPTE2Mj1zdGF0aWMgaW50IGRtaXJyb3JfZm9wc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTg3LVxcbmxpYi90ZXN0X2htbS5jOjE4ODpzdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXFxubGliL3Rlc3RfaG1tLmMtMTg5LXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTIzOD1zdGF0aWMgaW50IGRtaXJyb3JfZm9wc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMjUwLVxcbmxpYi90ZXN0X2htbS5jOjI1MTpcXHRcXHRcXHRkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhkZXZtZW0pO1xcbmxpYi90ZXN0X2htbS5jLTI1Mi1cXHRcXHR9XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNTc3PXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX3JlbW92ZV9jaHVua3Moc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTU5MS1cXG5saWIvdGVzdF9obW0uYzoxNTkyOlxcdFxcdFxcdGRtaXJyb3JfZGV2aWNlX2V2aWN0X2NodW5rKGRldm1lbSk7XFxubGliL3Rlc3RfaG1tLmMtMTU5My1cXHRcXHRcXHRtZW11bm1hcF9wYWdlcyhcXHUwMDI2ZGV2bWVtLVxcdTAwM2VwYWdlbWFwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MDEuODE5NDMwMzYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxNDc1MzI0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVHJpYWdlIEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZz8qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYG1pZ3JhdGVfdm1hXypgIGFuZCBgbWlncmF0ZV9kZXZpY2VfKmAsIHdoaWNoIGFyZSBzcXVhcmVseSB3aXRoaW4gdGhlIGBtbS9gIG1lbW9yeSBtYW5hZ2VtZW50IGNvcmUgc3Vic3lzdGVtLiBFeGNlbGxlbnQsIHRoYXQncyBzdGVwIG9uZS4gTm93LCBsZXQncyBzZWUgaWYgdGhpcyBoaXRzIHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLlxuXG5UaGUgdHJpYWdlIGd1aWRlbGluZXMgc3RhdGUgd2Ugc2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gQW5kIHdlJ3ZlIGdvdCBhIGxpc3Qgb2YgcG9zaXRpdmUgaW5kaWNhdG9ycy4gIFdlIG5lZWQgdG8gc2VlIGlmIHRoaXMgbWF0Y2hlcyBvbmUgb2YgdGhlbS4gIFNwZWNpZmljYWxseSwgbGV0J3MgYXNzZXNzIGl0IGFnYWluc3QgdGhlc2U6XG5cbjEuICAqKkNvcmUgU3Vic3lzdGVtczoqKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKS5cbjIuICAqKlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoqKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4zLiAgKipSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6KiogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuXG5IZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nOiAgVGhpcyBwYXRjaCBpcyAqYWJzb2x1dGVseSogcmVsZXZhbnQuXG5cbiogICAqKlN1YnN5c3RlbToqKiBJdCdzIGluIGBtbS9gIOKAkyBtZW1vcnkgbWFuYWdlbWVudCwgdGljay5cbiogICAqKkNoYW5nZXM6KiogV2UgaGF2ZSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBmb2xpbyBjb2xsZWN0aW9uIGxvb3AgaW4gYG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZucygpYC4gIFBsdXMsIGEgbmV3IGZ1bmN0aW9uLCBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpYC4gQ3JpdGljYWxseSwgdGhlcmUncyBhIGBXQVJOX09OX09OQ0VgIGFzc2VydGlvbiBhZGRlZCAoYFdBUk5fT05fT05DRShuciBcdTAwM2UgcmVtYWluaW5nKWApLCAqYW5kKiBtb2RpZmljYXRpb25zIHRvIGZvbGlvIGxvY2tpbmcvdW5sb2NraW5nIGFuZCBhcnJheSBib3VuZHMgaGFuZGxpbmcuIFRoYXQncyBhIHRyaXBsZSB0aHJlYXQhXG4qICAgKipSZWFjaGFiaWxpdHk6KiogIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuICBXZSBjYW4gaGl0IGl0IHRocm91Z2ggYHRlc3RfaG1tYCwgd2hpY2ggY2FuIGJlIGRyaXZlbiBpbiBRRU1VL3N5emthbGxlci4gVGhhdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEFsc28sIGBub3V2ZWF1YCwgYGRybV9wYWdlbWFwYCwgb3IgYW55IGRyaXZlciB0aGF0IHVzZXMgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBvciBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgaXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuXG4qICAgKipDb25maWd1cmF0aW9uOioqIFdlJ3ZlIGdvdCBmbGFncyBsaWtlIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgREVWSUNFX01JR1JBVElPTmAgaW4gcGxheSwgc28gd2UgbmVlZCB0byBjb25maXJtIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzZXR1cCwgYnkgY2hlY2tpbmcgdGhlIG1tL0tjb25maWcgZm9yIHRoZWlyIGF2YWlsYWJpbGl0eS5cblxuR2l2ZW4gdGhlIHN1YnN5c3RlbSBpbnZvbHZlbWVudCwgcmVmYWN0b3JpbmcsICphbmQqIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYW4gYXNzZXJ0aW9uLCB0aGlzIGlzIGEgY2xlYXIgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiLiBJdCdzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHJlc3RydWN0dXJpbmcgZGF0YSBmbG93LCBhbmQgYWRkaW5nIGEgZGVmZW5zaXZlIGNoZWNrIGluIGEgcmVhY2hhYmxlIHBhdGguIEV4Y2VsbGVudCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MTAuOTY2OTY2NzMxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzM0OTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKERFVklDRV9QUklWQVRFfFpPTkVfREVWSUNFfERFVklDRV9NSUdSQVRJT04pXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY3OT1jb25maWcgTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY4Mi1cXG5tbS9LY29uZmlnOjY4Mzpjb25maWcgREVWSUNFX01JR1JBVElPTlxcbm1tL0tjb25maWctNjg0LVxcdGRlZl9ib29sIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBaT05FX0RFVklDRVxcbi0tXFxubW0vS2NvbmZpZz0xMjE1PWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMTktXFxubW0vS2NvbmZpZzoxMjIwOmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIyMS1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMjQ3PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI0OS1cXG5tbS9LY29uZmlnOjEyNTA6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjUxLVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MTEuMDM0MzIyNzY2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MzE2NDUwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZGV2aWNlIHpvbmVzIGFyZSBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbnMgZm9yIGBaT05FX0RFVklDRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBvcHRpb25zIGFyZSBhY3R1YWxseSBjb25maWd1cmFibGUgYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvbiBhbnkgb3RoZXIga2VybmVsIGZlYXR1cmVzLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgdGhlIGBjb25maWdgIHN0YXRlbWVudHMsIHRoZWlyIGRlcGVuZGVuY2llcyAoYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgZXRjLiksIGFuZCwgb2YgY291cnNlLCB0aGUgYWN0dWFsIGhlbHAgdGV4dCwgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVzaWduIGludGVudGlvbnMuIEkgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGVzZSBhcmUgbWVyZWx5IGNvbXBpbGUtdGltZSBvcHRpb25zIG9yIGlmIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBpcyBpbnZvbHZlZCwgYnV0IHRoZSBLY29uZmlnIHdpbGwgbGlrZWx5IG9ubHkgaGF2ZSB0aGUgY29tcGlsZS10aW1lIGluZm9ybWF0aW9uLiBHcmFiYmluZyB0aGVzZSBzcGVjaWZpY3Mgd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgZm91bmRhdGlvbiB0byByZWFzb24gYWJvdXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdHMgYXNzb2NpYXRlZCB3aXRoIHRob3NlIHpvbmVzLiBUaW1lIHRvIGRpdmUgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTI5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MTMuNTY1OTcxMjI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTgsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTg6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuMTIxOTpcXHRcXG4xMjIwOlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjEyMjE6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMjIyOlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjEyMjM6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjEyMjQ6XFx0XFxuMTIyNTpcXHRcXHRoZWxwXFxuMTIyNjpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTIyNzpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuMTIyODpcXHRcXHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxcbjEyMjk6XFx0XFx0ICBcXFwiZGV2aWNlLXBoeXNpY2FsXFxcIiBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxcbjEyMzA6XFx0XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxuMTIzMTpcXHRcXG4xMjMyOlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxcbjEyMzM6XFx0XFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXFxuMTIzNDpcXHRcXHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcXG4xMjM1OlxcdFxcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXFxuMTIzNjpcXHRcXHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxcbjEyMzc6XFx0XFxuMTIzODpcXHQjXFxuMTIzOTpcXHQjIEhlbHBlcnMgdG8gbWlycm9yIHJhbmdlIG9mIHRoZSBDUFUgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzIGludG8gZGV2aWNlIHBhZ2VcXG4xMjQwOlxcdCMgdGFibGVzLlxcbjEyNDE6XFx0I1xcbjEyNDI6XFx0Y29uZmlnIEhNTV9NSVJST1JcXG4xMjQzOlxcdFxcdGJvb2xcXG4xMjQ0OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTI0NTpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuMTI0NjpcXHRcXG4xMjQ3OlxcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4xMjQ4OlxcdFxcdGJvb2xcXG4xMjQ5OlxcdFxcbjEyNTA6XFx0Y29uZmlnIERFVklDRV9QUklWQVRFXFxuMTI1MTpcXHRcXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuMTI1MjpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuMTI1MzpcXHRcXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuMTI1NDpcXHRcXG4xMjU1OlxcdFxcdGhlbHBcXG4xMjU2OlxcdFxcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcXG4xMjU3OlxcdFxcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxcbjEyNTg6XFx0XFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXFxuMTI1OTpcXHRcXG4xMjYwOlxcdGNvbmZpZyBWTUFQX1BGTlxcbjEyNjE6XFx0XFx0Ym9vbFxcbjEyNjI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ3OjEzLjU2NjI3NTcwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDU4Nzk1MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24gaW4gbW0vS2NvbmZpZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uXCIgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBNSUdSQVRJT05gIG9wdGlvbnMgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIG9yIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBzeXN0ZW0ncyBtZW1vcnkgbWlncmF0aW9uIGNhcGFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBtZW1vcnksIHNvIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggbWlncmF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHNldCBhbmQgaWYgdGhlcmUncyBhbnl0aGluZyB1bnVzdWFsIG9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZCBpbiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzb21ldGhpbmcgSSdtIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCwgc28gSSdsbCBiZSBsb29raW5nIGF0IHRoZSBkZXRhaWxzIGFzIHdlbGwgYXMgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAzMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MTYuMDI1MDc0Mjg1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3NTpcXHRcXHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXFxuIDY3NjpcXHRcXHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcXG4gNjc3OlxcdFxcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxcbiA2Nzg6XFx0XFxuIDY3OTpcXHRjb25maWcgTUlHUkFUSU9OXFxuIDY4MDpcXHRcXHRib29sXFxuIDY4MTpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA2ODI6XFx0XFxuIDY4MzpcXHRjb25maWcgREVWSUNFX01JR1JBVElPTlxcbiA2ODQ6XFx0XFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuIDY4NTpcXHRcXG4gNjg2OlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cXG4gNjg3OlxcdFxcdGJvb2xcXG4gNjg4OlxcdFxcbiA2ODk6XFx0Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuIDY5MDpcXHRcXHRib29sXFxuIDY5MTpcXHRcXG4gNjkyOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbiA2OTM6XFx0XFx0ZGVmX2Jvb2wgblxcbiA2OTQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NzoxNi4wMjUxODUyNjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ5MDU3MDQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEZXZpY2UgTWlncmF0aW9uIENvZGUgYW5kIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoYXQgZW5hYmxpbmcgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgb3IgYFRFU1RfSE1NYCBpbmRpcmVjdGx5IGVuYWJsZXMgZGV2aWNlIG1pZ3JhdGlvbiBiZWNhdXNlIG9mIHRoZSBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYCBoaW5nZXMgb24gYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAsIHdoaWxlIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gVGhlbiwgYENPTkZJR19URVNUX0hNTWAgbmVlZHMgYm90aCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBUaGlzIG1lYW5zIGFjdGl2YXRpbmcgYW55IG9mIHRob3NlIGNvbmZpZ3MgYWxsb3dzIHVzIHRvIHRyaWdnZXIgdGhlIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIG1vZGlmaWNhdGlvbnMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIEknbSBzZWVpbmcgYSBuZXcsIHN0YXRpYyBmdW5jdGlvbiBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AgaW50cm9kdWNlZC4gVGhlIGV4aXN0aW5nIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIHRvIHVzZSBpdC4gSW1wb3J0YW50bHksIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvYCBpcyAqc3RhdGljKiwgc28gaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoYXQgZmlsZSwgYW5kIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYCBhcmUgdGhlIGV4cG9ydGVkIHN5bWJvbHMgdGhhdCB3aWxsIGFjdHVhbGx5IGNhbGwgaXQuIFRob3NlIHRocmVlIGZ1bmN0aW9ucywgY29sbGVjdGl2ZWx5LCBhcmUgdGhlICpGb2N1c1N5bWJvbHMqLlxuXG5JJ3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGFyZSBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYFRFU1RfSE1NYC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgYW5hbHlzaXMgY2xhaW1zIHRoaXMgaXMgd29ydGggZnV6emluZywgYW5kIEkgYWdyZWUuIFRoZSBqdXN0aWZpY2F0aW9uIHNlZW1zIHNvdW5kOiB0aGVyZSBhcmUgbG9naWMgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSAoYG1tL21pZ3JhdGVfZGV2aWNlLmNgKSwgaW5jbHVkaW5nIGEgcmVmYWN0b3Jpbmcgb2YgZm9saW8gaGFuZGxpbmcsIHBsdXMgYW4gYWRkZWQgYXNzZXJ0aW9uIChgV0FSTl9PTl9PTkNFYCkgaW4gdGhlIG5ldyBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncy4gRnVydGhlcm1vcmUsIEkgc2VlIHRoaXMgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdmlhIGB0ZXN0X2htbWAgb3IgZXZlbiB0aGUgRFJNIHBhZ2VtYXAsIHNvIHRoZXJlIGFyZSBnb29kIHRlc3QgdmVjdG9ycy5cblxuSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGV2ZXJ5dGhpbmcgbWVldHMgdGhlIGNyaXRlcmlhLiBUaGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGlzIHNldCB0byB0cnVlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIEFuZCBmaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkIGFzIGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgVEVTVF9ITU1gLlxuXG5UaGUgcmVhc29uaW5nIGlzIGFjY3VyYXRlIGFuZCBjb25jaXNlOiB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgcHJpdmF0ZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGludG8gYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgLCB1c2VkIGJ5IGBtaWdyYXRlX2RldmljZV9yYW5nZSgpYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnMoKWAuIEl0IGFkZHMgYSBgV0FSTl9PTl9PTkNFYCBhc3NlcnRpb24gdG8gY2hlY2sgYm91bmRzIGFnYWluc3QgcmVtYWluaW5nIGFycmF5IGNhcGFjaXR5LCBhbmQgdGhlIGNvZGUgaXMgdGVzdGFibGUgdmlhIGB0ZXN0X2htbWAuXG5cblNvLCBpdCdzIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIHRvb2wgY2FsbCB3aXRoIHRob3NlIHNldHRpbmdzLiBMb29rcyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUxNCwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NzoyMS41MTU3NTkwMjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODI5MzY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJURVNUX0hNTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9cIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3JhbmdlXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9wZm5zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJURVNUX0hNTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9cIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3JhbmdlXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9wZm5zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ3OjIxLjU5NDA2MjE1NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMzUyNjA3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NzoyMS41OTQ2NjE1MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTEzNDY1NjA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGJ5IGZhY3RvcmluZyBvdXQgZHVwbGljYXRlZCBjb2RlIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpLlxcblxcbkFsbCBsb2NhbCB2YXJpYWJsZXMgKG5yLCBwZm4sIGkpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgZGVzdGluYXRpb24gUEZOIGFycmF5IGVudHJpZXMgYXJlIGV4cGxpY2l0bHkgd3JpdHRlbiBvciB6ZXJvZWQgdmlhIG1lbXNldCgpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9uIChlLmcuLCBhcnJheSBvdXQtb2YtYm91bmRzIGluZGV4aW5nIG9yIGZvbGlvIGxvY2tpbmcvcmVmY291bnRpbmcgaXNzdWVzKSBmYWxscyBzcXVhcmVseSB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhMzM5Njc0MjQ1NGJlZmJhMmRkOGRlYWY2MjBlZjU0NTllM2IxMTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNjo0NjoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVfZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jXG5pbmRleCAwMDliZmE4YjIxMmQ1Li5jNTdlYWRlYTY1NjUxIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xuKysrIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuQEAgLTEzOTIsNiArMTM5MiwzOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcbiBcdHJldHVybiBtaWdyYXRlX3BmbihwZm4pIHwgTUlHUkFURV9QRk5fTUlHUkFURTtcbiB9XG4gXG4rLypcbisgKiBDb2xsZWN0IGEgZGV2aWNlIGZvbGlvIGludG8gdGhlIHBhZ2UtZ3JhbnVsYXIgUEZOIGFycmF5LlxuKyAqXG4rICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBjb25zdW1lZCwgb3IgMCBpZiB0aGUgZm9saW8gZG9lcyBub3QgZml0IGluXG4rICogdGhlIHJlbWFpbmluZyBhcnJheS5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3BmbixcbitcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBwZm4sXG4rXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKVxuK3tcbitcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKHBmbikpO1xuK1x0dW5zaWduZWQgaW50IG5yO1xuK1xuK1x0KnNyY19wZm4gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pO1xuK1x0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG5yIFx1MDAzZSByZW1haW5pbmcpKSB7XG4rXHRcdGlmICgqc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xuK1x0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0fVxuK1x0XHRtZW1zZXQoc3JjX3BmbiwgMCwgcmVtYWluaW5nICogc2l6ZW9mKCpzcmNfcGZuKSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKG5yIFx1MDAzZSAxKSB7XG4rXHRcdCpzcmNfcGZuIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuK1x0XHRtZW1zZXQoc3JjX3BmbiArIDEsIDAsIChuciAtIDEpICogc2l6ZW9mKCpzcmNfcGZuKSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnI7XG4rfVxuK1xuIC8qKlxuICAqIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cbiAgKiBAc3JjX3BmbnM6IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIG1pZ3JhdGluZyBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucy5cbkBAIC0xNDEwLDM1ICsxNDQzLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxuICAqIG1pZ3JhdGluZyBwYWdlcyB0aGF0IGFyZW4ndCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxuICAqIGFsbG9jYXRlIGRlc3RpbmF0aW9uIHBhZ2VzIGFuZCBzdGFydCBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlIHRvIENQVVxuICAqIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBtaWdyYXRlX2RldmljZV9wYWdlcygpLlxuKyAqXG4rICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIHJhbmdlLlxuICAqL1xuIGludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGksIGosIHBmbjtcbitcdHVuc2lnbmVkIGxvbmcgaSwgcGZuO1xuIFxuIFx0Zm9yIChwZm4gPSBzdGFydCwgaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgcGZuKyssIGkrKykge1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0XHR1bnNpZ25lZCBpbnQgbnIgPSAxO1xuK1x0XHR1bnNpZ25lZCBpbnQgbnI7XG4gXG4tXHRcdHNyY19wZm5zW2ldID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2socGZuKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tXHRcdGlmIChuciBcdTAwM2UgbnBhZ2VzIC0gaSkge1xuLVx0XHRcdGlmIChzcmNfcGZuc1tpXSBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xuLVx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0fVxuLVx0XHRcdG1lbXNldChcdTAwMjZzcmNfcGZuc1tpXSwgMCxcbi1cdFx0XHQgICAgICAgKG5wYWdlcyAtIGkpICogc2l6ZW9mKCpzcmNfcGZucykpO1xuK1x0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG4rXHRcdGlmICghbnIpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aWYgKG5yIFx1MDAzZSAxKSB7XG4tXHRcdFx0c3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XG4tXHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnI7IGorKylcbi1cdFx0XHRcdHNyY19wZm5zW2kral0gPSAwO1xuLVx0XHRcdGkgKz0gaiAtIDE7XG4tXHRcdFx0cGZuICs9IGogLSAxO1xuLVx0XHR9XG4rXHRcdGkgKz0gbnIgLSAxO1xuK1x0XHRwZm4gKz0gbnIgLSAxO1xuIFx0fVxuIFxuIFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XG5AQCAtMTQ1NCwzMyArMTQ3NCwyMSBAQCBFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTtcbiAgKlxuICAqIFNpbWlsYXIgdG8gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBidXQgc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgcHJlLXBvcHVsYXRlZFxuICAqIGFycmF5IG9mIGRldmljZSBwYWdlcyB0byBtaWdyYXRlLlxuKyAqXG4rICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIFBGTiBhcnJheS5cbiAgKi9cbiBpbnQgbWlncmF0ZV9kZXZpY2VfcGZucyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBpLCBqO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOyBpKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShzcmNfcGZuc1tpXSk7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0XHR1bnNpZ25lZCBpbnQgbnIgPSAxO1xuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHNyY19wZm5zW2ldO1xuK1x0XHR1bnNpZ25lZCBpbnQgbnI7XG4gXG4tXHRcdHNyY19wZm5zW2ldID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2soc3JjX3BmbnNbaV0pO1xuLVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi1cdFx0aWYgKG5yIFx1MDAzZSBucGFnZXMgLSBpKSB7XG4tXHRcdFx0aWYgKHNyY19wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7XG4tXHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHR9XG4tXHRcdFx0bWVtc2V0KFx1MDAyNnNyY19wZm5zW2ldLCAwLFxuLVx0XHRcdCAgICAgICAobnBhZ2VzIC0gaSkgKiBzaXplb2YoKnNyY19wZm5zKSk7XG4rXHRcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcbitcdFx0aWYgKCFucilcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpZiAobnIgXHUwMDNlIDEpIHtcbi1cdFx0XHRzcmNfcGZuc1tpXSB8PSBNSUdSQVRFX1BGTl9DT01QT1VORDtcbi1cdFx0XHRmb3IgKGogPSAxOyBqIFx1MDAzYyBucjsgaisrKVxuLVx0XHRcdFx0c3JjX3BmbnNbaStqXSA9IDA7XG4tXHRcdFx0aSArPSBqIC0gMTtcbi1cdFx0fVxuK1x0XHRpICs9IG5yIC0gMTtcbiBcdH1cbiBcbiBcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MjEuNTk0NjYyODk0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3OTAyMzI4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBbmFseXNpczogQSBRdWljayBMb29rIGF0IHRoZSBNaWdyYXRlIERldmljZSBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gZnV6emluZyBpcyBuZWNlc3NhcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjaGFuZ2VzIHdpdGhpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBwdWxsZWQgb3V0IGEgaGVscGVyIGZ1bmN0aW9uLCBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AsIGZyb20gYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZldyBxdWVzdGlvbnMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMuIFdoYXQncyB0aGUgY29udGV4dD8gSG93IGFyZSBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AsIGFuZCB0aGUgbmV3IGhlbHBlciwgYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gLCBpbnRlcmFjdGluZz8gQSBxdWljayByZWFkIG9mIGBtbS9taWdyYXRlX2RldmljZS5jYCBzaG91bGQgY2xhcmlmeSB0aGVpciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCwgY3JpdGljYWxseSwgaG93IHRoZXkgYXJlIGJlaW5nICp1c2VkKi4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBhcmVhIGlzIGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZGF0YSByYWNlcyBvciBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyB0aGF0IEtNU0FOIG1pZ2h0IGV4cG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ3OjI1LjM4NDg5OTcwMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NzUxOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfZGV2aWNlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9NTQyPXN0YXRpYyBib29sIG1pZ3JhdGVfdm1hX2NoZWNrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICpmYXVsdF9wYWdlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01NzAtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1NzE6c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01NzItXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NjcwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTY3MS17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2NzI6XFx0bWlncmF0ZS1cXHUwMDNlY3BhZ2VzID0gbWlncmF0ZV9kZXZpY2VfdW5tYXAobWlncmF0ZS1cXHUwMDNlc3JjLCBtaWdyYXRlLVxcdTAwM2VucGFnZXMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02NzMtXFx0XFx0XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlZmF1bHRfcGFnZSk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTk3Nj1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTExMDgtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTA5OnN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTEwLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTEzOC1cXHRcXHRcXHQgKiBUaGUgb25seSB0aW1lIHRoZXJlIGlzIG5vIHZtYSBpcyB3aGVuIGNhbGxlZCBmcm9tXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTM5OlxcdFxcdFxcdCAqIG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKCkuIEhvd2V2ZXIgdGhpcyBpc24ndFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTE0MC1cXHRcXHRcXHQgKiBjYWxsZWQgaWYgdGhlIHBhZ2UgY291bGQgbm90IGJlIHVubWFwcGVkLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjYyLS8qKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2MzogKiBtaWdyYXRlX2RldmljZV9wYWdlcygpIC0gbWlncmF0ZSBtZXRhLWRhdGEgZnJvbSBzcmMgcGFnZSB0byBkc3QgcGFnZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2NDogKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2NS0gKiBAZHN0X3BmbnM6IGFycmF5IG9mIHBmbnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIgdG8gbWlncmF0ZSBtZW1vcnkgdG9cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzE6dm9pZCBtaWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjcyLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3My17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjc0OlxcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3NS19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjc2OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGFnZXMpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3Ny1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTI4Nj12b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyODcte1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI4ODpcXHRfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKG1pZ3JhdGUtXFx1MDAzZXNyYywgbWlncmF0ZS1cXHUwMDNlZHN0LCBtaWdyYXRlLVxcdTAwM2VucGFnZXMsIG1pZ3JhdGUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI4OS19XFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjkwPUVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfcGFnZXMpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI5MS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyOTI6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9maW5hbGl6ZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyOTMtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDQtLypcXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNDU6ICogbWlncmF0ZV9kZXZpY2VfZmluYWxpemUoKSAtIGNvbXBsZXRlIHBhZ2UgbWlncmF0aW9uXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzQ2OiAqIEBzcmNfcGZuczogc3JjX3BmbnMgcmV0dXJuZWQgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzQ3LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzUzLSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1NDp2b2lkIG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1NS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTYte1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1NzpcXHRyZXR1cm4gX19taWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcywgTlVMTCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU4LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNTk6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9maW5hbGl6ZSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzYwLVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzcyPXZvaWQgbWlncmF0ZV92bWFfZmluYWxpemUoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3My17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzc0OlxcdF9fbWlncmF0ZV9kZXZpY2VfZmluYWxpemUobWlncmF0ZS1cXHUwMDNlc3JjLCBtaWdyYXRlLVxcdTAwM2Vkc3QsIG1pZ3JhdGUtXFx1MDAzZW5wYWdlcyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNzUtXFx0XFx0XFx0XFx0ICBtaWdyYXRlLVxcdTAwM2VmYXVsdF9wYWdlKTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3Nz1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX2ZpbmFsaXplKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNzgtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzc5OnN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4MC17XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDAtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDAxOnN0YXRpYyB1bnNpZ25lZCBpbnQgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyh1bnNpZ25lZCBsb25nICpzcmNfcGZuLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMi1cXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDctXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDA4OlxcdCpzcmNfcGZuID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2socGZuKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDktXFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MjgtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDI5OiAqIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MzAtICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDQtICogYWxsb2NhdGUgZGVzdGluYXRpb24gcGFnZXMgYW5kIHN0YXJ0IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gQ1BVXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDQ1OiAqIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBtaWdyYXRlX2RldmljZV9wYWdlcygpLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0Ni0gKlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDQ4LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ0OTppbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDUwLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDU2LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ1NzpcXHRcXHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ1OC1cXHRcXHRpZiAoIW5yKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYzLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2NDpcXHRtaWdyYXRlX2RldmljZV91bm1hcChzcmNfcGZucywgbnBhZ2VzLCBOVUxMKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjUtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjctfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjktXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDcwLS8qKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3MTogKiBtaWdyYXRlX2RldmljZV9wZm5zKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzItICogQHNyY19wZm5zOiBwcmUtcG9wdWxhdGVkIGFycmF5IG9mIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG1pZ3JhdGUuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzQtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzU6ICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc2LSAqIGFycmF5IG9mIGRldmljZSBwYWdlcyB0byBtaWdyYXRlLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc5LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4MDppbnQgbWlncmF0ZV9kZXZpY2VfcGZucyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgxLXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4Ny1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0ODg6XFx0XFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFxcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODktXFx0XFx0aWYgKCFucilcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5My1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0OTQ6XFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk1LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk3LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0OTg6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wZm5zKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTktXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MDQtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTA1OmludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNi17XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MTktXFx0ICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTIwOlxcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKFxcdTAwMjZzcmNfcGZuLCAxLCBOVUxMKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MjEtXFx0aWYgKCEoc3JjX3BmbiBcXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTI5LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUzMDpcXHRtaWdyYXRlX2RldmljZV9wYWdlcyhcXHUwMDI2c3JjX3BmbiwgXFx1MDAyNmRzdF9wZm4sIDEpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUzMS1cXHRpZiAoc3JjX3BmbiBcXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTMyLVxcdFxcdGZvbGlvX2NvcHkoZGZvbGlvLCBmb2xpbyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTMzOlxcdG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKFxcdTAwMjZzcmNfcGZuLCBcXHUwMDI2ZHN0X3BmbiwgMSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NzoyNS44Mzk2NjU5MzFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDczNDcxMTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ29kZSBNaWdyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgZ2V0IGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZGV2aWNlLXJlbGF0ZWQgbWVtb3J5LiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhlc2Ugc291bmQgbGlrZSB0aGUgY29yZSBjb21wb25lbnRzIG9mIG1vdmluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGRldmljZS5cblxuYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gIGxpa2VseSBoYW5kbGVzIGdhdGhlcmluZyBpbmZvcm1hdGlvbiBvciBwcmVwYXJpbmcgdGhlIG1lbW9yeSB1bml0cyBhdCB0aGUgZm9saW8gbGV2ZWwuIEZvbGlvcyBhcmUgdGhlIHByZWZlcnJlZCBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdHMsIGFuZCBnaXZlbiB0aGUgbmFtZSwgaXQgbWlnaHQgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBjb2xsZWN0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWdlcyB0byBiZSBtaWdyYXRlZC4gSSBiZXQgaXQgaXMgaGFuZGxpbmcgdGhpbmdzIGxpa2UgbG9ja2luZywgZXJyb3IgY2hlY2tpbmcsIGFuZCBtYWtpbmcgc3VyZSB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBwYWdlcyBhcmUgcmVhZHkuXG5cblRoZW4sIGBtaWdyYXRlX2RldmljZV9yYW5nZWAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gb3BlcmF0ZSBhdCBhIHJhbmdlIG9mIG1lbW9yeSBhZGRyZXNzZXMuIEl0IGxpa2VseSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBwYWdlcyBvciBzbWFsbGVyIGNodW5rcyBpZGVudGlmaWVkIGJ5IHRoZSBmb2xpbyBsZXZlbCwgb3JjaGVzdHJhdGluZyB0aGUgYWN0dWFsIGRhdGEgbW92ZW1lbnQgZm9yIGEgcGFydGljdWxhciByZWdpb24uIEnigJltIHRoaW5raW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBoYW5kbGluZyB0aGUgZGV0YWlscyBvZiB0aGUgRE1BIHRyYW5zZmVycyBvciB3aGF0ZXZlciBtZWNoYW5pc20gaXMgdXNlZCB0byBtb3ZlIGRhdGEgb24gdGhpcyBzcGVjaWZpYyBoYXJkd2FyZS4gSXQncyBwcm9iYWJseSB0aGUgbW9zdCBkZXZpY2Utc3BlY2lmaWMgcGFydCBvZiB0aGUgcHJvY2Vzcy4gSSB3b25kZXIgaWYgaXTigJlzIGRlc2lnbmVkIHRvIGJlIGFzeW5jaHJvbm91cywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBkZXZpY2Ugb3BlcmF0aW9ucy5cblxuRmluYWxseSwgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLiBOb3csICdQRk4nIHVzdWFsbHkgcmVmZXJzIHRvIFBoeXNpY2FsIEZyYW1lIE51bWJlci4gU28sIHRoaXMgc291bmRzIGxpa2UgdGhlIGxvd2VzdC1sZXZlbCBmdW5jdGlvbiwgZGVhbGluZyBkaXJlY3RseSB3aXRoIGluZGl2aWR1YWwgcGh5c2ljYWwgcGFnZXMuIFRoaXMgaXMgcHJvYmFibHkgdGhlIGxhc3Qgc3RlcDogdHJhbnNmb3JtaW5nIHRoZSBpZGVudGlmaWVkIHBhZ2VzIGFuZCBhY3R1YWxseSB1cGRhdGluZyB0aGVpciBlbnRyaWVzLiBNaWdodCBiZSBjaGVja2luZyBpZiB0aGUgcGFnZXMgYXJlIGNsZWFuLCBkaXJ0eSwgb3Igc2hhcmVkLiBJdOKAmXMgdGhlIHBvaW50IHdoZXJlIHRoZSBkZXZpY2UgbWVtb3J5IGlzIHBoeXNpY2FsbHkgbWFwcGVkIHRvIHRoZSBuZXcgbG9jYXRpb24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHlwZSBvZiBtaWdyYXRpb24gaXQgZG9lcyB0byBkZXRlcm1pbmUgaXRzIG92ZXJoZWFkOiBob3QgbWlncmF0aW9uLCBjb2xkIG1pZ3JhdGlvbiwgZXRjLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBJcyBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AgY2FsbGVkIGZpcnN0LCBzZXR0aW5nIHRoZSBzdGFnZSwgdGhlbiBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIG1hbmFnZXMgdGhlIGJsb2NrcywgYW5kIGZpbmFsbHksIGBtaWdyYXRlX2RldmljZV9wZm5zYCBoYW5kbGVzIHRoZSBpbmRpdmlkdWFsIHBhZ2UgdHJhbnNmZXJzPyBPciBpcyB0aGUgb3JnYW5pemF0aW9uIHNsaWdodGx5IGRpZmZlcmVudD8gSXQncyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBleGVjdXRpb24gYW5kIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGNvbXBsZXhpdGllcyBvZiBkZXZpY2UgbWVtb3J5IGR1cmluZyB0aGUgbWlncmF0aW9uLiBOb3cgbGV0J3MgZXhhbWluZSB0aGUgY2FsbGluZyBzdHJ1Y3R1cmUgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDE5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MzAuNTc0MzgwNzcyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTAsXG4gIFwiTGluZUNvdW50XCI6IDExNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzkwOlxcdFxcdH1cXG4xMzkxOlxcdFxcbjEzOTI6XFx0XFx0cmV0dXJuIG1pZ3JhdGVfcGZuKHBmbikgfCBNSUdSQVRFX1BGTl9NSUdSQVRFO1xcbjEzOTM6XFx0fVxcbjEzOTQ6XFx0XFxuMTM5NTpcXHQvKlxcbjEzOTY6XFx0ICogQ29sbGVjdCBhIGRldmljZSBmb2xpbyBpbnRvIHRoZSBwYWdlLWdyYW51bGFyIFBGTiBhcnJheS5cXG4xMzk3OlxcdCAqXFxuMTM5ODpcXHQgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGNvbnN1bWVkLCBvciAwIGlmIHRoZSBmb2xpbyBkb2VzIG5vdCBmaXQgaW5cXG4xMzk5OlxcdCAqIHRoZSByZW1haW5pbmcgYXJyYXkuXFxuMTQwMDpcXHQgKi9cXG4xNDAxOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyh1bnNpZ25lZCBsb25nICpzcmNfcGZuLFxcbjE0MDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgcGZuLFxcbjE0MDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKVxcbjE0MDQ6XFx0e1xcbjE0MDU6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGZuX3RvX3BhZ2UocGZuKSk7XFxuMTQwNjpcXHRcXHR1bnNpZ25lZCBpbnQgbnI7XFxuMTQwNzpcXHRcXG4xNDA4OlxcdFxcdCpzcmNfcGZuID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2socGZuKTtcXG4xNDA5OlxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjE0MTA6XFx0XFxuMTQxMTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG5yIFxcdTAwM2UgcmVtYWluaW5nKSkge1xcbjE0MTI6XFx0XFx0XFx0aWYgKCpzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xcbjE0MTM6XFx0XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4xNDE0OlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMTQxNTpcXHRcXHRcXHR9XFxuMTQxNjpcXHRcXHRcXHRtZW1zZXQoc3JjX3BmbiwgMCwgcmVtYWluaW5nICogc2l6ZW9mKCpzcmNfcGZuKSk7XFxuMTQxNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNDE4OlxcdFxcdH1cXG4xNDE5OlxcdFxcbjE0MjA6XFx0XFx0aWYgKG5yIFxcdTAwM2UgMSkge1xcbjE0MjE6XFx0XFx0XFx0KnNyY19wZm4gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XFxuMTQyMjpcXHRcXHRcXHRtZW1zZXQoc3JjX3BmbiArIDEsIDAsIChuciAtIDEpICogc2l6ZW9mKCpzcmNfcGZuKSk7XFxuMTQyMzpcXHRcXHR9XFxuMTQyNDpcXHRcXG4xNDI1OlxcdFxcdHJldHVybiBucjtcXG4xNDI2OlxcdH1cXG4xNDI3OlxcdFxcbjE0Mjg6XFx0LyoqXFxuMTQyOTpcXHQgKiBtaWdyYXRlX2RldmljZV9yYW5nZSgpIC0gbWlncmF0ZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG5vcm1hbCBtZW1vcnkuXFxuMTQzMDpcXHQgKiBAc3JjX3BmbnM6IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIG1pZ3JhdGluZyBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucy5cXG4xNDMxOlxcdCAqIEBzdGFydDogc3RhcnRpbmcgcGZuIGluIHRoZSByYW5nZSB0byBtaWdyYXRlLlxcbjE0MzI6XFx0ICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIG1pZ3JhdGUuXFxuMTQzMzpcXHQgKlxcbjE0MzQ6XFx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxcbjE0MzU6XFx0ICogaW5zdGVhZCBvZiBsb29raW5nIHVwIHBhZ2VzIGJhc2VkIG9uIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBhIHJhbmdlIG9mXFxuMTQzNjpcXHQgKiBkZXZpY2UgcGZucyB0aGF0IHNob3VsZCBiZSBtaWdyYXRlZCB0byBzeXN0ZW0gbWVtb3J5IGlzIHVzZWQgaW5zdGVhZC5cXG4xNDM3OlxcdCAqXFxuMTQzODpcXHQgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgZHJpdmVyIG5lZWRzIHRvIGZyZWUgZGV2aWNlIG1lbW9yeSBidXQgZG9lc24ndCBrbm93IHRoZVxcbjE0Mzk6XFx0ICogdmlydHVhbCBtYXBwaW5ncyBvZiBldmVyeSBwYWdlIHRoYXQgbWF5IGJlIGluIGRldmljZSBtZW1vcnkuIEZvciBleGFtcGxlIHRoaXNcXG4xNDQwOlxcdCAqIGlzIG9mdGVuIHRoZSBjYXNlIHdoZW4gYSBkcml2ZXIgaXMgYmVpbmcgdW5sb2FkZWQgb3IgdW5ib3VuZCBmcm9tIGEgZGV2aWNlLlxcbjE0NDE6XFx0ICpcXG4xNDQyOlxcdCAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcXG4xNDQzOlxcdCAqIG1pZ3JhdGluZyBwYWdlcyB0aGF0IGFyZW4ndCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxcbjE0NDQ6XFx0ICogYWxsb2NhdGUgZGVzdGluYXRpb24gcGFnZXMgYW5kIHN0YXJ0IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gQ1BVXFxuMTQ0NTpcXHQgKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cXG4xNDQ2OlxcdCAqXFxuMTQ0NzpcXHQgKiBBIGNvbXBvdW5kIGZvbGlvIG11c3QgZml0IGVudGlyZWx5IGluIHRoZSByZW1haW5pbmcgcmFuZ2UuXFxuMTQ0ODpcXHQgKi9cXG4xNDQ5OlxcdGludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4xNDUwOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbjE0NTE6XFx0e1xcbjE0NTI6XFx0XFx0dW5zaWduZWQgbG9uZyBpLCBwZm47XFxuMTQ1MzpcXHRcXG4xNDU0OlxcdFxcdGZvciAocGZuID0gc3RhcnQsIGkgPSAwOyBpIFxcdTAwM2MgbnBhZ2VzOyBwZm4rKywgaSsrKSB7XFxuMTQ1NTpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbnI7XFxuMTQ1NjpcXHRcXG4xNDU3OlxcdFxcdFxcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XFxuMTQ1ODpcXHRcXHRcXHRpZiAoIW5yKVxcbjE0NTk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQ2MDpcXHRcXHRcXHRpICs9IG5yIC0gMTtcXG4xNDYxOlxcdFxcdFxcdHBmbiArPSBuciAtIDE7XFxuMTQ2MjpcXHRcXHR9XFxuMTQ2MzpcXHRcXG4xNDY0OlxcdFxcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xcbjE0NjU6XFx0XFxuMTQ2NjpcXHRcXHRyZXR1cm4gMDtcXG4xNDY3OlxcdH1cXG4xNDY4OlxcdEVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcmFuZ2UpO1xcbjE0Njk6XFx0XFxuMTQ3MDpcXHQvKipcXG4xNDcxOlxcdCAqIG1pZ3JhdGVfZGV2aWNlX3BmbnMoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LlxcbjE0NzI6XFx0ICogQHNyY19wZm5zOiBwcmUtcG9wdWxhdGVkIGFycmF5IG9mIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG1pZ3JhdGUuXFxuMTQ3MzpcXHQgKiBAbnBhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gbWlncmF0ZS5cXG4xNDc0OlxcdCAqXFxuMTQ3NTpcXHQgKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWRcXG4xNDc2OlxcdCAqIGFycmF5IG9mIGRldmljZSBwYWdlcyB0byBtaWdyYXRlLlxcbjE0Nzc6XFx0ICpcXG4xNDc4OlxcdCAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyBQRk4gYXJyYXkuXFxuMTQ3OTpcXHQgKi9cXG4xNDgwOlxcdGludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4xNDgxOlxcdHtcXG4xNDgyOlxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4xNDgzOlxcdFxcbjE0ODQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wYWdlczsgaSsrKSB7XFxuMTQ4NTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiA9IHNyY19wZm5zW2ldO1xcbjE0ODY6XFx0XFx0XFx0dW5zaWduZWQgaW50IG5yO1xcbjE0ODc6XFx0XFxuMTQ4ODpcXHRcXHRcXHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xcbjE0ODk6XFx0XFx0XFx0aWYgKCFucilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MzAuNTc0NTQwODIyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTU0NzI0NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIHRoZSBEZXZpY2UgUGFnZSBNaWdyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcmVmYWN0b3JpbmcgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIGVuc3VyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgaGF2ZSBiZWVuIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cblxuSW5pdGlhbGx5LCBJIHNlZSB0aGUgcmVmYWN0b3JpbmcgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBwYWdlIG1pZ3JhdGlvbiByb3V0aW5lcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuICBUaGUgb3JpZ2luYWwgY29kZSwgd2hpbGUgZnVuY3Rpb25hbCwgY29udGFpbmVkIGR1cGxpY2F0ZWQgbG9naWMgZm9yIGNvbGxlY3RpbmcgYW5kIGxvY2tpbmcgcGFnZSBmcmFtZSBudW1iZXJzIChQRk5zKS4gVGhlIHBhdGNoIGNsZWFybHkgZXh0cmFjdHMgdGhpcyBjb21tb25hbGl0eSBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpYC4gU21hcnQgbW92ZSDigJMgZ29vZCBmb3IgbWFpbnRhaW5hYmlsaXR5LlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGludm9sdmVzIHRoaXMgbmV3IGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgIGZ1bmN0aW9uLCB3aGljaCBub3cgaGFuZGxlcyB0aGUgbG9ja2luZywgdGhlIGNvbXBvdW5kIHBhZ2UgZGV0ZWN0aW9uLCBhbmQgdGhlIHplcm9pbmcgb2Ygc3Vic2VxdWVudCBQRk4gZW50cmllcyBpZiBhIGNvbXBvdW5kIGZvbGlvIGlzIGZvdW5kLiBUaGUgb3JpZ2luYWwgbG9vcHMgd2l0aGluIHRoZSB0d28gbWFpbiBmdW5jdGlvbnMgYXJlIHN0cmVhbWxpbmVkIHRvIGNhbGwgdGhpcyBuZXcgdXRpbGl0eSBmdW5jdGlvbiwgcGFzc2luZyB0aGUgcmVsZXZhbnQgUEZOIGFuZCByZW1haW5pbmcgcGFnZSBjb3VudC4gVGhlIHVzZSBvZiBgbWVtc2V0YCBpcyBkZWZpbml0ZWx5IG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9yaWdpbmFsIGxvb3AgdG8gemVybyB0aGUgdHJhaWxpbmcgUEZOcyBvZiBhIGNvbXBvdW5kIHBhZ2UuXG5cblRoZSBleHRyYWN0aW9uIGlzIGNsZWFuIGFuZCB0aGUgcGFyYW1ldGVyIHBhc3NpbmcgbG9va3Mgc291bmQuIE5vdywgdGltZSBmb3IgYSByaWdvcm91cyBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5J4oCZbSBtZXRpY3Vsb3VzbHkgc2Nhbm5pbmcgdGhlIGNvZGUsIGNvbnNpZGVyaW5nIHRoZSBjcml0ZXJpYSBJJ20gd2VsbCBmYW1pbGlhciB3aXRoLiBGaXJzdCwgSSBoYXZlIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbi4gTm9wZSwgdGhlIGNoYW5nZXMgc29sZWx5IGZvY3VzIG9uIGtlcm5lbC1zcGFjZSBhcnJheXMgKGBzcmNfcGZuc2ApIGludm9sdmVkIGluIGRldmljZSBtaWdyYXRpb24sIG5vdCB1c2VyLWFjY2Vzc2libGUgbWVtb3J5LlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIG5vdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMuIEkgc2VlIGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2Ug4oCTIGBucmAsIGBwZm5gLCBgaWAgYXJlIGFsbCBwcm9wZXJseSBpbml0aWFsaXplZC4gR29vZC5cblxuQm91bmRzIGNoZWNraW5nIGlzIGFsc28gY3J1Y2lhbC4gVGhlIGBXQVJOX09OX09OQ0VgIGluIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgIGxvb2tzIGxpa2UgdGhlIGtleS4gSXQncyBwcm9wZXJseSBwcmVzZXJ2aW5nIHRoZSBib3VuZHMgY2hlY2sgKGBuciBcdTAwM2UgcmVtYWluaW5nYCkuIElmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgdGhlcmUgaXMgYSBgbWVtc2V0YCBvbiB0aGUgcmVtYWluaW5nIGVudHJpZXMgdG8gemVybyB0aGVtLiBJZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCB0aGVuIHRoZSBmdW5jdGlvbiB6ZXJvZXMgdGhlIHRyYWlsaW5nIGVudHJpZXMuIFRoZSBjb2RlIGlzIGNhcmVmdWxseSBjaGVja2luZyBpZiBjb21wb3VuZCBmb2xpb3Mgc3BhbiBtdWx0aXBsZSBhcnJheSBlbnRyaWVzIHRvIGhhbmRsZSB0aGVtIGNvcnJlY3RseS5cblxuVGhlIGBtaWdyYXRlX2RldmljZV9wZm5zYCBmdW5jdGlvbiBpcyBhbHNvIHNhZmUuIGBwZm5gIGlzIHJlYWQgYmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGFzIHRoZSBhcmd1bWVudC4gVGhlIGluZGV4aW5nIGxvb2tzIGNvcnJlY3QgYW5kIHNob3VsZCBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMuIE5vIGluZm8gbGVha3MsIGNvbXBsZXggc3RydWN0IGFsbG9jYXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBzbyB0aGUgcmlzayBpcyBsb3cuXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyBpbnRlcm5hbCBrZXJuZWwgcmVmYWN0b3Jpbmcgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgdGhlIHBvdGVudGlhbCBidWdzIHdpbGwgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGluZGV4IGNhbGN1bGF0aW9ucywgYXJyYXkgb3V0LW9mLWJvdW5kcywgb3IgbG9ja2luZyBpc3N1ZXMgKGFsbCB0aGUgdXN1YWwgc3VzcGVjdHMpLCBhbmQgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBLQVNBTi9MT0NLREVQIHdpbGwgY2F0Y2ggdGhvc2UuXG5cbk9rYXksIGxldCdzIGNvbmZpcm0gdGhlIEtNU0FOIGFzc2Vzc21lbnQuXG5cbjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2Vyc3BhY2UsIHNvIG5vIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQgYXJlIGF0IHBsYXkuXG4yLiAgTm8gY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuXG40LiAgTm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy5cblxuSeKAmW0gY29uZmlkZW50IHRoZSByZWZhY3RvcmluZyBpcyBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuIEknbSByZWFkeSB0byBtYXJrIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyMSwiT3V0cHV0VG9rZW5zIjoxODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6NDIuNzI5MjY4MDgyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgYnkgZmFjdG9yaW5nIG91dCBkdXBsaWNhdGVkIGNvZGUgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCkuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAobnIsIHBmbiwgaSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBkZXN0aW5hdGlvbiBQRk4gYXJyYXkgZW50cmllcyBhcmUgZXhwbGljaXRseSB3cml0dGVuIG9yIHplcm9lZCB2aWEgbWVtc2V0KCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgaW5mby1sZWFrcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb24gKGUuZy4sIGFycmF5IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgb3IgZm9saW8gbG9ja2luZy9yZWZjb3VudGluZyBpc3N1ZXMpIGZhbGxzIHNxdWFyZWx5IHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGJ5IGZhY3RvcmluZyBvdXQgZHVwbGljYXRlZCBjb2RlIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpLlxcblxcbkFsbCBsb2NhbCB2YXJpYWJsZXMgKG5yLCBwZm4sIGkpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgZGVzdGluYXRpb24gUEZOIGFycmF5IGVudHJpZXMgYXJlIGV4cGxpY2l0bHkgd3JpdHRlbiBvciB6ZXJvZWQgdmlhIG1lbXNldCgpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9uIChlLmcuLCBhcnJheSBvdXQtb2YtYm91bmRzIGluZGV4aW5nIG9yIGZvbGlvIGxvY2tpbmcvcmVmY291bnRpbmcgaXNzdWVzKSBmYWxscyBzcXVhcmVseSB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwth57[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 06:30:32 +0000 UTC FinishedAt: 2026-09-11 06:47:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7aba99722271e184e2aae7fa71206dc8367c56c0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "7aba99722271e184e2aae7fa71206dc8367c56c0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM" ], "series_id": "ef1c6799-8ce4-4d76-b466-414fb4c83f68" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_device_collect_folio", "migrate_device_range", "migrate_device_pfns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2RldmljZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2RldmljZV9wZm5zJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGJ5IGZhY3RvcmluZyBvdXQgZHVwbGljYXRlZCBjb2RlIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIChuciwgcGZuLCBpKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGRlc3RpbmF0aW9uIFBGTiBhcnJheSBlbnRyaWVzIGFyZSBleHBsaWNpdGx5IHdyaXR0ZW4gb3IgemVyb2VkIHZpYSBtZW1zZXQoKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbiAoZS5nLiwgYXJyYXkgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBvciBmb2xpbyBsb2NraW5nL3JlZmNvdW50aW5nIGlzc3VlcykgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlYTMzOTY3NDI0NTRiZWZiYTJkZDhkZWFmNjIwZWY1NDU5ZTNiMTE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDY6NDY6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbmluZGV4IDAwOWJmYThiMjEyZDUuLmM1N2VhZGVhNjU2NTEgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlX2RldmljZS5jXG5AQCAtMTM5Miw2ICYjNDM7MTM5MiwzOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcbiBcdHJldHVybiBtaWdyYXRlX3BmbihwZm4pIHwgTUlHUkFURV9QRk5fTUlHUkFURTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIENvbGxlY3QgYSBkZXZpY2UgZm9saW8gaW50byB0aGUgcGFnZS1ncmFudWxhciBQRk4gYXJyYXkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY29uc3VtZWQsIG9yIDAgaWYgdGhlIGZvbGlvIGRvZXMgbm90IGZpdCBpblxuJiM0MzsgKiB0aGUgcmVtYWluaW5nIGFycmF5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXG4mIzQzO1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHBmbixcbiYjNDM7XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGZuX3RvX3BhZ2UocGZuKSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yO1xuJiM0MztcbiYjNDM7XHQqc3JjX3BmbiA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7XG4mIzQzO1x0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UobnIgXHUwMDNlIHJlbWFpbmluZykpIHtcbiYjNDM7XHRcdGlmICgqc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xuJiM0MztcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bWVtc2V0KHNyY19wZm4sIDAsIHJlbWFpbmluZyAqIHNpemVvZigqc3JjX3BmbikpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnIgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdCpzcmNfcGZuIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuJiM0MztcdFx0bWVtc2V0KHNyY19wZm4gJiM0MzsgMSwgMCwgKG5yIC0gMSkgKiBzaXplb2YoKnNyY19wZm4pKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBucjtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBtaWdyYXRlX2RldmljZV9yYW5nZSgpIC0gbWlncmF0ZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG5vcm1hbCBtZW1vcnkuXG4gICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuXG5AQCAtMTQxMCwzNSAmIzQzOzE0NDMsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4gICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbiYjMzk7dCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxuICAqIGFsbG9jYXRlIGRlc3RpbmF0aW9uIHBhZ2VzIGFuZCBzdGFydCBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlIHRvIENQVVxuICAqIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBtaWdyYXRlX2RldmljZV9wYWdlcygpLlxuJiM0MzsgKlxuJiM0MzsgKiBBIGNvbXBvdW5kIGZvbGlvIG11c3QgZml0IGVudGlyZWx5IGluIHRoZSByZW1haW5pbmcgcmFuZ2UuXG4gICovXG4gaW50IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgaSwgaiwgcGZuO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaSwgcGZuO1xuIFxuIFx0Zm9yIChwZm4gPSBzdGFydCwgaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgcGZuJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdFx0dW5zaWduZWQgaW50IG5yID0gMTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBucjtcbiBcbi1cdFx0c3JjX3BmbnNbaV0gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pO1xuLVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi1cdFx0aWYgKG5yIFx1MDAzZSBucGFnZXMgLSBpKSB7XG4tXHRcdFx0aWYgKHNyY19wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7XG4tXHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHR9XG4tXHRcdFx0bWVtc2V0KFx1MDAyNnNyY19wZm5zW2ldLCAwLFxuLVx0XHRcdCAgICAgICAobnBhZ2VzIC0gaSkgKiBzaXplb2YoKnNyY19wZm5zKSk7XG4mIzQzO1x0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG4mIzQzO1x0XHRpZiAoIW5yKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGlmIChuciBcdTAwM2UgMSkge1xuLVx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRcdHNyY19wZm5zW2kmIzQzO2pdID0gMDtcbi1cdFx0XHRpICYjNDM7PSBqIC0gMTtcbi1cdFx0XHRwZm4gJiM0Mzs9IGogLSAxO1xuLVx0XHR9XG4mIzQzO1x0XHRpICYjNDM7PSBuciAtIDE7XG4mIzQzO1x0XHRwZm4gJiM0Mzs9IG5yIC0gMTtcbiBcdH1cbiBcbiBcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xuQEAgLTE0NTQsMzMgJiM0MzsxNDc0LDIxIEBAIEVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcmFuZ2UpO1xuICAqXG4gICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkXG4gICogYXJyYXkgb2YgZGV2aWNlIHBhZ2VzIHRvIG1pZ3JhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyBQRk4gYXJyYXkuXG4gICovXG4gaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgaSwgajtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2Uoc3JjX3BmbnNbaV0pO1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdFx0dW5zaWduZWQgaW50IG5yID0gMTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuID0gc3JjX3BmbnNbaV07XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgbnI7XG4gXG4tXHRcdHNyY19wZm5zW2ldID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2soc3JjX3BmbnNbaV0pO1xuLVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi1cdFx0aWYgKG5yIFx1MDAzZSBucGFnZXMgLSBpKSB7XG4tXHRcdFx0aWYgKHNyY19wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7XG4tXHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHR9XG4tXHRcdFx0bWVtc2V0KFx1MDAyNnNyY19wZm5zW2ldLCAwLFxuLVx0XHRcdCAgICAgICAobnBhZ2VzIC0gaSkgKiBzaXplb2YoKnNyY19wZm5zKSk7XG4mIzQzO1x0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG4mIzQzO1x0XHRpZiAoIW5yKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGlmIChuciBcdTAwM2UgMSkge1xuLVx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqJiM0MzsmIzQzOylcbi1cdFx0XHRcdHNyY19wZm5zW2kmIzQzO2pdID0gMDtcbi1cdFx0XHRpICYjNDM7PSBqIC0gMTtcbi1cdFx0fVxuJiM0MztcdFx0aSAmIzQzOz0gbnIgLSAxO1xuIFx0fVxuIFxuIFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7VEVTVF9ITU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3JhbmdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BmbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYTMzOTY3NDI0NTRiZWZiYTJkZDhkZWFmNjIwZWY1NDU5ZTNiMTE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDY6NDY6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuYwppbmRleCAwMDliZmE4YjIxMmQ1Li5jNTdlYWRlYTY1NjUxIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTEzOTIsNiAmIzQzOzEzOTIsMzkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pCiAJcmV0dXJuIG1pZ3JhdGVfcGZuKHBmbikgfCBNSUdSQVRFX1BGTl9NSUdSQVRFOwogfQogCiYjNDM7LyoKJiM0MzsgKiBDb2xsZWN0IGEgZGV2aWNlIGZvbGlvIGludG8gdGhlIHBhZ2UtZ3JhbnVsYXIgUEZOIGFycmF5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBjb25zdW1lZCwgb3IgMCBpZiB0aGUgZm9saW8gZG9lcyBub3QgZml0IGluCiYjNDM7ICogdGhlIHJlbWFpbmluZyBhcnJheS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3BmbiwKJiM0MzsJCQkJCQkgdW5zaWduZWQgbG9uZyBwZm4sCiYjNDM7CQkJCQkJIHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGZuX3RvX3BhZ2UocGZuKSk7CiYjNDM7CXVuc2lnbmVkIGludCBucjsKJiM0MzsKJiM0MzsJKnNyY19wZm4gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pOwomIzQzOwluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShuciAmZ3Q7IHJlbWFpbmluZykpIHsKJiM0MzsJCWlmICgqc3JjX3BmbiAmYW1wOyBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7CiYjNDM7CQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJfQomIzQzOwkJbWVtc2V0KHNyY19wZm4sIDAsIHJlbWFpbmluZyAqIHNpemVvZigqc3JjX3BmbikpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG5yICZndDsgMSkgewomIzQzOwkJKnNyY19wZm4gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7CiYjNDM7CQltZW1zZXQoc3JjX3BmbiAmIzQzOyAxLCAwLCAobnIgLSAxKSAqIHNpemVvZigqc3JjX3BmbikpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBucjsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS4KICAqIEBzcmNfcGZuczogYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgbWlncmF0aW5nIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zLgpAQCAtMTQxMCwzNSAmIzQzOzE0NDMsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pCiAgKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJiMzOTt0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuCiAgKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFUKICAqIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBtaWdyYXRlX2RldmljZV9wYWdlcygpLgomIzQzOyAqCiYjNDM7ICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIHJhbmdlLgogICovCiBpbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQl1bnNpZ25lZCBsb25nIG5wYWdlcykKIHsKLQl1bnNpZ25lZCBsb25nIGksIGosIHBmbjsKJiM0MzsJdW5zaWduZWQgbG9uZyBpLCBwZm47CiAKIAlmb3IgKHBmbiA9IHN0YXJ0LCBpID0gMDsgaSAmbHQ7IG5wYWdlczsgcGZuJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKLQkJdW5zaWduZWQgaW50IG5yID0gMTsKJiM0MzsJCXVuc2lnbmVkIGludCBucjsKIAotCQlzcmNfcGZuc1tpXSA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7Ci0JCW5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwotCQlpZiAobnIgJmd0OyBucGFnZXMgLSBpKSB7Ci0JCQlpZiAoc3JjX3BmbnNbaV0gJmFtcDsgTUlHUkFURV9QRk5fTUlHUkFURSkgewotCQkJCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCX0KLQkJCW1lbXNldCgmYW1wO3NyY19wZm5zW2ldLCAwLAotCQkJICAgICAgIChucGFnZXMgLSBpKSAqIHNpemVvZigqc3JjX3BmbnMpKTsKJiM0MzsJCW5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygmYW1wO3NyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpOwomIzQzOwkJaWYgKCFucikKIAkJCWJyZWFrOwotCQl9Ci0JCWlmIChuciAmZ3Q7IDEpIHsKLQkJCXNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EOwotCQkJZm9yIChqID0gMTsgaiAmbHQ7IG5yOyBqJiM0MzsmIzQzOykKLQkJCQlzcmNfcGZuc1tpJiM0MztqXSA9IDA7Ci0JCQlpICYjNDM7PSBqIC0gMTsKLQkJCXBmbiAmIzQzOz0gaiAtIDE7Ci0JCX0KJiM0MzsJCWkgJiM0Mzs9IG5yIC0gMTsKJiM0MzsJCXBmbiAmIzQzOz0gbnIgLSAxOwogCX0KIAogCW1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpOwpAQCAtMTQ1NCwzMyAmIzQzOzE0NzQsMjEgQEAgRVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9yYW5nZSk7CiAgKgogICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkCiAgKiBhcnJheSBvZiBkZXZpY2UgcGFnZXMgdG8gbWlncmF0ZS4KJiM0MzsgKgomIzQzOyAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyBQRk4gYXJyYXkuCiAgKi8KIGludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcykKIHsKLQl1bnNpZ25lZCBsb25nIGksIGo7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBucGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2Uoc3JjX3BmbnNbaV0pOwotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKLQkJdW5zaWduZWQgaW50IG5yID0gMTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuID0gc3JjX3BmbnNbaV07CiYjNDM7CQl1bnNpZ25lZCBpbnQgbnI7CiAKLQkJc3JjX3BmbnNbaV0gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhzcmNfcGZuc1tpXSk7Ci0JCW5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwotCQlpZiAobnIgJmd0OyBucGFnZXMgLSBpKSB7Ci0JCQlpZiAoc3JjX3BmbnNbaV0gJmFtcDsgTUlHUkFURV9QRk5fTUlHUkFURSkgewotCQkJCWZvbGlvX3VubG9jayhmb2xpbyk7Ci0JCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCX0KLQkJCW1lbXNldCgmYW1wO3NyY19wZm5zW2ldLCAwLAotCQkJICAgICAgIChucGFnZXMgLSBpKSAqIHNpemVvZigqc3JjX3BmbnMpKTsKJiM0MzsJCW5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygmYW1wO3NyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpOwomIzQzOwkJaWYgKCFucikKIAkJCWJyZWFrOwotCQl9Ci0JCWlmIChuciAmZ3Q7IDEpIHsKLQkJCXNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EOwotCQkJZm9yIChqID0gMTsgaiAmbHQ7IG5yOyBqJiM0MzsmIzQzOykKLQkJCQlzcmNfcGZuc1tpJiM0MztqXSA9IDA7Ci0JCQlpICYjNDM7PSBqIC0gMTsKLQkJfQomIzQzOwkJaSAmIzQzOz0gbnIgLSAxOwogCX0KIAogCW1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjExCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9saW8gQ29sbGVjdGlvbiBSZWZhY3RvcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBleGlzdGluZyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgZnVuY3Rpb25zLiBUaGlzIHR5cGUgb2YgbW9kdWxhcml6YXRpb24gaXMgZ2VuZXJhbGx5IGEgZ29vZCBzaWduIOKAkyBjbGVhbmVyIGNvZGUsIHBvdGVudGlhbGx5IGVhc2llciBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLCBob3BlZnVsbHkgbGVhZGluZyB0byBmZXdlciBlcnJvcnMuIEkgc2VlIGEgbmV3IGBXQVJOX09OX09OQ0VgIGluIHRoZSBoZWxwZXIuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbiByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YgZm9saW9zIGJlaW5nIGNvbGxlY3RlZC4gSXQgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24uCgpOb3csIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2FsbGVycyBleGlzdCBmb3IgdGhpcyBuZXcgZnVuY3Rpb24sIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBlbmFibGUgdGhpcyBjb2RlIHBhdGgsIGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBjb2RlIGFyZWEgdGhhdCYjMzk7cyByZWFjaGFibGUgZW5vdWdoIHRvIGJlIHdvcnRoIGZ1cnRoZXIgZnV6emluZyBvciBtb3JlIGluLWRlcHRoIHRlc3RpbmcuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgZWZmaWNpZW50bHkgaXMgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYW5kIGFsc28gcXVpY2tseSBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgdG8gaWRlbnRpZnkgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVW5kZXJzdGFuZGluZyByZWFjaGFiaWxpdHkgYW5kIGRlcGVuZGVuY2llcyBpcyBrZXkgaGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9kZXZpY2VfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2d1cC5jPTIzMTY9bWlncmF0ZV9sb25ndGVybV91bnBpbm5hYmxlX2ZvbGlvcyhzdHJ1Y3QgbGlzdF9oZWFkICptb3ZhYmxlX2ZvbGlvX2xpc3QsXG4tLVxubW0vZ3VwLmMtMjMzNC1cbm1tL2d1cC5jOjIzMzU6XHRcdFx0aWYgKG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKGZvbGlvKSkge1xubW0vZ3VwLmMtMjMzNi1cdFx0XHRcdHJldCA9IC1FQlVTWTtcbi0tXG5tbS9pbnRlcm5hbC5oPTEyNjM9dm9pZCBmcmVlX3pvbmVfZGV2aWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaW50ZXJuYWwuaDoxMjY0OmludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2ludGVybmFsLmgtMTI2NS1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTU0Mj1zdGF0aWMgYm9vbCBtaWdyYXRlX3ZtYV9jaGVja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGFnZSAqZmF1bHRfcGFnZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTU3MC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTcxOnN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3VubWFwKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxubW0vbWlncmF0ZV9kZXZpY2UuYy01NzItXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucGFnZXMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz02NzA9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxubW0vbWlncmF0ZV9kZXZpY2UuYy02NzEte1xubW0vbWlncmF0ZV9kZXZpY2UuYzo2NzI6XHRtaWdyYXRlLVx1MDAzZWNwYWdlcyA9IG1pZ3JhdGVfZGV2aWNlX3VubWFwKG1pZ3JhdGUtXHUwMDNlc3JjLCBtaWdyYXRlLVx1MDAzZW5wYWdlcyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjczLVx0XHRcdFx0XHRtaWdyYXRlLVx1MDAzZWZhdWx0X3BhZ2UpO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTc2PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTExMDgtXG5tbS9taWdyYXRlX2RldmljZS5jOjExMDk6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTExMC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTExMzgtXHRcdFx0ICogVGhlIG9ubHkgdGltZSB0aGVyZSBpcyBubyB2bWEgaXMgd2hlbiBjYWxsZWQgZnJvbVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTM5Olx0XHRcdCAqIG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKCkuIEhvd2V2ZXIgdGhpcyBpc24mIzM5O3Rcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTE0MC1cdFx0XHQgKiBjYWxsZWQgaWYgdGhlIHBhZ2UgY291bGQgbm90IGJlIHVubWFwcGVkLlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2Mi0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2MzogKiBtaWdyYXRlX2RldmljZV9wYWdlcygpIC0gbWlncmF0ZSBtZXRhLWRhdGEgZnJvbSBzcmMgcGFnZSB0byBkc3QgcGFnZVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjY0OiAqIEBzcmNfcGZuczogc3JjX3BmbnMgcmV0dXJuZWQgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjUtICogQGRzdF9wZm5zOiBhcnJheSBvZiBwZm5zIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIHRvIG1pZ3JhdGUgbWVtb3J5IHRvXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjcwLSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjcxOnZvaWQgbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjcyLVx0XHRcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjczLXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3NDpcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjc1LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3NjpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3Ny1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyODY9dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXG5tbS9taWdyYXRlX2RldmljZS5jLTEyODcte1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjg4Olx0X19taWdyYXRlX2RldmljZV9wYWdlcyhtaWdyYXRlLVx1MDAzZXNyYywgbWlncmF0ZS1cdTAwM2Vkc3QsIG1pZ3JhdGUtXHUwMDNlbnBhZ2VzLCBtaWdyYXRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI4OS19XG5tbS9taWdyYXRlX2RldmljZS5jPTEyOTA9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9wYWdlcyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyOTEtXG5tbS9taWdyYXRlX2RldmljZS5jOjEyOTI6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9maW5hbGl6ZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI5My1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM0NC0vKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzQ1OiAqIG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKCkgLSBjb21wbGV0ZSBwYWdlIG1pZ3JhdGlvblxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzQ2OiAqIEBzcmNfcGZuczogc3JjX3BmbnMgcmV0dXJuZWQgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDctICogQGRzdF9wZm5zOiBhcnJheSBvZiBwZm5zIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIHRvIG1pZ3JhdGUgbWVtb3J5IHRvXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzUzLSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzU0OnZvaWQgbWlncmF0ZV9kZXZpY2VfZmluYWxpemUodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTUtXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpkc3RfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTYte1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzU3Olx0cmV0dXJuIF9fbWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU4LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1OTpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM2MC1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNzI9dm9pZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNzMte1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzc0Olx0X19taWdyYXRlX2RldmljZV9maW5hbGl6ZShtaWdyYXRlLVx1MDAzZXNyYywgbWlncmF0ZS1cdTAwM2Vkc3QsIG1pZ3JhdGUtXHUwMDNlbnBhZ2VzLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzc1LVx0XHRcdFx0ICBtaWdyYXRlLVx1MDAzZWZhdWx0X3BhZ2UpO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3Nz1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX2ZpbmFsaXplKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3OC1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM3OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4MC17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAwLSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDAxOnN0YXRpYyB1bnNpZ25lZCBpbnQgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyh1bnNpZ25lZCBsb25nICpzcmNfcGZuLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDctXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MDg6XHQqc3JjX3BmbiA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDktXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MjgtLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0Mjk6ICogbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LlxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDMwLSAqIEBzcmNfcGZuczogYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgbWlncmF0aW5nIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zLlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0NC0gKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ0NTogKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0Ni0gKlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0OC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ0OTppbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTAtXHRcdFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDU2LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDU3Olx0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTgtXHRcdGlmICghbnIpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYzLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDY0Olx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjUtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDY3LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2OS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3MC0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3MTogKiBtaWdyYXRlX2RldmljZV9wZm5zKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Mi0gKiBAc3JjX3BmbnM6IHByZS1wb3B1bGF0ZWQgYXJyYXkgb2Ygc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbWlncmF0ZS5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzQtICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3NTogKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWRcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Ni0gKiBhcnJheSBvZiBkZXZpY2UgcGFnZXMgdG8gbWlncmF0ZS5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzktICovXG5tbS9taWdyYXRlX2RldmljZS5jOjE0ODA6aW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgxLXtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODctXG5tbS9taWdyYXRlX2RldmljZS5jOjE0ODg6XHRcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4OS1cdFx0aWYgKCFucilcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTMtXG5tbS9taWdyYXRlX2RldmljZS5jOjE0OTQ6XHRtaWdyYXRlX2RldmljZV91bm1hcChzcmNfcGZucywgbnBhZ2VzLCBOVUxMKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5NS1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTctfVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk4OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGZucyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTktXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTA0LSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTA1OmludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTA2LXtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MTktXHQgKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUyMDpcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKFx1MDAyNnNyY19wZm4sIDEsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTIxLVx0aWYgKCEoc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTI5LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTMwOlx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoXHUwMDI2c3JjX3BmbiwgXHUwMDI2ZHN0X3BmbiwgMSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE1MzEtXHRpZiAoc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUzMi1cdFx0Zm9saW9fY29weShkZm9saW8sIGZvbGlvKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUzMzpcdG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKFx1MDAyNnNyY19wZm4sIFx1MDAyNmRzdF9wZm4sIDEpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgIFVzYWdlKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhvc2UgYG1pZ3JhdGVfZGV2aWNlXypgIGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZXhhY3RseSBhcmUgdGhlc2UgY2FsbGVkIHRocm91Z2hvdXQgdGhlIGtlcm5lbD8mIzM0OyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciB1c2FnZSBjb250ZXh0IGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyB0aGVpciBpbXBhY3Qgb3IgcG90ZW50aWFsIGlzc3Vlcy4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgY2FsbCBzaXRlcyBmb3IgYm90aCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdHJhY2tpbmcgZG93biBldmVyeSBpbnN0YW5jZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2guIFdoYXQgYXJjaGl0ZWN0dXJlcyBhbmQgc3Vic3lzdGVtcyBhcmUgdGhleSB0b3VjaGluZz8gQXJlIHRoZXNlIGNvcmUgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3IgbW9yZSBwZXJpcGhlcmFsPyBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBwb3RlbnRpYWwgcmVmYWN0b3JpbmcuIEkmIzM5O2xsIGhhdmUgdG8gbG9vayBmb3IgaW5kaXJlY3QgY2FsbHMsIGNvbmRpdGlvbmFsIGludm9jYXRpb25zLCBhbmQgYW55IHNwZWNpYWwgdXNlIGNhc2VzLiBJdCYjMzk7cyBnb2luZyB0byBiZSBhIGRlZXAgZGl2ZSwgYnV0IGEgbmVjZXNzYXJ5IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZV8ocmFuZ2V8cGZucykmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9OTE2PXN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk1MS1cdFx0ICogbWlncmF0ZV92bWFfY29sbGVjdF9wbWQoKSBvciwgZm9yIHRoZSBldmljdGlvbiBwYXRoLCBieVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTUyOlx0XHQgKiBtaWdyYXRlX2RldmljZV9wZm5zKCkuIEJvdGggdGhlIG9yZGVyLTAgZmFsbGJhY2sgYmVsb3cgYW5kXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05NTMtXHRcdCAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKCkgcmVseSBvbiB0aGF0LCBhc1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEzMTI9aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzQ1LVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM0NjpcdGVyciA9IG1pZ3JhdGVfZGV2aWNlX3BmbnMoc3JjLCBucGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTM0Ny1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9NDg5PW5vdXZlYXVfZG1lbV9ldmljdF9jaHVuayhzdHJ1Y3Qgbm91dmVhdV9kbWVtX2NodW5rICpjaHVuaylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy00OTktXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo1MDA6XHRtaWdyYXRlX2RldmljZV9yYW5nZShzcmNfcGZucywgY2h1bmstXHUwMDNlcGFnZW1hcC5yYW5nZS5zdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTUwMS1cdFx0XHRucGFnZXMpO1xuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE5Nz12b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTg6aW50IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk5LVx0XHRcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjIwMDppbnQgbWlncmF0ZV9kZXZpY2VfcGZucyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMjAxLXZvaWQgbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLFxuLS1cbmxpYi90ZXN0X2htbS5jPTE4OD1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXG4tLVxubGliL3Rlc3RfaG1tLmMtMjAwLVxubGliL3Rlc3RfaG1tLmM6MjAxOlx0bWlncmF0ZV9kZXZpY2VfcmFuZ2Uoc3JjX3BmbnMsIHN0YXJ0X3BmbiwgbnBhZ2VzKTtcbmxpYi90ZXN0X2htbS5jLTIwMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaSYjNDM7JiM0MzspIHtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTExMDk9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjMtICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2Vcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2NDogKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjY1LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTI5Mj1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM0NS0gKiBtaWdyYXRlX2RldmljZV9maW5hbGl6ZSgpIC0gY29tcGxldGUgcGFnZSBtaWdyYXRpb25cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM0NjogKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzQ3LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQwMT1zdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3Bmbixcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MjgtLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0Mjk6ICogbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LlxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDMwLSAqIEBzcmNfcGZuczogYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgbWlncmF0aW5nIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zLlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0OC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ0OTppbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTAtXHRcdFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDY3LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2OS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3MC0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3MTogKiBtaWdyYXRlX2RldmljZV9wZm5zKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Mi0gKiBAc3JjX3BmbnM6IHByZS1wb3B1bGF0ZWQgYXJyYXkgb2Ygc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbWlncmF0ZS5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzQtICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3NTogKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWRcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Ni0gKiBhcnJheSBvZiBkZXZpY2UgcGFnZXMgdG8gbWlncmF0ZS5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzktICovXG5tbS9taWdyYXRlX2RldmljZS5jOjE0ODA6aW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgxLXtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTctfVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk4OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGZucyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIyMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEhNTSBUZXN0IEhhcm5lc3MqKgoKUmlnaHQsIG15IGF0dGVudGlvbiYjMzk7cyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IGBsaWIvdGVzdF9obW0uY2AgZmlsZS4gSG1tLCBhIGhpZGRlbiBNYXJrb3YgbW9kZWwgdGVzdCwgaW50ZXJlc3RpbmchIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8gKmRlZXAgZGl2ZSogaW50byBgdGVzdF9obW0uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBJIHdhbnQgdG8ga25vdyBleGFjdGx5IHdoYXQgdGhlIHRlc3QgZG9lcywgdGhlIHRlc3Qgc3RyYXRlZ3kgdXNlZCwgYW5kIGhvdyBpdCBpcyBlbXBsb3llZCB3aXRoaW4gdGhlIG92ZXJhbGwgdGVzdGluZyBmcmFtZXdvcmsuCgpCZXlvbmQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRlc3QgaXRzZWxmLCBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3Vycm91bmRpbmcgYERFVklDRV9QUklWQVRFYCBhbmQgYE1JR1JBVEVfREVWSUNFYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZXkgbWF5IGJlIHJlbGF0ZWQgdG8gZGV2aWNlIG1hbmFnZW1lbnQgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVpciBzZXR0aW5ncyBjb3VsZCBoYXZlIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgdGhlIEhNTSB0ZXN0IGZ1bmN0aW9ucywgb3IgZXZlbiB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQgYXQgYWxsLiBUaGlzIGlzIGNydWNpYWwgZm9yIHZlcmlmeWluZyB0aGF0IHRoZSB0ZXN0IGlzIGFjdHVhbGx5IHJ1bm5pbmcgaW4gdGhlIGV4cGVjdGVkIGVudmlyb25tZW50LCBhbmQgbm90IGdldHRpbmcgdW5pbnRlbnRpb25hbGx5IHNraXBwZWQgb3IgY29uZmlndXJlZCBpbnRvIGEgYmFkIHN0YXRlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSB0ZXN0IGVudmlyb25tZW50IG1hdGNoZXMgdGhlIGludGVuZGVkIGVudmlyb25tZW50IGZvciB0aGUgSE1NIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfZGV2aWNlLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MjMxNj1taWdyYXRlX2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKHN0cnVjdCBsaXN0X2hlYWQgKm1vdmFibGVfZm9saW9fbGlzdCxcbi0tXG5tbS9ndXAuYy0yMzM0LVxubW0vZ3VwLmM6MjMzNTpcdFx0XHRpZiAobWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oZm9saW8pKSB7XG5tbS9ndXAuYy0yMzM2LVx0XHRcdFx0cmV0ID0gLUVCVVNZO1xuLS1cbm1tL2ludGVybmFsLmg9MTI2Mz12b2lkIGZyZWVfem9uZV9kZXZpY2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9pbnRlcm5hbC5oOjEyNjQ6aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaW50ZXJuYWwuaC0xMjY1LVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTEzOC1cdFx0XHQgKiBUaGUgb25seSB0aW1lIHRoZXJlIGlzIG5vIHZtYSBpcyB3aGVuIGNhbGxlZCBmcm9tXG5tbS9taWdyYXRlX2RldmljZS5jOjExMzk6XHRcdFx0ICogbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oKS4gSG93ZXZlciB0aGlzIGlzbiYjMzk7dFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTQwLVx0XHRcdCAqIGNhbGxlZCBpZiB0aGUgcGFnZSBjb3VsZCBub3QgYmUgdW5tYXBwZWQuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzc5PXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQwMTpzdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3Bmbixcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDQ5PWludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTYtXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NTc6XHRcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ1OC1cdFx0aWYgKCFucilcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTE0ODA9aW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4Ny1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4ODpcdFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg5LVx0XHRpZiAoIW5yKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ5OD1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3BmbnMpO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUwNTppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNDUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbiBmb3IgYG1pZ3JhdGVfZGV2aWNlLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBgbWlncmF0ZV9kZXZpY2UuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gbGF5cyBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29tcGlsYXRpb24gcnVsZXMgZm9yIGZpbGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBCeSBleGFtaW5pbmcgdGhlIE1ha2VmaWxlLCBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGBDT05GSUdgIG9wdGlvbnMsIGlmIGFueSwgYG1pZ3JhdGVfZGV2aWNlLmNgIGdldHMgY29tcGlsZWQuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoaWNoIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyBpdCYjMzk7cyBpbnRlbmRlZCB0byBzdXBwb3J0LiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgTWFrZWZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTUzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIHdhbGtpbmcgdGhyb3VnaCBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKktjb25maWcgUmV2aWV3IC0gQ29uZmlndXJhdGlvbiBTY2VuYXJpb3MqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGNoZWNrIGEgZmV3IHNwZWNpZmljIEtjb25maWcgc3ltYm9scywgbmFtZWx5IGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAsIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgLCBhbmQgYENPTkZJR19URVNUX0hNTV9VQVBJYC4gVGhpbmtpbmcgdGhyb3VnaCB0aGlzLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIHRoZSBnZW5lcmFsIGFyZWEgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVsYXRlIHRvPyBCYXNlZCBvbiB0aGUgbmFtaW5nLCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgcmV2b2x2ZXMgYXJvdW5kIGRldmljZSBtYW5hZ2VtZW50IGFuZCB1c2VyLXNwYWNlIEFQSSBpbnRlcmFjdGlvbnMsIHBvc3NpYmx5IGV2ZW4gdGVzdGluZyBlbnZpcm9ubWVudHMuCgoqICAgYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYDogVGhpcyBzb3VuZHMgbGlrZSBpdCBkZWFscyB3aXRoIGhvdyBkZXZpY2VzIGFyZSBtb3ZlZCBvciByZS1hc3NpZ25lZCB3aXRoaW4gdGhlIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgdmFsdWVzIGZvciB0aGlzIGZsYWcgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hhdCB0cmlnZ2VycyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGNvbmZpZy4gV2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgZG9lcyBpdCByZWx5IG9uPyBXaGF0IG1vZHVsZXMgb3IgZHJpdmVycyBkb2VzIGl0IGFmZmVjdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcz8gSXMgdGhpcyByZWxhdGVkIHRvIGhvdHBsdWdnaW5nLCBwZXJzaXN0ZW50IHN0b3JhZ2UsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoKKiAgIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgOiBUaGUgJiMzNDtwcml2YXRlJiMzNDsgYXNwZWN0IGlzIGludHJpZ3VpbmcuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gYWNjZXNzIGNvbnRyb2wgYW5kIHNlY3VyaXR5IGFyb3VuZCBkZXZpY2UgcmVzb3VyY2VzLiBJIHNob3VsZCBjb25zaWRlciBob3cgaXQgaW50ZXJhY3RzIHdpdGggc2VjdXJpdHkgbW9kZWxzLiBEb2VzIGl0IGltcGx5IHRoYXQgYSBnaXZlbiBkZXZpY2UgaXMgKm9ubHkqIGFjY2Vzc2libGUgdG8gY2VydGFpbiBwcm9jZXNzZXMgb3IgYSBwYXJ0aWN1bGFyIHNldCBvZiB1c2Vycz8gQ291bGQgdGhpcyBiZSByZWxhdGVkIHRvIGlzb2xhdGlvbiwgb3IgZXZlbiBwYXJ0aXRpb25pbmc/IEkgbmVlZCB0byByZXZpZXcgcmVsYXRlZCBkb2N1bWVudGF0aW9uLgoKKiAgIGBDT05GSUdfVEVTVF9ITU1fVUFQSWA6IFRoaXMgaXMgcHJldHR5IGNsZWFyLiBUaGlzIGlzIHByb2JhYmx5IGEgdGVzdGluZyByZWxhdGVkIGNvbmZpZ3VyYXRpb24sIGxpa2VseSBmb3Igc29tZSBzb3J0IG9mIHVzZXItc3BhY2UgaW50ZXJmYWNlLiAmIzM0O0hNTSYjMzQ7IGhpbnRzIGF0IHNvbWUgaGFyZHdhcmUgbWVtb3J5IG1hbmFnZW1lbnQuIElzIGl0IGZvciB0ZXN0aW5nIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHdpdGggZGV2aWNlIGRyaXZlcnM/IE9yIHZhbGlkYXRpbmcgYSBtZW1vcnktbWFuYWdlbWVudCBtZWNoYW5pc20gZm9yIHRoZSBrZXJuZWw/IE15IGZpcnN0IHN0ZXAgaXMgZ29pbmcgdG8gYmUgdG8gbG9vayBmb3IgJiMzNDtITU0mIzM0OyBpbiB0aGUga2VybmVsIGRvY3VtZW50YXRpb24uIFdoYXQgdGVzdHMgYXJlIGVuYWJsZWQgd2hlbiB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZD8gV2hhdCBidWlsZCBlbnZpcm9ubWVudCBpcyByZXF1aXJlZD8KClVsdGltYXRlbHksIHRoaXMgaXMgYSBzeXN0ZW1hdGljIHByb2Nlc3MuIEkgd2lsbCByZXZpZXcgZWFjaCBzeW1ib2wmIzM5O3MgZGVmaW5pdGlvbiwgaGVscCB0ZXh0LCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHZhbHVlcy4gSSYjMzk7bGwgbGlrZWx5IGNyb3NzLXJlZmVyZW5jZSB0aGVzZSBhZ2FpbnN0IHJlbGV2YW50IGRvY3VtZW50YXRpb24gYW5kIGV4aXN0aW5nIGNvZGUgY29tbWVudHMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlaXIgZnVuY3Rpb24gYW5kIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVklDRV9NSUdSQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02Nzk9Y29uZmlnIE1JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjgyLVxubW0vS2NvbmZpZzo2ODM6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbm1tL0tjb25maWctNjg0LVx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZTogSW52ZXN0aWdhdGluZyBaT05FX0RFVklDRSBhbmQgVEVTVF9ITU0qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgWk9ORV9ERVZJQ0VgIGFuZCBgVEVTVF9ITU1gLiYjMzQ7IEkmIzM5O20gbWVudGFsbHkgY2hlY2tpbmcgdGhlaXIgZGVmaW5pdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGxvb2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0czoKCiogICAqKmBaT05FX0RFVklDRWA6KiogSXMgdGhpcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgLSBJcyBpdCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlPyBEb2VzIGl0IGludGVyYWN0IHdpdGggTlVNQSBub2RlcyBvciBzcGVjaWZpYyBoYXJkd2FyZT8gV2hhdCBpbXBhY3QgZG9lcyBpdCBoYXZlIG9uIHRoZSBtZW1vcnkgYWxsb2NhdG9yIGFuZCByZWNsYWltZXJzPyBBbnkgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgaG90cGx1Zz8KCiogICAqKmBURVNUX0hNTWA6KiogSSYjMzk7bSBndWVzc2luZyB0aGlzIGlzIGxpa2VseSBhIHRlc3QgY2FzZSBvciBzb21lIHNvcnQgb2YgcHJvb2Ytb2YtY29uY2VwdCBmb3IgYSBoZXRlcm9nZW5lb3VzIG1lbW9yeSBtYW5hZ2VtZW50IChITU0pIGZlYXR1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEhNTSBpbXBsZW1lbnRhdGlvbiBpdCYjMzk7cyB0ZXN0aW5nLiBJcyB0aGlzIHJlbGF0ZWQgdG8gdGhlIG1vcmUgbWF0dXJlIEhNTSBmcmFtZXdvcmssIG9yIGlzIGl0IGFuIG9sZGVyIG9yIGV4cGVyaW1lbnRhbCBpbXBsZW1lbnRhdGlvbj8gV2hhdCYjMzk7cyB0aGUgdGVzdCBjYXNlIGFjdHVhbGx5IGRvaW5nPyBJcyBpdCBleGVyY2lzaW5nIHRoZSBiYXNpYyBITU0gQVBJLCB0ZXN0aW5nIG1lbW9yeSBtaWdyYXRpb24sIG9yIHZlcmlmeWluZyBzcGVjaWZpYyBjb3JuZXIgY2FzZXM/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLCBpZiBhbnkuIElzIGBURVNUX0hNTWAgZGVwZW5kZW50IG9uIGBaT05FX0RFVklDRWAsIG9yIGFyZSB0aGV5IG9ydGhvZ29uYWw/IElzIHRoZSB0ZXN0IGV2ZW4gc3RpbGwgcmVsZXZhbnQsIG9yIGlzIGl0IGFuIGFydGlmYWN0IG9mIGFuIG9sZGVyIGZlYXR1cmUgdGhhdCYjMzk7cyBzaW5jZSBiZWVuIHJlcGxhY2VkPyBDaGVja2luZyB2ZXJzaW9uIGhpc3RvcnkgaW4gZ2l0IGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICYjMzQ7d2h5JiMzNDsgYW5kICYjMzQ7aG93JiMzNDsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RFU1RfSE1NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMTc9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjQtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI1OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzMyNi1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuLS1cbmxpYi9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSAmIzQzOz0gdGVzdF9sb2NrdXAub1xubGliL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfVEVTVF9ITU0pICYjNDM7PSB0ZXN0X2htbS5vXG5saWIvTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICYjNDM7PSB0ZXN0X2ZyZWVfcGFnZXMub1xuLS1cbmxpYi90ZXN0X2htbV91YXBpLmgtNi0gKi9cbmxpYi90ZXN0X2htbV91YXBpLmg6NzojaWZuZGVmIF9MSUJfVEVTVF9ITU1fVUFQSV9IXG5saWIvdGVzdF9obW1fdWFwaS5oOjg6I2RlZmluZSBfTElCX1RFU1RfSE1NX1VBUElfSFxubGliL3Rlc3RfaG1tX3VhcGkuaC05LVxuLS1cbmxpYi90ZXN0X2htbV91YXBpLmg9NzU9ZW51bSB7XG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaC04MC1cbmxpYi90ZXN0X2htbV91YXBpLmg6ODE6I2VuZGlmIC8qIF9MSUJfVEVTVF9ITU1fVUFQSV9IICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTU9Q09ORklHX0RFVklDRV9QUklWQVRFPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzo2OkNPTkZJR19URVNUX0hNTT1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNy1DT05GSUdfR1VQX1RFU1Q9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoPTIxPWNoZWNrX3Rlc3RfcmVxdWlyZW1lbnRzKClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0zNS1cdFx0ZWNobyBcJiMzNDskMDogWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWw6XCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaDozNjpcdFx0ZWNobyBcJiMzNDtDT05GSUdfVEVTVF9ITU09bVwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2gtMzctXHRcdGV4aXQgJGtzZnRfc2tpcFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA2MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGxpYi9LY29uZmlnLmRlYnVnYCBhbmQgYFRFU1RfSE1NYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgZmlsZS4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyByZWxldmFudCBhcm91bmQgYFRFU1RfSE1NYC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyB0aGVyZSYjMzk7cyBwcm9iYWJseSBhIGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byB0aGF0IHN5bWJvbC4gVGhpcyBsaWtlbHkgbWVhbnMgc29tZSBkZWJ1Z2dpbmcgZmVhdHVyZXMsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3Igc29tZSBzcGVjaWZpYyBoYXJkd2FyZSB0ZXN0cywgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhpcyBgVEVTVF9ITU1gIHNldHRpbmcuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0aW5nIHNldHRpbmdzIHRoYXQgbWlnaHQgYmUgcmV2ZWFsZWQgYXMgSSBsb29rIGF0IHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IHN5bWJvbC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBkZWZpbml0aW9ucywgY29uZGl0aW9uYWwgYmxvY2tzICggYGlmYCBzdGF0ZW1lbnRzKSwgYW5kIGFueSByZWZlcmVuY2VzIHRvIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBzeW1ib2xzLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBsb2dpYyB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHRlc3Qgb3IgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkgcmVsYXRpbmcgdG8gSE1NIChwZXJoYXBzIEhhcmR3YXJlIE1hbmFnZWQgTWVtb3J5PykgaXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE3PWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI0LVxubGliL0tjb25maWcuZGVidWc6MzMyNTpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjYtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGdldCBncmFudWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgYW5kIGZvY3VzIG9uIGxpbmVzIDMzMjAgdGhyb3VnaCAzMzUwLiBNeSBicmFpbiBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIHBhcnNlIHRoZSBsaWtlbHkgY29udGVudDogaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGRlYnVnIGZlYXR1cmUsIGxpa2VseSBhIGNvbXBsZXggb25lIGp1ZGdpbmcgYnkgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB3aXRoaW4gYSBLY29uZmlnIGZpbGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleXdvcmRzIGxpa2UgJiMzNDtkZWJ1ZywmIzM0OyAmIzM0O3RyYWNpbmcsJiMzNDsgJiMzNDtsb2dnaW5nLCYjMzQ7IG9yIHNwZWNpZmljIGhhcmR3YXJlLXJlbGF0ZWQgdGVybXMgaWYgaXQgcGVydGFpbnMgdG8gb24tY2hpcCBkZWJ1ZyBjYXBhYmlsaXRpZXMuIEkgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgYGNvbmZpZ2AgYmxvY2tzLCBgYm9vbGAgb3IgYHRyaXN0YXRlYCBvcHRpb25zLCBgZGVwZW5kcyBvbmAgY2xhdXNlcywgYW5kIHBvdGVudGlhbGx5IHNvbWUgaGVscCB0ZXh0IHRoYXQgd2lsbCBwcm92aWRlIHRoZSBjcml0aWNhbCBjb250ZXh0IGZvciB0aGlzIHNlY3Rpb24uIFRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGEgcGFydGljdWxhciBkZWJ1ZyBvcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSwgc28gSSBjYW4gcHJlZGljdCBpdHMgYmVoYXZpb3IgYW5kIGluZmx1ZW5jZSBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoZXJlLiBJJiMzOTttIGhvcGluZyBpdCBwcm92aWRlcyB0aGUgbWlzc2luZyBwaWVjZSBJIG5lZWQgdG8gcmVzb2x2ZSB0aGlzIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzIwOlx0XHQgIFRlc3QgaWYgdGhlIGtlcm5lbCBpcyB6ZXJvLWluaXRpYWxpemluZyBoZWFwIGFuZCBwYWdlIGFsbG9jYXRpb25zLlxuMzMyMTpcdFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXG4zMzIyOlx0XG4zMzIzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzI0Olx0XG4zMzI1Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzMjc6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzMjg6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzMjk6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzMwOlx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzMxOlx0XHRoZWxwXG4zMzMyOlx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzMzMzpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzM0Olx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzMzU6XHRcbjMzMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzMzc6XHRcbjMzMzg6XHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXG4zMzM5Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IGZyZWVpbmcgcGFnZXNcJiMzNDtcbjMzNDA6XHRcdGhlbHBcbjMzNDE6XHRcdCAgVGVzdCB0aGF0IGEgbWVtb3J5IGxlYWsgZG9lcyBub3Qgb2NjdXIgZHVlIHRvIGEgcmFjZSBiZXR3ZWVuXG4zMzQyOlx0XHQgIGZyZWVpbmcgYSBibG9jayBvZiBwYWdlcyBhbmQgYSBzcGVjdWxhdGl2ZSBwYWdlIHJlZmVyZW5jZS5cbjMzNDM6XHRcdCAgTG9hZGluZyB0aGlzIG1vZHVsZSBpcyBzYWZlIGlmIHlvdXIga2VybmVsIGhhcyB0aGUgYnVnIGZpeGVkLlxuMzM0NDpcdFx0ICBJZiB0aGUgYnVnIGlzIG5vdCBmaXhlZCwgaXQgd2lsbCBsZWFrIGdpZ2FieXRlcyBvZiBtZW1vcnkgYW5kXG4zMzQ1Olx0XHQgIHByb2JhYmx5IE9PTSB5b3VyIHN5c3RlbS5cbjMzNDY6XHRcbjMzNDc6XHRjb25maWcgVEVTVF9GUFVcbjMzNDg6XHRcdHRyaXN0YXRlIFwmIzM0O1Rlc3QgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBpbiBrZXJuZWwgc3BhY2VcJiMzNDtcbjMzNDk6XHRcdGRlcGVuZHMgb24gQVJDSF9IQVNfS0VSTkVMX0ZQVV9TVVBQT1JUIFx1MDAyNlx1MDAyNiAhS0NPVl9JTlNUUlVNRU5UX0FMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIxMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYFRFU1RfSE1NYCBNb2R1bGUqKgoKT2theSwgc28gYFRFU1RfSE1NYCBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGVzZSBjaGFyYWN0ZXIgZGV2aWNlcywgYC9kZXYvaG1tX2RtaXJyb3IwYCwgYC9kZXYvaG1tX2RtaXJyb3IxYCwgYW5kIHRoZSBsaWtlLiBUaGF0JiMzOTtzIHRoZSBiYXNpYyBpbmZyYXN0cnVjdHVyZSwgdGhlIGVudHJ5IHBvaW50cy4gQW5kIGl0JiMzOTtzIGRvaW5nIHRoaXMgdG8gcHJvdmlkZSBhIHdheSB0byBtb3ZlIG1lbW9yeSBwYWdlcyBhcm91bmQgdGhyb3VnaCBpb2N0bHMuIFNwZWNpZmljYWxseSwgSSBzZWUgYEhNTV9ETUlSUk9SX01JR1JBVEVgIGFuZCBvdGhlciBzaW1pbGFyIG9wZXJhdGlvbnMuIFRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGF0IG1pZ3JhdGlvbiBwcm9jZXNzLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzLgoKVGhlIGtleSB0byBmaWd1cmluZyB0aGlzIG91dCBsaWVzIGluIGhvdyBpdCAqdXNlcyogYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUgaGVhcnQgb2YgdGhlIHBhZ2UgbWlncmF0aW9uIGxvZ2ljLCBhbmQgdW5kZXJzdGFuZGluZyAqaXRzKiBjb250ZXh0IGlzIGNydWNpYWwuIFRpbWUgdG8gZGl2ZSBpbnRvIGBsaWIvdGVzdF9obW0uY2AgdG8gc2VlIGhvdyB0aG9zZSBpb2N0bHMgYXJlIHVsdGltYXRlbHkgY2FsbGluZyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBhbmQgdW5kZXJzdGFuZCB0aGUgaW5wdXRzIGFuZCBwYXJhbWV0ZXJzLiBXaGF0IGtpbmQgb2YgYWRkcmVzc2VzIGFyZSBiZWluZyBwYXNzZWQsIGhvdyBpcyB0aGUgZGV2aWNlIHJhbmdlIGRlZmluZWQsIGFuZCB3aGF0JiMzOTtzIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgaXQmIzM5O3Mgb3BlcmF0aW5nIGluPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTE2Mj1zdGF0aWMgaW50IGRtaXJyb3JfZm9wc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE4Ny1cbmxpYi90ZXN0X2htbS5jOjE4ODpzdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXG5saWIvdGVzdF9obW0uYy0xODkte1xuLS1cbmxpYi90ZXN0X2htbS5jPTIzOD1zdGF0aWMgaW50IGRtaXJyb3JfZm9wc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmxpYi90ZXN0X2htbS5jLTI1MC1cbmxpYi90ZXN0X2htbS5jOjI1MTpcdFx0XHRkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhkZXZtZW0pO1xubGliL3Rlc3RfaG1tLmMtMjUyLVx0XHR9XG4tLVxubGliL3Rlc3RfaG1tLmM9MTU3Nz1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmVfY2h1bmtzKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcbi0tXG5saWIvdGVzdF9obW0uYy0xNTkxLVxubGliL3Rlc3RfaG1tLmM6MTU5MjpcdFx0XHRkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhkZXZtZW0pO1xubGliL3Rlc3RfaG1tLmMtMTU5My1cdFx0XHRtZW11bm1hcF9wYWdlcyhcdTAwMjZkZXZtZW0tXHUwMDNlcGFnZW1hcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRyaWFnZSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmc/KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGBtaWdyYXRlX3ZtYV8qYCBhbmQgYG1pZ3JhdGVfZGV2aWNlXypgLCB3aGljaCBhcmUgc3F1YXJlbHkgd2l0aGluIHRoZSBgbW0vYCBtZW1vcnkgbWFuYWdlbWVudCBjb3JlIHN1YnN5c3RlbS4gRXhjZWxsZW50LCB0aGF0JiMzOTtzIHN0ZXAgb25lLiBOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBoaXRzIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGNyaXRlcmlhLgoKVGhlIHRyaWFnZSBndWlkZWxpbmVzIHN0YXRlIHdlIHNob3VsZCByZXR1cm4gYHRydWVgIGlmIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIEFuZCB3ZSYjMzk7dmUgZ290IGEgbGlzdCBvZiBwb3NpdGl2ZSBpbmRpY2F0b3JzLiAgV2UgbmVlZCB0byBzZWUgaWYgdGhpcyBtYXRjaGVzIG9uZSBvZiB0aGVtLiAgU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgYXNzZXNzIGl0IGFnYWluc3QgdGhlc2U6CgoxLiAgKipDb3JlIFN1YnN5c3RlbXM6KiogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLykuCjIuICAqKlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoqKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCjMuICAqKlJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoqKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCgpIZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBzZWVpbmc6ICBUaGlzIHBhdGNoIGlzICphYnNvbHV0ZWx5KiByZWxldmFudC4KCiogICAqKlN1YnN5c3RlbToqKiBJdCYjMzk7cyBpbiBgbW0vYCDigJMgbWVtb3J5IG1hbmFnZW1lbnQsIHRpY2suCiogICAqKkNoYW5nZXM6KiogV2UgaGF2ZSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBmb2xpbyBjb2xsZWN0aW9uIGxvb3AgaW4gYG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZucygpYC4gIFBsdXMsIGEgbmV3IGZ1bmN0aW9uLCBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpYC4gQ3JpdGljYWxseSwgdGhlcmUmIzM5O3MgYSBgV0FSTl9PTl9PTkNFYCBhc3NlcnRpb24gYWRkZWQgKGBXQVJOX09OX09OQ0UobnIgJmd0OyByZW1haW5pbmcpYCksICphbmQqIG1vZGlmaWNhdGlvbnMgdG8gZm9saW8gbG9ja2luZy91bmxvY2tpbmcgYW5kIGFycmF5IGJvdW5kcyBoYW5kbGluZy4gVGhhdCYjMzk7cyBhIHRyaXBsZSB0aHJlYXQhCiogICAqKlJlYWNoYWJpbGl0eToqKiAgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gIFdlIGNhbiBoaXQgaXQgdGhyb3VnaCBgdGVzdF9obW1gLCB3aGljaCBjYW4gYmUgZHJpdmVuIGluIFFFTVUvc3l6a2FsbGVyLiBUaGF0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEFsc28sIGBub3V2ZWF1YCwgYGRybV9wYWdlbWFwYCwgb3IgYW55IGRyaXZlciB0aGF0IHVzZXMgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBvciBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgaXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuCiogICAqKkNvbmZpZ3VyYXRpb246KiogV2UmIzM5O3ZlIGdvdCBmbGFncyBsaWtlIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgREVWSUNFX01JR1JBVElPTmAgaW4gcGxheSwgc28gd2UgbmVlZCB0byBjb25maXJtIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzZXR1cCwgYnkgY2hlY2tpbmcgdGhlIG1tL0tjb25maWcgZm9yIHRoZWlyIGF2YWlsYWJpbGl0eS4KCkdpdmVuIHRoZSBzdWJzeXN0ZW0gaW52b2x2ZW1lbnQsIHJlZmFjdG9yaW5nLCAqYW5kKiB0aGUgaW50cm9kdWN0aW9uIG9mIGFuIGFzc2VydGlvbiwgdGhpcyBpcyBhIGNsZWFyICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0Oy4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgcmVzdHJ1Y3R1cmluZyBkYXRhIGZsb3csIGFuZCBhZGRpbmcgYSBkZWZlbnNpdmUgY2hlY2sgaW4gYSByZWFjaGFibGUgcGF0aC4gRXhjZWxsZW50IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgKERFVklDRV9QUklWQVRFfFpPTkVfREVWSUNFfERFVklDRV9NSUdSQVRJT04pJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njc5PWNvbmZpZyBNSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY4Mi1cbm1tL0tjb25maWc6NjgzOmNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4NC1cdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0Vcbi0tXG5tbS9LY29uZmlnPTEyMTU9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMTktXG5tbS9LY29uZmlnOjEyMjA6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjEtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTEyNDc9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWctMTI0OS1cbm1tL0tjb25maWc6MTI1MDpjb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI1MS1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZGV2aWNlIHpvbmVzIGFyZSBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb25zIGZvciBgWk9ORV9ERVZJQ0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgb3B0aW9ucyBhcmUgYWN0dWFsbHkgY29uZmlndXJhYmxlIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb24gYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoZSBgY29uZmlnYCBzdGF0ZW1lbnRzLCB0aGVpciBkZXBlbmRlbmNpZXMgKGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGV0Yy4pLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBoZWxwIHRleHQsIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBpbnRlbnRpb25zLiBJIGFsc28gd2FudCB0byBzZWUgaWYgdGhlc2UgYXJlIG1lcmVseSBjb21waWxlLXRpbWUgb3B0aW9ucyBvciBpZiBydW50aW1lIGNvbmZpZ3VyYXRpb24gaXMgaW52b2x2ZWQsIGJ1dCB0aGUgS2NvbmZpZyB3aWxsIGxpa2VseSBvbmx5IGhhdmUgdGhlIGNvbXBpbGUtdGltZSBpbmZvcm1hdGlvbi4gR3JhYmJpbmcgdGhlc2Ugc3BlY2lmaWNzIHdpbGwgZ2l2ZSBtZSB0aGUgcHJvcGVyIGZvdW5kYXRpb24gdG8gcmVhc29uIGFib3V0IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhc3BlY3RzIGFzc29jaWF0ZWQgd2l0aCB0aG9zZSB6b25lcy4gVGltZSB0byBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMTg6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIxOTpcdFxuMTIyMDpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIyMTpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjIyOlx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMjM6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyMjQ6XHRcbjEyMjU6XHRcdGhlbHBcbjEyMjY6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyMjc6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyMjg6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjI5Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTIzMDpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjMxOlx0XG4xMjMyOlx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyMzM6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTIzNDpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjM1Olx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTIzNjpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyMzc6XHRcbjEyMzg6XHQjXG4xMjM5Olx0IyBIZWxwZXJzIHRvIG1pcnJvciByYW5nZSBvZiB0aGUgQ1BVIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcyBpbnRvIGRldmljZSBwYWdlXG4xMjQwOlx0IyB0YWJsZXMuXG4xMjQxOlx0I1xuMTI0MjpcdGNvbmZpZyBITU1fTUlSUk9SXG4xMjQzOlx0XHRib29sXG4xMjQ0Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTI0NTpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuMTI0NjpcdFxuMTI0NzpcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbjEyNDg6XHRcdGJvb2xcbjEyNDk6XHRcbjEyNTA6XHRjb25maWcgREVWSUNFX1BSSVZBVEVcbjEyNTE6XHRcdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4xMjUyOlx0XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4xMjUzOlx0XHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4xMjU0Olx0XG4xMjU1Olx0XHRoZWxwXG4xMjU2Olx0XHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXG4xMjU3Olx0XHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcbjEyNTg6XHRcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxuMTI1OTpcdFxuMTI2MDpcdGNvbmZpZyBWTUFQX1BGTlxuMTI2MTpcdFx0Ym9vbFxuMTI2MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAzMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBNaWdyYXRpb24gQ29uZmlndXJhdGlvbiBpbiBtbS9LY29uZmlnKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7UmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiYjMzQ7IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBgTUlHUkFUSU9OYCBvcHRpb25zIHdpdGhpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBvciBwb3RlbnRpYWxseSB0d2Vha2luZyB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtaWdyYXRpb24gY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGVzZSBjb25maWd1cmF0aW9ucywgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIG1lbW9yeSwgc28gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggbWlncmF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgc2V0IGFuZCBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyB1bnVzdWFsIG9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZCBpbiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzb21ldGhpbmcgSSYjMzk7bSBpbnRpbWF0ZWx5IGZhbWlsaWFyIHdpdGgsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIGRldGFpbHMgYXMgd2VsbCBhcyB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjc1Olx0XHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXG4gNjc2Olx0XHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcbiA2Nzc6XHRcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxuIDY3ODpcdFxuIDY3OTpcdGNvbmZpZyBNSUdSQVRJT05cbiA2ODA6XHRcdGJvb2xcbiA2ODE6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjgyOlx0XG4gNjgzOlx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbiA2ODQ6XHRcdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0VcbiA2ODU6XHRcbiA2ODY6XHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXG4gNjg3Olx0XHRib29sXG4gNjg4Olx0XG4gNjg5Olx0Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4gNjkwOlx0XHRib29sXG4gNjkxOlx0XG4gNjkyOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG4gNjkzOlx0XHRkZWZfYm9vbCBuXG4gNjk0Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTE0CgkJCQkJCQlvdXRwdXQ6IDE2MgoJCQkJCQkJdGhvdWdodHM6IDY3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEZXZpY2UgTWlncmF0aW9uIENvZGUgYW5kIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBlbmFibGluZyBgREVWSUNFX1BSSVZBVEVgLCBgWk9ORV9ERVZJQ0VgLCBvciBgVEVTVF9ITU1gIGluZGlyZWN0bHkgZW5hYmxlcyBkZXZpY2UgbWlncmF0aW9uIGJlY2F1c2Ugb2YgdGhlIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIGhpbmdlcyBvbiBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYCwgd2hpbGUgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgWk9ORV9ERVZJQ0VgLiBUaGVuLCBgQ09ORklHX1RFU1RfSE1NYCBuZWVkcyBib3RoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIFRoaXMgbWVhbnMgYWN0aXZhdGluZyBhbnkgb2YgdGhvc2UgY29uZmlncyBhbGxvd3MgdXMgdG8gdHJpZ2dlciB0aGUgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBtb2RpZmljYXRpb25zLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBhcmUgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBJJiMzOTttIHNlZWluZyBhIG5ldywgc3RhdGljIGZ1bmN0aW9uIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvYCBpbnRyb2R1Y2VkLiBUaGUgZXhpc3RpbmcgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQgdG8gdXNlIGl0LiBJbXBvcnRhbnRseSwgYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gIGlzICpzdGF0aWMqLCBzbyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoYXQgZmlsZSwgYW5kIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYCBhcmUgdGhlIGV4cG9ydGVkIHN5bWJvbHMgdGhhdCB3aWxsIGFjdHVhbGx5IGNhbGwgaXQuIFRob3NlIHRocmVlIGZ1bmN0aW9ucywgY29sbGVjdGl2ZWx5LCBhcmUgdGhlICpGb2N1c1N5bWJvbHMqLgoKSSYjMzk7dmUgdmVyaWZpZWQgdGhhdCB0aGUgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgYXJlIGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgVEVTVF9ITU1gLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZnV6emluZyBjcml0ZXJpYS4gVGhlIGFuYWx5c2lzIGNsYWltcyB0aGlzIGlzIHdvcnRoIGZ1enppbmcsIGFuZCBJIGFncmVlLiBUaGUganVzdGlmaWNhdGlvbiBzZWVtcyBzb3VuZDogdGhlcmUgYXJlIGxvZ2ljIG1vZGlmaWNhdGlvbnMgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gKGBtbS9taWdyYXRlX2RldmljZS5jYCksIGluY2x1ZGluZyBhIHJlZmFjdG9yaW5nIG9mIGZvbGlvIGhhbmRsaW5nLCBwbHVzIGFuIGFkZGVkIGFzc2VydGlvbiAoYFdBUk5fT05fT05DRWApIGluIHRoZSBuZXcgYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gLiBUaGlzIHN1Z2dlc3RzIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MuIEZ1cnRoZXJtb3JlLCBJIHNlZSB0aGlzIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHZpYSBgdGVzdF9obW1gIG9yIGV2ZW4gdGhlIERSTSBwYWdlbWFwLCBzbyB0aGVyZSBhcmUgZ29vZCB0ZXN0IHZlY3RvcnMuCgpJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGV2ZXJ5dGhpbmcgbWVldHMgdGhlIGNyaXRlcmlhLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGlzIHNldCB0byB0cnVlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIEFuZCBmaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkIGFzIGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgVEVTVF9ITU1gLgoKVGhlIHJlYXNvbmluZyBpcyBhY2N1cmF0ZSBhbmQgY29uY2lzZTogdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZGV2aWNlIHByaXZhdGUgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbnRvIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpYCwgdXNlZCBieSBgbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zKClgLiBJdCBhZGRzIGEgYFdBUk5fT05fT05DRWAgYXNzZXJ0aW9uIHRvIGNoZWNrIGJvdW5kcyBhZ2FpbnN0IHJlbWFpbmluZyBhcnJheSBjYXBhY2l0eSwgYW5kIHRoZSBjb2RlIGlzIHRlc3RhYmxlIHZpYSBgdGVzdF9obW1gLgoKU28sIGl0JiMzOTtzIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIHRvb2wgY2FsbCB3aXRoIHRob3NlIHNldHRpbmdzLiBMb29rcyBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7VEVTVF9ITU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3JhbmdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BmbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2RldmljZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2RldmljZV9wZm5zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGludG8gYSBuZXcgaGVscGVyIGZ1bmN0aW9uIG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oKSBjYWxsZWQgYnkgbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpLCBhbmQgaW50cm9kdWNlcyBhIG5ldyBXQVJOX09OX09OQ0UgYXNzZXJ0aW9uIHRvIHZlcmlmeSBib3VuZHMgYWdhaW5zdCB0aGUgcmVtYWluaW5nIGFycmF5IGNhcGFjaXR5LiBUaGVzZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGNhbiBiZSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHRoZSB0ZXN0X2htbSBwc2V1ZG8tZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGJ5IGZhY3RvcmluZyBvdXQgZHVwbGljYXRlZCBjb2RlIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIChuciwgcGZuLCBpKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGRlc3RpbmF0aW9uIFBGTiBhcnJheSBlbnRyaWVzIGFyZSBleHBsaWNpdGx5IHdyaXR0ZW4gb3IgemVyb2VkIHZpYSBtZW1zZXQoKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbiAoZS5nLiwgYXJyYXkgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBvciBmb2xpbyBsb2NraW5nL3JlZmNvdW50aW5nIGlzc3VlcykgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVhMzM5Njc0MjQ1NGJlZmJhMmRkOGRlYWY2MjBlZjU0NTllM2IxMTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwNjo0NjoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVfZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jCmluZGV4IDAwOWJmYThiMjEyZDUuLmM1N2VhZGVhNjU2NTEgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZV9kZXZpY2UuYwpAQCAtMTM5Miw2ICYjNDM7MTM5MiwzOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbikKIAlyZXR1cm4gbWlncmF0ZV9wZm4ocGZuKSB8IE1JR1JBVEVfUEZOX01JR1JBVEU7CiB9CiAKJiM0MzsvKgomIzQzOyAqIENvbGxlY3QgYSBkZXZpY2UgZm9saW8gaW50byB0aGUgcGFnZS1ncmFudWxhciBQRk4gYXJyYXkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGNvbnN1bWVkLCBvciAwIGlmIHRoZSBmb2xpbyBkb2VzIG5vdCBmaXQgaW4KJiM0MzsgKiB0aGUgcmVtYWluaW5nIGFycmF5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyh1bnNpZ25lZCBsb25nICpzcmNfcGZuLAomIzQzOwkJCQkJCSB1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsJCQkJCQkgdW5zaWduZWQgbG9uZyByZW1haW5pbmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwZm5fdG9fcGFnZShwZm4pKTsKJiM0MzsJdW5zaWduZWQgaW50IG5yOwomIzQzOwomIzQzOwkqc3JjX3BmbiA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7CiYjNDM7CW5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG5yICZndDsgcmVtYWluaW5nKSkgewomIzQzOwkJaWYgKCpzcmNfcGZuICZhbXA7IE1JR1JBVEVfUEZOX01JR1JBVEUpIHsKJiM0MzsJCQlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQl9CiYjNDM7CQltZW1zZXQoc3JjX3BmbiwgMCwgcmVtYWluaW5nICogc2l6ZW9mKCpzcmNfcGZuKSk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobnIgJmd0OyAxKSB7CiYjNDM7CQkqc3JjX3BmbiB8PSBNSUdSQVRFX1BGTl9DT01QT1VORDsKJiM0MzsJCW1lbXNldChzcmNfcGZuICYjNDM7IDEsIDAsIChuciAtIDEpICogc2l6ZW9mKCpzcmNfcGZuKSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yOwomIzQzO30KJiM0MzsKIC8qKgogICogbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LgogICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuCkBAIC0xNDEwLDM1ICYjNDM7MTQ0MywyMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbikKICAqIG1pZ3JhdGluZyBwYWdlcyB0aGF0IGFyZW4mIzM5O3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW4KICAqIGFsbG9jYXRlIGRlc3RpbmF0aW9uIHBhZ2VzIGFuZCBzdGFydCBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlIHRvIENQVQogICogbWVtb3J5IGJlZm9yZSBjYWxsaW5nIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCkuCiYjNDM7ICoKJiM0MzsgKiBBIGNvbXBvdW5kIGZvbGlvIG11c3QgZml0IGVudGlyZWx5IGluIHRoZSByZW1haW5pbmcgcmFuZ2UuCiAgKi8KIGludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCXVuc2lnbmVkIGxvbmcgbnBhZ2VzKQogewotCXVuc2lnbmVkIGxvbmcgaSwgaiwgcGZuOwomIzQzOwl1bnNpZ25lZCBsb25nIGksIHBmbjsKIAogCWZvciAocGZuID0gc3RhcnQsIGkgPSAwOyBpICZsdDsgbnBhZ2VzOyBwZm4mIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwotCQl1bnNpZ25lZCBpbnQgbnIgPSAxOwomIzQzOwkJdW5zaWduZWQgaW50IG5yOwogCi0JCXNyY19wZm5zW2ldID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2socGZuKTsKLQkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Ci0JCWlmIChuciAmZ3Q7IG5wYWdlcyAtIGkpIHsKLQkJCWlmIChzcmNfcGZuc1tpXSAmYW1wOyBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7Ci0JCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJCQlmb2xpb19wdXQoZm9saW8pOwotCQkJfQotCQkJbWVtc2V0KCZhbXA7c3JjX3BmbnNbaV0sIDAsCi0JCQkgICAgICAgKG5wYWdlcyAtIGkpICogc2l6ZW9mKCpzcmNfcGZucykpOwomIzQzOwkJbnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCZhbXA7c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7CiYjNDM7CQlpZiAoIW5yKQogCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG5yICZndDsgMSkgewotCQkJc3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7Ci0JCQlmb3IgKGogPSAxOyBqICZsdDsgbnI7IGomIzQzOyYjNDM7KQotCQkJCXNyY19wZm5zW2kmIzQzO2pdID0gMDsKLQkJCWkgJiM0Mzs9IGogLSAxOwotCQkJcGZuICYjNDM7PSBqIC0gMTsKLQkJfQomIzQzOwkJaSAmIzQzOz0gbnIgLSAxOwomIzQzOwkJcGZuICYjNDM7PSBuciAtIDE7CiAJfQogCiAJbWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7CkBAIC0xNDU0LDMzICYjNDM7MTQ3NCwyMSBAQCBFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTsKICAqCiAgKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWQKICAqIGFycmF5IG9mIGRldmljZSBwYWdlcyB0byBtaWdyYXRlLgomIzQzOyAqCiYjNDM7ICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIFBGTiBhcnJheS4KICAqLwogaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQogewotCXVuc2lnbmVkIGxvbmcgaSwgajsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShzcmNfcGZuc1tpXSk7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwotCQl1bnNpZ25lZCBpbnQgbnIgPSAxOwomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4gPSBzcmNfcGZuc1tpXTsKJiM0MzsJCXVuc2lnbmVkIGludCBucjsKIAotCQlzcmNfcGZuc1tpXSA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHNyY19wZm5zW2ldKTsKLQkJbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Ci0JCWlmIChuciAmZ3Q7IG5wYWdlcyAtIGkpIHsKLQkJCWlmIChzcmNfcGZuc1tpXSAmYW1wOyBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7Ci0JCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQkJCQlmb2xpb19wdXQoZm9saW8pOwotCQkJfQotCQkJbWVtc2V0KCZhbXA7c3JjX3BmbnNbaV0sIDAsCi0JCQkgICAgICAgKG5wYWdlcyAtIGkpICogc2l6ZW9mKCpzcmNfcGZucykpOwomIzQzOwkJbnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCZhbXA7c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7CiYjNDM7CQlpZiAoIW5yKQogCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG5yICZndDsgMSkgewotCQkJc3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7Ci0JCQlmb3IgKGogPSAxOyBqICZsdDsgbnI7IGomIzQzOyYjNDM7KQotCQkJCXNyY19wZm5zW2kmIzQzO2pdID0gMDsKLQkJCWkgJiM0Mzs9IGogLSAxOwotCQl9CiYjNDM7CQlpICYjNDM7PSBuciAtIDE7CiAJfQogCiAJbWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDIzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgQW5hbHlzaXM6IEEgUXVpY2sgTG9vayBhdCB0aGUgTWlncmF0ZSBEZXZpY2UgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gZnV6emluZyBpcyBuZWNlc3NhcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjaGFuZ2VzIHdpdGhpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgcHVsbGVkIG91dCBhIGhlbHBlciBmdW5jdGlvbiwgYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gLCBmcm9tIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucy4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSG93IGFyZSBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AsIGFuZCB0aGUgbmV3IGhlbHBlciwgYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gLCBpbnRlcmFjdGluZz8gQSBxdWljayByZWFkIG9mIGBtbS9taWdyYXRlX2RldmljZS5jYCBzaG91bGQgY2xhcmlmeSB0aGVpciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCwgY3JpdGljYWxseSwgaG93IHRoZXkgYXJlIGJlaW5nICp1c2VkKi4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBhcmVhIGlzIGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGRhdGEgcmFjZXMgb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBLTVNBTiBtaWdodCBleHBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfZGV2aWNlXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz01NDI9c3RhdGljIGJvb2wgbWlncmF0ZV92bWFfY2hlY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2UgKmZhdWx0X3BhZ2UpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy01NzAtICovXG5tbS9taWdyYXRlX2RldmljZS5jOjU3MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV91bm1hcCh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTcyLVx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NjcwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjcxLXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NjcyOlx0bWlncmF0ZS1cdTAwM2VjcGFnZXMgPSBtaWdyYXRlX2RldmljZV91bm1hcChtaWdyYXRlLVx1MDAzZXNyYywgbWlncmF0ZS1cdTAwM2VucGFnZXMsXG5tbS9taWdyYXRlX2RldmljZS5jLTY3My1cdFx0XHRcdFx0bWlncmF0ZS1cdTAwM2VmYXVsdF9wYWdlKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTk3Nj1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTA4LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTA5OnN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG5tbS9taWdyYXRlX2RldmljZS5jLTExMTAtXHRcdFx0XHR1bnNpZ25lZCBsb25nICpkc3RfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTM4LVx0XHRcdCAqIFRoZSBvbmx5IHRpbWUgdGhlcmUgaXMgbm8gdm1hIGlzIHdoZW4gY2FsbGVkIGZyb21cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTEzOTpcdFx0XHQgKiBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbygpLiBIb3dldmVyIHRoaXMgaXNuJiMzOTt0XG5tbS9taWdyYXRlX2RldmljZS5jLTExNDAtXHRcdFx0ICogY2FsbGVkIGlmIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSB1bm1hcHBlZC5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjItLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNjM6ICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2Vcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2NDogKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjY1LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3MTp2b2lkIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3Mi1cdFx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcylcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3My17XG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzQ6XHRfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyY19wZm5zLCBkc3RfcGZucywgbnBhZ2VzLCBOVUxMKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3NS19XG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzY6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNzctXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjg2PXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjg3LXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI4ODpcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMobWlncmF0ZS1cdTAwM2VzcmMsIG1pZ3JhdGUtXHUwMDNlZHN0LCBtaWdyYXRlLVx1MDAzZW5wYWdlcywgbWlncmF0ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyODktfVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjkwPUVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfcGFnZXMpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjkxLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjkyOnN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfZmluYWxpemUodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG5tbS9taWdyYXRlX2RldmljZS5jLTEyOTMtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDQtLypcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM0NTogKiBtaWdyYXRlX2RldmljZV9maW5hbGl6ZSgpIC0gY29tcGxldGUgcGFnZSBtaWdyYXRpb25cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM0NjogKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzQ3LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1My0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1NDp2b2lkIG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU1LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU2LXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1NzpcdHJldHVybiBfX21pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHNyY19wZm5zLCBkc3RfcGZucywgbnBhZ2VzLCBOVUxMKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1OC19XG5tbS9taWdyYXRlX2RldmljZS5jOjEzNTk6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9maW5hbGl6ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEzNjAtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzcyPXZvaWQgbWlncmF0ZV92bWFfZmluYWxpemUoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzczLXtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM3NDpcdF9fbWlncmF0ZV9kZXZpY2VfZmluYWxpemUobWlncmF0ZS1cdTAwM2VzcmMsIG1pZ3JhdGUtXHUwMDNlZHN0LCBtaWdyYXRlLVx1MDAzZW5wYWdlcyxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3NS1cdFx0XHRcdCAgbWlncmF0ZS1cdTAwM2VmYXVsdF9wYWdlKTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNzc9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9maW5hbGl6ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEzNzgtXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNzk6c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG5tbS9taWdyYXRlX2RldmljZS5jLTEzODAte1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQwMTpzdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3Bmbixcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMi1cdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDA3LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDA4Olx0KnNyY19wZm4gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDA5LVx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDI4LS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDI5OiAqIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQzMC0gKiBAc3JjX3BmbnM6IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIG1pZ3JhdGluZyBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucy5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDQtICogYWxsb2NhdGUgZGVzdGluYXRpb24gcGFnZXMgYW5kIHN0YXJ0IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gQ1BVXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NDU6ICogbWVtb3J5IGJlZm9yZSBjYWxsaW5nIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCkuXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDYtICpcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDgtICovXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NDk6aW50IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDUwLVx0XHRcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ1Ni1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ1NzpcdFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDU4LVx0XHRpZiAoIW5yKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2My1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2NDpcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDY1LVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2Ny19XG5tbS9taWdyYXRlX2RldmljZS5jOjE0Njg6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9yYW5nZSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjktXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzAtLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzE6ICogbWlncmF0ZV9kZXZpY2VfcGZucygpIC0gbWlncmF0ZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG5vcm1hbCBtZW1vcnkuXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzItICogQHNyY19wZm5zOiBwcmUtcG9wdWxhdGVkIGFycmF5IG9mIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG1pZ3JhdGUuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc0LSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzU6ICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzYtICogYXJyYXkgb2YgZGV2aWNlIHBhZ2VzIHRvIG1pZ3JhdGUuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc5LSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDgwOmludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4MS17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg3LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDg4Olx0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODktXHRcdGlmICghbnIpXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDkzLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk0Olx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTUtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk3LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ5ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3BmbnMpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk5LVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUwNTppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNi17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTE5LVx0ICovXG5tbS9taWdyYXRlX2RldmljZS5jOjE1MjA6XHRtaWdyYXRlX2RldmljZV91bm1hcChcdTAwMjZzcmNfcGZuLCAxLCBOVUxMKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUyMS1cdGlmICghKHNyY19wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUyOS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUzMDpcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKFx1MDAyNnNyY19wZm4sIFx1MDAyNmRzdF9wZm4sIDEpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTMxLVx0aWYgKHNyY19wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MzItXHRcdGZvbGlvX2NvcHkoZGZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlX2RldmljZS5jOjE1MzM6XHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShcdTAwMjZzcmNfcGZuLCBcdTAwMjZkc3RfcGZuLCAxKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDY6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNvZGUgTWlncmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZGV2aWNlLXJlbGF0ZWQgbWVtb3J5LiBUaGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZSBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIFRoZXNlIHNvdW5kIGxpa2UgdGhlIGNvcmUgY29tcG9uZW50cyBvZiBtb3ZpbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2UuCgpgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AgbGlrZWx5IGhhbmRsZXMgZ2F0aGVyaW5nIGluZm9ybWF0aW9uIG9yIHByZXBhcmluZyB0aGUgbWVtb3J5IHVuaXRzIGF0IHRoZSBmb2xpbyBsZXZlbC4gRm9saW9zIGFyZSB0aGUgcHJlZmVycmVkIG5ldyBtZW1vcnkgbWFuYWdlbWVudCB1bml0cywgYW5kIGdpdmVuIHRoZSBuYW1lLCBpdCBtaWdodCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGNvbGxlY3RpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhZ2VzIHRvIGJlIG1pZ3JhdGVkLiBJIGJldCBpdCBpcyBoYW5kbGluZyB0aGluZ3MgbGlrZSBsb2NraW5nLCBlcnJvciBjaGVja2luZywgYW5kIG1ha2luZyBzdXJlIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIHBhZ2VzIGFyZSByZWFkeS4KClRoZW4sIGBtaWdyYXRlX2RldmljZV9yYW5nZWAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gb3BlcmF0ZSBhdCBhIHJhbmdlIG9mIG1lbW9yeSBhZGRyZXNzZXMuIEl0IGxpa2VseSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBwYWdlcyBvciBzbWFsbGVyIGNodW5rcyBpZGVudGlmaWVkIGJ5IHRoZSBmb2xpbyBsZXZlbCwgb3JjaGVzdHJhdGluZyB0aGUgYWN0dWFsIGRhdGEgbW92ZW1lbnQgZm9yIGEgcGFydGljdWxhciByZWdpb24uIEnigJltIHRoaW5raW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBoYW5kbGluZyB0aGUgZGV0YWlscyBvZiB0aGUgRE1BIHRyYW5zZmVycyBvciB3aGF0ZXZlciBtZWNoYW5pc20gaXMgdXNlZCB0byBtb3ZlIGRhdGEgb24gdGhpcyBzcGVjaWZpYyBoYXJkd2FyZS4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIG1vc3QgZGV2aWNlLXNwZWNpZmljIHBhcnQgb2YgdGhlIHByb2Nlc3MuIEkgd29uZGVyIGlmIGl04oCZcyBkZXNpZ25lZCB0byBiZSBhc3luY2hyb25vdXMsIGdpdmVuIHRoZSBuYXR1cmUgb2YgZGV2aWNlIG9wZXJhdGlvbnMuCgpGaW5hbGx5LCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIE5vdywgJiMzOTtQRk4mIzM5OyB1c3VhbGx5IHJlZmVycyB0byBQaHlzaWNhbCBGcmFtZSBOdW1iZXIuIFNvLCB0aGlzIHNvdW5kcyBsaWtlIHRoZSBsb3dlc3QtbGV2ZWwgZnVuY3Rpb24sIGRlYWxpbmcgZGlyZWN0bHkgd2l0aCBpbmRpdmlkdWFsIHBoeXNpY2FsIHBhZ2VzLiBUaGlzIGlzIHByb2JhYmx5IHRoZSBsYXN0IHN0ZXA6IHRyYW5zZm9ybWluZyB0aGUgaWRlbnRpZmllZCBwYWdlcyBhbmQgYWN0dWFsbHkgdXBkYXRpbmcgdGhlaXIgZW50cmllcy4gTWlnaHQgYmUgY2hlY2tpbmcgaWYgdGhlIHBhZ2VzIGFyZSBjbGVhbiwgZGlydHksIG9yIHNoYXJlZC4gSXTigJlzIHRoZSBwb2ludCB3aGVyZSB0aGUgZGV2aWNlIG1lbW9yeSBpcyBwaHlzaWNhbGx5IG1hcHBlZCB0byB0aGUgbmV3IGxvY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0eXBlIG9mIG1pZ3JhdGlvbiBpdCBkb2VzIHRvIGRldGVybWluZSBpdHMgb3ZlcmhlYWQ6IGhvdCBtaWdyYXRpb24sIGNvbGQgbWlncmF0aW9uLCBldGMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBJcyBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AgY2FsbGVkIGZpcnN0LCBzZXR0aW5nIHRoZSBzdGFnZSwgdGhlbiBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIG1hbmFnZXMgdGhlIGJsb2NrcywgYW5kIGZpbmFsbHksIGBtaWdyYXRlX2RldmljZV9wZm5zYCBoYW5kbGVzIHRoZSBpbmRpdmlkdWFsIHBhZ2UgdHJhbnNmZXJzPyBPciBpcyB0aGUgb3JnYW5pemF0aW9uIHNsaWdodGx5IGRpZmZlcmVudD8gSXQmIzM5O3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFuZCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBjb21wbGV4aXRpZXMgb2YgZGV2aWNlIG1lbW9yeSBkdXJpbmcgdGhlIG1pZ3JhdGlvbi4gTm93IGxldCYjMzk7cyBleGFtaW5lIHRoZSBjYWxsaW5nIHN0cnVjdHVyZSBhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA2OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTA6XHRcdH1cbjEzOTE6XHRcbjEzOTI6XHRcdHJldHVybiBtaWdyYXRlX3BmbihwZm4pIHwgTUlHUkFURV9QRk5fTUlHUkFURTtcbjEzOTM6XHR9XG4xMzk0Olx0XG4xMzk1Olx0LypcbjEzOTY6XHQgKiBDb2xsZWN0IGEgZGV2aWNlIGZvbGlvIGludG8gdGhlIHBhZ2UtZ3JhbnVsYXIgUEZOIGFycmF5LlxuMTM5NzpcdCAqXG4xMzk4Olx0ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBjb25zdW1lZCwgb3IgMCBpZiB0aGUgZm9saW8gZG9lcyBub3QgZml0IGluXG4xMzk5Olx0ICogdGhlIHJlbWFpbmluZyBhcnJheS5cbjE0MDA6XHQgKi9cbjE0MDE6XHRzdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3BmbixcbjE0MDI6XHRcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBwZm4sXG4xNDAzOlx0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKVxuMTQwNDpcdHtcbjE0MDU6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKHBmbikpO1xuMTQwNjpcdFx0dW5zaWduZWQgaW50IG5yO1xuMTQwNzpcdFxuMTQwODpcdFx0KnNyY19wZm4gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pO1xuMTQwOTpcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4xNDEwOlx0XG4xNDExOlx0XHRpZiAoV0FSTl9PTl9PTkNFKG5yIFx1MDAzZSByZW1haW5pbmcpKSB7XG4xNDEyOlx0XHRcdGlmICgqc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xuMTQxMzpcdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4xNDE0Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjE0MTU6XHRcdFx0fVxuMTQxNjpcdFx0XHRtZW1zZXQoc3JjX3BmbiwgMCwgcmVtYWluaW5nICogc2l6ZW9mKCpzcmNfcGZuKSk7XG4xNDE3Olx0XHRcdHJldHVybiAwO1xuMTQxODpcdFx0fVxuMTQxOTpcdFxuMTQyMDpcdFx0aWYgKG5yIFx1MDAzZSAxKSB7XG4xNDIxOlx0XHRcdCpzcmNfcGZuIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuMTQyMjpcdFx0XHRtZW1zZXQoc3JjX3BmbiAmIzQzOyAxLCAwLCAobnIgLSAxKSAqIHNpemVvZigqc3JjX3BmbikpO1xuMTQyMzpcdFx0fVxuMTQyNDpcdFxuMTQyNTpcdFx0cmV0dXJuIG5yO1xuMTQyNjpcdH1cbjE0Mjc6XHRcbjE0Mjg6XHQvKipcbjE0Mjk6XHQgKiBtaWdyYXRlX2RldmljZV9yYW5nZSgpIC0gbWlncmF0ZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG5vcm1hbCBtZW1vcnkuXG4xNDMwOlx0ICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuXG4xNDMxOlx0ICogQHN0YXJ0OiBzdGFydGluZyBwZm4gaW4gdGhlIHJhbmdlIHRvIG1pZ3JhdGUuXG4xNDMyOlx0ICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIG1pZ3JhdGUuXG4xNDMzOlx0ICpcbjE0MzQ6XHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIGlzIHNpbWlsYXIgaW4gY29uY2VwdCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpIGV4Y2VwdCB0aGF0XG4xNDM1Olx0ICogaW5zdGVhZCBvZiBsb29raW5nIHVwIHBhZ2VzIGJhc2VkIG9uIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBhIHJhbmdlIG9mXG4xNDM2Olx0ICogZGV2aWNlIHBmbnMgdGhhdCBzaG91bGQgYmUgbWlncmF0ZWQgdG8gc3lzdGVtIG1lbW9yeSBpcyB1c2VkIGluc3RlYWQuXG4xNDM3Olx0ICpcbjE0Mzg6XHQgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgZHJpdmVyIG5lZWRzIHRvIGZyZWUgZGV2aWNlIG1lbW9yeSBidXQgZG9lc24mIzM5O3Qga25vdyB0aGVcbjE0Mzk6XHQgKiB2aXJ0dWFsIG1hcHBpbmdzIG9mIGV2ZXJ5IHBhZ2UgdGhhdCBtYXkgYmUgaW4gZGV2aWNlIG1lbW9yeS4gRm9yIGV4YW1wbGUgdGhpc1xuMTQ0MDpcdCAqIGlzIG9mdGVuIHRoZSBjYXNlIHdoZW4gYSBkcml2ZXIgaXMgYmVpbmcgdW5sb2FkZWQgb3IgdW5ib3VuZCBmcm9tIGEgZGV2aWNlLlxuMTQ0MTpcdCAqXG4xNDQyOlx0ICogTGlrZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJlbmNlIGFuZCBsb2NrIGFueVxuMTQ0MzpcdCAqIG1pZ3JhdGluZyBwYWdlcyB0aGF0IGFyZW4mIzM5O3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW5cbjE0NDQ6XHQgKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFVcbjE0NDU6XHQgKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cbjE0NDY6XHQgKlxuMTQ0NzpcdCAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyByYW5nZS5cbjE0NDg6XHQgKi9cbjE0NDk6XHRpbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4xNDUwOlx0XHRcdFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXG4xNDUxOlx0e1xuMTQ1MjpcdFx0dW5zaWduZWQgbG9uZyBpLCBwZm47XG4xNDUzOlx0XG4xNDU0Olx0XHRmb3IgKHBmbiA9IHN0YXJ0LCBpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOyBwZm4mIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuMTQ1NTpcdFx0XHR1bnNpZ25lZCBpbnQgbnI7XG4xNDU2Olx0XG4xNDU3Olx0XHRcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcbjE0NTg6XHRcdFx0aWYgKCFucilcbjE0NTk6XHRcdFx0XHRicmVhaztcbjE0NjA6XHRcdFx0aSAmIzQzOz0gbnIgLSAxO1xuMTQ2MTpcdFx0XHRwZm4gJiM0Mzs9IG5yIC0gMTtcbjE0NjI6XHRcdH1cbjE0NjM6XHRcbjE0NjQ6XHRcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xuMTQ2NTpcdFxuMTQ2NjpcdFx0cmV0dXJuIDA7XG4xNDY3Olx0fVxuMTQ2ODpcdEVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcmFuZ2UpO1xuMTQ2OTpcdFxuMTQ3MDpcdC8qKlxuMTQ3MTpcdCAqIG1pZ3JhdGVfZGV2aWNlX3BmbnMoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LlxuMTQ3MjpcdCAqIEBzcmNfcGZuczogcHJlLXBvcHVsYXRlZCBhcnJheSBvZiBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucyB0byBtaWdyYXRlLlxuMTQ3MzpcdCAqIEBucGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBtaWdyYXRlLlxuMTQ3NDpcdCAqXG4xNDc1Olx0ICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkXG4xNDc2Olx0ICogYXJyYXkgb2YgZGV2aWNlIHBhZ2VzIHRvIG1pZ3JhdGUuXG4xNDc3Olx0ICpcbjE0Nzg6XHQgKiBBIGNvbXBvdW5kIGZvbGlvIG11c3QgZml0IGVudGlyZWx5IGluIHRoZSByZW1haW5pbmcgUEZOIGFycmF5LlxuMTQ3OTpcdCAqL1xuMTQ4MDpcdGludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbjE0ODE6XHR7XG4xNDgyOlx0XHR1bnNpZ25lZCBsb25nIGk7XG4xNDgzOlx0XG4xNDg0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4xNDg1Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuID0gc3JjX3BmbnNbaV07XG4xNDg2Olx0XHRcdHVuc2lnbmVkIGludCBucjtcbjE0ODc6XHRcbjE0ODg6XHRcdFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xuMTQ4OTpcdFx0XHRpZiAoIW5yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTIxCgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDE0ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgdGhlIERldmljZSBQYWdlIE1pZ3JhdGlvbiBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHJlZmFjdG9yaW5nIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGFuZCBlbnN1cmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuCgpJbml0aWFsbHksIEkgc2VlIHRoZSByZWZhY3RvcmluZyBpcyBjZW50ZXJlZCBhcm91bmQgdGhlIHBhZ2UgbWlncmF0aW9uIHJvdXRpbmVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gIFRoZSBvcmlnaW5hbCBjb2RlLCB3aGlsZSBmdW5jdGlvbmFsLCBjb250YWluZWQgZHVwbGljYXRlZCBsb2dpYyBmb3IgY29sbGVjdGluZyBhbmQgbG9ja2luZyBwYWdlIGZyYW1lIG51bWJlcnMgKFBGTnMpLiBUaGUgcGF0Y2ggY2xlYXJseSBleHRyYWN0cyB0aGlzIGNvbW1vbmFsaXR5IGludG8gYSBuZXcgZnVuY3Rpb24sIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgLiBTbWFydCBtb3ZlIOKAkyBnb29kIGZvciBtYWludGFpbmFiaWxpdHkuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGludm9sdmVzIHRoaXMgbmV3IGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgIGZ1bmN0aW9uLCB3aGljaCBub3cgaGFuZGxlcyB0aGUgbG9ja2luZywgdGhlIGNvbXBvdW5kIHBhZ2UgZGV0ZWN0aW9uLCBhbmQgdGhlIHplcm9pbmcgb2Ygc3Vic2VxdWVudCBQRk4gZW50cmllcyBpZiBhIGNvbXBvdW5kIGZvbGlvIGlzIGZvdW5kLiBUaGUgb3JpZ2luYWwgbG9vcHMgd2l0aGluIHRoZSB0d28gbWFpbiBmdW5jdGlvbnMgYXJlIHN0cmVhbWxpbmVkIHRvIGNhbGwgdGhpcyBuZXcgdXRpbGl0eSBmdW5jdGlvbiwgcGFzc2luZyB0aGUgcmVsZXZhbnQgUEZOIGFuZCByZW1haW5pbmcgcGFnZSBjb3VudC4gVGhlIHVzZSBvZiBgbWVtc2V0YCBpcyBkZWZpbml0ZWx5IG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9yaWdpbmFsIGxvb3AgdG8gemVybyB0aGUgdHJhaWxpbmcgUEZOcyBvZiBhIGNvbXBvdW5kIHBhZ2UuCgpUaGUgZXh0cmFjdGlvbiBpcyBjbGVhbiBhbmQgdGhlIHBhcmFtZXRlciBwYXNzaW5nIGxvb2tzIHNvdW5kLiBOb3csIHRpbWUgZm9yIGEgcmlnb3JvdXMgY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCknigJltIG1ldGljdWxvdXNseSBzY2FubmluZyB0aGUgY29kZSwgY29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhIEkmIzM5O20gd2VsbCBmYW1pbGlhciB3aXRoLiBGaXJzdCwgSSBoYXZlIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbi4gTm9wZSwgdGhlIGNoYW5nZXMgc29sZWx5IGZvY3VzIG9uIGtlcm5lbC1zcGFjZSBhcnJheXMgKGBzcmNfcGZuc2ApIGludm9sdmVkIGluIGRldmljZSBtaWdyYXRpb24sIG5vdCB1c2VyLWFjY2Vzc2libGUgbWVtb3J5LgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFyZSBub3QgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBJIHNlZSBhbGwgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIOKAkyBgbnJgLCBgcGZuYCwgYGlgIGFyZSBhbGwgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEdvb2QuCgpCb3VuZHMgY2hlY2tpbmcgaXMgYWxzbyBjcnVjaWFsLiBUaGUgYFdBUk5fT05fT05DRWAgaW4gYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oKWAgbG9va3MgbGlrZSB0aGUga2V5LiBJdCYjMzk7cyBwcm9wZXJseSBwcmVzZXJ2aW5nIHRoZSBib3VuZHMgY2hlY2sgKGBuciAmZ3Q7IHJlbWFpbmluZ2ApLiBJZiB0aGUgY29uZGl0aW9uIGlzIHRydWUsIHRoZXJlIGlzIGEgYG1lbXNldGAgb24gdGhlIHJlbWFpbmluZyBlbnRyaWVzIHRvIHplcm8gdGhlbS4gSWYgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZSwgdGhlbiB0aGUgZnVuY3Rpb24gemVyb2VzIHRoZSB0cmFpbGluZyBlbnRyaWVzLiBUaGUgY29kZSBpcyBjYXJlZnVsbHkgY2hlY2tpbmcgaWYgY29tcG91bmQgZm9saW9zIHNwYW4gbXVsdGlwbGUgYXJyYXkgZW50cmllcyB0byBoYW5kbGUgdGhlbSBjb3JyZWN0bHkuCgpUaGUgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgIGZ1bmN0aW9uIGlzIGFsc28gc2FmZS4gYHBmbmAgaXMgcmVhZCBiZWZvcmUgY2FsbGluZyB0aGUgZnVuY3Rpb24gYXMgdGhlIGFyZ3VtZW50LiBUaGUgaW5kZXhpbmcgbG9va3MgY29ycmVjdCBhbmQgc2hvdWxkIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3Nlcy4gTm8gaW5mbyBsZWFrcywgY29tcGxleCBzdHJ1Y3QgYWxsb2NhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHNvIHRoZSByaXNrIGlzIGxvdy4KCkdpdmVuIHRoYXQgdGhpcyBpcyBpbnRlcm5hbCBrZXJuZWwgcmVmYWN0b3Jpbmcgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgdGhlIHBvdGVudGlhbCBidWdzIHdpbGwgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGluZGV4IGNhbGN1bGF0aW9ucywgYXJyYXkgb3V0LW9mLWJvdW5kcywgb3IgbG9ja2luZyBpc3N1ZXMgKGFsbCB0aGUgdXN1YWwgc3VzcGVjdHMpLCBhbmQgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBLQVNBTi9MT0NLREVQIHdpbGwgY2F0Y2ggdGhvc2UuCgpPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgS01TQU4gYXNzZXNzbWVudC4KCjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2Vyc3BhY2UsIHNvIG5vIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQgYXJlIGF0IHBsYXkuCjIuICBObyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLgo0LiAgTm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy4KCknigJltIGNvbmZpZGVudCB0aGUgcmVmYWN0b3JpbmcgaXMgc2FmZSBmcm9tIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBlcnNwZWN0aXZlLiBJJiMzOTttIHJlYWR5IHRvIG1hcmsgYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgYnkgZmFjdG9yaW5nIG91dCBkdXBsaWNhdGVkIGNvZGUgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCkuXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgKG5yLCBwZm4sIGkpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgZGVzdGluYXRpb24gUEZOIGFycmF5IGVudHJpZXMgYXJlIGV4cGxpY2l0bHkgd3JpdHRlbiBvciB6ZXJvZWQgdmlhIG1lbXNldCgpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9uIChlLmcuLCBhcnJheSBvdXQtb2YtYm91bmRzIGluZGV4aW5nIG9yIGZvbGlvIGxvY2tpbmcvcmVmY291bnRpbmcgaXNzdWVzKSBmYWxscyBzcXVhcmVseSB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGJ5IGZhY3RvcmluZyBvdXQgZHVwbGljYXRlZCBjb2RlIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIChuciwgcGZuLCBpKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGRlc3RpbmF0aW9uIFBGTiBhcnJheSBlbnRyaWVzIGFyZSBleHBsaWNpdGx5IHdyaXR0ZW4gb3IgemVyb2VkIHZpYSBtZW1zZXQoKS4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IGNvcHlfdG9fdXNlciBvcGVyYXRpb25zLCBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbiAoZS5nLiwgYXJyYXkgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBvciBmb2xpbyBsb2NraW5nL3JlZmNvdW50aW5nIGlzc3VlcykgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIHNjb3BlIG9mIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6MjAuMzA2NTQxNjA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0MjI4MDQ1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJURVNUX0hNTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9cIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3JhbmdlXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9wZm5zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgYnkgZmFjdG9yaW5nIG91dCBkdXBsaWNhdGVkIGNvZGUgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCkuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAobnIsIHBmbiwgaSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBkZXN0aW5hdGlvbiBQRk4gYXJyYXkgZW50cmllcyBhcmUgZXhwbGljaXRseSB3cml0dGVuIG9yIHplcm9lZCB2aWEgbWVtc2V0KCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgaW5mby1sZWFrcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb24gKGUuZy4sIGFycmF5IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgb3IgZm9saW8gbG9ja2luZy9yZWZjb3VudGluZyBpc3N1ZXMpIGZhbGxzIHNxdWFyZWx5IHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjIwLjMwNjU0NzU4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MzE0OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWEzMzk2NzQyNDU0YmVmYmEyZGQ4ZGVhZjYyMGVmNTQ1OWUzYjExNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNjo0NjoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbmluZGV4IDAwOWJmYThiMjEyZDUuLmM1N2VhZGVhNjU2NTEgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5AQCAtMTM5Miw2ICsxMzkyLDM5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRyZXR1cm4gbWlncmF0ZV9wZm4ocGZuKSB8IE1JR1JBVEVfUEZOX01JR1JBVEU7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENvbGxlY3QgYSBkZXZpY2UgZm9saW8gaW50byB0aGUgcGFnZS1ncmFudWxhciBQRk4gYXJyYXkuXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY29uc3VtZWQsIG9yIDAgaWYgdGhlIGZvbGlvIGRvZXMgbm90IGZpdCBpblxcbisgKiB0aGUgcmVtYWluaW5nIGFycmF5LlxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHBmbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKVxcbit7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKHBmbikpO1xcbitcXHR1bnNpZ25lZCBpbnQgbnI7XFxuK1xcbitcXHQqc3JjX3BmbiA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7XFxuK1xcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRShuciBcXHUwMDNlIHJlbWFpbmluZykpIHtcXG4rXFx0XFx0aWYgKCpzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xcbitcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1lbXNldChzcmNfcGZuLCAwLCByZW1haW5pbmcgKiBzaXplb2YoKnNyY19wZm4pKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChuciBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0KnNyY19wZm4gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XFxuK1xcdFxcdG1lbXNldChzcmNfcGZuICsgMSwgMCwgKG5yIC0gMSkgKiBzaXplb2YoKnNyY19wZm4pKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIG5yO1xcbit9XFxuK1xcbiAvKipcXG4gICogbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LlxcbiAgKiBAc3JjX3BmbnM6IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIG1pZ3JhdGluZyBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucy5cXG5AQCAtMTQxMCwzNSArMTQ0MywyMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcXG4gICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbid0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXFxuICAqIGFsbG9jYXRlIGRlc3RpbmF0aW9uIHBhZ2VzIGFuZCBzdGFydCBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlIHRvIENQVVxcbiAgKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cXG4rICpcXG4rICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIHJhbmdlLlxcbiAgKi9cXG4gaW50IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGksIGosIHBmbjtcXG4rXFx0dW5zaWduZWQgbG9uZyBpLCBwZm47XFxuIFxcbiBcXHRmb3IgKHBmbiA9IHN0YXJ0LCBpID0gMDsgaSBcXHUwMDNjIG5wYWdlczsgcGZuKyssIGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuLVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbnIgPSAxO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcbi1cXHRcXHRzcmNfcGZuc1tpXSA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7XFxuLVxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbi1cXHRcXHRpZiAobnIgXFx1MDAzZSBucGFnZXMgLSBpKSB7XFxuLVxcdFxcdFxcdGlmIChzcmNfcGZuc1tpXSBcXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpIHtcXG4tXFx0XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRtZW1zZXQoXFx1MDAyNnNyY19wZm5zW2ldLCAwLFxcbi1cXHRcXHRcXHQgICAgICAgKG5wYWdlcyAtIGkpICogc2l6ZW9mKCpzcmNfcGZucykpO1xcbitcXHRcXHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xcbitcXHRcXHRpZiAoIW5yKVxcbiBcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAobnIgXFx1MDAzZSAxKSB7XFxuLVxcdFxcdFxcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbi1cXHRcXHRcXHRmb3IgKGogPSAxOyBqIFxcdTAwM2MgbnI7IGorKylcXG4tXFx0XFx0XFx0XFx0c3JjX3BmbnNbaStqXSA9IDA7XFxuLVxcdFxcdFxcdGkgKz0gaiAtIDE7XFxuLVxcdFxcdFxcdHBmbiArPSBqIC0gMTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpICs9IG5yIC0gMTtcXG4rXFx0XFx0cGZuICs9IG5yIC0gMTtcXG4gXFx0fVxcbiBcXG4gXFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XFxuQEAgLTE0NTQsMzMgKzE0NzQsMjEgQEAgRVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9yYW5nZSk7XFxuICAqXFxuICAqIFNpbWlsYXIgdG8gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBidXQgc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgcHJlLXBvcHVsYXRlZFxcbiAgKiBhcnJheSBvZiBkZXZpY2UgcGFnZXMgdG8gbWlncmF0ZS5cXG4rICpcXG4rICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIFBGTiBhcnJheS5cXG4gICovXFxuIGludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGksIGo7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHNyY19wZm5zW2ldKTtcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBuciA9IDE7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuID0gc3JjX3BmbnNbaV07XFxuK1xcdFxcdHVuc2lnbmVkIGludCBucjtcXG4gXFxuLVxcdFxcdHNyY19wZm5zW2ldID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2soc3JjX3BmbnNbaV0pO1xcbi1cXHRcXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tXFx0XFx0aWYgKG5yIFxcdTAwM2UgbnBhZ2VzIC0gaSkge1xcbi1cXHRcXHRcXHRpZiAoc3JjX3BmbnNbaV0gXFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7XFxuLVxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZzcmNfcGZuc1tpXSwgMCxcXG4tXFx0XFx0XFx0ICAgICAgIChucGFnZXMgLSBpKSAqIHNpemVvZigqc3JjX3BmbnMpKTtcXG4rXFx0XFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFxcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcXG4rXFx0XFx0aWYgKCFucilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKG5yIFxcdTAwM2UgMSkge1xcbi1cXHRcXHRcXHRzcmNfcGZuc1tpXSB8PSBNSUdSQVRFX1BGTl9DT01QT1VORDtcXG4tXFx0XFx0XFx0Zm9yIChqID0gMTsgaiBcXHUwMDNjIG5yOyBqKyspXFxuLVxcdFxcdFxcdFxcdHNyY19wZm5zW2kral0gPSAwO1xcbi1cXHRcXHRcXHRpICs9IGogLSAxO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGkgKz0gbnIgLSAxO1xcbiBcXHR9XFxuIFxcbiBcXHRtaWdyYXRlX2RldmljZV91bm1hcChzcmNfcGZucywgbnBhZ2VzLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6MjAuNzY1NzQxNjkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDgyODMxNDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb1wiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfcmFuZ2VcIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BmbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgZGV2aWNlIGZvbGlvIGNvbGxlY3Rpb24gbG9naWMgaW4gbW0vbWlncmF0ZV9kZXZpY2UuYyBpbnRvIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCkgY2FsbGVkIGJ5IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYW5kIG1pZ3JhdGVfZGV2aWNlX3BmbnMoKSwgYW5kIGludHJvZHVjZXMgYSBuZXcgV0FSTl9PTl9PTkNFIGFzc2VydGlvbiB0byB2ZXJpZnkgYm91bmRzIGFnYWluc3QgdGhlIHJlbWFpbmluZyBhcnJheSBjYXBhY2l0eS4gVGhlc2UgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBjYW4gYmUgZXhlcmNpc2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB0aGUgdGVzdF9obW0gcHNldWRvLWRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYTMzOTY3NDI0NTRiZWZiYTJkZDhkZWFmNjIwZWY1NDU5ZTNiMTE2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDY6NDY6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggMDA5YmZhOGIyMTJkNS4uYzU3ZWFkZWE2NTY1MSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbkBAIC0xMzkyLDYgKzEzOTIsMzkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gbWlncmF0ZV9wZm4ocGZuKSB8IE1JR1JBVEVfUEZOX01JR1JBVEU7XG4gfVxuIFxuKy8qXG4rICogQ29sbGVjdCBhIGRldmljZSBmb2xpbyBpbnRvIHRoZSBwYWdlLWdyYW51bGFyIFBGTiBhcnJheS5cbisgKlxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY29uc3VtZWQsIG9yIDAgaWYgdGhlIGZvbGlvIGRvZXMgbm90IGZpdCBpblxuKyAqIHRoZSByZW1haW5pbmcgYXJyYXkuXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXG4rXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcGZuLFxuK1x0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHJlbWFpbmluZylcbit7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwZm5fdG9fcGFnZShwZm4pKTtcbitcdHVuc2lnbmVkIGludCBucjtcbitcbitcdCpzcmNfcGZuID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2socGZuKTtcbitcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShuciBcdTAwM2UgcmVtYWluaW5nKSkge1xuK1x0XHRpZiAoKnNyY19wZm4gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpIHtcbitcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRcdH1cbitcdFx0bWVtc2V0KHNyY19wZm4sIDAsIHJlbWFpbmluZyAqIHNpemVvZigqc3JjX3BmbikpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmIChuciBcdTAwM2UgMSkge1xuK1x0XHQqc3JjX3BmbiB8PSBNSUdSQVRFX1BGTl9DT01QT1VORDtcbitcdFx0bWVtc2V0KHNyY19wZm4gKyAxLCAwLCAobnIgLSAxKSAqIHNpemVvZigqc3JjX3BmbikpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yO1xuK31cbitcbiAvKipcbiAgKiBtaWdyYXRlX2RldmljZV9yYW5nZSgpIC0gbWlncmF0ZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG5vcm1hbCBtZW1vcnkuXG4gICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuXG5AQCAtMTQxMCwzNSArMTQ0MywyMiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcbiAgKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJ3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW5cbiAgKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFVcbiAgKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cbisgKlxuKyAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyByYW5nZS5cbiAgKi9cbiBpbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBpLCBqLCBwZm47XG4rXHR1bnNpZ25lZCBsb25nIGksIHBmbjtcbiBcbiBcdGZvciAocGZuID0gc3RhcnQsIGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IHBmbisrLCBpKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdFx0dW5zaWduZWQgaW50IG5yID0gMTtcbitcdFx0dW5zaWduZWQgaW50IG5yO1xuIFxuLVx0XHRzcmNfcGZuc1tpXSA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHBmbik7XG4tXHRcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuLVx0XHRpZiAobnIgXHUwMDNlIG5wYWdlcyAtIGkpIHtcbi1cdFx0XHRpZiAoc3JjX3BmbnNbaV0gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpIHtcbi1cdFx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHRcdH1cbi1cdFx0XHRtZW1zZXQoXHUwMDI2c3JjX3BmbnNbaV0sIDAsXG4tXHRcdFx0ICAgICAgIChucGFnZXMgLSBpKSAqIHNpemVvZigqc3JjX3BmbnMpKTtcbitcdFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xuK1x0XHRpZiAoIW5yKVxuIFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGlmIChuciBcdTAwM2UgMSkge1xuLVx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqKyspXG4tXHRcdFx0XHRzcmNfcGZuc1tpK2pdID0gMDtcbi1cdFx0XHRpICs9IGogLSAxO1xuLVx0XHRcdHBmbiArPSBqIC0gMTtcbi1cdFx0fVxuK1x0XHRpICs9IG5yIC0gMTtcbitcdFx0cGZuICs9IG5yIC0gMTtcbiBcdH1cbiBcbiBcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xuQEAgLTE0NTQsMzMgKzE0NzQsMjEgQEAgRVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9yYW5nZSk7XG4gICpcbiAgKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWRcbiAgKiBhcnJheSBvZiBkZXZpY2UgcGFnZXMgdG8gbWlncmF0ZS5cbisgKlxuKyAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyBQRk4gYXJyYXkuXG4gICovXG4gaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgaSwgajtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaSsrKSB7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2Uoc3JjX3BmbnNbaV0pO1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi1cdFx0dW5zaWduZWQgaW50IG5yID0gMTtcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4gPSBzcmNfcGZuc1tpXTtcbitcdFx0dW5zaWduZWQgaW50IG5yO1xuIFxuLVx0XHRzcmNfcGZuc1tpXSA9IG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHNyY19wZm5zW2ldKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tXHRcdGlmIChuciBcdTAwM2UgbnBhZ2VzIC0gaSkge1xuLVx0XHRcdGlmIChzcmNfcGZuc1tpXSBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xuLVx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0fVxuLVx0XHRcdG1lbXNldChcdTAwMjZzcmNfcGZuc1tpXSwgMCxcbi1cdFx0XHQgICAgICAgKG5wYWdlcyAtIGkpICogc2l6ZW9mKCpzcmNfcGZucykpO1xuK1x0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG4rXHRcdGlmICghbnIpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aWYgKG5yIFx1MDAzZSAxKSB7XG4tXHRcdFx0c3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XG4tXHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnI7IGorKylcbi1cdFx0XHRcdHNyY19wZm5zW2kral0gPSAwO1xuLVx0XHRcdGkgKz0gaiAtIDE7XG4tXHRcdH1cbitcdFx0aSArPSBuciAtIDE7XG4gXHR9XG4gXG4gXHRtaWdyYXRlX2RldmljZV91bm1hcChzcmNfcGZucywgbnBhZ2VzLCBOVUxMKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjIwLjc2NTc0Mzk2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxMTg1MjI2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGb2xpbyBDb2xsZWN0aW9uIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBleGlzdGluZyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgZnVuY3Rpb25zLiBUaGlzIHR5cGUgb2YgbW9kdWxhcml6YXRpb24gaXMgZ2VuZXJhbGx5IGEgZ29vZCBzaWduIOKAkyBjbGVhbmVyIGNvZGUsIHBvdGVudGlhbGx5IGVhc2llciBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLCBob3BlZnVsbHkgbGVhZGluZyB0byBmZXdlciBlcnJvcnMuIEkgc2VlIGEgbmV3IGBXQVJOX09OX09OQ0VgIGluIHRoZSBoZWxwZXIuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9uIHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZiBmb2xpb3MgYmVpbmcgY29sbGVjdGVkLiBJdCB3YXJyYW50cyBjbG9zZXIgaW5zcGVjdGlvbi5cblxuTm93LCBJIHdhbnQgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNhbGxlcnMgZXhpc3QgZm9yIHRoaXMgbmV3IGZ1bmN0aW9uLCB3aGF0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBuZWNlc3NhcnkgdG8gZW5hYmxlIHRoaXMgY29kZSBwYXRoLCBhbmQgd2hldGhlciB0aGlzIGlzIGEgY29kZSBhcmVhIHRoYXQncyByZWFjaGFibGUgZW5vdWdoIHRvIGJlIHdvcnRoIGZ1cnRoZXIgZnV6emluZyBvciBtb3JlIGluLWRlcHRoIHRlc3RpbmcuIEknbSB0aGlua2luZyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBlZmZpY2llbnRseSBpcyB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBtbS9taWdyYXRlX2RldmljZS5jYCBhbmQgYWxzbyBxdWlja2x5IGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSB0byBpZGVudGlmeSBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHJlYWNoYWJpbGl0eSBhbmQgZGVwZW5kZW5jaWVzIGlzIGtleSBoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjExLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6MjcuODg0MjY4NTExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODAwOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfZGV2aWNlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjMxNj1taWdyYXRlX2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKHN0cnVjdCBsaXN0X2hlYWQgKm1vdmFibGVfZm9saW9fbGlzdCxcXG4tLVxcbm1tL2d1cC5jLTIzMzQtXFxubW0vZ3VwLmM6MjMzNTpcXHRcXHRcXHRpZiAobWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oZm9saW8pKSB7XFxubW0vZ3VwLmMtMjMzNi1cXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTEyNjM9dm9pZCBmcmVlX3pvbmVfZGV2aWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmg6MTI2NDppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaW50ZXJuYWwuaC0xMjY1LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01NDI9c3RhdGljIGJvb2wgbWlncmF0ZV92bWFfY2hlY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2UgKmZhdWx0X3BhZ2UpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTU3MC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjU3MTpzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV91bm1hcCh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTU3Mi1cXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz02NzA9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjcxLXtcXG5tbS9taWdyYXRlX2RldmljZS5jOjY3MjpcXHRtaWdyYXRlLVxcdTAwM2VjcGFnZXMgPSBtaWdyYXRlX2RldmljZV91bm1hcChtaWdyYXRlLVxcdTAwM2VzcmMsIG1pZ3JhdGUtXFx1MDAzZW5wYWdlcyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTY3My1cXHRcXHRcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VmYXVsdF9wYWdlKTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTc2PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTEwOC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjExMDk6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTExMTAtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTM4LVxcdFxcdFxcdCAqIFRoZSBvbmx5IHRpbWUgdGhlcmUgaXMgbm8gdm1hIGlzIHdoZW4gY2FsbGVkIGZyb21cXG5tbS9taWdyYXRlX2RldmljZS5jOjExMzk6XFx0XFx0XFx0ICogbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oKS4gSG93ZXZlciB0aGlzIGlzbid0XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTQwLVxcdFxcdFxcdCAqIGNhbGxlZCBpZiB0aGUgcGFnZSBjb3VsZCBub3QgYmUgdW5tYXBwZWQuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjItLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjYzOiAqIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCkgLSBtaWdyYXRlIG1ldGEtZGF0YSBmcm9tIHNyYyBwYWdlIHRvIGRzdCBwYWdlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjY0OiAqIEBzcmNfcGZuczogc3JjX3BmbnMgcmV0dXJuZWQgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjY1LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjcwLSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI3MTp2b2lkIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNzItXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjczLXtcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzQ6XFx0X19taWdyYXRlX2RldmljZV9wYWdlcyhzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcywgTlVMTCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjc1LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzY6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjc3LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjg2PXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI4Ny17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjg4OlxcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMobWlncmF0ZS1cXHUwMDNlc3JjLCBtaWdyYXRlLVxcdTAwM2Vkc3QsIG1pZ3JhdGUtXFx1MDAzZW5wYWdlcywgbWlncmF0ZSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjg5LX1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEyOTA9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9wYWdlcyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjkxLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI5MjpzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI5My1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM0NC0vKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM0NTogKiBtaWdyYXRlX2RldmljZV9maW5hbGl6ZSgpIC0gY29tcGxldGUgcGFnZSBtaWdyYXRpb25cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNDY6ICogQHNyY19wZm5zOiBzcmNfcGZucyByZXR1cm5lZCBmcm9tIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDctICogQGRzdF9wZm5zOiBhcnJheSBvZiBwZm5zIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIHRvIG1pZ3JhdGUgbWVtb3J5IHRvXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTMtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzU0OnZvaWQgbWlncmF0ZV9kZXZpY2VfZmluYWxpemUodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU1LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1Ni17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzU3OlxcdHJldHVybiBfX21pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHNyY19wZm5zLCBkc3RfcGZucywgbnBhZ2VzLCBOVUxMKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTgtfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1OTpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNjAtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNzI9dm9pZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzczLXtcXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNzQ6XFx0X19taWdyYXRlX2RldmljZV9maW5hbGl6ZShtaWdyYXRlLVxcdTAwM2VzcmMsIG1pZ3JhdGUtXFx1MDAzZWRzdCwgbWlncmF0ZS1cXHUwMDNlbnBhZ2VzLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3NS1cXHRcXHRcXHRcXHQgIG1pZ3JhdGUtXFx1MDAzZWZhdWx0X3BhZ2UpO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzc3PUVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfZmluYWxpemUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3OC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNzk6c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzgwLXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MDE6c3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwNy1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MDg6XFx0KnNyY19wZm4gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwOS1cXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQyOC0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0Mjk6ICogbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5Llxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQzMC0gKiBAc3JjX3BmbnM6IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIG1pZ3JhdGluZyBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucy5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0NC0gKiBhbGxvY2F0ZSBkZXN0aW5hdGlvbiBwYWdlcyBhbmQgc3RhcnQgY29weWluZyBkYXRhIGZyb20gdGhlIGRldmljZSB0byBDUFVcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NDU6ICogbWVtb3J5IGJlZm9yZSBjYWxsaW5nIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCkuXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDQ2LSAqXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDgtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDQ5OmludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTAtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTYtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDU3OlxcdFxcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDU4LVxcdFxcdGlmICghbnIpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjMtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDY0OlxcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2NS1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2Ny19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDY4OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcmFuZ2UpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2OS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzAtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDcxOiAqIG1pZ3JhdGVfZGV2aWNlX3BmbnMoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5Llxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Mi0gKiBAc3JjX3BmbnM6IHByZS1wb3B1bGF0ZWQgYXJyYXkgb2Ygc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbWlncmF0ZS5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3NC0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3NTogKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWRcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzYtICogYXJyYXkgb2YgZGV2aWNlIHBhZ2VzIHRvIG1pZ3JhdGUuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzktICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDgwOmludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODEte1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg3LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4ODpcXHRcXHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4OS1cXHRcXHRpZiAoIW5yKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDkzLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ5NDpcXHRtaWdyYXRlX2RldmljZV91bm1hcChzcmNfcGZucywgbnBhZ2VzLCBOVUxMKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTUtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTctfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ5ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3BmbnMpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5OS1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjE1MDU6aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTA2LXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUxOS1cXHQgKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjE1MjA6XFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoXFx1MDAyNnNyY19wZm4sIDEsIE5VTEwpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUyMS1cXHRpZiAoIShzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MjktXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTMwOlxcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKFxcdTAwMjZzcmNfcGZuLCBcXHUwMDI2ZHN0X3BmbiwgMSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTMxLVxcdGlmIChzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MzItXFx0XFx0Zm9saW9fY29weShkZm9saW8sIGZvbGlvKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjE1MzM6XFx0bWlncmF0ZV9kZXZpY2VfZmluYWxpemUoXFx1MDAyNnNyY19wZm4sIFxcdTAwMjZkc3RfcGZuLCAxKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjI3Ljk0MTA3NjQwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MzQwOTk2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgVXNhZ2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRob3NlIGBtaWdyYXRlX2RldmljZV8qYCBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlIGV4YWN0bHkgYXJlIHRoZXNlIGNhbGxlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWw/XCIgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgdXNhZ2UgY29udGV4dCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgdGhlaXIgaW1wYWN0IG9yIHBvdGVudGlhbCBpc3N1ZXMuIEknbGwgbmVlZCB0byBpZGVudGlmeSBhbGwgY2FsbCBzaXRlcyBmb3IgYm90aCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdHJhY2tpbmcgZG93biBldmVyeSBpbnN0YW5jZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2guIFdoYXQgYXJjaGl0ZWN0dXJlcyBhbmQgc3Vic3lzdGVtcyBhcmUgdGhleSB0b3VjaGluZz8gQXJlIHRoZXNlIGNvcmUgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3IgbW9yZSBwZXJpcGhlcmFsPyBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBvciBwb3RlbnRpYWwgcmVmYWN0b3JpbmcuIEknbGwgaGF2ZSB0byBsb29rIGZvciBpbmRpcmVjdCBjYWxscywgY29uZGl0aW9uYWwgaW52b2NhdGlvbnMsIGFuZCBhbnkgc3BlY2lhbCB1c2UgY2FzZXMuIEl0J3MgZ29pbmcgdG8gYmUgYSBkZWVwIGRpdmUsIGJ1dCBhIG5lY2Vzc2FyeSBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzEsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NjozMC43NzUxNzk5MTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2NTk3NzQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZV8ocmFuZ2V8cGZucylcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9OTE2PXN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTUxLVxcdFxcdCAqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgb3IsIGZvciB0aGUgZXZpY3Rpb24gcGF0aCwgYnlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5NTI6XFx0XFx0ICogbWlncmF0ZV9kZXZpY2VfcGZucygpLiBCb3RoIHRoZSBvcmRlci0wIGZhbGxiYWNrIGJlbG93IGFuZFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk1My1cXHRcXHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIHJlbHkgb24gdGhhdCwgYXNcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEzMTI9aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNDUtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM0NjpcXHRlcnIgPSBtaWdyYXRlX2RldmljZV9wZm5zKHNyYywgbnBhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzQ3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz00ODk9bm91dmVhdV9kbWVtX2V2aWN0X2NodW5rKHN0cnVjdCBub3V2ZWF1X2RtZW1fY2h1bmsgKmNodW5rKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtNDk5LVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjUwMDpcXHRtaWdyYXRlX2RldmljZV9yYW5nZShzcmNfcGZucywgY2h1bmstXFx1MDAzZXBhZ2VtYXAucmFuZ2Uuc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy01MDEtXFx0XFx0XFx0bnBhZ2VzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE5Nz12b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTk4OmludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xOTktXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjIwMDppbnQgbWlncmF0ZV9kZXZpY2VfcGZucyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTIwMS12b2lkIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nICpkc3RfcGZucyxcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE4OD1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXFxuLS1cXG5saWIvdGVzdF9obW0uYy0yMDAtXFxubGliL3Rlc3RfaG1tLmM6MjAxOlxcdG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHNyY19wZm5zLCBzdGFydF9wZm4sIG5wYWdlcyk7XFxubGliL3Rlc3RfaG1tLmMtMjAyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7IGkrKykge1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMTA5PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjMtICogbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSAtIG1pZ3JhdGUgbWV0YS1kYXRhIGZyb20gc3JjIHBhZ2UgdG8gZHN0IHBhZ2VcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNjQ6ICogQHNyY19wZm5zOiBzcmNfcGZucyByZXR1cm5lZCBmcm9tIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNjUtICogQGRzdF9wZm5zOiBhcnJheSBvZiBwZm5zIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIHRvIG1pZ3JhdGUgbWVtb3J5IHRvXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEyOTI9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9maW5hbGl6ZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM0NS0gKiBtaWdyYXRlX2RldmljZV9maW5hbGl6ZSgpIC0gY29tcGxldGUgcGFnZSBtaWdyYXRpb25cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNDY6ICogQHNyY19wZm5zOiBzcmNfcGZucyByZXR1cm5lZCBmcm9tIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDctICogQGRzdF9wZm5zOiBhcnJheSBvZiBwZm5zIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIHRvIG1pZ3JhdGUgbWVtb3J5IHRvXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0MDE9c3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MjgtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDI5OiAqIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MzAtICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDgtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDQ5OmludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTAtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucGFnZXMpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjctfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjktXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDcwLS8qKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3MTogKiBtaWdyYXRlX2RldmljZV9wZm5zKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzItICogQHNyY19wZm5zOiBwcmUtcG9wdWxhdGVkIGFycmF5IG9mIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG1pZ3JhdGUuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzQtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzU6ICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc2LSAqIGFycmF5IG9mIGRldmljZSBwYWdlcyB0byBtaWdyYXRlLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc5LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4MDppbnQgbWlncmF0ZV9kZXZpY2VfcGZucyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgxLXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5Ny19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk4OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGZucyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NjozMy4zNDExNjMyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NjI4Njc3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEhNTSBUZXN0IEhhcm5lc3MqKlxuXG5SaWdodCwgbXkgYXR0ZW50aW9uJ3MgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhhdCBgbGliL3Rlc3RfaG1tLmNgIGZpbGUuIEhtbSwgYSBoaWRkZW4gTWFya292IG1vZGVsIHRlc3QsIGludGVyZXN0aW5nISBNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvICpkZWVwIGRpdmUqIGludG8gYHRlc3RfaG1tLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIGtub3cgZXhhY3RseSB3aGF0IHRoZSB0ZXN0IGRvZXMsIHRoZSB0ZXN0IHN0cmF0ZWd5IHVzZWQsIGFuZCBob3cgaXQgaXMgZW1wbG95ZWQgd2l0aGluIHRoZSBvdmVyYWxsIHRlc3RpbmcgZnJhbWV3b3JrLlxuXG5CZXlvbmQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRlc3QgaXRzZWxmLCBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3Vycm91bmRpbmcgYERFVklDRV9QUklWQVRFYCBhbmQgYE1JR1JBVEVfREVWSUNFYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZXkgbWF5IGJlIHJlbGF0ZWQgdG8gZGV2aWNlIG1hbmFnZW1lbnQgb3IgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVpciBzZXR0aW5ncyBjb3VsZCBoYXZlIGEgZGlyZWN0IGltcGFjdCBvbiBob3cgdGhlIEhNTSB0ZXN0IGZ1bmN0aW9ucywgb3IgZXZlbiB3aGV0aGVyIGl0J3MgZW5hYmxlZCBhdCBhbGwuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoYXQgdGhlIHRlc3QgaXMgYWN0dWFsbHkgcnVubmluZyBpbiB0aGUgZXhwZWN0ZWQgZW52aXJvbm1lbnQsIGFuZCBub3QgZ2V0dGluZyB1bmludGVudGlvbmFsbHkgc2tpcHBlZCBvciBjb25maWd1cmVkIGludG8gYSBiYWQgc3RhdGUuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIHRlc3QgZW52aXJvbm1lbnQgbWF0Y2hlcyB0aGUgaW50ZW5kZWQgZW52aXJvbm1lbnQgZm9yIHRoZSBITU0gaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMjEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NjozNS44MDQwMzUxNTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMDYzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9kZXZpY2UuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZ3VwLmM9MjMxNj1taWdyYXRlX2xvbmd0ZXJtX3VucGlubmFibGVfZm9saW9zKHN0cnVjdCBsaXN0X2hlYWQgKm1vdmFibGVfZm9saW9fbGlzdCxcXG4tLVxcbm1tL2d1cC5jLTIzMzQtXFxubW0vZ3VwLmM6MjMzNTpcXHRcXHRcXHRpZiAobWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oZm9saW8pKSB7XFxubW0vZ3VwLmMtMjMzNi1cXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTEyNjM9dm9pZCBmcmVlX3pvbmVfZGV2aWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmg6MTI2NDppbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaW50ZXJuYWwuaC0xMjY1LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMTA5PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTExMzgtXFx0XFx0XFx0ICogVGhlIG9ubHkgdGltZSB0aGVyZSBpcyBubyB2bWEgaXMgd2hlbiBjYWxsZWQgZnJvbVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTEzOTpcXHRcXHRcXHQgKiBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbygpLiBIb3dldmVyIHRoaXMgaXNuJ3RcXG5tbS9taWdyYXRlX2RldmljZS5jLTExNDAtXFx0XFx0XFx0ICogY2FsbGVkIGlmIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSB1bm1hcHBlZC5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MDE6c3RhdGljIHVuc2lnbmVkIGludCBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgKnNyY19wZm4sXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ0OT1pbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NTYtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDU3OlxcdFxcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDU4LVxcdFxcdGlmICghbnIpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0ODA9aW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDg3LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4ODpcXHRcXHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4OS1cXHRcXHRpZiAoIW5yKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDk4PUVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGZucyk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MDQtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTA1OmludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjM1Ljg2NDI0NzkyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3OTMyMzA0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBDb25maWd1cmF0aW9uIGZvciBgbWlncmF0ZV9kZXZpY2UuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYG1pZ3JhdGVfZGV2aWNlLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gbGF5cyBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29tcGlsYXRpb24gcnVsZXMgZm9yIGZpbGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBCeSBleGFtaW5pbmcgdGhlIE1ha2VmaWxlLCBJIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGBDT05GSUdgIG9wdGlvbnMsIGlmIGFueSwgYG1pZ3JhdGVfZGV2aWNlLmNgIGdldHMgY29tcGlsZWQuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoaWNoIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyBpdCdzIGludGVuZGVkIHRvIHN1cHBvcnQuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBMZXQncyBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjQ1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6MzcuNjU3NDgzNjE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcyODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6MzcuNzA5MjIxNjI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTkxNTM3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIHdhbGtpbmcgdGhyb3VnaCBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2NvbmZpZyBSZXZpZXcgLSBDb25maWd1cmF0aW9uIFNjZW5hcmlvcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBjaGVjayBhIGZldyBzcGVjaWZpYyBLY29uZmlnIHN5bWJvbHMsIG5hbWVseSBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gLCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCwgYW5kIGBDT05GSUdfVEVTVF9ITU1fVUFQSWAuIFRoaW5raW5nIHRocm91Z2ggdGhpcywgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCdzIHRoZSBnZW5lcmFsIGFyZWEgdGhlc2UgY29uZmlndXJhdGlvbnMgcmVsYXRlIHRvPyBCYXNlZCBvbiB0aGUgbmFtaW5nLCBJJ20gZ3Vlc3NpbmcgdGhpcyByZXZvbHZlcyBhcm91bmQgZGV2aWNlIG1hbmFnZW1lbnQgYW5kIHVzZXItc3BhY2UgQVBJIGludGVyYWN0aW9ucywgcG9zc2libHkgZXZlbiB0ZXN0aW5nIGVudmlyb25tZW50cy5cblxuKiAgIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmA6IFRoaXMgc291bmRzIGxpa2UgaXQgZGVhbHMgd2l0aCBob3cgZGV2aWNlcyBhcmUgbW92ZWQgb3IgcmUtYXNzaWduZWQgd2l0aGluIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgdmFsdWVzIGZvciB0aGlzIGZsYWcgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hhdCB0cmlnZ2VycyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGNvbmZpZy4gV2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgZG9lcyBpdCByZWx5IG9uPyBXaGF0IG1vZHVsZXMgb3IgZHJpdmVycyBkb2VzIGl0IGFmZmVjdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcz8gSXMgdGhpcyByZWxhdGVkIHRvIGhvdHBsdWdnaW5nLCBwZXJzaXN0ZW50IHN0b3JhZ2UsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuXG4qICAgYENPTkZJR19ERVZJQ0VfUFJJVkFURWA6IFRoZSBcInByaXZhdGVcIiBhc3BlY3QgaXMgaW50cmlndWluZy4gVGhpcyBsaWtlbHkgcmVsYXRlcyB0byBhY2Nlc3MgY29udHJvbCBhbmQgc2VjdXJpdHkgYXJvdW5kIGRldmljZSByZXNvdXJjZXMuIEkgc2hvdWxkIGNvbnNpZGVyIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBzZWN1cml0eSBtb2RlbHMuIERvZXMgaXQgaW1wbHkgdGhhdCBhIGdpdmVuIGRldmljZSBpcyAqb25seSogYWNjZXNzaWJsZSB0byBjZXJ0YWluIHByb2Nlc3NlcyBvciBhIHBhcnRpY3VsYXIgc2V0IG9mIHVzZXJzPyBDb3VsZCB0aGlzIGJlIHJlbGF0ZWQgdG8gaXNvbGF0aW9uLCBvciBldmVuIHBhcnRpdGlvbmluZz8gSSBuZWVkIHRvIHJldmlldyByZWxhdGVkIGRvY3VtZW50YXRpb24uXG5cbiogICBgQ09ORklHX1RFU1RfSE1NX1VBUElgOiBUaGlzIGlzIHByZXR0eSBjbGVhci4gVGhpcyBpcyBwcm9iYWJseSBhIHRlc3RpbmcgcmVsYXRlZCBjb25maWd1cmF0aW9uLCBsaWtlbHkgZm9yIHNvbWUgc29ydCBvZiB1c2VyLXNwYWNlIGludGVyZmFjZS4gXCJITU1cIiBoaW50cyBhdCBzb21lIGhhcmR3YXJlIG1lbW9yeSBtYW5hZ2VtZW50LiBJcyBpdCBmb3IgdGVzdGluZyB1c2VyLXNwYWNlIGludGVyYWN0aW9ucyB3aXRoIGRldmljZSBkcml2ZXJzPyBPciB2YWxpZGF0aW5nIGEgbWVtb3J5LW1hbmFnZW1lbnQgbWVjaGFuaXNtIGZvciB0aGUga2VybmVsPyBNeSBmaXJzdCBzdGVwIGlzIGdvaW5nIHRvIGJlIHRvIGxvb2sgZm9yIFwiSE1NXCIgaW4gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uLiBXaGF0IHRlc3RzIGFyZSBlbmFibGVkIHdoZW4gdGhpcyBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQ/IFdoYXQgYnVpbGQgZW52aXJvbm1lbnQgaXMgcmVxdWlyZWQ/XG5cblVsdGltYXRlbHksIHRoaXMgaXMgYSBzeXN0ZW1hdGljIHByb2Nlc3MuIEkgd2lsbCByZXZpZXcgZWFjaCBzeW1ib2wncyBkZWZpbml0aW9uLCBoZWxwIHRleHQsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzLiBJJ2xsIGxpa2VseSBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgYWdhaW5zdCByZWxldmFudCBkb2N1bWVudGF0aW9uIGFuZCBleGlzdGluZyBjb2RlIGNvbW1lbnRzIGluIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZWlyIGZ1bmN0aW9uIGFuZCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTUzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6NDEuODY4Mzc4MjM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY5MjIxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njc5PWNvbmZpZyBNSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjgyLVxcbm1tL0tjb25maWc6NjgzOmNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODQtXFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjQ0LjAzNzYwNTEwOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDYzMjI5OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmU6IEludmVzdGlnYXRpbmcgWk9ORV9ERVZJQ0UgYW5kIFRFU1RfSE1NKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggYFpPTkVfREVWSUNFYCBhbmQgYFRFU1RfSE1NYC5cIiBJJ20gbWVudGFsbHkgY2hlY2tpbmcgdGhlaXIgZGVmaW5pdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGxvb2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0czpcblxuKiAgICoqYFpPTkVfREVWSUNFYDoqKiBJcyB0aGlzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQ/IEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSAtIElzIGl0IHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmU/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBOVU1BIG5vZGVzIG9yIHNwZWNpZmljIGhhcmR3YXJlPyBXaGF0IGltcGFjdCBkb2VzIGl0IGhhdmUgb24gdGhlIG1lbW9yeSBhbGxvY2F0b3IgYW5kIHJlY2xhaW1lcnM/IEFueSBwb3RlbnRpYWwgaW1wYWN0IG9uIG1lbW9yeSBob3RwbHVnP1xuXG4qICAgKipgVEVTVF9ITU1gOioqIEknbSBndWVzc2luZyB0aGlzIGlzIGxpa2VseSBhIHRlc3QgY2FzZSBvciBzb21lIHNvcnQgb2YgcHJvb2Ytb2YtY29uY2VwdCBmb3IgYSBoZXRlcm9nZW5lb3VzIG1lbW9yeSBtYW5hZ2VtZW50IChITU0pIGZlYXR1cmUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgSE1NIGltcGxlbWVudGF0aW9uIGl0J3MgdGVzdGluZy4gSXMgdGhpcyByZWxhdGVkIHRvIHRoZSBtb3JlIG1hdHVyZSBITU0gZnJhbWV3b3JrLCBvciBpcyBpdCBhbiBvbGRlciBvciBleHBlcmltZW50YWwgaW1wbGVtZW50YXRpb24/IFdoYXQncyB0aGUgdGVzdCBjYXNlIGFjdHVhbGx5IGRvaW5nPyBJcyBpdCBleGVyY2lzaW5nIHRoZSBiYXNpYyBITU0gQVBJLCB0ZXN0aW5nIG1lbW9yeSBtaWdyYXRpb24sIG9yIHZlcmlmeWluZyBzcGVjaWZpYyBjb3JuZXIgY2FzZXM/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28sIGlmIGFueS4gSXMgYFRFU1RfSE1NYCBkZXBlbmRlbnQgb24gYFpPTkVfREVWSUNFYCwgb3IgYXJlIHRoZXkgb3J0aG9nb25hbD8gSXMgdGhlIHRlc3QgZXZlbiBzdGlsbCByZWxldmFudCwgb3IgaXMgaXQgYW4gYXJ0aWZhY3Qgb2YgYW4gb2xkZXIgZmVhdHVyZSB0aGF0J3Mgc2luY2UgYmVlbiByZXBsYWNlZD8gQ2hlY2tpbmcgdmVyc2lvbiBoaXN0b3J5IGluIGdpdCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBcIndoeVwiIGFuZCBcImhvd1wiLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjUwLjEwMDgzNzk1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzNDQ1OTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJURVNUX0hNTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE3PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjQtXFxubGliL0tjb25maWcuZGVidWc6MzMyNTpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI2LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuLS1cXG5saWIvTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19URVNUX0xPQ0tVUCkgKz0gdGVzdF9sb2NrdXAub1xcbmxpYi9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX1RFU1RfSE1NKSArPSB0ZXN0X2htbS5vXFxubGliL01ha2VmaWxlLTEwNS1vYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSArPSB0ZXN0X2ZyZWVfcGFnZXMub1xcbi0tXFxubGliL3Rlc3RfaG1tX3VhcGkuaC02LSAqL1xcbmxpYi90ZXN0X2htbV91YXBpLmg6NzojaWZuZGVmIF9MSUJfVEVTVF9ITU1fVUFQSV9IXFxubGliL3Rlc3RfaG1tX3VhcGkuaDo4OiNkZWZpbmUgX0xJQl9URVNUX0hNTV9VQVBJX0hcXG5saWIvdGVzdF9obW1fdWFwaS5oLTktXFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oPTc1PWVudW0ge1xcbi0tXFxubGliL3Rlc3RfaG1tX3VhcGkuaC04MC1cXG5saWIvdGVzdF9obW1fdWFwaS5oOjgxOiNlbmRpZiAvKiBfTElCX1RFU1RfSE1NX1VBUElfSCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTU9Q09ORklHX0RFVklDRV9QUklWQVRFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc6NjpDT05GSUdfVEVTVF9ITU09bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZy03LUNPTkZJR19HVVBfVEVTVD15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaD0yMT1jaGVja190ZXN0X3JlcXVpcmVtZW50cygpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0zNS1cXHRcXHRlY2hvIFxcXCIkMDogWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWw6XFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoOjM2OlxcdFxcdGVjaG8gXFxcIkNPTkZJR19URVNUX0hNTT1tXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoLTM3LVxcdFxcdGV4aXQgJGtzZnRfc2tpcFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0Njo1Mi4xMzUzMDM3NDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwMTEwOTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgbGliL0tjb25maWcuZGVidWdgIGFuZCBgVEVTVF9ITU1gKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbGliL0tjb25maWcuZGVidWdgIGZpbGUuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgcmVsZXZhbnQgYXJvdW5kIGBURVNUX0hNTWAuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyB0aGVyZSdzIHByb2JhYmx5IGEgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoYXQgc3ltYm9sLiBUaGlzIGxpa2VseSBtZWFucyBzb21lIGRlYnVnZ2luZyBmZWF0dXJlcywgcG9zc2libHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBvciBzb21lIHNwZWNpZmljIGhhcmR3YXJlIHRlc3RzLCBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGlzIGBURVNUX0hNTWAgc2V0dGluZy4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBjb25mbGljdGluZyBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIHJldmVhbGVkIGFzIEkgbG9vayBhdCB0aGUgY29udGV4dCBhcm91bmQgdGhhdCBzeW1ib2wuIEknbSBnb2luZyB0byBsb29rIGZvciBkZWZpbml0aW9ucywgY29uZGl0aW9uYWwgYmxvY2tzICggYGlmYCBzdGF0ZW1lbnRzKSwgYW5kIGFueSByZWZlcmVuY2VzIHRvIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBzeW1ib2xzLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBJJ20gbG9va2luZyBmb3IgdGhlIGxvZ2ljIHRoYXQgY29udHJvbHMgd2hldGhlciBhIHBhcnRpY3VsYXIgdGVzdCBvciBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0eSByZWxhdGluZyB0byBITU0gKHBlcmhhcHMgSGFyZHdhcmUgTWFuYWdlZCBNZW1vcnk/KSBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIExldCdzIGdldCBjcmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNjIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0Njo1NC4yMzY0MTYyODZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjYyODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBURVNUX0hNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE3PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjQtXFxubGliL0tjb25maWcuZGVidWc6MzMyNTpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI2LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ2OjU0LjI4NzA4NDQ5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTI0OTUyNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGdyYW51bGFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbGliL0tjb25maWcuZGVidWdgIGFuZCBmb2N1cyBvbiBsaW5lcyAzMzIwIHRocm91Z2ggMzM1MC4gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBwYXJzZSB0aGUgbGlrZWx5IGNvbnRlbnQ6IGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGRlYnVnIGZlYXR1cmUsIGxpa2VseSBhIGNvbXBsZXggb25lIGp1ZGdpbmcgYnkgdGhlIGZhY3QgdGhhdCBpdCdzIHdpdGhpbiBhIEtjb25maWcgZmlsZS4gSSdsbCBiZSBsb29raW5nIGZvciBrZXl3b3JkcyBsaWtlIFwiZGVidWcsXCIgXCJ0cmFjaW5nLFwiIFwibG9nZ2luZyxcIiBvciBzcGVjaWZpYyBoYXJkd2FyZS1yZWxhdGVkIHRlcm1zIGlmIGl0IHBlcnRhaW5zIHRvIG9uLWNoaXAgZGVidWcgY2FwYWJpbGl0aWVzLiBJIGFudGljaXBhdGUgZW5jb3VudGVyaW5nIGBjb25maWdgIGJsb2NrcywgYGJvb2xgIG9yIGB0cmlzdGF0ZWAgb3B0aW9ucywgYGRlcGVuZHMgb25gIGNsYXVzZXMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGhlbHAgdGV4dCB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgY3JpdGljYWwgY29udGV4dCBmb3IgdGhpcyBzZWN0aW9uLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBhIHBhcnRpY3VsYXIgZGVidWcgb3B0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBhcmUsIHNvIEkgY2FuIHByZWRpY3QgaXRzIGJlaGF2aW9yIGFuZCBpbmZsdWVuY2UgaXQuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUuIEknbSBob3BpbmcgaXQgcHJvdmlkZXMgdGhlIG1pc3NpbmcgcGllY2UgSSBuZWVkIHRvIHJlc29sdmUgdGhpcyBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0Njo1OS4yMTIwNDEwMDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzMjA6XFx0XFx0ICBUZXN0IGlmIHRoZSBrZXJuZWwgaXMgemVyby1pbml0aWFsaXppbmcgaGVhcCBhbmQgcGFnZSBhbGxvY2F0aW9ucy5cXG4zMzIxOlxcdFxcdCAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHRlc3QgaW5pdF9vbl9hbGxvYyBhbmQgaW5pdF9vbl9mcmVlIGZlYXR1cmVzLlxcbjMzMjI6XFx0XFxuMzMyMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMzMyNDpcXHRcXG4zMzI1OlxcdGNvbmZpZyBURVNUX0hNTVxcbjMzMjY6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG4zMzI3OlxcdFxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4zMzI4OlxcdFxcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcXG4zMzI5OlxcdFxcdHNlbGVjdCBITU1fTUlSUk9SXFxuMzMzMDpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuMzMzMTpcXHRcXHRoZWxwXFxuMzMzMjpcXHRcXHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxcbjMzMzM6XFx0XFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXFxuMzMzNDpcXHRcXHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cXG4zMzM1OlxcdFxcbjMzMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMzc6XFx0XFxuMzMzODpcXHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXFxuMzMzOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBmcmVlaW5nIHBhZ2VzXFxcIlxcbjMzNDA6XFx0XFx0aGVscFxcbjMzNDE6XFx0XFx0ICBUZXN0IHRoYXQgYSBtZW1vcnkgbGVhayBkb2VzIG5vdCBvY2N1ciBkdWUgdG8gYSByYWNlIGJldHdlZW5cXG4zMzQyOlxcdFxcdCAgZnJlZWluZyBhIGJsb2NrIG9mIHBhZ2VzIGFuZCBhIHNwZWN1bGF0aXZlIHBhZ2UgcmVmZXJlbmNlLlxcbjMzNDM6XFx0XFx0ICBMb2FkaW5nIHRoaXMgbW9kdWxlIGlzIHNhZmUgaWYgeW91ciBrZXJuZWwgaGFzIHRoZSBidWcgZml4ZWQuXFxuMzM0NDpcXHRcXHQgIElmIHRoZSBidWcgaXMgbm90IGZpeGVkLCBpdCB3aWxsIGxlYWsgZ2lnYWJ5dGVzIG9mIG1lbW9yeSBhbmRcXG4zMzQ1OlxcdFxcdCAgcHJvYmFibHkgT09NIHlvdXIgc3lzdGVtLlxcbjMzNDY6XFx0XFxuMzM0NzpcXHRjb25maWcgVEVTVF9GUFVcXG4zMzQ4OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgaW4ga2VybmVsIHNwYWNlXFxcIlxcbjMzNDk6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19LRVJORUxfRlBVX1NVUFBPUlQgXFx1MDAyNlxcdTAwMjYgIUtDT1ZfSU5TVFJVTUVOVF9BTExcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDY6NTkuMjEyMjc5MTMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTA2NjkzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgYFRFU1RfSE1NYCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBgVEVTVF9ITU1gIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZXNlIGNoYXJhY3RlciBkZXZpY2VzLCBgL2Rldi9obW1fZG1pcnJvcjBgLCBgL2Rldi9obW1fZG1pcnJvcjFgLCBhbmQgdGhlIGxpa2UuIFRoYXQncyB0aGUgYmFzaWMgaW5mcmFzdHJ1Y3R1cmUsIHRoZSBlbnRyeSBwb2ludHMuIEFuZCBpdCdzIGRvaW5nIHRoaXMgdG8gcHJvdmlkZSBhIHdheSB0byBtb3ZlIG1lbW9yeSBwYWdlcyBhcm91bmQgdGhyb3VnaCBpb2N0bHMuIFNwZWNpZmljYWxseSwgSSBzZWUgYEhNTV9ETUlSUk9SX01JR1JBVEVgIGFuZCBvdGhlciBzaW1pbGFyIG9wZXJhdGlvbnMuIFRoZXkncmUgZGVzaWduZWQgdG8gaGFuZGxlIHRoYXQgbWlncmF0aW9uIHByb2Nlc3MsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MuXG5cblRoZSBrZXkgdG8gZmlndXJpbmcgdGhpcyBvdXQgbGllcyBpbiBob3cgaXQgKnVzZXMqIGBtaWdyYXRlX2RldmljZV9yYW5nZWAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIGhlYXJ0IG9mIHRoZSBwYWdlIG1pZ3JhdGlvbiBsb2dpYywgYW5kIHVuZGVyc3RhbmRpbmcgKml0cyogY29udGV4dCBpcyBjcnVjaWFsLiBUaW1lIHRvIGRpdmUgaW50byBgbGliL3Rlc3RfaG1tLmNgIHRvIHNlZSBob3cgdGhvc2UgaW9jdGxzIGFyZSB1bHRpbWF0ZWx5IGNhbGxpbmcgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgYW5kIHVuZGVyc3RhbmQgdGhlIGlucHV0cyBhbmQgcGFyYW1ldGVycy4gV2hhdCBraW5kIG9mIGFkZHJlc3NlcyBhcmUgYmVpbmcgcGFzc2VkLCBob3cgaXMgdGhlIGRldmljZSByYW5nZSBkZWZpbmVkLCBhbmQgd2hhdCdzIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgaXQncyBvcGVyYXRpbmcgaW4/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NzowMS43NjI5NTE4MDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NDY5NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfZGV2aWNlX2V2aWN0X2NodW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi90ZXN0X2htbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2htbS5jPTE2Mj1zdGF0aWMgaW50IGRtaXJyb3JfZm9wc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTg3LVxcbmxpYi90ZXN0X2htbS5jOjE4ODpzdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXFxubGliL3Rlc3RfaG1tLmMtMTg5LXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTIzOD1zdGF0aWMgaW50IGRtaXJyb3JfZm9wc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMjUwLVxcbmxpYi90ZXN0X2htbS5jOjI1MTpcXHRcXHRcXHRkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhkZXZtZW0pO1xcbmxpYi90ZXN0X2htbS5jLTI1Mi1cXHRcXHR9XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNTc3PXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX3JlbW92ZV9jaHVua3Moc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTU5MS1cXG5saWIvdGVzdF9obW0uYzoxNTkyOlxcdFxcdFxcdGRtaXJyb3JfZGV2aWNlX2V2aWN0X2NodW5rKGRldm1lbSk7XFxubGliL3Rlc3RfaG1tLmMtMTU5My1cXHRcXHRcXHRtZW11bm1hcF9wYWdlcyhcXHUwMDI2ZGV2bWVtLVxcdTAwM2VwYWdlbWFwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MDEuODE5NDMwMzYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxNDc1MzI0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVHJpYWdlIEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZz8qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYG1pZ3JhdGVfdm1hXypgIGFuZCBgbWlncmF0ZV9kZXZpY2VfKmAsIHdoaWNoIGFyZSBzcXVhcmVseSB3aXRoaW4gdGhlIGBtbS9gIG1lbW9yeSBtYW5hZ2VtZW50IGNvcmUgc3Vic3lzdGVtLiBFeGNlbGxlbnQsIHRoYXQncyBzdGVwIG9uZS4gTm93LCBsZXQncyBzZWUgaWYgdGhpcyBoaXRzIHRoZSBcIldvcnRoRnV6emluZ1wiIGNyaXRlcmlhLlxuXG5UaGUgdHJpYWdlIGd1aWRlbGluZXMgc3RhdGUgd2Ugc2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gQW5kIHdlJ3ZlIGdvdCBhIGxpc3Qgb2YgcG9zaXRpdmUgaW5kaWNhdG9ycy4gIFdlIG5lZWQgdG8gc2VlIGlmIHRoaXMgbWF0Y2hlcyBvbmUgb2YgdGhlbS4gIFNwZWNpZmljYWxseSwgbGV0J3MgYXNzZXNzIGl0IGFnYWluc3QgdGhlc2U6XG5cbjEuICAqKkNvcmUgU3Vic3lzdGVtczoqKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKS5cbjIuICAqKlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoqKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4zLiAgKipSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6KiogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuXG5IZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nOiAgVGhpcyBwYXRjaCBpcyAqYWJzb2x1dGVseSogcmVsZXZhbnQuXG5cbiogICAqKlN1YnN5c3RlbToqKiBJdCdzIGluIGBtbS9gIOKAkyBtZW1vcnkgbWFuYWdlbWVudCwgdGljay5cbiogICAqKkNoYW5nZXM6KiogV2UgaGF2ZSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBmb2xpbyBjb2xsZWN0aW9uIGxvb3AgaW4gYG1pZ3JhdGVfZGV2aWNlX3JhbmdlKClgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZucygpYC4gIFBsdXMsIGEgbmV3IGZ1bmN0aW9uLCBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpYC4gQ3JpdGljYWxseSwgdGhlcmUncyBhIGBXQVJOX09OX09OQ0VgIGFzc2VydGlvbiBhZGRlZCAoYFdBUk5fT05fT05DRShuciBcdTAwM2UgcmVtYWluaW5nKWApLCAqYW5kKiBtb2RpZmljYXRpb25zIHRvIGZvbGlvIGxvY2tpbmcvdW5sb2NraW5nIGFuZCBhcnJheSBib3VuZHMgaGFuZGxpbmcuIFRoYXQncyBhIHRyaXBsZSB0aHJlYXQhXG4qICAgKipSZWFjaGFiaWxpdHk6KiogIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuICBXZSBjYW4gaGl0IGl0IHRocm91Z2ggYHRlc3RfaG1tYCwgd2hpY2ggY2FuIGJlIGRyaXZlbiBpbiBRRU1VL3N5emthbGxlci4gVGhhdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEFsc28sIGBub3V2ZWF1YCwgYGRybV9wYWdlbWFwYCwgb3IgYW55IGRyaXZlciB0aGF0IHVzZXMgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBvciBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgaXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuXG4qICAgKipDb25maWd1cmF0aW9uOioqIFdlJ3ZlIGdvdCBmbGFncyBsaWtlIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgREVWSUNFX01JR1JBVElPTmAgaW4gcGxheSwgc28gd2UgbmVlZCB0byBjb25maXJtIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzZXR1cCwgYnkgY2hlY2tpbmcgdGhlIG1tL0tjb25maWcgZm9yIHRoZWlyIGF2YWlsYWJpbGl0eS5cblxuR2l2ZW4gdGhlIHN1YnN5c3RlbSBpbnZvbHZlbWVudCwgcmVmYWN0b3JpbmcsICphbmQqIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYW4gYXNzZXJ0aW9uLCB0aGlzIGlzIGEgY2xlYXIgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiLiBJdCdzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHJlc3RydWN0dXJpbmcgZGF0YSBmbG93LCBhbmQgYWRkaW5nIGEgZGVmZW5zaXZlIGNoZWNrIGluIGEgcmVhY2hhYmxlIHBhdGguIEV4Y2VsbGVudCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MTAuOTY2OTY2NzMxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzM0OTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKERFVklDRV9QUklWQVRFfFpPTkVfREVWSUNFfERFVklDRV9NSUdSQVRJT04pXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY3OT1jb25maWcgTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY4Mi1cXG5tbS9LY29uZmlnOjY4Mzpjb25maWcgREVWSUNFX01JR1JBVElPTlxcbm1tL0tjb25maWctNjg0LVxcdGRlZl9ib29sIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBaT05FX0RFVklDRVxcbi0tXFxubW0vS2NvbmZpZz0xMjE1PWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMTktXFxubW0vS2NvbmZpZzoxMjIwOmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIyMS1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMjQ3PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI0OS1cXG5tbS9LY29uZmlnOjEyNTA6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjUxLVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MTEuMDM0MzIyNzY2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MzE2NDUwNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZGV2aWNlIHpvbmVzIGFyZSBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbnMgZm9yIGBaT05FX0RFVklDRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBvcHRpb25zIGFyZSBhY3R1YWxseSBjb25maWd1cmFibGUgYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvbiBhbnkgb3RoZXIga2VybmVsIGZlYXR1cmVzLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgdGhlIGBjb25maWdgIHN0YXRlbWVudHMsIHRoZWlyIGRlcGVuZGVuY2llcyAoYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgZXRjLiksIGFuZCwgb2YgY291cnNlLCB0aGUgYWN0dWFsIGhlbHAgdGV4dCwgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVzaWduIGludGVudGlvbnMuIEkgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGVzZSBhcmUgbWVyZWx5IGNvbXBpbGUtdGltZSBvcHRpb25zIG9yIGlmIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBpcyBpbnZvbHZlZCwgYnV0IHRoZSBLY29uZmlnIHdpbGwgbGlrZWx5IG9ubHkgaGF2ZSB0aGUgY29tcGlsZS10aW1lIGluZm9ybWF0aW9uLiBHcmFiYmluZyB0aGVzZSBzcGVjaWZpY3Mgd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgZm91bmRhdGlvbiB0byByZWFzb24gYWJvdXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdHMgYXNzb2NpYXRlZCB3aXRoIHRob3NlIHpvbmVzLiBUaW1lIHRvIGRpdmUgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTI5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MTMuNTY1OTcxMjI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTgsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTg6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuMTIxOTpcXHRcXG4xMjIwOlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjEyMjE6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMjIyOlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjEyMjM6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjEyMjQ6XFx0XFxuMTIyNTpcXHRcXHRoZWxwXFxuMTIyNjpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTIyNzpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuMTIyODpcXHRcXHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxcbjEyMjk6XFx0XFx0ICBcXFwiZGV2aWNlLXBoeXNpY2FsXFxcIiBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxcbjEyMzA6XFx0XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxuMTIzMTpcXHRcXG4xMjMyOlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxcbjEyMzM6XFx0XFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXFxuMTIzNDpcXHRcXHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcXG4xMjM1OlxcdFxcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXFxuMTIzNjpcXHRcXHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxcbjEyMzc6XFx0XFxuMTIzODpcXHQjXFxuMTIzOTpcXHQjIEhlbHBlcnMgdG8gbWlycm9yIHJhbmdlIG9mIHRoZSBDUFUgcGFnZSB0YWJsZXMgb2YgYSBwcm9jZXNzIGludG8gZGV2aWNlIHBhZ2VcXG4xMjQwOlxcdCMgdGFibGVzLlxcbjEyNDE6XFx0I1xcbjEyNDI6XFx0Y29uZmlnIEhNTV9NSVJST1JcXG4xMjQzOlxcdFxcdGJvb2xcXG4xMjQ0OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTI0NTpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuMTI0NjpcXHRcXG4xMjQ3OlxcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4xMjQ4OlxcdFxcdGJvb2xcXG4xMjQ5OlxcdFxcbjEyNTA6XFx0Y29uZmlnIERFVklDRV9QUklWQVRFXFxuMTI1MTpcXHRcXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuMTI1MjpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuMTI1MzpcXHRcXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuMTI1NDpcXHRcXG4xMjU1OlxcdFxcdGhlbHBcXG4xMjU2OlxcdFxcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcXG4xMjU3OlxcdFxcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxcbjEyNTg6XFx0XFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXFxuMTI1OTpcXHRcXG4xMjYwOlxcdGNvbmZpZyBWTUFQX1BGTlxcbjEyNjE6XFx0XFx0Ym9vbFxcbjEyNjI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ3OjEzLjU2NjI3NTcwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDU4Nzk1MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24gaW4gbW0vS2NvbmZpZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uXCIgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBNSUdSQVRJT05gIG9wdGlvbnMgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIG9yIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBzeXN0ZW0ncyBtZW1vcnkgbWlncmF0aW9uIGNhcGFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBtZW1vcnksIHNvIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggbWlncmF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHNldCBhbmQgaWYgdGhlcmUncyBhbnl0aGluZyB1bnVzdWFsIG9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZCBpbiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzb21ldGhpbmcgSSdtIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCwgc28gSSdsbCBiZSBsb29raW5nIGF0IHRoZSBkZXRhaWxzIGFzIHdlbGwgYXMgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAzMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MTYuMDI1MDc0Mjg1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3NTpcXHRcXHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXFxuIDY3NjpcXHRcXHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcXG4gNjc3OlxcdFxcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxcbiA2Nzg6XFx0XFxuIDY3OTpcXHRjb25maWcgTUlHUkFUSU9OXFxuIDY4MDpcXHRcXHRib29sXFxuIDY4MTpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA2ODI6XFx0XFxuIDY4MzpcXHRjb25maWcgREVWSUNFX01JR1JBVElPTlxcbiA2ODQ6XFx0XFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuIDY4NTpcXHRcXG4gNjg2OlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cXG4gNjg3OlxcdFxcdGJvb2xcXG4gNjg4OlxcdFxcbiA2ODk6XFx0Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuIDY5MDpcXHRcXHRib29sXFxuIDY5MTpcXHRcXG4gNjkyOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbiA2OTM6XFx0XFx0ZGVmX2Jvb2wgblxcbiA2OTQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NzoxNi4wMjUxODUyNjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ5MDU3MDQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEZXZpY2UgTWlncmF0aW9uIENvZGUgYW5kIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoYXQgZW5hYmxpbmcgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgb3IgYFRFU1RfSE1NYCBpbmRpcmVjdGx5IGVuYWJsZXMgZGV2aWNlIG1pZ3JhdGlvbiBiZWNhdXNlIG9mIHRoZSBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYCBoaW5nZXMgb24gYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAsIHdoaWxlIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gVGhlbiwgYENPTkZJR19URVNUX0hNTWAgbmVlZHMgYm90aCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVWSUNFX1BSSVZBVEVgLiBUaGlzIG1lYW5zIGFjdGl2YXRpbmcgYW55IG9mIHRob3NlIGNvbmZpZ3MgYWxsb3dzIHVzIHRvIHRyaWdnZXIgdGhlIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIG1vZGlmaWNhdGlvbnMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIEknbSBzZWVpbmcgYSBuZXcsIHN0YXRpYyBmdW5jdGlvbiBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AgaW50cm9kdWNlZC4gVGhlIGV4aXN0aW5nIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIHRvIHVzZSBpdC4gSW1wb3J0YW50bHksIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvYCBpcyAqc3RhdGljKiwgc28gaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoYXQgZmlsZSwgYW5kIGBtaWdyYXRlX2RldmljZV9yYW5nZWAgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYCBhcmUgdGhlIGV4cG9ydGVkIHN5bWJvbHMgdGhhdCB3aWxsIGFjdHVhbGx5IGNhbGwgaXQuIFRob3NlIHRocmVlIGZ1bmN0aW9ucywgY29sbGVjdGl2ZWx5LCBhcmUgdGhlICpGb2N1c1N5bWJvbHMqLlxuXG5JJ3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGFyZSBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgYFRFU1RfSE1NYC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgYW5hbHlzaXMgY2xhaW1zIHRoaXMgaXMgd29ydGggZnV6emluZywgYW5kIEkgYWdyZWUuIFRoZSBqdXN0aWZpY2F0aW9uIHNlZW1zIHNvdW5kOiB0aGVyZSBhcmUgbG9naWMgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSAoYG1tL21pZ3JhdGVfZGV2aWNlLmNgKSwgaW5jbHVkaW5nIGEgcmVmYWN0b3Jpbmcgb2YgZm9saW8gaGFuZGxpbmcsIHBsdXMgYW4gYWRkZWQgYXNzZXJ0aW9uIChgV0FSTl9PTl9PTkNFYCkgaW4gdGhlIG5ldyBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIGZvciBzdWJ0bGUgYnVncy4gRnVydGhlcm1vcmUsIEkgc2VlIHRoaXMgaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdmlhIGB0ZXN0X2htbWAgb3IgZXZlbiB0aGUgRFJNIHBhZ2VtYXAsIHNvIHRoZXJlIGFyZSBnb29kIHRlc3QgdmVjdG9ycy5cblxuSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGV2ZXJ5dGhpbmcgbWVldHMgdGhlIGNyaXRlcmlhLiBUaGUgXCJXb3J0aEZ1enppbmdcIiBmbGFnIGlzIHNldCB0byB0cnVlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIEFuZCBmaW5hbGx5LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0bHkgc3BlY2lmaWVkIGFzIGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgVEVTVF9ITU1gLlxuXG5UaGUgcmVhc29uaW5nIGlzIGFjY3VyYXRlIGFuZCBjb25jaXNlOiB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgcHJpdmF0ZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGludG8gYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgLCB1c2VkIGJ5IGBtaWdyYXRlX2RldmljZV9yYW5nZSgpYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnMoKWAuIEl0IGFkZHMgYSBgV0FSTl9PTl9PTkNFYCBhc3NlcnRpb24gdG8gY2hlY2sgYm91bmRzIGFnYWluc3QgcmVtYWluaW5nIGFycmF5IGNhcGFjaXR5LCBhbmQgdGhlIGNvZGUgaXMgdGVzdGFibGUgdmlhIGB0ZXN0X2htbWAuXG5cblNvLCBpdCdzIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIHRvb2wgY2FsbCB3aXRoIHRob3NlIHNldHRpbmdzLiBMb29rcyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUxNCwiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NzoyMS41MTU3NTkwMjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODI5MzY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJURVNUX0hNTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9cIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3JhbmdlXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9wZm5zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJURVNUX0hNTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9cIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3JhbmdlXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9wZm5zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgaW50byBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpIGNhbGxlZCBieSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCksIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IFdBUk5fT05fT05DRSBhc3NlcnRpb24gdG8gdmVyaWZ5IGJvdW5kcyBhZ2FpbnN0IHRoZSByZW1haW5pbmcgYXJyYXkgY2FwYWNpdHkuIFRoZXNlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgY2FuIGJlIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIHRlc3RfaG1tIHBzZXVkby1kcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ3OjIxLjU5NDA2MjE1NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMzUyNjA3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NzoyMS41OTQ2NjE1MzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTEzNDY1NjA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGJ5IGZhY3RvcmluZyBvdXQgZHVwbGljYXRlZCBjb2RlIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpLlxcblxcbkFsbCBsb2NhbCB2YXJpYWJsZXMgKG5yLCBwZm4sIGkpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgZGVzdGluYXRpb24gUEZOIGFycmF5IGVudHJpZXMgYXJlIGV4cGxpY2l0bHkgd3JpdHRlbiBvciB6ZXJvZWQgdmlhIG1lbXNldCgpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9uIChlLmcuLCBhcnJheSBvdXQtb2YtYm91bmRzIGluZGV4aW5nIG9yIGZvbGlvIGxvY2tpbmcvcmVmY291bnRpbmcgaXNzdWVzKSBmYWxscyBzcXVhcmVseSB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVhMzM5Njc0MjQ1NGJlZmJhMmRkOGRlYWY2MjBlZjU0NTllM2IxMTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNjo0NjoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGVfZGV2aWNlLmMgYi9tbS9taWdyYXRlX2RldmljZS5jXG5pbmRleCAwMDliZmE4YjIxMmQ1Li5jNTdlYWRlYTY1NjUxIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xuKysrIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuQEAgLTEzOTIsNiArMTM5MiwzOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcbiBcdHJldHVybiBtaWdyYXRlX3BmbihwZm4pIHwgTUlHUkFURV9QRk5fTUlHUkFURTtcbiB9XG4gXG4rLypcbisgKiBDb2xsZWN0IGEgZGV2aWNlIGZvbGlvIGludG8gdGhlIHBhZ2UtZ3JhbnVsYXIgUEZOIGFycmF5LlxuKyAqXG4rICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBjb25zdW1lZCwgb3IgMCBpZiB0aGUgZm9saW8gZG9lcyBub3QgZml0IGluXG4rICogdGhlIHJlbWFpbmluZyBhcnJheS5cbisgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8odW5zaWduZWQgbG9uZyAqc3JjX3BmbixcbitcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBwZm4sXG4rXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKVxuK3tcbitcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBmbl90b19wYWdlKHBmbikpO1xuK1x0dW5zaWduZWQgaW50IG5yO1xuK1xuK1x0KnNyY19wZm4gPSBtaWdyYXRlX2RldmljZV9wZm5fbG9jayhwZm4pO1xuK1x0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG5yIFx1MDAzZSByZW1haW5pbmcpKSB7XG4rXHRcdGlmICgqc3JjX3BmbiBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xuK1x0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0fVxuK1x0XHRtZW1zZXQoc3JjX3BmbiwgMCwgcmVtYWluaW5nICogc2l6ZW9mKCpzcmNfcGZuKSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKG5yIFx1MDAzZSAxKSB7XG4rXHRcdCpzcmNfcGZuIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuK1x0XHRtZW1zZXQoc3JjX3BmbiArIDEsIDAsIChuciAtIDEpICogc2l6ZW9mKCpzcmNfcGZuKSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gbnI7XG4rfVxuK1xuIC8qKlxuICAqIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cbiAgKiBAc3JjX3BmbnM6IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIG1pZ3JhdGluZyBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucy5cbkBAIC0xNDEwLDM1ICsxNDQzLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxuICAqIG1pZ3JhdGluZyBwYWdlcyB0aGF0IGFyZW4ndCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxuICAqIGFsbG9jYXRlIGRlc3RpbmF0aW9uIHBhZ2VzIGFuZCBzdGFydCBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgZGV2aWNlIHRvIENQVVxuICAqIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBtaWdyYXRlX2RldmljZV9wYWdlcygpLlxuKyAqXG4rICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIHJhbmdlLlxuICAqL1xuIGludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGksIGosIHBmbjtcbitcdHVuc2lnbmVkIGxvbmcgaSwgcGZuO1xuIFxuIFx0Zm9yIChwZm4gPSBzdGFydCwgaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgcGZuKyssIGkrKykge1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0XHR1bnNpZ25lZCBpbnQgbnIgPSAxO1xuK1x0XHR1bnNpZ25lZCBpbnQgbnI7XG4gXG4tXHRcdHNyY19wZm5zW2ldID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2socGZuKTtcbi1cdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tXHRcdGlmIChuciBcdTAwM2UgbnBhZ2VzIC0gaSkge1xuLVx0XHRcdGlmIChzcmNfcGZuc1tpXSBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xuLVx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0fVxuLVx0XHRcdG1lbXNldChcdTAwMjZzcmNfcGZuc1tpXSwgMCxcbi1cdFx0XHQgICAgICAgKG5wYWdlcyAtIGkpICogc2l6ZW9mKCpzcmNfcGZucykpO1xuK1x0XHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XG4rXHRcdGlmICghbnIpXG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0aWYgKG5yIFx1MDAzZSAxKSB7XG4tXHRcdFx0c3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XG4tXHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnI7IGorKylcbi1cdFx0XHRcdHNyY19wZm5zW2kral0gPSAwO1xuLVx0XHRcdGkgKz0gaiAtIDE7XG4tXHRcdFx0cGZuICs9IGogLSAxO1xuLVx0XHR9XG4rXHRcdGkgKz0gbnIgLSAxO1xuK1x0XHRwZm4gKz0gbnIgLSAxO1xuIFx0fVxuIFxuIFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XG5AQCAtMTQ1NCwzMyArMTQ3NCwyMSBAQCBFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTtcbiAgKlxuICAqIFNpbWlsYXIgdG8gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBidXQgc3VwcG9ydHMgbm9uLWNvbnRpZ3VvdXMgcHJlLXBvcHVsYXRlZFxuICAqIGFycmF5IG9mIGRldmljZSBwYWdlcyB0byBtaWdyYXRlLlxuKyAqXG4rICogQSBjb21wb3VuZCBmb2xpbyBtdXN0IGZpdCBlbnRpcmVseSBpbiB0aGUgcmVtYWluaW5nIFBGTiBhcnJheS5cbiAgKi9cbiBpbnQgbWlncmF0ZV9kZXZpY2VfcGZucyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBpLCBqO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOyBpKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShzcmNfcGZuc1tpXSk7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLVx0XHR1bnNpZ25lZCBpbnQgbnIgPSAxO1xuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHNyY19wZm5zW2ldO1xuK1x0XHR1bnNpZ25lZCBpbnQgbnI7XG4gXG4tXHRcdHNyY19wZm5zW2ldID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2soc3JjX3BmbnNbaV0pO1xuLVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi1cdFx0aWYgKG5yIFx1MDAzZSBucGFnZXMgLSBpKSB7XG4tXHRcdFx0aWYgKHNyY19wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSB7XG4tXHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHR9XG4tXHRcdFx0bWVtc2V0KFx1MDAyNnNyY19wZm5zW2ldLCAwLFxuLVx0XHRcdCAgICAgICAobnBhZ2VzIC0gaSkgKiBzaXplb2YoKnNyY19wZm5zKSk7XG4rXHRcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcbitcdFx0aWYgKCFucilcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpZiAobnIgXHUwMDNlIDEpIHtcbi1cdFx0XHRzcmNfcGZuc1tpXSB8PSBNSUdSQVRFX1BGTl9DT01QT1VORDtcbi1cdFx0XHRmb3IgKGogPSAxOyBqIFx1MDAzYyBucjsgaisrKVxuLVx0XHRcdFx0c3JjX3BmbnNbaStqXSA9IDA7XG4tXHRcdFx0aSArPSBqIC0gMTtcbi1cdFx0fVxuK1x0XHRpICs9IG5yIC0gMTtcbiBcdH1cbiBcbiBcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MjEuNTk0NjYyODk0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3OTAyMzI4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBbmFseXNpczogQSBRdWljayBMb29rIGF0IHRoZSBNaWdyYXRlIERldmljZSBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gZnV6emluZyBpcyBuZWNlc3NhcnkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjaGFuZ2VzIHdpdGhpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBwdWxsZWQgb3V0IGEgaGVscGVyIGZ1bmN0aW9uLCBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AsIGZyb20gYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZldyBxdWVzdGlvbnMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMuIFdoYXQncyB0aGUgY29udGV4dD8gSG93IGFyZSBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AsIGFuZCB0aGUgbmV3IGhlbHBlciwgYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gLCBpbnRlcmFjdGluZz8gQSBxdWljayByZWFkIG9mIGBtbS9taWdyYXRlX2RldmljZS5jYCBzaG91bGQgY2xhcmlmeSB0aGVpciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCwgY3JpdGljYWxseSwgaG93IHRoZXkgYXJlIGJlaW5nICp1c2VkKi4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBhcmVhIGlzIGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgZGF0YSByYWNlcyBvciBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyB0aGF0IEtNU0FOIG1pZ2h0IGV4cG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA2OjQ3OjI1LjM4NDg5OTcwMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NzUxOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfZGV2aWNlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9NTQyPXN0YXRpYyBib29sIG1pZ3JhdGVfdm1hX2NoZWNrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBwYWdlICpmYXVsdF9wYWdlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01NzAtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1NzE6c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01NzItXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NjcwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTY3MS17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2NzI6XFx0bWlncmF0ZS1cXHUwMDNlY3BhZ2VzID0gbWlncmF0ZV9kZXZpY2VfdW5tYXAobWlncmF0ZS1cXHUwMDNlc3JjLCBtaWdyYXRlLVxcdTAwM2VucGFnZXMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02NzMtXFx0XFx0XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlZmF1bHRfcGFnZSk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTk3Nj1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTExMDgtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTA5OnN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTEwLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTEzOC1cXHRcXHRcXHQgKiBUaGUgb25seSB0aW1lIHRoZXJlIGlzIG5vIHZtYSBpcyB3aGVuIGNhbGxlZCBmcm9tXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTM5OlxcdFxcdFxcdCAqIG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKCkuIEhvd2V2ZXIgdGhpcyBpc24ndFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTE0MC1cXHRcXHRcXHQgKiBjYWxsZWQgaWYgdGhlIHBhZ2UgY291bGQgbm90IGJlIHVubWFwcGVkLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjYyLS8qKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2MzogKiBtaWdyYXRlX2RldmljZV9wYWdlcygpIC0gbWlncmF0ZSBtZXRhLWRhdGEgZnJvbSBzcmMgcGFnZSB0byBkc3QgcGFnZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI2NDogKiBAc3JjX3BmbnM6IHNyY19wZm5zIHJldHVybmVkIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI2NS0gKiBAZHN0X3BmbnM6IGFycmF5IG9mIHBmbnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIgdG8gbWlncmF0ZSBtZW1vcnkgdG9cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3MC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNzE6dm9pZCBtaWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjcyLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3My17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjc0OlxcdF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMsIE5VTEwpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3NS19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjc2OkVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcGFnZXMpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI3Ny1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTI4Nj12b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyODcte1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI4ODpcXHRfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKG1pZ3JhdGUtXFx1MDAzZXNyYywgbWlncmF0ZS1cXHUwMDNlZHN0LCBtaWdyYXRlLVxcdTAwM2VucGFnZXMsIG1pZ3JhdGUpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI4OS19XFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMjkwPUVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfcGFnZXMpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI5MS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyOTI6c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9maW5hbGl6ZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyOTMtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyAqZHN0X3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDQtLypcXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNDU6ICogbWlncmF0ZV9kZXZpY2VfZmluYWxpemUoKSAtIGNvbXBsZXRlIHBhZ2UgbWlncmF0aW9uXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzQ2OiAqIEBzcmNfcGZuczogc3JjX3BmbnMgcmV0dXJuZWQgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzQ3LSAqIEBkc3RfcGZuczogYXJyYXkgb2YgcGZucyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciB0byBtaWdyYXRlIG1lbW9yeSB0b1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzUzLSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1NDp2b2lkIG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1NS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKmRzdF9wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTYte1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1NzpcXHRyZXR1cm4gX19taWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcywgTlVMTCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU4LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNTk6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9maW5hbGl6ZSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzYwLVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzcyPXZvaWQgbWlncmF0ZV92bWFfZmluYWxpemUoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3My17XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzc0OlxcdF9fbWlncmF0ZV9kZXZpY2VfZmluYWxpemUobWlncmF0ZS1cXHUwMDNlc3JjLCBtaWdyYXRlLVxcdTAwM2Vkc3QsIG1pZ3JhdGUtXFx1MDAzZW5wYWdlcyxcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNzUtXFx0XFx0XFx0XFx0ICBtaWdyYXRlLVxcdTAwM2VmYXVsdF9wYWdlKTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM3Nz1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX2ZpbmFsaXplKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNzgtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzc5OnN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4MC17XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDAtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDAxOnN0YXRpYyB1bnNpZ25lZCBpbnQgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyh1bnNpZ25lZCBsb25nICpzcmNfcGZuLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMi1cXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDctXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDA4OlxcdCpzcmNfcGZuID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2socGZuKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDktXFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MjgtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDI5OiAqIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MzAtICogQHNyY19wZm5zOiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtaWdyYXRpbmcgc291cmNlIGRldmljZSBwcml2YXRlIHBmbnMuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NDQtICogYWxsb2NhdGUgZGVzdGluYXRpb24gcGFnZXMgYW5kIHN0YXJ0IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gQ1BVXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDQ1OiAqIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBtaWdyYXRlX2RldmljZV9wYWdlcygpLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ0Ni0gKlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDQ4LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ0OTppbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDUwLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDU2LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ1NzpcXHRcXHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ1OC1cXHRcXHRpZiAoIW5yKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDYzLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2NDpcXHRtaWdyYXRlX2RldmljZV91bm1hcChzcmNfcGZucywgbnBhZ2VzLCBOVUxMKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjUtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjctfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfZGV2aWNlX3JhbmdlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjktXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDcwLS8qKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3MTogKiBtaWdyYXRlX2RldmljZV9wZm5zKCkgLSBtaWdyYXRlIGRldmljZSBwcml2YXRlIHBmbnMgdG8gbm9ybWFsIG1lbW9yeS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzItICogQHNyY19wZm5zOiBwcmUtcG9wdWxhdGVkIGFycmF5IG9mIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG1pZ3JhdGUuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzQtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzU6ICogU2ltaWxhciB0byBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGJ1dCBzdXBwb3J0cyBub24tY29udGlndW91cyBwcmUtcG9wdWxhdGVkXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc2LSAqIGFycmF5IG9mIGRldmljZSBwYWdlcyB0byBtaWdyYXRlLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDc5LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ4MDppbnQgbWlncmF0ZV9kZXZpY2VfcGZucyh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgxLXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4Ny1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0ODg6XFx0XFx0bnIgPSBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKFxcdTAwMjZzcmNfcGZuc1tpXSwgcGZuLCBucGFnZXMgLSBpKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0ODktXFx0XFx0aWYgKCFucilcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5My1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0OTQ6XFx0bWlncmF0ZV9kZXZpY2VfdW5tYXAoc3JjX3BmbnMsIG5wYWdlcywgTlVMTCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk1LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk3LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE0OTg6RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wZm5zKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTktXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MDQtICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTA1OmludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUwNi17XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MTktXFx0ICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTIwOlxcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKFxcdTAwMjZzcmNfcGZuLCAxLCBOVUxMKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE1MjEtXFx0aWYgKCEoc3JjX3BmbiBcXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTI5LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTUzMDpcXHRtaWdyYXRlX2RldmljZV9wYWdlcyhcXHUwMDI2c3JjX3BmbiwgXFx1MDAyNmRzdF9wZm4sIDEpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTUzMS1cXHRpZiAoc3JjX3BmbiBcXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTMyLVxcdFxcdGZvbGlvX2NvcHkoZGZvbGlvLCBmb2xpbyk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNTMzOlxcdG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplKFxcdTAwMjZzcmNfcGZuLCBcXHUwMDI2ZHN0X3BmbiwgMSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNjo0NzoyNS44Mzk2NjU5MzFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDczNDcxMTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ29kZSBNaWdyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgZ2V0IGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZGV2aWNlLXJlbGF0ZWQgbWVtb3J5LiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhlc2Ugc291bmQgbGlrZSB0aGUgY29yZSBjb21wb25lbnRzIG9mIG1vdmluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGRldmljZS5cblxuYG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW9gIGxpa2VseSBoYW5kbGVzIGdhdGhlcmluZyBpbmZvcm1hdGlvbiBvciBwcmVwYXJpbmcgdGhlIG1lbW9yeSB1bml0cyBhdCB0aGUgZm9saW8gbGV2ZWwuIEZvbGlvcyBhcmUgdGhlIHByZWZlcnJlZCBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdHMsIGFuZCBnaXZlbiB0aGUgbmFtZSwgaXQgbWlnaHQgYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBjb2xsZWN0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWdlcyB0byBiZSBtaWdyYXRlZC4gSSBiZXQgaXQgaXMgaGFuZGxpbmcgdGhpbmdzIGxpa2UgbG9ja2luZywgZXJyb3IgY2hlY2tpbmcsIGFuZCBtYWtpbmcgc3VyZSB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBwYWdlcyBhcmUgcmVhZHkuXG5cblRoZW4sIGBtaWdyYXRlX2RldmljZV9yYW5nZWAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gb3BlcmF0ZSBhdCBhIHJhbmdlIG9mIG1lbW9yeSBhZGRyZXNzZXMuIEl0IGxpa2VseSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBwYWdlcyBvciBzbWFsbGVyIGNodW5rcyBpZGVudGlmaWVkIGJ5IHRoZSBmb2xpbyBsZXZlbCwgb3JjaGVzdHJhdGluZyB0aGUgYWN0dWFsIGRhdGEgbW92ZW1lbnQgZm9yIGEgcGFydGljdWxhciByZWdpb24uIEnigJltIHRoaW5raW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBoYW5kbGluZyB0aGUgZGV0YWlscyBvZiB0aGUgRE1BIHRyYW5zZmVycyBvciB3aGF0ZXZlciBtZWNoYW5pc20gaXMgdXNlZCB0byBtb3ZlIGRhdGEgb24gdGhpcyBzcGVjaWZpYyBoYXJkd2FyZS4gSXQncyBwcm9iYWJseSB0aGUgbW9zdCBkZXZpY2Utc3BlY2lmaWMgcGFydCBvZiB0aGUgcHJvY2Vzcy4gSSB3b25kZXIgaWYgaXTigJlzIGRlc2lnbmVkIHRvIGJlIGFzeW5jaHJvbm91cywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBkZXZpY2Ugb3BlcmF0aW9ucy5cblxuRmluYWxseSwgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLiBOb3csICdQRk4nIHVzdWFsbHkgcmVmZXJzIHRvIFBoeXNpY2FsIEZyYW1lIE51bWJlci4gU28sIHRoaXMgc291bmRzIGxpa2UgdGhlIGxvd2VzdC1sZXZlbCBmdW5jdGlvbiwgZGVhbGluZyBkaXJlY3RseSB3aXRoIGluZGl2aWR1YWwgcGh5c2ljYWwgcGFnZXMuIFRoaXMgaXMgcHJvYmFibHkgdGhlIGxhc3Qgc3RlcDogdHJhbnNmb3JtaW5nIHRoZSBpZGVudGlmaWVkIHBhZ2VzIGFuZCBhY3R1YWxseSB1cGRhdGluZyB0aGVpciBlbnRyaWVzLiBNaWdodCBiZSBjaGVja2luZyBpZiB0aGUgcGFnZXMgYXJlIGNsZWFuLCBkaXJ0eSwgb3Igc2hhcmVkLiBJdOKAmXMgdGhlIHBvaW50IHdoZXJlIHRoZSBkZXZpY2UgbWVtb3J5IGlzIHBoeXNpY2FsbHkgbWFwcGVkIHRvIHRoZSBuZXcgbG9jYXRpb24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHlwZSBvZiBtaWdyYXRpb24gaXQgZG9lcyB0byBkZXRlcm1pbmUgaXRzIG92ZXJoZWFkOiBob3QgbWlncmF0aW9uLCBjb2xkIG1pZ3JhdGlvbiwgZXRjLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LiBJcyBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpb2AgY2FsbGVkIGZpcnN0LCBzZXR0aW5nIHRoZSBzdGFnZSwgdGhlbiBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIG1hbmFnZXMgdGhlIGJsb2NrcywgYW5kIGZpbmFsbHksIGBtaWdyYXRlX2RldmljZV9wZm5zYCBoYW5kbGVzIHRoZSBpbmRpdmlkdWFsIHBhZ2UgdHJhbnNmZXJzPyBPciBpcyB0aGUgb3JnYW5pemF0aW9uIHNsaWdodGx5IGRpZmZlcmVudD8gSXQncyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBleGVjdXRpb24gYW5kIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGNvbXBsZXhpdGllcyBvZiBkZXZpY2UgbWVtb3J5IGR1cmluZyB0aGUgbWlncmF0aW9uLiBOb3cgbGV0J3MgZXhhbWluZSB0aGUgY2FsbGluZyBzdHJ1Y3R1cmUgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDE5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MzAuNTc0MzgwNzcyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTAsXG4gIFwiTGluZUNvdW50XCI6IDExNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzkwOlxcdFxcdH1cXG4xMzkxOlxcdFxcbjEzOTI6XFx0XFx0cmV0dXJuIG1pZ3JhdGVfcGZuKHBmbikgfCBNSUdSQVRFX1BGTl9NSUdSQVRFO1xcbjEzOTM6XFx0fVxcbjEzOTQ6XFx0XFxuMTM5NTpcXHQvKlxcbjEzOTY6XFx0ICogQ29sbGVjdCBhIGRldmljZSBmb2xpbyBpbnRvIHRoZSBwYWdlLWdyYW51bGFyIFBGTiBhcnJheS5cXG4xMzk3OlxcdCAqXFxuMTM5ODpcXHQgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGNvbnN1bWVkLCBvciAwIGlmIHRoZSBmb2xpbyBkb2VzIG5vdCBmaXQgaW5cXG4xMzk5OlxcdCAqIHRoZSByZW1haW5pbmcgYXJyYXkuXFxuMTQwMDpcXHQgKi9cXG4xNDAxOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyh1bnNpZ25lZCBsb25nICpzcmNfcGZuLFxcbjE0MDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgcGZuLFxcbjE0MDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nKVxcbjE0MDQ6XFx0e1xcbjE0MDU6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGZuX3RvX3BhZ2UocGZuKSk7XFxuMTQwNjpcXHRcXHR1bnNpZ25lZCBpbnQgbnI7XFxuMTQwNzpcXHRcXG4xNDA4OlxcdFxcdCpzcmNfcGZuID0gbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2socGZuKTtcXG4xNDA5OlxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjE0MTA6XFx0XFxuMTQxMTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG5yIFxcdTAwM2UgcmVtYWluaW5nKSkge1xcbjE0MTI6XFx0XFx0XFx0aWYgKCpzcmNfcGZuIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkge1xcbjE0MTM6XFx0XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4xNDE0OlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMTQxNTpcXHRcXHRcXHR9XFxuMTQxNjpcXHRcXHRcXHRtZW1zZXQoc3JjX3BmbiwgMCwgcmVtYWluaW5nICogc2l6ZW9mKCpzcmNfcGZuKSk7XFxuMTQxNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNDE4OlxcdFxcdH1cXG4xNDE5OlxcdFxcbjE0MjA6XFx0XFx0aWYgKG5yIFxcdTAwM2UgMSkge1xcbjE0MjE6XFx0XFx0XFx0KnNyY19wZm4gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XFxuMTQyMjpcXHRcXHRcXHRtZW1zZXQoc3JjX3BmbiArIDEsIDAsIChuciAtIDEpICogc2l6ZW9mKCpzcmNfcGZuKSk7XFxuMTQyMzpcXHRcXHR9XFxuMTQyNDpcXHRcXG4xNDI1OlxcdFxcdHJldHVybiBucjtcXG4xNDI2OlxcdH1cXG4xNDI3OlxcdFxcbjE0Mjg6XFx0LyoqXFxuMTQyOTpcXHQgKiBtaWdyYXRlX2RldmljZV9yYW5nZSgpIC0gbWlncmF0ZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG5vcm1hbCBtZW1vcnkuXFxuMTQzMDpcXHQgKiBAc3JjX3BmbnM6IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIG1pZ3JhdGluZyBzb3VyY2UgZGV2aWNlIHByaXZhdGUgcGZucy5cXG4xNDMxOlxcdCAqIEBzdGFydDogc3RhcnRpbmcgcGZuIGluIHRoZSByYW5nZSB0byBtaWdyYXRlLlxcbjE0MzI6XFx0ICogQG5wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHRvIG1pZ3JhdGUuXFxuMTQzMzpcXHQgKlxcbjE0MzQ6XFx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxcbjE0MzU6XFx0ICogaW5zdGVhZCBvZiBsb29raW5nIHVwIHBhZ2VzIGJhc2VkIG9uIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBhIHJhbmdlIG9mXFxuMTQzNjpcXHQgKiBkZXZpY2UgcGZucyB0aGF0IHNob3VsZCBiZSBtaWdyYXRlZCB0byBzeXN0ZW0gbWVtb3J5IGlzIHVzZWQgaW5zdGVhZC5cXG4xNDM3OlxcdCAqXFxuMTQzODpcXHQgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgZHJpdmVyIG5lZWRzIHRvIGZyZWUgZGV2aWNlIG1lbW9yeSBidXQgZG9lc24ndCBrbm93IHRoZVxcbjE0Mzk6XFx0ICogdmlydHVhbCBtYXBwaW5ncyBvZiBldmVyeSBwYWdlIHRoYXQgbWF5IGJlIGluIGRldmljZSBtZW1vcnkuIEZvciBleGFtcGxlIHRoaXNcXG4xNDQwOlxcdCAqIGlzIG9mdGVuIHRoZSBjYXNlIHdoZW4gYSBkcml2ZXIgaXMgYmVpbmcgdW5sb2FkZWQgb3IgdW5ib3VuZCBmcm9tIGEgZGV2aWNlLlxcbjE0NDE6XFx0ICpcXG4xNDQyOlxcdCAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcXG4xNDQzOlxcdCAqIG1pZ3JhdGluZyBwYWdlcyB0aGF0IGFyZW4ndCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxcbjE0NDQ6XFx0ICogYWxsb2NhdGUgZGVzdGluYXRpb24gcGFnZXMgYW5kIHN0YXJ0IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBkZXZpY2UgdG8gQ1BVXFxuMTQ0NTpcXHQgKiBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgbWlncmF0ZV9kZXZpY2VfcGFnZXMoKS5cXG4xNDQ2OlxcdCAqXFxuMTQ0NzpcXHQgKiBBIGNvbXBvdW5kIGZvbGlvIG11c3QgZml0IGVudGlyZWx5IGluIHRoZSByZW1haW5pbmcgcmFuZ2UuXFxuMTQ0ODpcXHQgKi9cXG4xNDQ5OlxcdGludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4xNDUwOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbjE0NTE6XFx0e1xcbjE0NTI6XFx0XFx0dW5zaWduZWQgbG9uZyBpLCBwZm47XFxuMTQ1MzpcXHRcXG4xNDU0OlxcdFxcdGZvciAocGZuID0gc3RhcnQsIGkgPSAwOyBpIFxcdTAwM2MgbnBhZ2VzOyBwZm4rKywgaSsrKSB7XFxuMTQ1NTpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbnI7XFxuMTQ1NjpcXHRcXG4xNDU3OlxcdFxcdFxcdG5yID0gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbyhcXHUwMDI2c3JjX3BmbnNbaV0sIHBmbiwgbnBhZ2VzIC0gaSk7XFxuMTQ1ODpcXHRcXHRcXHRpZiAoIW5yKVxcbjE0NTk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQ2MDpcXHRcXHRcXHRpICs9IG5yIC0gMTtcXG4xNDYxOlxcdFxcdFxcdHBmbiArPSBuciAtIDE7XFxuMTQ2MjpcXHRcXHR9XFxuMTQ2MzpcXHRcXG4xNDY0OlxcdFxcdG1pZ3JhdGVfZGV2aWNlX3VubWFwKHNyY19wZm5zLCBucGFnZXMsIE5VTEwpO1xcbjE0NjU6XFx0XFxuMTQ2NjpcXHRcXHRyZXR1cm4gMDtcXG4xNDY3OlxcdH1cXG4xNDY4OlxcdEVYUE9SVF9TWU1CT0wobWlncmF0ZV9kZXZpY2VfcmFuZ2UpO1xcbjE0Njk6XFx0XFxuMTQ3MDpcXHQvKipcXG4xNDcxOlxcdCAqIG1pZ3JhdGVfZGV2aWNlX3BmbnMoKSAtIG1pZ3JhdGUgZGV2aWNlIHByaXZhdGUgcGZucyB0byBub3JtYWwgbWVtb3J5LlxcbjE0NzI6XFx0ICogQHNyY19wZm5zOiBwcmUtcG9wdWxhdGVkIGFycmF5IG9mIHNvdXJjZSBkZXZpY2UgcHJpdmF0ZSBwZm5zIHRvIG1pZ3JhdGUuXFxuMTQ3MzpcXHQgKiBAbnBhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gbWlncmF0ZS5cXG4xNDc0OlxcdCAqXFxuMTQ3NTpcXHQgKiBTaW1pbGFyIHRvIG1pZ3JhdGVfZGV2aWNlX3JhbmdlKCkgYnV0IHN1cHBvcnRzIG5vbi1jb250aWd1b3VzIHByZS1wb3B1bGF0ZWRcXG4xNDc2OlxcdCAqIGFycmF5IG9mIGRldmljZSBwYWdlcyB0byBtaWdyYXRlLlxcbjE0Nzc6XFx0ICpcXG4xNDc4OlxcdCAqIEEgY29tcG91bmQgZm9saW8gbXVzdCBmaXQgZW50aXJlbHkgaW4gdGhlIHJlbWFpbmluZyBQRk4gYXJyYXkuXFxuMTQ3OTpcXHQgKi9cXG4xNDgwOlxcdGludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4xNDgxOlxcdHtcXG4xNDgyOlxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4xNDgzOlxcdFxcbjE0ODQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wYWdlczsgaSsrKSB7XFxuMTQ4NTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiA9IHNyY19wZm5zW2ldO1xcbjE0ODY6XFx0XFx0XFx0dW5zaWduZWQgaW50IG5yO1xcbjE0ODc6XFx0XFxuMTQ4ODpcXHRcXHRcXHRuciA9IG1pZ3JhdGVfZGV2aWNlX2NvbGxlY3RfZm9saW8oXFx1MDAyNnNyY19wZm5zW2ldLCBwZm4sIG5wYWdlcyAtIGkpO1xcbjE0ODk6XFx0XFx0XFx0aWYgKCFucilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6MzAuNTc0NTQwODIyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTU0NzI0NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIHRoZSBEZXZpY2UgUGFnZSBNaWdyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcmVmYWN0b3JpbmcgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIGVuc3VyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgaGF2ZSBiZWVuIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cblxuSW5pdGlhbGx5LCBJIHNlZSB0aGUgcmVmYWN0b3JpbmcgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBwYWdlIG1pZ3JhdGlvbiByb3V0aW5lcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuICBUaGUgb3JpZ2luYWwgY29kZSwgd2hpbGUgZnVuY3Rpb25hbCwgY29udGFpbmVkIGR1cGxpY2F0ZWQgbG9naWMgZm9yIGNvbGxlY3RpbmcgYW5kIGxvY2tpbmcgcGFnZSBmcmFtZSBudW1iZXJzIChQRk5zKS4gVGhlIHBhdGNoIGNsZWFybHkgZXh0cmFjdHMgdGhpcyBjb21tb25hbGl0eSBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpYC4gU21hcnQgbW92ZSDigJMgZ29vZCBmb3IgbWFpbnRhaW5hYmlsaXR5LlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGludm9sdmVzIHRoaXMgbmV3IGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgIGZ1bmN0aW9uLCB3aGljaCBub3cgaGFuZGxlcyB0aGUgbG9ja2luZywgdGhlIGNvbXBvdW5kIHBhZ2UgZGV0ZWN0aW9uLCBhbmQgdGhlIHplcm9pbmcgb2Ygc3Vic2VxdWVudCBQRk4gZW50cmllcyBpZiBhIGNvbXBvdW5kIGZvbGlvIGlzIGZvdW5kLiBUaGUgb3JpZ2luYWwgbG9vcHMgd2l0aGluIHRoZSB0d28gbWFpbiBmdW5jdGlvbnMgYXJlIHN0cmVhbWxpbmVkIHRvIGNhbGwgdGhpcyBuZXcgdXRpbGl0eSBmdW5jdGlvbiwgcGFzc2luZyB0aGUgcmVsZXZhbnQgUEZOIGFuZCByZW1haW5pbmcgcGFnZSBjb3VudC4gVGhlIHVzZSBvZiBgbWVtc2V0YCBpcyBkZWZpbml0ZWx5IG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9yaWdpbmFsIGxvb3AgdG8gemVybyB0aGUgdHJhaWxpbmcgUEZOcyBvZiBhIGNvbXBvdW5kIHBhZ2UuXG5cblRoZSBleHRyYWN0aW9uIGlzIGNsZWFuIGFuZCB0aGUgcGFyYW1ldGVyIHBhc3NpbmcgbG9va3Mgc291bmQuIE5vdywgdGltZSBmb3IgYSByaWdvcm91cyBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5J4oCZbSBtZXRpY3Vsb3VzbHkgc2Nhbm5pbmcgdGhlIGNvZGUsIGNvbnNpZGVyaW5nIHRoZSBjcml0ZXJpYSBJJ20gd2VsbCBmYW1pbGlhciB3aXRoLiBGaXJzdCwgSSBoYXZlIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2Ugd2l0aG91dCBpbml0aWFsaXphdGlvbi4gTm9wZSwgdGhlIGNoYW5nZXMgc29sZWx5IGZvY3VzIG9uIGtlcm5lbC1zcGFjZSBhcnJheXMgKGBzcmNfcGZuc2ApIGludm9sdmVkIGluIGRldmljZSBtaWdyYXRpb24sIG5vdCB1c2VyLWFjY2Vzc2libGUgbWVtb3J5LlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIG5vdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMuIEkgc2VlIGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2Ug4oCTIGBucmAsIGBwZm5gLCBgaWAgYXJlIGFsbCBwcm9wZXJseSBpbml0aWFsaXplZC4gR29vZC5cblxuQm91bmRzIGNoZWNraW5nIGlzIGFsc28gY3J1Y2lhbC4gVGhlIGBXQVJOX09OX09OQ0VgIGluIGBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKClgIGxvb2tzIGxpa2UgdGhlIGtleS4gSXQncyBwcm9wZXJseSBwcmVzZXJ2aW5nIHRoZSBib3VuZHMgY2hlY2sgKGBuciBcdTAwM2UgcmVtYWluaW5nYCkuIElmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgdGhlcmUgaXMgYSBgbWVtc2V0YCBvbiB0aGUgcmVtYWluaW5nIGVudHJpZXMgdG8gemVybyB0aGVtLiBJZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCB0aGVuIHRoZSBmdW5jdGlvbiB6ZXJvZXMgdGhlIHRyYWlsaW5nIGVudHJpZXMuIFRoZSBjb2RlIGlzIGNhcmVmdWxseSBjaGVja2luZyBpZiBjb21wb3VuZCBmb2xpb3Mgc3BhbiBtdWx0aXBsZSBhcnJheSBlbnRyaWVzIHRvIGhhbmRsZSB0aGVtIGNvcnJlY3RseS5cblxuVGhlIGBtaWdyYXRlX2RldmljZV9wZm5zYCBmdW5jdGlvbiBpcyBhbHNvIHNhZmUuIGBwZm5gIGlzIHJlYWQgYmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGFzIHRoZSBhcmd1bWVudC4gVGhlIGluZGV4aW5nIGxvb2tzIGNvcnJlY3QgYW5kIHNob3VsZCBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMuIE5vIGluZm8gbGVha3MsIGNvbXBsZXggc3RydWN0IGFsbG9jYXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBzbyB0aGUgcmlzayBpcyBsb3cuXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyBpbnRlcm5hbCBrZXJuZWwgcmVmYWN0b3Jpbmcgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgdGhlIHBvdGVudGlhbCBidWdzIHdpbGwgYmUgcmVsYXRlZCB0byBsb2dpYyBlcnJvcnMsIGluZGV4IGNhbGN1bGF0aW9ucywgYXJyYXkgb3V0LW9mLWJvdW5kcywgb3IgbG9ja2luZyBpc3N1ZXMgKGFsbCB0aGUgdXN1YWwgc3VzcGVjdHMpLCBhbmQgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBLQVNBTi9MT0NLREVQIHdpbGwgY2F0Y2ggdGhvc2UuXG5cbk9rYXksIGxldCdzIGNvbmZpcm0gdGhlIEtNU0FOIGFzc2Vzc21lbnQuXG5cbjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2Vyc3BhY2UsIHNvIG5vIGZpZWxkcyB0aGF0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQgYXJlIGF0IHBsYXkuXG4yLiAgTm8gY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHJlbGllcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuXG40LiAgTm8gYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy5cblxuSeKAmW0gY29uZmlkZW50IHRoZSByZWZhY3RvcmluZyBpcyBzYWZlIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcGVyc3BlY3RpdmUuIEknbSByZWFkeSB0byBtYXJrIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyMSwiT3V0cHV0VG9rZW5zIjoxODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDY6NDc6NDIuNzI5MjY4MDgyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGRldmljZSBmb2xpbyBjb2xsZWN0aW9uIGxvZ2ljIGluIG1tL21pZ3JhdGVfZGV2aWNlLmMgYnkgZmFjdG9yaW5nIG91dCBkdXBsaWNhdGVkIGNvZGUgZnJvbSBtaWdyYXRlX2RldmljZV9yYW5nZSgpIGFuZCBtaWdyYXRlX2RldmljZV9wZm5zKCkgaW50byBhIGhlbHBlciBmdW5jdGlvbiBtaWdyYXRlX2RldmljZV9jb2xsZWN0X2ZvbGlvKCkuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAobnIsIHBmbiwgaSkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBkZXN0aW5hdGlvbiBQRk4gYXJyYXkgZW50cmllcyBhcmUgZXhwbGljaXRseSB3cml0dGVuIG9yIHplcm9lZCB2aWEgbWVtc2V0KCkuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBjb3B5X3RvX3VzZXIgb3BlcmF0aW9ucywgaW5mby1sZWFrcywgc3RydWN0IHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb24gKGUuZy4sIGFycmF5IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgb3IgZm9saW8gbG9ja2luZy9yZWZjb3VudGluZyBpc3N1ZXMpIGZhbGxzIHNxdWFyZWx5IHVuZGVyIHRoZSBzY29wZSBvZiBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZXZpY2UgZm9saW8gY29sbGVjdGlvbiBsb2dpYyBpbiBtbS9taWdyYXRlX2RldmljZS5jIGJ5IGZhY3RvcmluZyBvdXQgZHVwbGljYXRlZCBjb2RlIGZyb20gbWlncmF0ZV9kZXZpY2VfcmFuZ2UoKSBhbmQgbWlncmF0ZV9kZXZpY2VfcGZucygpIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gbWlncmF0ZV9kZXZpY2VfY29sbGVjdF9mb2xpbygpLlxcblxcbkFsbCBsb2NhbCB2YXJpYWJsZXMgKG5yLCBwZm4sIGkpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgZGVzdGluYXRpb24gUEZOIGFycmF5IGVudHJpZXMgYXJlIGV4cGxpY2l0bHkgd3JpdHRlbiBvciB6ZXJvZWQgdmlhIG1lbXNldCgpLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgY29weV90b191c2VyIG9wZXJhdGlvbnMsIGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9uIChlLmcuLCBhcnJheSBvdXQtb2YtYm91bmRzIGluZGV4aW5nIG9yIGZvbGlvIGxvY2tpbmcvcmVmY291bnRpbmcgaXNzdWVzKSBmYWxscyBzcXVhcmVseSB1bmRlciB0aGUgc2NvcGUgb2YgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwth57[1] Phase: Succeeded StartedAt: 2026-09-11 06:47:53 +0000 UTC FinishedAt: 2026-09-11 06:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 06:47:53 +0000 UTC FinishedAt: 2026-09-11 06:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2] Phase: Succeeded StartedAt: 2026-09-11 06:47:53 +0000 UTC FinishedAt: 2026-09-11 10:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 06:47:53 +0000 UTC FinishedAt: 2026-09-11 10:29:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 06:47:53 +0000 UTC FinishedAt: 2026-09-11 06:48:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 06:47:53 +0000 UTC FinishedAt: 2026-09-11 06:47:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowwth57/series-workflowwth57-convert-artifact-1880091805/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 06:48:03 +0000 UTC FinishedAt: 2026-09-11 07:04:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 06:48:03 +0000 UTC FinishedAt: 2026-09-11 07:04:18 +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:*0d1bc368-8754-4b24-99cd-ea37b1920dbb,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-workflowwth57/series-workflowwth57-convert-artifact-1880091805/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": "e43ab3e4-0d66-43b0-8be5-026a424b18e7", "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-workflowwth57/series-workflowwth57-build-action-1891917267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 06:48:03 +0000 UTC FinishedAt: 2026-09-11 07:04:08 +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:*0d1bc368-8754-4b24-99cd-ea37b1920dbb,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-workflowwth57/series-workflowwth57-convert-artifact-1880091805/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": "e43ab3e4-0d66-43b0-8be5-026a424b18e7", "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-workflowwth57/series-workflowwth57-build-action-1891917267/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 07:04:18 +0000 UTC FinishedAt: 2026-09-11 07:04:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 07:04:18 +0000 UTC FinishedAt: 2026-09-11 07:04:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 07:04:18 +0000 UTC FinishedAt: 2026-09-11 07:04:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 07:04:18 +0000 UTC FinishedAt: 2026-09-11 07:04:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowwth57/series-workflowwth57-convert-artifact-3687411064/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 07:04:28 +0000 UTC FinishedAt: 2026-09-11 07:06:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 07:04:28 +0000 UTC FinishedAt: 2026-09-11 07:06:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e43ab3e4-0d66-43b0-8be5-026a424b18e7,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-workflowwth57/series-workflowwth57-build-action-1891917267/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-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 07:06:44 +0000 UTC FinishedAt: 2026-09-11 07:06:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 07:06:44 +0000 UTC FinishedAt: 2026-09-11 07:06:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 07:06:44 +0000 UTC FinishedAt: 2026-09-11 07:24:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 07:06:44 +0000 UTC FinishedAt: 2026-09-11 07:24:42 +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:*0d1bc368-8754-4b24-99cd-ea37b1920dbb,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-workflowwth57/series-workflowwth57-convert-artifact-3687411064/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": "828033a8-9174-44cd-bc67-e9225335175e", "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-workflowwth57/series-workflowwth57-build-action-1702040164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 07:06:44 +0000 UTC FinishedAt: 2026-09-11 07:24:32 +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:*0d1bc368-8754-4b24-99cd-ea37b1920dbb,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-workflowwth57/series-workflowwth57-convert-artifact-3687411064/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": "828033a8-9174-44cd-bc67-e9225335175e", "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-workflowwth57/series-workflowwth57-build-action-1702040164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 07:24:42 +0000 UTC FinishedAt: 2026-09-11 07:24:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 07:24:42 +0000 UTC FinishedAt: 2026-09-11 07:24:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 07:24:42 +0000 UTC FinishedAt: 2026-09-11 07:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 07:24:42 +0000 UTC FinishedAt: 2026-09-11 07:26:25 +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:*828033a8-9174-44cd-bc67-e9225335175e,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-workflowwth57/series-workflowwth57-build-action-1702040164/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-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 07:26:35 +0000 UTC FinishedAt: 2026-09-11 10:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 07:26:35 +0000 UTC FinishedAt: 2026-09-11 10:29:15 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},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:*e43ab3e4-0d66-43b0-8be5-026a424b18e7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*828033a8-9174-44cd-bc67-e9225335175e,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-workflowwth57/series-workflowwth57-build-action-1891917267/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-workflowwth57/series-workflowwth57-build-action-1702040164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 07:26:35 +0000 UTC FinishedAt: 2026-09-11 07:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 07:26:35 +0000 UTC FinishedAt: 2026-09-11 07:26:40 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},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-workflowwth57/series-workflowwth57-convert-artifact-912440529/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 07:26:35 +0000 UTC FinishedAt: 2026-09-11 07:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 07:26:35 +0000 UTC FinishedAt: 2026-09-11 07:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 07:26:35 +0000 UTC FinishedAt: 2026-09-11 07:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 07:26:45 +0000 UTC FinishedAt: 2026-09-11 10:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwth57[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_device_collect_folio","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7aba99722271e184e2aae7fa71206dc8367c56c0","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"ef1c6799-8ce4-4d76-b466-414fb4c83f68","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 07:26:45 +0000 UTC FinishedAt: 2026-09-11 10:29:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e43ab3e4-0d66-43b0-8be5-026a424b18e7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*828033a8-9174-44cd-bc67-e9225335175e,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-workflowwth57/series-workflowwth57-build-action-1891917267/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-workflowwth57/series-workflowwth57-build-action-1702040164/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-workflowwth57/series-workflowwth57-convert-artifact-912440529/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,}