Name: series-workflowxjcj6 Phase: Succeeded StartedAt: 2026-09-08 22:19:45 +0000 UTC FinishedAt: 2026-09-09 00:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[0] Phase: Succeeded StartedAt: 2026-09-08 22:19:45 +0000 UTC FinishedAt: 2026-09-08 22:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 22:19:45 +0000 UTC FinishedAt: 2026-09-08 22:42:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_RUST_NULL", "RUST", "CONFIGFS_FS", "BLK_DEV", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_RUST_NULL", "RUST", "CONFIGFS_FS", "BLK_DEV", "BLOCK" ], "series_id": "e68f03e7-09dd-492d-a1fe-97daa55551d0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "DeviceConfig::store", "\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c1\u003e\u003e::store", "\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c2\u003e\u003e::store", "\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c3\u003e\u003e::store", "\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c4\u003e\u003e::store", "NullBlkDevice::new" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUlVTVF9OVUxMJiMzNDssCiAgICAmIzM0O1JVU1QmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OywKICAgICYjMzQ7QkxLX0RFViYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O0RldmljZUNvbmZpZzo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2VcdTAwM2U6OnN0b3JlJiMzNDssCiAgICAmIzM0O1x1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZVx1MDAzZTo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2M0XHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtOdWxsQmxrRGV2aWNlOjpuZXcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzY29wZSBpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc2AgZm9yIGBEZXZpY2VDb25maWdgIGNvbmZpZ2ZzIGF0dHJpYnV0ZSBgc3RvcmVgIGhhbmRsZXJzLiBQcmV2aW91c2x5LCBgdGhpcy5kYXRhLmxvY2soKWAgd2FzIGFjcXVpcmVkIHRvIGNoZWNrIGBwb3dlcmVkYCBhbmQgdGhlbiByZS1hY3F1aXJlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3BlbmluZyBhIHJhY2Ugd2luZG93IChUT0NUT1UpLiBUaGUgcGF0Y2ggaG9sZHMgdGhlIG11dGV4IGxvY2sgZ3VhcmQgYWNyb3NzIGJvdGggdGhlIGNoZWNrIGFuZCB0aGUgYXNzaWdubWVudC5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kvbG9ja2luZyBmaXggaW4gc2FmZSBSdXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCBjb3B5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBrZXJuZWwgaW5mby1sZWFrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgY29uZmlnZnMgYXR0cmlidXRlIHN0b3JlIGhhbmRsZXJzIGZvciB0aGUgUnVzdCBudWxsIGJsb2NrIGRldmljZSBkcml2ZXIgKHJudWxsKS4gSG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHN0YXRlIGNoZWNrcyBhbmQgZmllbGQgYXNzaWdubWVudHMgY2xvc2VzIGEgcmFjZSB3aW5kb3cgd2hlbiBhbHRlcmluZyBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiAoYmxvY2tfc2l6ZSwgcm90YXRpb25hbCwgY2FwYWNpdHlfbWliLCBpcnFfbW9kZSkgd2hpbGUgcG93ZXJpbmcgZGV2aWNlcyBvbi9vZmYuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtYmFzZWQsIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YjdmYWIxMjFiZjQ3YjdkYTk4ODJiNThjZjRmZjY4Mzg2MThhZDEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjo0MTowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzIGIvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc1xuaW5kZXggMzJjMTBjM2Y0ZDBmZC4uNjZlZjkxYjNmZjBjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNcbkBAIC0xNzQsNyAmIzQzOzE3NCw4IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbiYjNDM7ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiYjNDM7ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAgICAgICAgIH1cbiBcbkBAIC0xODIsNyAmIzQzOzE4Myw3IEBAIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XHUwMDNjdTMyXHUwMDNlKCkubWFwX2Vycih8X3wgRUlOVkFMKT87XG4gXG4gICAgICAgICBHZW5EaXNrQnVpbGRlcjo6dmFsaWRhdGVfYmxvY2tfc2l6ZSh2YWx1ZSk/O1xuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7XG4mIzQzOyAgICAgICAgZ3VhcmQuYmxvY2tfc2l6ZSA9IHZhbHVlO1xuICAgICAgICAgT2soKCkpXG4gICAgIH1cbiB9XG5AQCAtMjA0LDExICYjNDM7MjA1LDEyIEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MyXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbiYjNDM7ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiYjNDM7ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAgICAgICAgIH1cbiBcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkucm90YXRpb25hbCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xuJiM0MzsgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPztcbiBcbiAgICAgICAgIE9rKCgpKVxuICAgICB9XG5AQCAtMjI1LDE0ICYjNDM7MjI3LDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MzXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbiYjNDM7ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiYjNDM7ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAgICAgICAgIH1cbiBcbiAgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcbiAgICAgICAgIGxldCB2YWx1ZSA9IHRleHQucGFyc2U6Olx1MDAzY3U2NFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xuIFxuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5jYXBhY2l0eV9taWIgPSB2YWx1ZTtcbiYjNDM7ICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTtcbiAgICAgICAgIE9rKCgpKVxuICAgICB9XG4gfVxuQEAgLTI0OCwxNCAmIzQzOzI1MSwxNSBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjNFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAgICAgfVxuIFxuICAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4mIzQzOyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XG4mIzQzOyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gICAgICAgICB9XG4gXG4gICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XG4gICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcdTAwM2N1OFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xuIFxuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5pcnFfbW9kZSA9IElSUU1vZGU6OnRyeV9mcm9tKHZhbHVlKT87XG4mIzQzOyAgICAgICAgZ3VhcmQuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/O1xuICAgICAgICAgT2soKCkpXG4gICAgIH1cbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9SVVNUX05VTEwmIzM0OywKICAgICYjMzQ7UlVTVCYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICAgJiMzNDtCTEtfREVWJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7RGV2aWNlQ29uZmlnOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2VcdTAwM2U6OnN0b3JlJiMzNDssCiAgICAmIzM0O1x1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMlx1MDAzZVx1MDAzZTo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MzXHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzRcdTAwM2VcdTAwM2U6OnN0b3JlJiMzNDssCiAgICAmIzM0O051bGxCbGtEZXZpY2U6Om5ldyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGluIHRoZSBjb25maWdmcyBhdHRyaWJ1dGUgc3RvcmUgaGFuZGxlcnMgZm9yIHRoZSBSdXN0IG51bGwgYmxvY2sgZGV2aWNlIGRyaXZlciAocm51bGwpLiBIb2xkaW5nIHRoZSBtdXRleCBhY3Jvc3Mgc3RhdGUgY2hlY2tzIGFuZCBmaWVsZCBhc3NpZ25tZW50cyBjbG9zZXMgYSByYWNlIHdpbmRvdyB3aGVuIGFsdGVyaW5nIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uIChibG9ja19zaXplLCByb3RhdGlvbmFsLCBjYXBhY2l0eV9taWIsIGlycV9tb2RlKSB3aGlsZSBwb3dlcmluZyBkZXZpY2VzIG9uL29mZi4gVGhlIGRyaXZlciBpcyBzb2Z0d2FyZS1iYXNlZCwgY29uZmlndXJhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjb25maWdmcyBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgYW5kIHJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliN2ZhYjEyMWJmNDdiN2RhOTg4MmI1OGNmNGZmNjgzODYxOGFkMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIyOjQxOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyBiL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMKaW5kZXggMzJjMTBjM2Y0ZDBmZC4uNjZlZjkxYjNmZjBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzCkBAIC0xNzQsNyAmIzQzOzE3NCw4IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDsgZm9yIERldmljZUNvbmZpZyB7CiAgICAgfQogCiAgICAgZm4gc3RvcmUodGhpczogJmFtcDtEZXZpY2VDb25maWcsIHBhZ2U6ICZhbXA7W3U4XSkgLSZndDsgUmVzdWx0IHsKLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHsKJiM0MzsgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpOwomIzQzOyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7CiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTsKICAgICAgICAgfQogCkBAIC0xODIsNyAmIzQzOzE4Myw3IEBAIGZuIHN0b3JlKHRoaXM6ICZhbXA7RGV2aWNlQ29uZmlnLCBwYWdlOiAmYW1wO1t1OF0pIC0mZ3Q7IFJlc3VsdCB7CiAgICAgICAgIGxldCB2YWx1ZSA9IHRleHQucGFyc2U6OiZsdDt1MzImZ3Q7KCkubWFwX2Vycih8X3wgRUlOVkFMKT87CiAKICAgICAgICAgR2VuRGlza0J1aWxkZXI6OnZhbGlkYXRlX2Jsb2NrX3NpemUodmFsdWUpPzsKLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7CiYjNDM7ICAgICAgICBndWFyZC5ibG9ja19zaXplID0gdmFsdWU7CiAgICAgICAgIE9rKCgpKQogICAgIH0KIH0KQEAgLTIwNCwxMSAmIzQzOzIwNSwxMiBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zJmx0OzImZ3Q7IGZvciBEZXZpY2VDb25maWcgewogICAgIH0KIAogICAgIGZuIHN0b3JlKHRoaXM6ICZhbXA7RGV2aWNlQ29uZmlnLCBwYWdlOiAmYW1wO1t1OF0pIC0mZ3Q7IFJlc3VsdCB7Ci0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7CiYjNDM7ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTsKJiM0MzsgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQgewogICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmRhdGEubG9jaygpLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPzsKJiM0MzsgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPzsKIAogICAgICAgICBPaygoKSkKICAgICB9CkBAIC0yMjUsMTQgJiM0MzsyMjcsMTUgQEAgaW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9ucyZsdDszJmd0OyBmb3IgRGV2aWNlQ29uZmlnIHsKICAgICB9CiAKICAgICBmbiBzdG9yZSh0aGlzOiAmYW1wO0RldmljZUNvbmZpZywgcGFnZTogJmFtcDtbdThdKSAtJmd0OyBSZXN1bHQgewotICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWQgewomIzQzOyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7CiYjNDM7ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHsKICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpOwogICAgICAgICB9CiAKICAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpOwogICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjombHQ7dTY0Jmd0OygpLm1hcF9lcnIofF98IEVJTlZBTCk/OwogCi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliID0gdmFsdWU7CiYjNDM7ICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTsKICAgICAgICAgT2soKCkpCiAgICAgfQogfQpAQCAtMjQ4LDE0ICYjNDM7MjUxLDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7NCZndDsgZm9yIERldmljZUNvbmZpZyB7CiAgICAgfQogCiAgICAgZm4gc3RvcmUodGhpczogJmFtcDtEZXZpY2VDb25maWcsIHBhZ2U6ICZhbXA7W3U4XSkgLSZndDsgUmVzdWx0IHsKLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHsKJiM0MzsgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpOwomIzQzOyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7CiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTsKICAgICAgICAgfQogCiAgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTsKICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6Jmx0O3U4Jmd0OygpLm1hcF9lcnIofF98IEVJTlZBTCk/OwogCi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/OwomIzQzOyAgICAgICAgZ3VhcmQuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/OwogICAgICAgICBPaygoKSkKICAgICB9CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBSdXN0IE51bGwgQmxvY2sgRHJpdmVyKioKCk9rYXksIHNvIHRoZXkgd2FudCBtZSB0byBldmFsdWF0ZSB0aGlzIGtlcm5lbCBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBzdGFuZGFyZCBRQSB0YXNrLCBwcm9iYWJseSByZWxhdGVkIHRvIGRlZmVuc2l2ZSBmdXp6aW5nIG9yIHRyaWFnZSwgYW5kIHRoZSByaXNrIGhlcmUgc2VlbXMgbmVnbGlnaWJsZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBrZXJuZWwgZW5naW5lZXJpbmcgUUEgYW5hbHlzaXMgdXNpbmcgc3l6a2FsbGVyLCBzbyBJIGNhbiBzYWZlbHkgcHJvY2VlZC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIGlzIGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYC4gSXQmIzM5O3MgYWRkcmVzc2luZyBhIGxvY2tpbmcgaXNzdWUgd2l0aGluIHRoZSBSdXN0IG51bGwgYmxvY2sgZHJpdmVyLCBgcm51bGxgLiBJIGNhbiBhbHJlYWR5IHNlZSB0aGUgcHJvYmxlbSEgVGhleSB3ZXJlIGRyb3BwaW5nIHRoZSBsb2NrIGJldHdlZW4gY2hlY2tpbmcgdGhlIGBwb3dlcmVkYCBzdGF0ZSBhbmQgdXBkYXRpbmcgYGJsb2NrX3NpemVgISBUaGF0IGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbiwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgbG9ja2luZyBlZmZpY2llbmN5IGlzc3VlLiBCZWZvcmUsIHRoZSBjb2RlIGxvb2tlZCBsaWtlIHRoaXM6CgpgYGBydXN0CmlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7CiAgICByZXR1cm4gRXJyKEVCVVNZKTsKfQouLi4KdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7CmBgYAoKV2hpY2ggaXMgb2J2aW91c2x5IGZsYXdlZC4gTm93LCB0aGV5JiMzOTt2ZSBmaXhlZCBpdCBieSBob2xkaW5nIHRoZSBsb2NrIGZvciB0aGUgZW50aXJlIGNyaXRpY2FsIHNlY3Rpb246CgpgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7YAoKTXVjaCBiZXR0ZXIuIEl0JiMzOTtzIGdvb2QgdG8gc2VlIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IGJlaW5nIGlkZW50aWZpZWQgYW5kIGFkZHJlc3NlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdXNlIHRoZSBzdGFuZGFyZCB0b29scyB0byBkbyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGZpbGVzIHdpdGhpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9gIGFuZCBhc3NvY2lhdGVkIEtjb25maWcgZmlsZXMgd2l0aGluIHRoZSByZXBvc2l0b3J5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcmVsYXRlZCBjb2RlLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlLWVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm51bGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOT1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjA6c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTIxLVxuLS1cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU9Mzc9b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXHQmIzQzOz0gbnVsbF9ibGsvXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CTEtfREVWX1JVU1RfTlVMTCkgJiM0Mzs9IHJudWxsL1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zOS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3JudWxsL01ha2VmaWxlLTEtXG5kcml2ZXJzL2Jsb2NrL3JudWxsL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSAmIzQzOz0gcm51bGxfbW9kLm9cbmRyaXZlcnMvYmxvY2svcm51bGwvTWFrZWZpbGU6MzpybnVsbF9tb2QteSA6PSBybnVsbC5vXG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0xNj1wdWIoY3JhdGUpIGZuIHN1YnN5c3RlbSgpIC1cdTAwM2UgaW1wbCBQaW5Jbml0XHUwMDNja2VybmVsOjpjb25maWdmczo6U3Vic3lzdGVtXHUwMDNjQ29uZmlnXHUwMDNlLCBFcnJvclx1MDAzZSB7XG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0yNS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MjY6ICAgIGtlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbTo6bmV3KGNcJiMzNDtybnVsbFwmIzM0OywgaXRlbV90eXBlLCB0cnlfcGluX2luaXQhKENvbmZpZyB7fSkpXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTI3LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3JudWxsL3JudWxsLnJzLTIyLSAgICB0eXBlOiBOdWxsQmxrTW9kdWxlLFxuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5yczoyMzogICAgbmFtZTogXCYjMzQ7cm51bGxfbW9kXCYjMzQ7LFxuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5ycy0yNC0gICAgYXV0aG9yczogW1wmIzM0O0FuZHJlYXMgSGluZGJvcmdcJiMzNDtdLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN0YXJ0aW5nIHBvaW50LCBhcyBpZiBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgcm51bGwgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHVuZGVybHlpbmcgbWVjaGFuaWNzIGZvciB0aGUgYHJudWxsYCBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgYm90aCBgZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgLiBUaGUgYEtjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCBhbmQgYW55IGRlcGVuZGVuY2llcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHdoZXRoZXIgdGhlIGRyaXZlciBpcyBidWlsdCBpbiBvciBhcyBhIG1vZHVsZSwgYW55IHR1bmFibGUgcGFyYW1ldGVycywgYW5kIG1heWJlIHNvbWUgaGVscCB0ZXh0LiBUaGVuLCBgY29uZmlnZnMucnNgIGlzIHJlYWxseSB3aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGtleSwgYXMgSSByZWNhbGwgdGhpcyBpcyBob3cgdGhlIGRyaXZlciBkeW5hbWljYWxseSBjb25maWd1cmVkLiBTbyBJIGV4cGVjdCBJIGFtIHNlZWluZyBob3cgdGhlIGRyaXZlciBjb25maWd1cmVzIHZpYSBjb25maWdmcy4gVGhpcyBpcyB3aGVyZSB0aGUgcnVudGltZSBhc3BlY3RzIGFyZSBtYW5hZ2VkLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZHJpdmVyJiMzOTtzIHN0YXRlIGFuZCBob3cgdGhleSBhcmUgcG9wdWxhdGVkIGJ5IHRoZSBjb25maWdmcyBlbnRyaWVzLiBJIGFtIGV4cGVjdGluZyBzb21lIHNvcnQgb2YgZmlsZSBzdHJ1Y3R1cmUgbWFwcGVkIHRvIHRoZXNlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGVzLiBJIGFudGljaXBhdGUgSSYjMzk7bGwgZmluZCB0aGUgbG9naWMgZm9yIGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgd3JpdGluZyB0aGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gdmlhIHRoZSBjb25maWdmcyBpbnRlcmZhY2UuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVzZSBmaWxlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBSdXN0IG51bGwgYmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIEJMS19ERVZfUlVTVF9OVUxMXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtSdXN0IG51bGwgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIFJVU1QgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgaXMgdGhlIFJ1c3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIG51bGwgYmxvY2sgZHJpdmVyLiBMaWtlXG4gIDEwOlx0XHQgIHRoZSBDIHZlcnNpb24sIHRoZSBkcml2ZXIgYWxsb3dzIHRoZSB1c2VyIHRvIGNyZWF0ZSB2aXJ1dGFsIGJsb2NrXG4gIDExOlx0XHQgIGRldmljZXMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB2aWEgdmFyaW91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAxNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBgcm51bGxgIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBybnVsbGAgYmxvY2sgZHJpdmVyIGludGVyYWN0cyB3aXRoIGBjb25maWdmc2AsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgY29uZmlnZnMucnNgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGRpdmluZyByaWdodCBpbnRvIHRoZSBjb2RlIGF0IGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYC4gSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBzeW1ib2xzIHRoYXQgYXJlIGRlZmluaW5nIHRoaXMgaW50ZWdyYXRpb24uIFdoYXQgYXJlIHRoZSBjb3JlIHJvdXRpbmVzIGhhbmRsaW5nIHRoZSBjcmVhdGlvbiwgcG9wdWxhdGlvbiwgYW5kIGludGVyYWN0aW9uIG9mIHRoZSBgcm51bGxgIGJsb2NrIGRldmljZSBpbnN0YW5jZXMgd2l0aGluIHRoZSBgY29uZmlnZnNgIGZyYW1ld29yaz8gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzdHJ1Y3R1cmFsIGdsdWUg4oCTIGhvdyB0aGUgZHJpdmVyJiMzOTtzIGJsb2NrIGRldmljZSByZXByZXNlbnRhdGlvbiBpcyBleHBvc2VkIGFuZCBtYW5hZ2VkIHRocm91Z2ggdGhlIGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdCAgICAgICAgfVxuIDE2MTpcdFxuIDE2MjpcdCAgICAgICAgT2soKCkpXG4gMTYzOlx0ICAgIH1cbiAxNjQ6XHR9XG4gMTY1Olx0XG4gMTY2Olx0I1t2dGFibGVdXG4gMTY3Olx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG4gMTY4Olx0ICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcbiAxNjk6XHRcbiAxNzA6XHQgICAgZm4gc2hvdyh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cdTAwM2UgUmVzdWx0XHUwMDNjdXNpemVcdTAwM2Uge1xuIDE3MTpcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XG4gMTcyOlx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXCYjMzQ7e31cXG5cJiMzNDssIHRoaXMuZGF0YS5sb2NrKCkuYmxvY2tfc2l6ZSkpPztcbiAxNzM6XHQgICAgICAgIE9rKHdyaXRlci5ieXRlc193cml0dGVuKCkpXG4gMTc0Olx0ICAgIH1cbiAxNzU6XHRcbiAxNzY6XHQgICAgZm4gc3RvcmUodGhpczogXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcdTAwMjZbdThdKSAtXHUwMDNlIFJlc3VsdCB7XG4gMTc3Olx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiAxNzg6XHQgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuIDE3OTpcdCAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuIDE4MDpcdCAgICAgICAgfVxuIDE4MTpcdFxuIDE4MjpcdCAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xuIDE4MzpcdCAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XHUwMDNjdTMyXHUwMDNlKCkubWFwX2Vycih8X3wgRUlOVkFMKT87XG4gMTg0Olx0XG4gMTg1Olx0ICAgICAgICBHZW5EaXNrQnVpbGRlcjo6dmFsaWRhdGVfYmxvY2tfc2l6ZSh2YWx1ZSk/O1xuIDE4NjpcdCAgICAgICAgZ3VhcmQuYmxvY2tfc2l6ZSA9IHZhbHVlO1xuIDE4NzpcdCAgICAgICAgT2soKCkpXG4gMTg4Olx0ICAgIH1cbiAxODk6XHR9XG4gMTkwOlx0XG4gMTkxOlx0I1t2dGFibGVdXG4gMTkyOlx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG4gMTkzOlx0ICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcbiAxOTQ6XHRcbiAxOTU6XHQgICAgZm4gc2hvdyh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cdTAwM2UgUmVzdWx0XHUwMDNjdXNpemVcdTAwM2Uge1xuIDE5NjpcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XG4gMTk3Olx0XG4gMTk4Olx0ICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnJvdGF0aW9uYWwge1xuIDE5OTpcdCAgICAgICAgICAgIHdyaXRlci53cml0ZV9zdHIoXCYjMzQ7MVxcblwmIzM0Oyk/O1xuIDIwMDpcdCAgICAgICAgfSBlbHNlIHtcbiAyMDE6XHQgICAgICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFwmIzM0OzBcXG5cJiMzNDspPztcbiAyMDI6XHQgICAgICAgIH1cbiAyMDM6XHRcbiAyMDQ6XHQgICAgICAgIE9rKHdyaXRlci5ieXRlc193cml0dGVuKCkpXG4gMjA1Olx0ICAgIH1cbiAyMDY6XHRcbiAyMDc6XHQgICAgZm4gc3RvcmUodGhpczogXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcdTAwMjZbdThdKSAtXHUwMDNlIFJlc3VsdCB7XG4gMjA4Olx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiAyMDk6XHQgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuIDIxMDpcdCAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuIDIxMTpcdCAgICAgICAgfVxuIDIxMjpcdFxuIDIxMzpcdCAgICAgICAgZ3VhcmQucm90YXRpb25hbCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xuIDIxNDpcdFxuIDIxNTpcdCAgICAgICAgT2soKCkpXG4gMjE2Olx0ICAgIH1cbiAyMTc6XHR9XG4gMjE4Olx0XG4gMjE5Olx0I1t2dGFibGVdXG4gMjIwOlx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzNcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG4gMjIxOlx0ICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcbiAyMjI6XHRcbiAyMjM6XHQgICAgZm4gc2hvdyh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cdTAwM2UgUmVzdWx0XHUwMDNjdXNpemVcdTAwM2Uge1xuIDIyNDpcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XG4gMjI1Olx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXCYjMzQ7e31cXG5cJiMzNDssIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliKSk/O1xuIDIyNjpcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcbiAyMjc6XHQgICAgfVxuIDIyODpcdFxuIDIyOTpcdCAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbiAyMzA6XHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuIDIzMTpcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gMjMyOlx0ICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gMjMzOlx0ICAgICAgICB9XG4gMjM0Olx0XG4gMjM1Olx0ICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XG4gMjM2Olx0ICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcdTAwM2N1NjRcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcbiAyMzc6XHRcbiAyMzg6XHQgICAgICAgIGd1YXJkLmNhcGFjaXR5X21pYiA9IHZhbHVlO1xuIDIzOTpcdCAgICAgICAgT2soKCkpXG4gMjQwOlx0ICAgIH1cbiAyNDE6XHR9XG4gMjQyOlx0XG4gMjQzOlx0I1t2dGFibGVdXG4gMjQ0Olx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzRcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG4gMjQ1Olx0ICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcbiAyNDY6XHRcbiAyNDc6XHQgICAgZm4gc2hvdyh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cdTAwM2UgUmVzdWx0XHUwMDNjdXNpemVcdTAwM2Uge1xuIDI0ODpcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XG4gMjQ5Olx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXCYjMzQ7e31cXG5cJiMzNDssIHRoaXMuZGF0YS5sb2NrKCkuaXJxX21vZGUpKT87XG4gMjUwOlx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxuIDI1MTpcdCAgICB9XG4gMjUyOlx0XG4gMjUzOlx0ICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuIDI1NDpcdCAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XG4gMjU1Olx0ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAyNTY6XHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAyNTc6XHQgICAgICAgIH1cbiAyNTg6XHRcbiAyNTk6XHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzQxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gcm51bGwgYW5kIFJ1c3QgS2VybmVsIFN5bWJvbCBOYW1pbmcqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBybnVsbGAgaW50ZXJhY3RzIHdpdGggYGNvbmZpZ2ZzYCBzcGVjaWZpY2FsbHksIGFuZCBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaG93IHRoZSBSdXN0IHN5bWJvbHMgYXJlIG5hbWVkIHdpdGhpbiB0aGUga2VybmVsIGNvbnRleHQuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uLiBGaXJzdCBzdG9wLCB0aGUgZmlsZSBzeXN0ZW0uIFdoZXJlIGlzIHRoZSByZWxldmFudCBjb2RlPyBBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGZpbGVzIHdpdGhpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9gLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IG15IGluc3BlY3Rpb24gdGhlcmUgdG8gc2VlIHdoYXQgdGhlIGFyY2hpdGVjdHVyZSBpcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoaW5ncy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVzaWduIGFuZCB3aGVyZSB0aGUgUnVzdCBjb21wb25lbnRzIGFyZSB0aWVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JudWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnMucnMmIzM0OywKICAgICYjMzQ7cm51bGwucnMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTg1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aGUgc2FtZSB0aG91Z2h0czoKCioqRXhwbG9yaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGlzIGNvZGViYXNlLCBhbmQgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBjb25maWd1cmF0aW9uIGFuZCBwb3RlbnRpYWxseSwgbnVsbCBkZXZpY2VzLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSB0aGluZ3MgaW50ZXJhY3QuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIHJlbGF0ZWQgY29kZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBjb25maWdmcy5yc2AgYW5kIGBybnVsbC5yc2AuIEkgd2FudCB0byBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGZsb3dzLCBhbmQgaG93IHRoZSBudWxsIGRldmljZSBpcyBiZWluZyBpbXBsZW1lbnRlZCBvciB1c2VkLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhvc2UgZmlsZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHR1c2Ugc3VwZXI6Ok51bGxCbGtEZXZpY2U7XG4gICA0Olx0dXNlIGtlcm5lbDo6e1xuICAgNTpcdCAgICBibG9jazo6bXE6Omdlbl9kaXNrOjp7R2VuRGlzaywgR2VuRGlza0J1aWxkZXJ9LFxuICAgNjpcdCAgICBjb25maWdmczo6e3NlbGYsIEF0dHJpYnV0ZU9wZXJhdGlvbnN9LFxuICAgNzpcdCAgICBjb25maWdmc19hdHRycyxcbiAgIDg6XHQgICAgZm10Ojp7c2VsZiwgV3JpdGUgYXMgX30sXG4gICA5Olx0ICAgIG5ld19tdXRleCxcbiAgMTA6XHQgICAgcGFnZTo6UEFHRV9TSVpFLFxuICAxMTpcdCAgICBwcmVsdWRlOjoqLFxuICAxMjpcdCAgICBzdHI6Ontrc3RydG9ib29sX2J5dGVzLCBDU3RyaW5nfSxcbiAgMTM6XHQgICAgc3luYzo6TXV0ZXgsXG4gIDE0Olx0fTtcbiAgMTU6XHRcbiAgMTY6XHRwdWIoY3JhdGUpIGZuIHN1YnN5c3RlbSgpIC1cdTAwM2UgaW1wbCBQaW5Jbml0XHUwMDNja2VybmVsOjpjb25maWdmczo6U3Vic3lzdGVtXHUwMDNjQ29uZmlnXHUwMDNlLCBFcnJvclx1MDAzZSB7XG4gIDE3Olx0ICAgIGxldCBpdGVtX3R5cGUgPSBjb25maWdmc19hdHRycyEge1xuICAxODpcdCAgICAgICAgY29udGFpbmVyOiBjb25maWdmczo6U3Vic3lzdGVtXHUwMDNjQ29uZmlnXHUwMDNlLFxuICAxOTpcdCAgICAgICAgZGF0YTogQ29uZmlnLFxuICAyMDpcdCAgICAgICAgY2hpbGQ6IERldmljZUNvbmZpZyxcbiAgMjE6XHQgICAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgMjI6XHQgICAgICAgICAgICBmZWF0dXJlczogMCxcbiAgMjM6XHQgICAgICAgIF0sXG4gIDI0Olx0ICAgIH07XG4gIDI1Olx0XG4gIDI2Olx0ICAgIGtlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbTo6bmV3KGNcJiMzNDtybnVsbFwmIzM0OywgaXRlbV90eXBlLCB0cnlfcGluX2luaXQhKENvbmZpZyB7fSkpXG4gIDI3Olx0fVxuICAyODpcdFxuICAyOTpcdCNbcGluX2RhdGFdXG4gIDMwOlx0cHViKGNyYXRlKSBzdHJ1Y3QgQ29uZmlnIHt9XG4gIDMxOlx0XG4gIDMyOlx0I1t2dGFibGVdXG4gIDMzOlx0aW1wbCBBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMFx1MDAzZSBmb3IgQ29uZmlnIHtcbiAgMzQ6XHQgICAgdHlwZSBEYXRhID0gQ29uZmlnO1xuICAzNTpcdFxuICAzNjpcdCAgICBmbiBzaG93KF90aGlzOiBcdTAwMjZDb25maWcsIHBhZ2U6IFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cdTAwM2UgUmVzdWx0XHUwMDNjdXNpemVcdTAwM2Uge1xuICAzNzpcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XG4gIDM4Olx0ICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFwmIzM0O2Jsb2Nrc2l6ZSxzaXplLHJvdGF0aW9uYWwsaXJxbW9kZVxcblwmIzM0Oyk/O1xuICAzOTpcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcbiAgNDA6XHQgICAgfVxuICA0MTpcdH1cbiAgNDI6XHRcbiAgNDM6XHQjW3Z0YWJsZV1cbiAgNDQ6XHRpbXBsIGNvbmZpZ2ZzOjpHcm91cE9wZXJhdGlvbnMgZm9yIENvbmZpZyB7XG4gIDQ1Olx0ICAgIHR5cGUgQ2hpbGQgPSBEZXZpY2VDb25maWc7XG4gIDQ2Olx0XG4gIDQ3Olx0ICAgIGZuIG1ha2VfZ3JvdXAoXG4gIDQ4Olx0ICAgICAgICBcdTAwMjZzZWxmLFxuICA0OTpcdCAgICAgICAgbmFtZTogXHUwMDI2Q1N0cixcbiAgNTA6XHQgICAgKSAtXHUwMDNlIFJlc3VsdFx1MDAzY2ltcGwgUGluSW5pdFx1MDAzY2NvbmZpZ2ZzOjpHcm91cFx1MDAzY0RldmljZUNvbmZpZ1x1MDAzZSwgRXJyb3JcdTAwM2VcdTAwM2Uge1xuICA1MTpcdCAgICAgICAgbGV0IGl0ZW1fdHlwZSA9IGNvbmZpZ2ZzX2F0dHJzISB7XG4gIDUyOlx0ICAgICAgICAgICAgY29udGFpbmVyOiBjb25maWdmczo6R3JvdXBcdTAwM2NEZXZpY2VDb25maWdcdTAwM2UsXG4gIDUzOlx0ICAgICAgICAgICAgZGF0YTogRGV2aWNlQ29uZmlnLFxuICA1NDpcdCAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgNTU6XHQgICAgICAgICAgICAgICAgLy8gTmFtZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDIG51bGxfYmxrXG4gIDU2Olx0ICAgICAgICAgICAgICAgIHBvd2VyOiAwLFxuICA1NzpcdCAgICAgICAgICAgICAgICBibG9ja3NpemU6IDEsXG4gIDU4Olx0ICAgICAgICAgICAgICAgIHJvdGF0aW9uYWw6IDIsXG4gIDU5Olx0ICAgICAgICAgICAgICAgIHNpemU6IDMsXG4gIDYwOlx0ICAgICAgICAgICAgICAgIGlycW1vZGU6IDQsXG4gIDYxOlx0ICAgICAgICAgICAgXSxcbiAgNjI6XHQgICAgICAgIH07XG4gIDYzOlx0XG4gIDY0Olx0ICAgICAgICBPayhjb25maWdmczo6R3JvdXA6Om5ldyhcbiAgNjU6XHQgICAgICAgICAgICBuYW1lLnRyeV9pbnRvKCk/LFxuICA2NjpcdCAgICAgICAgICAgIGl0ZW1fdHlwZSxcbiAgNjc6XHQgICAgICAgICAgICAvLyBUT0RPOiBjYW5ub3QgY29lcmNlIG5ld19tdXRleCEoKSB0byBpbXBsIFBpbkluaXRcdTAwM2NfLCBFcnJvclx1MDAzZSwgc28gcHV0IG11dGV4IGluc2lkZVxuICA2ODpcdCAgICAgICAgICAgIHRyeV9waW5faW5pdCEoIERldmljZUNvbmZpZyB7XG4gIDY5Olx0ICAgICAgICAgICAgICAgIGRhdGEgXHUwMDNjLSBuZXdfbXV0ZXghKERldmljZUNvbmZpZ0lubmVyIHtcbiAgNzA6XHQgICAgICAgICAgICAgICAgICAgIHBvd2VyZWQ6IGZhbHNlLFxuICA3MTpcdCAgICAgICAgICAgICAgICAgICAgYmxvY2tfc2l6ZTogNDA5NixcbiAgNzI6XHQgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uYWw6IGZhbHNlLFxuICA3MzpcdCAgICAgICAgICAgICAgICAgICAgZGlzazogTm9uZSxcbiAgNzQ6XHQgICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5X21pYjogNDA5NixcbiAgNzU6XHQgICAgICAgICAgICAgICAgICAgIGlycV9tb2RlOiBJUlFNb2RlOjpOb25lLFxuICA3NjpcdCAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZS50cnlfaW50bygpPyxcbiAgNzc6XHQgICAgICAgICAgICAgICAgfSksXG4gIDc4Olx0ICAgICAgICAgICAgfSksXG4gIDc5Olx0ICAgICAgICApKVxuICA4MDpcdCAgICB9XG4gIDgxOlx0fVxuICA4MjpcdFxuICA4MzpcdCNbZGVyaXZlKERlYnVnLCBDbG9uZSwgQ29weSldXG4gIDg0Olx0cHViKGNyYXRlKSBlbnVtIElSUU1vZGUge1xuICA4NTpcdCAgICBOb25lLFxuICA4NjpcdCAgICBTb2Z0LFxuICA4NzpcdH1cbiAgODg6XHRcbiAgODk6XHRpbXBsIFRyeUZyb21cdTAwM2N1OFx1MDAzZSBmb3IgSVJRTW9kZSB7XG4gIDkwOlx0ICAgIHR5cGUgRXJyb3IgPSBrZXJuZWw6OmVycm9yOjpFcnJvcjtcbiAgOTE6XHRcbiAgOTI6XHQgICAgZm4gdHJ5X2Zyb20odmFsdWU6IHU4KSAtXHUwMDNlIFJlc3VsdFx1MDAzY1NlbGZcdTAwM2Uge1xuICA5MzpcdCAgICAgICAgbWF0Y2ggdmFsdWUge1xuICA5NDpcdCAgICAgICAgICAgIDAgPVx1MDAzZSBPayhTZWxmOjpOb25lKSxcbiAgOTU6XHQgICAgICAgICAgICAxID1cdTAwM2UgT2soU2VsZjo6U29mdCksXG4gIDk2Olx0ICAgICAgICAgICAgXyA9XHUwMDNlIEVycihFSU5WQUwpLFxuICA5NzpcdCAgICAgICAgfVxuICA5ODpcdCAgICB9XG4gIDk5Olx0fVxuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDcxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBybnVsbCBDb25maWdGUyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZXhhbWluZSB0aGUgYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgIGZpbGUsIHNwZWNpZmljYWxseSBsaW5lcyAxMDEgdGhyb3VnaCAxNjAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgY29udGV4dC4gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBybnVsbCBibG9jayBkcml2ZXIgY29uY2VwdCwgc28gdGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIENvbmZpZ0ZTIGludGVyZmFjZSBmb3IgaXQuIEkgd2FudCB0byBzZWUgaG93IHRoZSB2aXJ0dWFsIGJsb2NrIGRldmljZSBpcyBjb25maWd1cmVkIHRocm91Z2ggdGhlIGZpbGVzeXN0ZW0uCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugb2JqZWN0IGNyZWF0aW9uLCBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIGRldmljZSBzaXplLCByZWFkLW9ubHkgc3RhdHVzLCBwZXJoYXBzIGV2ZW4gc29tZSBraW5kIG9mIGFjY2VzcyBjb250cm9sIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBDb25maWdGUyBpcyBrbm93biBmb3IgcHJvdmlkaW5nIGEgc3RydWN0dXJlZCB3YXkgdG8gZXhwb3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGZvbGxvd3MgYSBjb25zaXN0ZW50IHBhdHRlcm4uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBDb25maWdGUyBpZGlvbXMgLSBob3cgdGhleSBkZWZpbmUgdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmVzLCB0aGUgY2FsbGJhY2tzIGZvciBoYW5kbGluZyByZWFkcyBhbmQgd3JpdGVzIHRvIHRob3NlIGF0dHJpYnV0ZXMsIGFuZCBob3cgdGhlIGRldmljZSBpdHNlbGYgaXMgYnJvdWdodCBpbnRvIGJlaW5nIG9yIGRlc3Ryb3llZC4KCk15IGZpcnN0IHJlYWQtdGhyb3VnaCB3aWxsIGJlIHRvIGdldCBhIGdlbmVyYWwgb3ZlcnZpZXcsIG5vdGluZyBhbnkgaW1tZWRpYXRlIHBhdHRlcm5zIG9yIGZ1bmN0aW9ucyB0aGF0IHNlZW0gaW1wb3J0YW50LiBUaGVuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiBDb25maWdGUyBhbmQgdGhlIGJsb2NrIGRldmljZSBkcml2ZXIgaXMgdGhlIGhlYXJ0IG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgcGFyYW1ldGVycyBhcmUgY29uZmlndXJhYmxlIGFuZCBob3cgdGhvc2UgcGFyYW1ldGVycyBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGF0YSB2YWxpZGF0aW9uIG9yIGVycm9yIGhhbmRsaW5nIHdpbGwgbGVhcCBvdXQgYXQgbWUgcHJldHR5IHF1aWNrbHkuIEkgYW50aWNpcGF0ZSBhIGZhaXIgYml0IG9mIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBjb25zaWRlcmF0aW9ucywgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBwYXkgcGFydGljdWxhciBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0aW1wbCBmbXQ6OkRpc3BsYXkgZm9yIElSUU1vZGUge1xuIDEwMjpcdCAgICBmbiBmbXQoXHUwMDI2c2VsZiwgZjogXHUwMDI2bXV0IGZtdDo6Rm9ybWF0dGVyXHUwMDNjJiMzOTtfXHUwMDNlKSAtXHUwMDNlIGZtdDo6UmVzdWx0IHtcbiAxMDM6XHQgICAgICAgIG1hdGNoIHNlbGYge1xuIDEwNDpcdCAgICAgICAgICAgIFNlbGY6Ok5vbmUgPVx1MDAzZSBmLndyaXRlX3N0cihcJiMzNDswXCYjMzQ7KT8sXG4gMTA1Olx0ICAgICAgICAgICAgU2VsZjo6U29mdCA9XHUwMDNlIGYud3JpdGVfc3RyKFwmIzM0OzFcJiMzNDspPyxcbiAxMDY6XHQgICAgICAgIH1cbiAxMDc6XHQgICAgICAgIE9rKCgpKVxuIDEwODpcdCAgICB9XG4gMTA5Olx0fVxuIDExMDpcdFxuIDExMTpcdCNbcGluX2RhdGFdXG4gMTEyOlx0cHViKGNyYXRlKSBzdHJ1Y3QgRGV2aWNlQ29uZmlnIHtcbiAxMTM6XHQgICAgI1twaW5dXG4gMTE0Olx0ICAgIGRhdGE6IE11dGV4XHUwMDNjRGV2aWNlQ29uZmlnSW5uZXJcdTAwM2UsXG4gMTE1Olx0fVxuIDExNjpcdFxuIDExNzpcdCNbcGluX2RhdGFdXG4gMTE4Olx0c3RydWN0IERldmljZUNvbmZpZ0lubmVyIHtcbiAxMTk6XHQgICAgcG93ZXJlZDogYm9vbCxcbiAxMjA6XHQgICAgbmFtZTogQ1N0cmluZyxcbiAxMjE6XHQgICAgYmxvY2tfc2l6ZTogdTMyLFxuIDEyMjpcdCAgICByb3RhdGlvbmFsOiBib29sLFxuIDEyMzpcdCAgICBjYXBhY2l0eV9taWI6IHU2NCxcbiAxMjQ6XHQgICAgaXJxX21vZGU6IElSUU1vZGUsXG4gMTI1Olx0ICAgIGRpc2s6IE9wdGlvblx1MDAzY0dlbkRpc2tcdTAwM2NOdWxsQmxrRGV2aWNlXHUwMDNlXHUwMDNlLFxuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHQjW3Z0YWJsZV1cbiAxMjk6XHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAxMzA6XHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuIDEzMTpcdFxuIDEzMjpcdCAgICBmbiBzaG93KHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVx1MDAzZSBSZXN1bHRcdTAwM2N1c2l6ZVx1MDAzZSB7XG4gMTMzOlx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcbiAxMzQ6XHRcbiAxMzU6XHQgICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4gMTM2Olx0ICAgICAgICAgICAgd3JpdGVyLndyaXRlX3N0cihcJiMzNDsxXFxuXCYjMzQ7KT87XG4gMTM3Olx0ICAgICAgICB9IGVsc2Uge1xuIDEzODpcdCAgICAgICAgICAgIHdyaXRlci53cml0ZV9zdHIoXCYjMzQ7MFxcblwmIzM0Oyk/O1xuIDEzOTpcdCAgICAgICAgfVxuIDE0MDpcdFxuIDE0MTpcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcbiAxNDI6XHQgICAgfVxuIDE0MzpcdFxuIDE0NDpcdCAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbiAxNDU6XHQgICAgICAgIGxldCBwb3dlcl9vcCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xuIDE0NjpcdCAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XG4gMTQ3Olx0XG4gMTQ4Olx0ICAgICAgICBpZiAhZ3VhcmQucG93ZXJlZCBcdTAwMjZcdTAwMjYgcG93ZXJfb3Age1xuIDE0OTpcdCAgICAgICAgICAgIGd1YXJkLmRpc2sgPSBTb21lKE51bGxCbGtEZXZpY2U6Om5ldyhcbiAxNTA6XHQgICAgICAgICAgICAgICAgXHUwMDI2Z3VhcmQubmFtZSxcbiAxNTE6XHQgICAgICAgICAgICAgICAgZ3VhcmQuYmxvY2tfc2l6ZSxcbiAxNTI6XHQgICAgICAgICAgICAgICAgZ3VhcmQucm90YXRpb25hbCxcbiAxNTM6XHQgICAgICAgICAgICAgICAgZ3VhcmQuY2FwYWNpdHlfbWliLFxuIDE1NDpcdCAgICAgICAgICAgICAgICBndWFyZC5pcnFfbW9kZSxcbiAxNTU6XHQgICAgICAgICAgICApPyk7XG4gMTU2Olx0ICAgICAgICAgICAgZ3VhcmQucG93ZXJlZCA9IHRydWU7XG4gMTU3Olx0ICAgICAgICB9IGVsc2UgaWYgZ3VhcmQucG93ZXJlZCBcdTAwMjZcdTAwMjYgIXBvd2VyX29wIHtcbiAxNTg6XHQgICAgICAgICAgICBkcm9wKGd1YXJkLmRpc2sudGFrZSgpKTtcbiAxNTk6XHQgICAgICAgICAgICBndWFyZC5wb3dlcmVkID0gZmFsc2U7XG4gMTYwOlx0ICAgICAgICB9XG4gMTYxOlx0XG4gMTYyOlx0ICAgICAgICBPaygoKSlcbiAxNjM6XHQgICAgfVxuIDE2NDpcdH1cbiAxNjU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc5NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBybnVsbC5yc2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGNpcmNsaW5nIGJhY2ssIGFuZCBteSBpbnRlcm5hbCBjaGVja2xpc3QgaGFzIGZsYWdnZWQgdGhlIGBybnVsbC5yc2AgbW9kdWxlLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHkuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGVkZ2UgY2FzZXMgaXQgaGFuZGxlcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byByZWZyZXNoIG15IG1lbW9yeSwgY29uZmlybSB0aGF0IHdlJiMzOTtyZSBwcm9wZXJseSBhZGRyZXNzaW5nIHRob3NlIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEkmIzM5O20gZXNwZWNpYWxseSBmb2N1c2VkIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXRzIGJlaGF2aW9yIG1pZ2h0IGluZmx1ZW5jZSBkZXBlbmRlbnQgc3Vic3lzdGVtcy4gQXJlIHRoZXJlIGFueSBzdWJ0bGUgdGhyZWFkaW5nIGlzc3VlcyBJIG1pZ2h0IGhhdmUgbWlzc2VkIGluIHRoZSBpbml0aWFsIHJldmlldz8gQ291bGQgYSByYWNlIGNvbmRpdGlvbiBiZSBsdXJraW5nIGluIHRoZXJlPyBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSYjMzk7cmUgbm90IGluYWR2ZXJ0ZW50bHkgaW50cm9kdWNpbmcgdnVsbmVyYWJpbGl0aWVzIOKAkyBpdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEsIGFuZCBhIHNlY3VyaXR5IGZsYXcgdGhlcmUgY291bGQgYmUgY2F0YXN0cm9waGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm51bGwvcm51bGwucnMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdC8vISBUaGlzIGlzIGEgUnVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQyBudWxsIGJsb2NrIGRyaXZlci5cbiAgIDQ6XHRcbiAgIDU6XHRtb2QgY29uZmlnZnM7XG4gICA2Olx0XG4gICA3Olx0dXNlIGNvbmZpZ2ZzOjpJUlFNb2RlO1xuICAgODpcdHVzZSBrZXJuZWw6OntcbiAgIDk6XHQgICAgYmxvY2s6OntcbiAgMTA6XHQgICAgICAgIHNlbGYsXG4gIDExOlx0ICAgICAgICBtcTo6e1xuICAxMjpcdCAgICAgICAgICAgIHNlbGYsXG4gIDEzOlx0ICAgICAgICAgICAgZ2VuX2Rpc2s6OntzZWxmLCBHZW5EaXNrfSxcbiAgMTQ6XHQgICAgICAgICAgICBPcGVyYXRpb25zLCBUYWdTZXQsXG4gIDE1Olx0ICAgICAgICB9LFxuICAxNjpcdCAgICB9LFxuICAxNzpcdCAgICBwcmVsdWRlOjoqLFxuICAxODpcdCAgICBzeW5jOjp7YXJlZjo6QVJlZiwgQXJjfSxcbiAgMTk6XHR9O1xuICAyMDpcdFxuICAyMTpcdG1vZHVsZSEge1xuICAyMjpcdCAgICB0eXBlOiBOdWxsQmxrTW9kdWxlLFxuICAyMzpcdCAgICBuYW1lOiBcJiMzNDtybnVsbF9tb2RcJiMzNDssXG4gIDI0Olx0ICAgIGF1dGhvcnM6IFtcJiMzNDtBbmRyZWFzIEhpbmRib3JnXCYjMzQ7XSxcbiAgMjU6XHQgICAgZGVzY3JpcHRpb246IFwmIzM0O1J1c3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIEMgbnVsbCBibG9jayBkcml2ZXJcJiMzNDssXG4gIDI2Olx0ICAgIGxpY2Vuc2U6IFwmIzM0O0dQTCB2MlwmIzM0OyxcbiAgMjc6XHR9XG4gIDI4Olx0XG4gIDI5Olx0I1twaW5fZGF0YV1cbiAgMzA6XHRzdHJ1Y3QgTnVsbEJsa01vZHVsZSB7XG4gIDMxOlx0ICAgICNbcGluXVxuICAzMjpcdCAgICBjb25maWdmc19zdWJzeXN0ZW06IGtlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbVx1MDAzY2NvbmZpZ2ZzOjpDb25maWdcdTAwM2UsXG4gIDMzOlx0fVxuICAzNDpcdFxuICAzNTpcdGltcGwga2VybmVsOjpJblBsYWNlTW9kdWxlIGZvciBOdWxsQmxrTW9kdWxlIHtcbiAgMzY6XHQgICAgZm4gaW5pdChfbW9kdWxlOiBcdTAwMjYmIzM5O3N0YXRpYyBUaGlzTW9kdWxlKSAtXHUwMDNlIGltcGwgUGluSW5pdFx1MDAzY1NlbGYsIEVycm9yXHUwMDNlIHtcbiAgMzc6XHQgICAgICAgIHByX2luZm8hKFwmIzM0O1J1c3QgbnVsbF9ibGsgbG9hZGVkXFxuXCYjMzQ7KTtcbiAgMzg6XHRcbiAgMzk6XHQgICAgICAgIHRyeV9waW5faW5pdCEoU2VsZiB7XG4gIDQwOlx0ICAgICAgICAgICAgY29uZmlnZnNfc3Vic3lzdGVtIFx1MDAzYy0gY29uZmlnZnM6OnN1YnN5c3RlbSgpLFxuICA0MTpcdCAgICAgICAgfSlcbiAgNDI6XHQgICAgfVxuICA0MzpcdH1cbiAgNDQ6XHRcbiAgNDU6XHRzdHJ1Y3QgTnVsbEJsa0RldmljZTtcbiAgNDY6XHRcbiAgNDc6XHRpbXBsIE51bGxCbGtEZXZpY2Uge1xuICA0ODpcdCAgICBmbiBuZXcoXG4gIDQ5Olx0ICAgICAgICBuYW1lOiBcdTAwMjZDU3RyLFxuICA1MDpcdCAgICAgICAgYmxvY2tfc2l6ZTogdTMyLFxuICA1MTpcdCAgICAgICAgcm90YXRpb25hbDogYm9vbCxcbiAgNTI6XHQgICAgICAgIGNhcGFjaXR5X21pYjogdTY0LFxuICA1MzpcdCAgICAgICAgaXJxX21vZGU6IElSUU1vZGUsXG4gIDU0Olx0ICAgICkgLVx1MDAzZSBSZXN1bHRcdTAwM2NHZW5EaXNrXHUwMDNjU2VsZlx1MDAzZVx1MDAzZSB7XG4gIDU1Olx0ICAgICAgICBsZXQgdGFnc2V0ID0gQXJjOjpwaW5faW5pdChUYWdTZXQ6Om5ldygxLCAyNTYsIDEpLCBHRlBfS0VSTkVMKT87XG4gIDU2Olx0XG4gIDU3Olx0ICAgICAgICBsZXQgcXVldWVfZGF0YSA9IEJveDo6bmV3KFF1ZXVlRGF0YSB7IGlycV9tb2RlIH0sIEdGUF9LRVJORUwpPztcbiAgNTg6XHRcbiAgNTk6XHQgICAgICAgIGdlbl9kaXNrOjpHZW5EaXNrQnVpbGRlcjo6bmV3KClcbiAgNjA6XHQgICAgICAgICAgICAuY2FwYWNpdHlfc2VjdG9ycyhjYXBhY2l0eV9taWIgXHUwMDNjXHUwMDNjICgyMCAtIGJsb2NrOjpTRUNUT1JfU0hJRlQpKVxuICA2MTpcdCAgICAgICAgICAgIC5sb2dpY2FsX2Jsb2NrX3NpemUoYmxvY2tfc2l6ZSk/XG4gIDYyOlx0ICAgICAgICAgICAgLnBoeXNpY2FsX2Jsb2NrX3NpemUoYmxvY2tfc2l6ZSk/XG4gIDYzOlx0ICAgICAgICAgICAgLnJvdGF0aW9uYWwocm90YXRpb25hbClcbiAgNjQ6XHQgICAgICAgICAgICAuYnVpbGQoZm10IShcJiMzNDt7fVwmIzM0OywgbmFtZS50b19zdHIoKT8pLCB0YWdzZXQsIHF1ZXVlX2RhdGEpXG4gIDY1Olx0ICAgIH1cbiAgNjY6XHR9XG4gIDY3Olx0XG4gIDY4Olx0c3RydWN0IFF1ZXVlRGF0YSB7XG4gIDY5Olx0ICAgIGlycV9tb2RlOiBJUlFNb2RlLFxuICA3MDpcdH1cbiAgNzE6XHRcbiAgNzI6XHQjW3Z0YWJsZV1cbiAgNzM6XHRpbXBsIE9wZXJhdGlvbnMgZm9yIE51bGxCbGtEZXZpY2Uge1xuICA3NDpcdCAgICB0eXBlIFF1ZXVlRGF0YSA9IEtCb3hcdTAwM2NRdWV1ZURhdGFcdTAwM2U7XG4gIDc1Olx0XG4gIDc2Olx0ICAgICNbaW5saW5lKGFsd2F5cyldXG4gIDc3Olx0ICAgIGZuIHF1ZXVlX3JxKHF1ZXVlX2RhdGE6IFx1MDAyNlF1ZXVlRGF0YSwgcnE6IEFSZWZcdTAwM2NtcTo6UmVxdWVzdFx1MDAzY1NlbGZcdTAwM2VcdTAwM2UsIF9pc19sYXN0OiBib29sKSAtXHUwMDNlIFJlc3VsdCB7XG4gIDc4Olx0ICAgICAgICBtYXRjaCBxdWV1ZV9kYXRhLmlycV9tb2RlIHtcbiAgNzk6XHQgICAgICAgICAgICBJUlFNb2RlOjpOb25lID1cdTAwM2UgbXE6OlJlcXVlc3Q6OmVuZF9vayhycSlcbiAgODA6XHQgICAgICAgICAgICAgICAgLm1hcF9lcnIofF9lfCBrZXJuZWw6OmVycm9yOjpjb2RlOjpFSU8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgcm51bGwgRHJpdmVyIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gKnJudWxsKiwgdGhlIFJ1c3QtYmFzZWQgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyLCB3aGljaCBJIGtub3cgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19CTEtfREVWX1JVU1RfTlVMTGAsIHVzZXMgY29uZmlnZnMgZm9yIGNvbmZpZ3VyYXRpb24uIFRoZSBmaXJzdCBxdWVzdGlvbiBpcywgd2lsbCB0aGlzIGV2ZW4gYmUgcmVsZXZhbnQgaW4gdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBJJiMzOTttIHdvcmtpbmcgd2l0aCBsaWtlIFFFTVUgb3IgR0NFPyBZZXMsIGl04oCZcyBhIHNvZnR3YXJlLWJhc2VkIHZpcnR1YWwgZHJpdmVyLCBqdXN0IGxpa2UgYG51bGxfYmxrYCwgYW5kIHVzZXMgYC9zeXMva2VybmVsL2NvbmZpZy9ybnVsbC8uLi5gIHdoaWNoIGNvbmZpcm1zIGl0JiMzOTtzIGNvbmZpZ2ZzLWRyaXZlbi4gR29vZCwgZ29vZC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgYWN0dWFsbHkgZXhlY3V0YWJsZSBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5IGFyZTsgdGhlIGNvcmUgb2YgdGhlIHVwZGF0ZSByZXZvbHZlcyBhcm91bmQgUnVzdCBtZXRob2RzIHRoYXQgaW1wbGVtZW50IHRoZSBgc3RvcmVgIGZ1bmN0aW9uIGZvciB0aGUgcmVsZXZhbnQgY29uZmlnZnMgYXR0cmlidXRlcyB3aXRoaW4gYERldmljZUNvbmZpZ2Ag4oCTIGJsb2Nrc2l6ZSwgcm90YXRpb25hbCBzZXR0aW5ncywgdGhlIHNpemUsIGFuZCBpcnFtb2RlLgoKVGhlIHByb2JsZW0gdGhleSYjMzk7dmUgYWRkcmVzc2VkIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbi4gVGhlIHByZXZpb3VzIGNvZGUgY2hlY2tlZCB0aGUgYHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZGAgc3RhdGUsIHJlbGVhc2VkIHRoZSBsb2NrLCBhbmQgKnRoZW4qIHJlYWNxdWlyZWQgaXQgdG8gdXBkYXRlIHZhcmlvdXMgYXR0cmlidXRlcy4gQ2xlYXJseSwgdGhhdCBvcGVuZWQgYSByYWNlIHdpbmRvdy4gVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGNvcnJlY3Q6IHRoZXkmIzM5O3JlIG5vdyBob2xkaW5nIHRoZSBgZ3VhcmRgIHRocm91Z2hvdXQgdGhlIGVudGlyZSBgc3RvcmVgIG9wZXJhdGlvbi4gVGhhdCYjMzk7cyBjbGVhbiBhbmQgc2FmZS4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBrbm93IGBCTEtfREVWX1JVU1RfTlVMTGAgcmVxdWlyZXMgYFJVU1RgIGFuZCBgQ09ORklHRlNfRlNgLiBUaW1lIHRvIHB1bGwgdXAgdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgdG8gYmUgY2VydGFpbiBhbmQgY2hlY2sgZm9yIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyBvciBjb25mbGljdHMuIEEgcXVpY2sgcnVuIG9mIGBncmVwcGVyYCBvbiB0aGUga2VybmVsIHNvdXJjZSwgc2VhcmNoaW5nIGZvciBgY29uZmlnIEJMS19ERVZfUlVTVF9OVUxMYCwgYFJVU1RgLCBhbmQgYENPTkZJR0ZTX0ZTYCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1JVU1RfTlVMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWctNC1cbmRyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZzo1OmNvbmZpZyBCTEtfREVWX1JVU1RfTlVMTFxuZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtSdXN0IG51bGwgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODE5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBSdXN0IFN5bWJvbCBIYW5kbGluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IFJ1c3Qgc3ltYm9scyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhpcyBgcm51bGxgIGRyaXZlci4gTXkgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXM6IGNoZWNraW5nIGBkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWdgIHNob3dzIGl0ICpkZXBlbmRzIG9uKiBgUlVTVGAgYW5kIGBDT05GSUdGU19GU2AuIFRoYXQgdGVsbHMgbWUgdGhlIGNvbnRleHQgb2Ygd2hlcmUgdG8gbG9vayBhbmQgd2hhdCBmcmFtZXdvcmtzIGFyZSBlbXBsb3llZC4KCk5vdywgdGhlIGNvcmUgb2YgdGhlIG1hdHRlcjogaG93IGFyZSB0aGVzZSBSdXN0IHN5bWJvbHMgYWN0dWFsbHkgKnJlcHJlc2VudGVkKj8gV2hhdCYjMzk7cyB0aGUgbWFuZ2xpbmcgb3IgY29udmVudGlvbiBhdCBwbGF5PyBXaGF0IGZvY3VzIHN5bWJvbHMgYXJlIGFwcHJvcHJpYXRlIGhlcmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGVidWcuIEkgbmVlZCB0byBrbm93IHRoZSBlbnRyeSBwb2ludHMuIEFyZSB0aGUgZm9jdXMgc3ltYm9scyBldmVuIGFwcGxpY2FibGUgdG8gdGhlIFJ1c3Qgc3ltYm9scz8gSSBzaG91bGQgc2VhcmNoIHRoZSBrZXJuZWwgZm9yIG90aGVyIFJ1c3QgZHJpdmVycyBvciBzeW1ib2xzLCBhbnl0aGluZyB0byBwcm92aWRlIGluc2lnaHQgaW50byB0aGlzLiBBcmUgdGhlcmUgYW55IGV4YW1wbGVzIGluIGBybnVsbGAgaXRzZWxmIHRoYXQgbWlnaHQgcHJvdmlkZSBzb21lIGFuc3dlcnM/CgpUaGlua2luZyBtb3JlIGFib3V0IGl0LCBJJiMzOTttIHF1ZXN0aW9uaW5nIHdoZXRoZXIgYSAqRm9jdXNTeW1ib2wqIGlzIHRoZSBjb3JyZWN0IHRvb2wuIENhbiB0aGV5IGJlIFJ1c3Qgc3ltYm9scywgb3IgYXJlIHRoZXkgbW9yZSBnZWFyZWQgdG93YXJkcyBDIGVudHJ5IHBvaW50cz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gTG9va2luZyBhdCB0aGUgZnJhbWV3b3JrLCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBgY29uZmlnZnNfYXR0cnMhYCBtYWNyby4gSSBzZWUgdGhhdCBpdCBnZW5lcmF0ZXMgdnRhYmxlcyBhbmQgZnVuY3Rpb25zLiBUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBsZWFkLiBMZXQmIzM5O3MgZGlnIGludG8gaG93IHRoYXQgbWFjcm8gd29ya3MgaW4gYHJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgQyBhbmQgUnVzdCBzaWRlcyBpbnRlcmZhY2UgaGVyZSBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5bWJvbCByZXNvbHV0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY3JvX3J1bGVzISBjb25maWdmc19hdHRycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3J1c3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3J1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzPTc5MD0gICAgZm4gYXNfcHRyKFx1MDAyNnNlbGYpIC1cdTAwM2UgKmNvbnN0IGJpbmRpbmdzOjpjb25maWdfaXRlbV90eXBlIHtcbi0tXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy04ODYtI1ttYWNyb19leHBvcnRdXG5ydXN0L2tlcm5lbC9jb25maWdmcy5yczo4ODc6bWFjcm9fcnVsZXMhIGNvbmZpZ2ZzX2F0dHJzIHtcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTg4OC0gICAgKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQyNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQ29uZmlnRlMgQXR0cmlidXRlIEdlbmVyYXRpb24gaW4gUnVzdCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoZSBwbGFjZSB0byBsb29rIGZvciBob3cgQ29uZmlnRlMgYXR0cmlidXRlcyBhcmUgZ2VuZXJhdGVkLCBvciBhdCBsZWFzdCBob3cgdGhleSYjMzk7cmUgaGFuZGxlZCwgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGBydXN0L2tlcm5lbC9jb25maWdmcy5yc2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDg4Ny4gVGhhdCBsaW5lIG51bWJlciBmZWVscyBsaWtlIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50IGJhc2VkIG9uIHNpbWlsYXIgY29kZSBJJiMzOTt2ZSB3b3JrZWQgb24gaW4gdGhlIHBhc3QuIEl0JiMzOTtzIHVzdWFsbHkgYXJvdW5kIHRoYXQgYXJlYSB3aGVyZSB0aGUgYXR0cmlidXRlIGNyZWF0aW9uIG9yIG1hbmlwdWxhdGlvbiBsb2dpYyB0ZW5kcyB0byByZXNpZGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGRpcmVjdCBhdHRyaWJ1dGUgZ2VuZXJhdGlvbiwgcGVyaGFwcyB3aXRoaW4gYSBgc3RydWN0YCBkZWZpbml0aW9uIG9yIHJlbGF0ZWQgbWV0aG9kcywgb3Igc29tZSBraW5kIG9mIGluZGlyZWN0IGNhbGwgdGhhdCBoYW5kbGVzIGF0dHJpYnV0ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSByZXZlYWxzLiBGcm9tIHRoYXQgcG9pbnQgSSBjYW4gZXh0cmFwb2xhdGUgb3V0d2FyZHMgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgaG93IENvbmZpZ0ZTIGF0dHJpYnV0ZXMgYXJlIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUgUnVzdCBrZXJuZWwgY29kZSBiYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3J1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4ODA6XHQvLy8gICAgICAgICApO1xuIDg4MTpcdC8vL1xuIDg4MjpcdC8vLyAgICAgXHUwMDI2Q09ORklHVVJBVElPTl9UUEVcbiA4ODM6XHQvLy8gfVxuIDg4NDpcdC8vLyBgYGBcbiA4ODU6XHQjW2FsbG93KGNsaXBweTo6Y3JhdGVfaW5fbWFjcm9fZGVmKV1cbiA4ODY6XHQjW21hY3JvX2V4cG9ydF1cbiA4ODc6XHRtYWNyb19ydWxlcyEgY29uZmlnZnNfYXR0cnMge1xuIDg4ODpcdCAgICAoXG4gODg5Olx0ICAgICAgICBjb250YWluZXI6ICRjb250YWluZXI6dHksXG4gODkwOlx0ICAgICAgICBkYXRhOiAkZGF0YTp0eSxcbiA4OTE6XHQgICAgICAgIGF0dHJpYnV0ZXM6IFtcbiA4OTI6XHQgICAgICAgICAgICAkKCRuYW1lOmlkZW50OiAkYXR0cjpsaXRlcmFsKSwqICQoLCk/XG4gODkzOlx0ICAgICAgICBdICQoLCk/XG4gODk0Olx0ICAgICkgPVx1MDAzZSB7XG4gODk1Olx0ICAgICAgICAkY3JhdGU6OmNvbmZpZ2ZzX2F0dHJzIShcbiA4OTY6XHQgICAgICAgICAgICBjb3VudDpcbiA4OTc6XHQgICAgICAgICAgICBAY29udGFpbmVyKCRjb250YWluZXIpLFxuIDg5ODpcdCAgICAgICAgICAgIEBkYXRhKCRkYXRhKSxcbiA4OTk6XHQgICAgICAgICAgICBAY2hpbGQoKSxcbiA5MDA6XHQgICAgICAgICAgICBAbm9fY2hpbGQoeCksXG4gOTAxOlx0ICAgICAgICAgICAgQGF0dHJzKCQoJG5hbWUgJGF0dHIpKiksXG4gOTAyOlx0ICAgICAgICAgICAgQGVhdCgkKCRuYW1lICRhdHRyLCkqKSxcbiA5MDM6XHQgICAgICAgICAgICBAYXNzaWduKCksXG4gOTA0Olx0ICAgICAgICAgICAgQGNudCgwdXNpemUpLFxuIDkwNTpcdCAgICAgICAgKVxuIDkwNjpcdCAgICB9O1xuIDkwNzpcdCAgICAoXG4gOTA4Olx0ICAgICAgICBjb250YWluZXI6ICRjb250YWluZXI6dHksXG4gOTA5Olx0ICAgICAgICBkYXRhOiAkZGF0YTp0eSxcbiA5MTA6XHQgICAgICAgIGNoaWxkOiAkY2hpbGQ6dHksXG4gOTExOlx0ICAgICAgICBhdHRyaWJ1dGVzOiBbXG4gOTEyOlx0ICAgICAgICAgICAgJCgkbmFtZTppZGVudDogJGF0dHI6bGl0ZXJhbCksKiAkKCwpP1xuIDkxMzpcdCAgICAgICAgXSAkKCwpP1xuIDkxNDpcdCAgICApID1cdTAwM2Uge1xuIDkxNTpcdCAgICAgICAgJGNyYXRlOjpjb25maWdmc19hdHRycyEoXG4gOTE2Olx0ICAgICAgICAgICAgY291bnQ6XG4gOTE3Olx0ICAgICAgICAgICAgQGNvbnRhaW5lcigkY29udGFpbmVyKSxcbiA5MTg6XHQgICAgICAgICAgICBAZGF0YSgkZGF0YSksXG4gOTE5Olx0ICAgICAgICAgICAgQGNoaWxkKCRjaGlsZCksXG4gOTIwOlx0ICAgICAgICAgICAgQG5vX2NoaWxkKCksXG4gOTIxOlx0ICAgICAgICAgICAgQGF0dHJzKCQoJG5hbWUgJGF0dHIpKiksXG4gOTIyOlx0ICAgICAgICAgICAgQGVhdCgkKCRuYW1lICRhdHRyLCkqKSxcbiA5MjM6XHQgICAgICAgICAgICBAYXNzaWduKCksXG4gOTI0Olx0ICAgICAgICAgICAgQGNudCgwdXNpemUpLFxuIDkyNTpcdCAgICAgICAgKVxuIDkyNjpcdCAgICB9O1xuIDkyNzpcdCAgICAoY291bnQ6XG4gOTI4Olx0ICAgICBAY29udGFpbmVyKCRjb250YWluZXI6dHkpLFxuIDkyOTpcdCAgICAgQGRhdGEoJGRhdGE6dHkpLFxuIDkzMDpcdCAgICAgQGNoaWxkKCQoJGNoaWxkOnR5KT8pLFxuIDkzMTpcdCAgICAgQG5vX2NoaWxkKCQoJG5vX2NoaWxkOmlkZW50KT8pLFxuIDkzMjpcdCAgICAgQGF0dHJzKCQoJGFuYW1lOmlkZW50ICRhYXR0cjpsaXRlcmFsKSopLFxuIDkzMzpcdCAgICAgQGVhdCgkbmFtZTppZGVudCAkYXR0cjpsaXRlcmFsLCAkKCRybmFtZTppZGVudCAkcmF0dHI6bGl0ZXJhbCwpKiksXG4gOTM0Olx0ICAgICBAYXNzaWduKCQoJGFzc2lnbjpibG9jaykqKSxcbiA5MzU6XHQgICAgIEBjbnQoJGNudDpleHByKSxcbiA5MzY6XHQgICAgKSA9XHUwMDNlIHtcbiA5Mzc6XHQgICAgICAgICRjcmF0ZTo6Y29uZmlnZnNfYXR0cnMhKFxuIDkzODpcdCAgICAgICAgICAgIGNvdW50OlxuIDkzOTpcdCAgICAgICAgICAgIEBjb250YWluZXIoJGNvbnRhaW5lciksXG4gOTQwOlx0ICAgICAgICAgICAgQGRhdGEoJGRhdGEpLFxuIDk0MTpcdCAgICAgICAgICAgIEBjaGlsZCgkKCRjaGlsZCk/KSxcbiA5NDI6XHQgICAgICAgICAgICBAbm9fY2hpbGQoJCgkbm9fY2hpbGQpPyksXG4gOTQzOlx0ICAgICAgICAgICAgQGF0dHJzKCQoJGFuYW1lICRhYXR0cikqKSxcbiA5NDQ6XHQgICAgICAgICAgICBAZWF0KCQoJHJuYW1lICRyYXR0ciwpKiksXG4gOTQ1Olx0ICAgICAgICAgICAgQGFzc2lnbigkKCRhc3NpZ24pKiB7XG4gOTQ2Olx0ICAgICAgICAgICAgICAgIGNvbnN0IE46IHVzaXplID0gJGNudDtcbiA5NDc6XHQgICAgICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBtYWNybyB0ZXh0IGV4cGFuZHMgdG8gYSBjYWxsIHRvIGBBdHRyaWJ1dGU6OmFkZGAuXG4gOTQ4Olx0XG4gOTQ5Olx0ICAgICAgICAgICAgICAgIC8vIFNBRkVUWTogQnkgZGVzaWduIG9mIHRoaXMgbWFjcm8sIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB3ZVxuIDk1MDpcdCAgICAgICAgICAgICAgICAvLyBpbnZva2UgdGhlIGBhZGRgIG1ldGhvZCBvbiBiZWxvdywgaXMgbm90IHZpc2libGUgb3V0c2lkZSBvZlxuIDk1MTpcdCAgICAgICAgICAgICAgICAvLyB0aGUgbWFjcm8gZXhwYW5zaW9uLiBUaGUgbWFjcm8gZG9lcyBub3Qgb3BlcmF0ZSBjb25jdXJyZW50bHlcbiA5NTI6XHQgICAgICAgICAgICAgICAgLy8gb24gdGhpcyB2YXJpYWJsZSwgYW5kIHRodXMgd2UgaGF2ZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZVxuIDk1MzpcdCAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZS5cbiA5NTQ6XHQgICAgICAgICAgICAgICAgdW5zYWZlIHtcbiA5NTU6XHQgICAgICAgICAgICAgICAgICAgICRjcmF0ZTo6bWFjcm9zOjpwYXN0ZSEoXG4gOTU2Olx0ICAgICAgICAgICAgICAgICAgICAgICAgW1x1MDAzYyAkZGF0YTp1cHBlciBfQVRUUlMgXHUwMDNlXVxuIDk1NzpcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkOjpcdTAwM2NOLCAkYXR0ciwgX1x1MDAzZShcdTAwMjZbXHUwMDNjICRkYXRhOnVwcGVyIF8gJG5hbWU6dXBwZXIgX0FUVFIgXHUwMDNlXSlcbiA5NTg6XHQgICAgICAgICAgICAgICAgICAgIClcbiA5NTk6XHQgICAgICAgICAgICAgICAgfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4ODUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN5bWJvbCBSZXNvbHV0aW9uIGluIGBjb25maWdmcy5yc2AgYW5kIGBybnVsbC5yc2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBjb25maWdmcy5yc2AgYW5kIG5vdGljaW5nIHRoZSBpbXBsZW1lbnRhdGlvbnM6IGBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zJmx0OzEmZ3Q7IGZvciBEZXZpY2VDb25maWdgLCBhbmQgc28gb24sIHVwIHRvIGA0YC4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmZhY2VzIGFyZSByZXNvbHZlZCwgYW5kIGhvdyB3ZSBtaWdodCBkZWJ1ZyB0aGVtIGlmIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHRyYWl0cyBtYXAgdG8gdGhlIHVuZGVybHlpbmcga2VybmVsIHN5bWJvbHMuCgpJJiMzOTttIGNoZWNraW5nIGBjb25maWdmcy5yc2AgYW5kIGBybnVsbC5yc2AgZm9yIHJlbGV2YW50IG1ldGhvZHMgb3IgZnVuY3Rpb25zOiBgRGV2aWNlQ29uZmlnOjpzdG9yZWAgc2VlbXMgcmVsZXZhbnQsIGFzIGRvIHBvdGVudGlhbGx5IGBybnVsbF9tb2RgIGZ1bmN0aW9ucy4gUnVzdCYjMzk7cyBuYW1lIG1hbmdsaW5nIGNhbiBtYWtlIHRoaXMgYSBiaXQgdHJpY2t5LCBidXQgSSBrbm93IGl0JiMzOTtsbCBwcm9kdWNlIHN5bWJvbHMgbGlrZSBgX1JOdlguLi5gLCBvciB0aGUgZnVsbHkgZGVtYW5nbGVkIGZvcm0sIGUuZy4sIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDsmZ3Q7OjpzdG9yZWAuIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBgcm51bGxfbW9kOjoqYCBwYXR0ZXJucyBvciBhbnkgQyBzeW1ib2xzIHRoYXQgbWF5IGJlIGludm9sdmVkLgoKR2l2ZW4gbXkgcHJldmlvdXMgZXhwZXJpZW5jZSBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9ucyBvciBleGFtcGxlIHBhdGNoZXMgd2hpY2ggbWlnaHQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gaG93IHN5bWJvbHMgYXJlIHN0cnVjdHVyZWQgaW4gRm9jdXNTeW1ib2xzLiBJZiB0aGF0IGRvZXNuJiMzOTt0IHdvcmssIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHByb2plY3QmIzM5O3MgdHJlZSBvciBnaXQgbG9nIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGV4YW1wbGVzIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBzeW1ib2wgbmFtaW5nIG9yIHJlc29sdXRpb24gd2l0aGluIHRoaXMgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0F0dHJpYnV0ZU9wZXJhdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JudWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtNS0gICAgYmxvY2s6Om1xOjpnZW5fZGlzazo6e0dlbkRpc2ssIEdlbkRpc2tCdWlsZGVyfSxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6NjogICAgY29uZmlnZnM6OntzZWxmLCBBdHRyaWJ1dGVPcGVyYXRpb25zfSxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtNy0gICAgY29uZmlnZnNfYXR0cnMsXG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0zMD1wdWIoY3JhdGUpIHN0cnVjdCBDb25maWcge31cbi0tXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTMyLSNbdnRhYmxlXVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yczozMzppbXBsIEF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MwXHUwMDNlIGZvciBDb25maWcge1xuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0zNC0gICAgdHlwZSBEYXRhID0gQ29uZmlnO1xuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MTE4PXN0cnVjdCBEZXZpY2VDb25maWdJbm5lciB7XG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0xMjgtI1t2dGFibGVdXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzOjEyOTppbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMTMwLSAgICB0eXBlIERhdGEgPSBEZXZpY2VDb25maWc7XG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0xNDQ9ICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMTY2LSNbdnRhYmxlXVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yczoxNjc6aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTE2OC0gICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MTc2PSAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTE5MS0jW3Z0YWJsZV1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MTkyOmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MyXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0xOTMtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcbi0tXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzPTIwNz0gICAgZm4gc3RvcmUodGhpczogXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcdTAwMjZbdThdKSAtXHUwMDNlIFJlc3VsdCB7XG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0yMTktI1t2dGFibGVdXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzOjIyMDppbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMjIxLSAgICB0eXBlIERhdGEgPSBEZXZpY2VDb25maWc7XG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0yMjk9ICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMjQzLSNbdnRhYmxlXVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yczoyNDQ6aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzRcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTI0NS0gICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEZXZpY2UgQ29uZmlndXJhdGlvbiBTdG9yYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIGV4YWN0bHkgd2hpY2ggZWxlbWVudHMgYXJlIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGlzIGBEZXZpY2VDb25maWdgIHN0cnVjdHVyZS4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHJldm9sdmVzIGFyb3VuZCB0aGUgYHN0b3JlYCBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdpbmcgKmV4YWN0bHkqLiBTbywgSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhlIGBEZXZpY2VDb25maWc6OnN0b3JlYCBmdW5jdGlvbiBiZWhhdmVzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIHRoZSBpbXBhY3Qgb24gYXR0cmlidXRlcyBsaWtlIGBibG9ja3NpemVgLCBgcm90YXRpb25hbGAsIGBzaXplYCwgYW5kIGBpcnFtb2RlYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKTmV4dCwgSSBuZWVkIHRvIHNlZSBob3cgYGNvbmZpZ2ZzYCBpbnRlcmFjdHMgd2l0aCB0aGVzZSBzdG9yYWdlIG1lY2hhbmlzbXMuIFRoZSByZWFsIG1hZ2ljIGhhcHBlbnMgd2l0aGluIGBydXN0L2tlcm5lbC9jb25maWdmcy5yc2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGRpZyBpbiBuZXh0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzLCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRob3NlIGNhbGxzLCBhbmQgdmVyaWZ5IGlmIHRoZXNlIGBzdG9yZWAgaW1wbGVtZW50YXRpb25zIGFyZSBkb2luZyBleGFjdGx5IHdoYXQgdGhleSBzaG91bGQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgY2FsbHMgYW5kIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdGhlbXNlbHZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QXR0cmlidXRlT3BlcmF0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3J1c3Qva2VybmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3J1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTc0LS8vISAjW3Z0YWJsZV1cbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzOjc1Oi8vISBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMFx1MDAzZSBmb3IgQ29uZmlndXJhdGlvbiB7XG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy03Ni0vLyEgICAgIHR5cGUgRGF0YSA9IENvbmZpZ3VyYXRpb247XG4tLVxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtODYtLy8hICNbdnRhYmxlXVxucnVzdC9rZXJuZWwvY29uZmlnZnMucnM6ODc6Ly8hIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlIGZvciBDb25maWd1cmF0aW9uIHtcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTg4LS8vISAgICAgdHlwZSBEYXRhID0gQ29uZmlndXJhdGlvbjtcbi0tXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycz01MzQ9aW1wbFx1MDAzY2NvbnN0IElEOiB1NjQsIE8sIERhdGFcdTAwM2UgQXR0cmlidXRlXHUwMDNjSUQsIE8sIERhdGFcdTAwM2VcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTUzNS13aGVyZVxucnVzdC9rZXJuZWwvY29uZmlnZnMucnM6NTM2OiAgICBPOiBBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjSUQsIERhdGEgPSBEYXRhXHUwMDNlLFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNTM3LXtcbi0tXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycz02MTI9ICAgIHB1YiBjb25zdCBmbiBuZXcobmFtZTogXHUwMDI2JiMzOTtzdGF0aWMgQ1N0cikgLVx1MDAzZSBTZWxmIHtcbi0tXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy02NDAtLy8vIGF0dHJpYnV0ZXMgdmlhIHRoZSBbYGtlcm5lbDo6Y29uZmlnZnNfYXR0cnNgXSBtYWNybywgdG8gdGllXG5ydXN0L2tlcm5lbC9jb25maWdmcy5yczo2NDE6Ly8vIGBBdHRyaWJ1dGVPcGVyYXRpb25zYCBpbXBsZW1lbnRhdGlvbnMgdG8gY29uY3JldGUgbmFtZWQgYXR0cmlidXRlcy5cbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTY0Mi0jW3Z0YWJsZV1cbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzOjY0MzpwdWIgdHJhaXQgQXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzY2NvbnN0IElEOiB1NjQgPSAwXHUwMDNlIHtcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTY0NC0gICAgLy8vIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZmllbGQgdGhhdCBpcyBiYWNraW5nIHRoZVxuLS1cbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzPTY5Mz1pbXBsXHUwMDNjY29uc3QgTjogdXNpemUsIERhdGFcdTAwM2UgQXR0cmlidXRlTGlzdFx1MDAzY04sIERhdGFcdTAwM2Uge1xuLS1cbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTcxMS0gICAgKSB3aGVyZVxucnVzdC9rZXJuZWwvY29uZmlnZnMucnM6NzEyOiAgICAgICAgTzogQXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzY0lELCBEYXRhID0gRGF0YVx1MDAzZSxcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTcxMy0gICAge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAwNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvZGU6CgoqKkRpdmluZyBpbnRvIGBjb25maWdmcy5yc2AmIzM5O3MgQXR0cmlidXRlIFN0b3JhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYHJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzYCBhbmQgdHJ5aW5nIHRvIHRyYWNlIGhvdyBkYXRhIGFjdHVhbGx5IGdldHMgKnN0b3JlZCogdXNpbmcgYEF0dHJpYnV0ZU9wZXJhdGlvbnM6OnN0b3JlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRpc3BhdGNoIG1lY2hhbmlzbS4gTGV0JiMzOTtzIHplcm8gaW4gb24gcm91Z2hseSBsaW5lcyA1NDAgdG8gNjAwLCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBmdW5jdGlvbiBjYWxsIG9yIHN0cnVjdHVyZSByZWxhdGVkIHRvIHRoaXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBwYXNzZWQgYXJvdW5kLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgZ3Jhc3Agb24gaG93IGEgc3BlY2lmaWMgYXR0cmlidXRlIHdyaXRlIHVsdGltYXRlbHkgbGFuZHMgaW5zaWRlIHRoZSBgc3RvcmVgIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGZvciBhIGdpdmVuIGNvbmZpZ2ZzIG9iamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtydXN0L2tlcm5lbC9jb25maWdmcy5ycyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0ICAgIC8vLyBgaXRlbWAgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIGBiaW5kaW5nczo6Y29uZmlnX2dyb3VwYC5cbiA1NDE6XHQgICAgLy8vXG4gNTQyOlx0ICAgIC8vLyBJZiBgaXRlbWAgZG9lcyBub3QgcmVwcmVzZW50IHRoZSByb290IGdyb3VwIG9mIGEgY29uZmlnZnMgc3Vic3lzdGVtLFxuIDU0MzpcdCAgICAvLy8gdGhlIGdyb3VwIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBgR3JvdXBcdTAwM2NEYXRhXHUwMDNlYC5cbiA1NDQ6XHQgICAgLy8vXG4gNTQ1Olx0ICAgIC8vLyBPdGhlcndpc2UsIHRoZSBncm91cCBtdXN0IGJlIGEgZW1iZWRkZWQgaW4gYVxuIDU0NjpcdCAgICAvLy8gYGJpbmRpbmdzOjpjb25maWdmc19zdWJzeXN0ZW1gIHRoYXQgaXMgZW1iZWRkZWQgaW4gYSBgU3Vic3lzdGVtXHUwMDNjRGF0YVx1MDAzZWAuXG4gNTQ3Olx0ICAgIC8vL1xuIDU0ODpcdCAgICAvLy8gYHBhZ2VgIG11c3QgcG9pbnQgdG8gYSB3cml0YWJsZSBidWZmZXIgb2Ygc2l6ZSBhdCBsZWFzdCBbYFBBR0VfU0laRWBdLlxuIDU0OTpcdCAgICB1bnNhZmUgZXh0ZXJuIFwmIzM0O0NcJiMzNDsgZm4gc2hvdyhcbiA1NTA6XHQgICAgICAgIGl0ZW06ICptdXQgYmluZGluZ3M6OmNvbmZpZ19pdGVtLFxuIDU1MTpcdCAgICAgICAgcGFnZTogKm11dCBrZXJuZWw6OmZmaTo6Y19jaGFyLFxuIDU1MjpcdCAgICApIC1cdTAwM2UgaXNpemUge1xuIDU1MzpcdCAgICAgICAgbGV0IGNfZ3JvdXA6ICptdXQgYmluZGluZ3M6OmNvbmZpZ19ncm91cCA9XG4gNTU0Olx0ICAgICAgICAgICAgLy8gU0FGRVRZOiBCeSBmdW5jdGlvbiBzYWZldHkgcmVxdWlyZW1lbnRzLCBgaXRlbWAgaXMgZW1iZWRkZWQgaW4gYVxuIDU1NTpcdCAgICAgICAgICAgIC8vIGBjb25maWdfZ3JvdXBgLlxuIDU1NjpcdCAgICAgICAgICAgIHVuc2FmZSB7IGNvbnRhaW5lcl9vZiEoaXRlbSwgYmluZGluZ3M6OmNvbmZpZ19ncm91cCwgY2dfaXRlbSkgfTtcbiA1NTc6XHRcbiA1NTg6XHQgICAgICAgIC8vIFNBRkVUWTogVGhlIGZ1bmN0aW9uIHNhZmV0eSByZXF1aXJlbWVudHMgZm9yIHRoaXMgZnVuY3Rpb24gc2F0aXNmeVxuIDU1OTpcdCAgICAgICAgLy8gdGhlIGNvbmRpdGlvbnMgZm9yIHRoaXMgY2FsbC5cbiA1NjA6XHQgICAgICAgIGxldCBkYXRhOiBcdTAwMjZEYXRhID0gdW5zYWZlIHsgZ2V0X2dyb3VwX2RhdGEoY19ncm91cCkgfTtcbiA1NjE6XHRcbiA1NjI6XHQgICAgICAgIC8vIFNBRkVUWTogQnkgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cywgYHBhZ2VgIGlzIHdyaXRhYmxlIGZvciBgUEFHRV9TSVpFYC5cbiA1NjM6XHQgICAgICAgIGxldCByZXQgPSBPOjpzaG93KGRhdGEsIHVuc2FmZSB7IFx1MDAyNm11dCAqKHBhZ2UuY2FzdDo6XHUwMDNjW3U4OyBQQUdFX1NJWkVdXHUwMDNlKCkpIH0pO1xuIDU2NDpcdFxuIDU2NTpcdCAgICAgICAgbWF0Y2ggcmV0IHtcbiA1NjY6XHQgICAgICAgICAgICBPayhzaXplKSA9XHUwMDNlIHNpemUgYXMgaXNpemUsXG4gNTY3Olx0ICAgICAgICAgICAgRXJyKGVycikgPVx1MDAzZSBlcnIudG9fZXJybm8oKSBhcyBpc2l6ZSxcbiA1Njg6XHQgICAgICAgIH1cbiA1Njk6XHQgICAgfVxuIDU3MDpcdFxuIDU3MTpcdCAgICAvLy8gIyBTYWZldHlcbiA1NzI6XHQgICAgLy8vXG4gNTczOlx0ICAgIC8vLyBgaXRlbWAgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIGBiaW5kaW5nczo6Y29uZmlnX2dyb3VwYC5cbiA1NzQ6XHQgICAgLy8vXG4gNTc1Olx0ICAgIC8vLyBJZiBgaXRlbWAgZG9lcyBub3QgcmVwcmVzZW50IHRoZSByb290IGdyb3VwIG9mIGEgY29uZmlnZnMgc3Vic3lzdGVtLFxuIDU3NjpcdCAgICAvLy8gdGhlIGdyb3VwIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBgR3JvdXBcdTAwM2NEYXRhXHUwMDNlYC5cbiA1Nzc6XHQgICAgLy8vXG4gNTc4Olx0ICAgIC8vLyBPdGhlcndpc2UsIHRoZSBncm91cCBtdXN0IGJlIGEgZW1iZWRkZWQgaW4gYVxuIDU3OTpcdCAgICAvLy8gYGJpbmRpbmdzOjpjb25maWdmc19zdWJzeXN0ZW1gIHRoYXQgaXMgZW1iZWRkZWQgaW4gYSBgU3Vic3lzdGVtXHUwMDNjRGF0YVx1MDAzZWAuXG4gNTgwOlx0ICAgIC8vL1xuIDU4MTpcdCAgICAvLy8gYHBhZ2VgIG11c3QgcG9pbnQgdG8gYSByZWFkYWJsZSBidWZmZXIgb2Ygc2l6ZSBhdCBsZWFzdCBgc2l6ZWAuXG4gNTgyOlx0ICAgIHVuc2FmZSBleHRlcm4gXCYjMzQ7Q1wmIzM0OyBmbiBzdG9yZShcbiA1ODM6XHQgICAgICAgIGl0ZW06ICptdXQgYmluZGluZ3M6OmNvbmZpZ19pdGVtLFxuIDU4NDpcdCAgICAgICAgcGFnZTogKmNvbnN0IGtlcm5lbDo6ZmZpOjpjX2NoYXIsXG4gNTg1Olx0ICAgICAgICBzaXplOiB1c2l6ZSxcbiA1ODY6XHQgICAgKSAtXHUwMDNlIGlzaXplIHtcbiA1ODc6XHQgICAgICAgIGxldCBjX2dyb3VwOiAqbXV0IGJpbmRpbmdzOjpjb25maWdfZ3JvdXAgPVxuIDU4ODpcdCAgICAgICAgLy8gU0FGRVRZOiBCeSBmdW5jdGlvbiBzYWZldHkgcmVxdWlyZW1lbnRzLCBgaXRlbWAgaXMgZW1iZWRkZWQgaW4gYVxuIDU4OTpcdCAgICAgICAgLy8gYGNvbmZpZ19ncm91cGAuXG4gNTkwOlx0ICAgICAgICAgICAgdW5zYWZlIHsgY29udGFpbmVyX29mIShpdGVtLCBiaW5kaW5nczo6Y29uZmlnX2dyb3VwLCBjZ19pdGVtKSB9O1xuIDU5MTpcdFxuIDU5MjpcdCAgICAgICAgLy8gU0FGRVRZOiBUaGUgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cyBmb3IgdGhpcyBmdW5jdGlvbiBzYXRpc2Z5XG4gNTkzOlx0ICAgICAgICAvLyB0aGUgY29uZGl0aW9ucyBmb3IgdGhpcyBjYWxsLlxuIDU5NDpcdCAgICAgICAgbGV0IGRhdGE6IFx1MDAyNkRhdGEgPSB1bnNhZmUgeyBnZXRfZ3JvdXBfZGF0YShjX2dyb3VwKSB9O1xuIDU5NTpcdFxuIDU5NjpcdCAgICAgICAgbGV0IHJldCA9IE86OnN0b3JlKFxuIDU5NzpcdCAgICAgICAgICAgIGRhdGEsXG4gNTk4Olx0ICAgICAgICAgICAgLy8gU0FGRVRZOiBCeSBmdW5jdGlvbiBzYWZldHkgcmVxdWlyZW1lbnRzLCBgcGFnZWAgaXMgcmVhZGFibGVcbiA1OTk6XHQgICAgICAgICAgICAvLyBmb3IgYXQgbGVhc3QgYHNpemVgLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMwMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgcm51bGxgIERyaXZlciYjMzk7cyBDb25maWdGUyBJbnRlcmZhY2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYHNob3dgIGFuZCBgc3RvcmVgIGZ1bmN0aW9ucyBpbiB0aGUgYEF0dHJpYnV0ZWAgc3RydWN0IGludGVyYWN0IHdpdGggdGhlIGBBdHRyaWJ1dGVPcGVyYXRpb25zYCB0cmFpdCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHJudWxsX21vZGAgbW9kdWxlIGFuZCBpdHMgYGNvbmZpZ2ZzYCBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgYERldmljZUNvbmZpZ2AuIEkmIzM5O20gc2VlaW5nIGNhbGxzIGxpa2UgYCZsdDtybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9ucyZsdDsxJmd0OyZndDs6OnN0b3JlYCBhbmQgc2ltaWxhciBvbmVzLiBJJiMzOTttIGFsc28gcmVmZXJlbmNpbmcgZnVuY3Rpb25zIGluIGBybnVsbC5yc2AgYW5kIGBjb25maWdmcy5yc2AsIGxpa2UgYE51bGxCbGtEZXZpY2U6Om5ld2AgYW5kIGBEZXZpY2VDb25maWc6OnN0b3JlYC4KCk5vdywgSSYjMzk7bSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSByZWNlbnQgcGF0Y2gsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCBmaWxlLiBJdCYjMzk7cyB0aGUgYEF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDtgLCBgJmx0OzImZ3Q7YCwgYCZsdDszJmd0O2AsIGFuZCBgJmx0OzQmZ3Q7YCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgdGhlIGtleSBoZXJlOiBgYmxvY2tzaXplYCwgYHJvdGF0aW9uYWxgLCBgc2l6ZWAsIGFuZCBgaXJxbW9kZWAsIHJlc3BlY3RpdmVseS4gRWFjaCBgc3RvcmVgIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UgaXQmIzM5O3MgdGFraW5nIGEgbG9jayB0byBlbnN1cmUgbXV0dWFsIGV4Y2x1c2lvbiwgY2hlY2tpbmcgYSBgcG93ZXJlZGAgc3RhdGUsIGFuZCB0aGVuIG1vZGlmeWluZyBjb25maWd1cmF0aW9uIGZpZWxkcy4gVGhlIGxvY2sgYW5kIHRoZSBgcG93ZXJlZGAgc3RhdGUgY2hlY2sgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZzogYGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO2AgZm9sbG93ZWQgYnkgYSBjaGVjayBhbmQgcG90ZW50aWFsIGVhcmx5IHJldHVybi4gVGhlIGNvZGUgdGhlbiBlaXRoZXIgdmFsaWRhdGVzIHRoZSBpbnB1dCwgdXNpbmcgZnVuY3Rpb24gc3VjaCBhcyBgR2VuRGlza0J1aWxkZXI6OnZhbGlkYXRlX2Jsb2NrX3NpemVgIG9yIHBhcnNlcyB1c2luZyBga3N0cnRvYm9vbF9ieXRlc2Agb3IgYElSUU1vZGU6OnRyeV9mcm9tYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGNvbmZpZ3VyYXRpb24gc3VyZmFjZSB3YXJyYW50IGZ1enppbmc/CgoqICAgKipSZWFjaGFiaWxpdHk6KiogRGVmaW5pdGVseS4gVGhlIGBCTEtfREVWX1JVU1RfTlVMTGAgZHJpdmVyIGlzIGEgc29mdHdhcmUgYmxvY2sgZGV2aWNlIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwcy4KKiAgICoqQ29uY3VycmVuY3kvTG9ja2luZyBJbXBhY3Q6KiogWWVzLCB0aGlzIHBhdGNoIGlzIGRpcmVjdGx5IG1vZGlmeWluZyBsb2NraW5nIGJlaGF2aW9yIGluIHRoZSBrZXJuZWwuIFRoZSBnb2FsIGlzIHRvIGNsb3NlIHJhY2Ugd2luZG93cyB3aGVyZSB0aGUgbG9jayB3YXMgZHJvcHBlZCBiZXR3ZWVuIHRoZSBgcG93ZXJlZGAgc3RhdGUgY2hlY2sgYW5kIG1vZGlmaWNhdGlvbiBvZiBjb25maWd1cmF0aW9uIGZpZWxkcy4gVGhpcyBpcyBzZWN1cml0eS1zZW5zaXRpdmUgc3R1ZmYuCgpUaGVyZWZvcmUsIFdvcnRoRnV6emluZyA9IFRydWUuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgRW5hYmxlQ29uZmlncy4gSSBuZWVkIHRvIGNvbmZpcm06CgoqICAgYEJMS19ERVZfUlVTVF9OVUxMYDogQ2hlY2suCiogICBgUlVTVGA6IENoZWNrLgoqICAgYENPTkZJR0ZTX0ZTYDogQ2hlY2suCiogICBgQkxPQ0tgOiBUaGlzIGlzIGEgc3RhbmRhcmQgcGFyZW50IGZvciBibG9jayBkZXZpY2VzLCBidXQgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlLipybnVsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoyMDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFJ1c3QgTnVsbCBCbG9jayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0RFVl9SVVNUX05VTExgLiAgTXkgZmlyc3QgbW92ZSBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCB3b3VsZCBiZSBpbiBgZHJpdmVycy9ibG9jay9LY29uZmlnYCwgc28gSSYjMzk7bGwgY2hlY2sgdGhhdCBmaXJzdC4gVGhlbiwgc2luY2UgSSBrbm93IHRoZSBzcGVjaWZpY3MgSSYjMzk7bSBsb29raW5nIGZvciwgSSBzaG91bGQgZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZ2AuIEFoLCBoZXJlIGl0IGlzOgoKYGBga2NvbmZpZwpjb25maWcgQkxLX0RFVl9SVVNUX05VTEwKICAgIHRyaXN0YXRlICYjMzQ7UnVzdCBudWxsIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKSYjMzQ7CiAgICBkZXBlbmRzIG9uIFJVU1QgJmFtcDsmYW1wOyBDT05GSUdGU19GUwpgYGAKClNvLCB0aGF0IHRlbGxzIG1lIHRoZSBkcml2ZXIgZGVwZW5kcyBvbiBgUlVTVGAgYW5kIGBDT05GSUdGU19GU2AuIEdvdCBpdC4gTm93LCB3aGF0IHdhcyBJIGNoZWNraW5nIGluIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgPyBKdXN0IG1ha2luZyBzdXJlIHRoZXJlIHdhc24mIzM5O3Qgc29tZXRoaW5nIGVsc2UgbW9yZSBnbG9iYWwuIEkmIzM5O2xsIHRha2UgYSBxdWljayBnbGFuY2UgYXQgdGhlIGZpcnN0IHR3ZW50eSBsaW5lcywgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQuLi4gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEJsb2NrIGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIEJMS19ERVZcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7QmxvY2sgZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAgOTpcdFx0ZGVmYXVsdCB5XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB2YXJpb3VzIGRpZmZlcmVudCBibG9jayBkZXZpY2VcbiAgMTI6XHRcdCAgZHJpdmVycy4gVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZDtcbiAgMTU6XHRcdCAgb25seSBkbyB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgMTY6XHRcbiAgMTc6XHRpZiBCTEtfREVWXG4gIDE4Olx0XG4gIDE5Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZ1wmIzM0O1xuICAyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWdcJiMzNDtcbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgQkxLX0RFVl9GRFxuICAyMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Tm9ybWFsIGZsb3BweSBkaXNrIHN1cHBvcnRcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gQVJDSF9NQVlfSEFWRV9QQ19GRENcbiAgMjU6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNjAKCQkJCQkJCW91dHB1dDogMjcwCgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUnVzdCBOdWxsIEJsb2NrIERyaXZlciBDb25maWdmcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHRoZSBjaGFuZ2VzIHRvIHRoZSBSdXN0IG51bGwgYmxvY2sgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIGNvbmZpZ2ZzIGludGVyZmFjZSwgYW5kIGhvdyBpdCBpbXBhY3RzIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEkgc2VlIHRoYXQgYEJMS19ERVZfUlVTVF9OVUxMYCwgYEJMS19ERVZgLCBgQkxPQ0tgLCBgUlVTVGAsIGFuZCBgQ09ORklHRlNfRlNgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLgoKRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzLiBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoZSBtZXRob2RzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGVzZSBtZXRob2RzOgoKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MiZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MyZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7NCZndDsmZ3Q7OjpzdG9yZWAKKiAgIGBEZXZpY2VDb25maWc6OnN0b3JlYAoqICAgYHJudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZzo6c3RvcmVgCiogICBgTnVsbEJsa0RldmljZTo6bmV3YAoKVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGF0dHJpYnV0ZSBvcGVyYXRpb25zIHdpdGhpbiBjb25maWdmcywgYW5kIGFsc28gdGhlIGRldmljZSBjcmVhdGlvbiwgc28gaXQgbG9va3MgbGlrZSBjb25maWdmcyBtb2RpZmljYXRpb25zIGluY2x1ZGUgYm90aCB0aGUgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBjcmVhdGlvbiBvZiB0aGUgYmxvY2sgZGV2aWNlLgoKVGhlIHJlYXNvbmluZyBoZXJlIG1ha2VzIHNlbnNlOiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIEJ5IGhvbGRpbmcgdGhlIGxvY2sgZHVyaW5nIHZhbGlkYXRpb24sIHBhcnNpbmcsIGFuZCBhc3NpZ25tZW50IHdpdGhpbiB0aGUgY29uZmlnZnMgaW50ZXJmYWNlLCB3ZSBlbGltaW5hdGUgdGhlIHBvdGVudGlhbCBmb3IgZGV2aWNlIHNldHRpbmdzIHRvIGJlIGFsdGVyZWQgd2hpbGUgdGhlIGRldmljZSBpcyBsaXZlLiBTaW5jZSB0aGlzIGlzIGFuIGVtdWxhdGVkIGRyaXZlciBhbmQgY29uZmlndXJhYmxlIHZpYSB1c2Vyc3BhY2UgdGhyb3VnaCBjb25maWdmcywgaXQmIzM5O3MgdmVyeSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0cyBhcmUgZGVmaW5lZCBhczoKCiogICBgRGV2aWNlQ29uZmlnOjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MiZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MyZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7NCZndDsmZ3Q7OjpzdG9yZWAKKiAgIGBOdWxsQmxrRGV2aWNlOjpuZXdgCgpUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIGJlIHJlbGV2YW50IGFyZToKCiogICBgQkxLX0RFVl9SVVNUX05VTExgCiogICBgUlVTVGAKKiAgIGBDT05GSUdGU19GU2AKKiAgIGBCTEtfREVWYAoqICAgYEJMT0NLYAoKV2l0aCB0aGlzIGluZm9ybWF0aW9uLCBJIGNhbiBub3cgbW92ZSBmb3J3YXJkLiBMZXQmIzM5O3MgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUlVTVF9OVUxMJiMzNDssCiAgICAmIzM0O1JVU1QmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OywKICAgICYjMzQ7QkxLX0RFViYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O0RldmljZUNvbmZpZzo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2VcdTAwM2U6OnN0b3JlJiMzNDssCiAgICAmIzM0O1x1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZVx1MDAzZTo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2M0XHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtOdWxsQmxrRGV2aWNlOjpuZXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgY29uZmlnZnMgYXR0cmlidXRlIHN0b3JlIGhhbmRsZXJzIGZvciB0aGUgUnVzdCBudWxsIGJsb2NrIGRldmljZSBkcml2ZXIgKHJudWxsKS4gSG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHN0YXRlIGNoZWNrcyBhbmQgZmllbGQgYXNzaWdubWVudHMgY2xvc2VzIGEgcmFjZSB3aW5kb3cgd2hlbiBhbHRlcmluZyBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiAoYmxvY2tfc2l6ZSwgcm90YXRpb25hbCwgY2FwYWNpdHlfbWliLCBpcnFfbW9kZSkgd2hpbGUgcG93ZXJpbmcgZGV2aWNlcyBvbi9vZmYuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtYmFzZWQsIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUlVTVF9OVUxMJiMzNDssCiAgICAmIzM0O1JVU1QmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OywKICAgICYjMzQ7QkxLX0RFViYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O0RldmljZUNvbmZpZzo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2VcdTAwM2U6OnN0b3JlJiMzNDssCiAgICAmIzM0O1x1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZVx1MDAzZTo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2M0XHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtOdWxsQmxrRGV2aWNlOjpuZXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgY29uZmlnZnMgYXR0cmlidXRlIHN0b3JlIGhhbmRsZXJzIGZvciB0aGUgUnVzdCBudWxsIGJsb2NrIGRldmljZSBkcml2ZXIgKHJudWxsKS4gSG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHN0YXRlIGNoZWNrcyBhbmQgZmllbGQgYXNzaWdubWVudHMgY2xvc2VzIGEgcmFjZSB3aW5kb3cgd2hlbiBhbHRlcmluZyBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiAoYmxvY2tfc2l6ZSwgcm90YXRpb25hbCwgY2FwYWNpdHlfbWliLCBpcnFfbW9kZSkgd2hpbGUgcG93ZXJpbmcgZGV2aWNlcyBvbi9vZmYuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtYmFzZWQsIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzY29wZSBpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc2AgZm9yIGBEZXZpY2VDb25maWdgIGNvbmZpZ2ZzIGF0dHJpYnV0ZSBgc3RvcmVgIGhhbmRsZXJzLiBQcmV2aW91c2x5LCBgdGhpcy5kYXRhLmxvY2soKWAgd2FzIGFjcXVpcmVkIHRvIGNoZWNrIGBwb3dlcmVkYCBhbmQgdGhlbiByZS1hY3F1aXJlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3BlbmluZyBhIHJhY2Ugd2luZG93IChUT0NUT1UpLiBUaGUgcGF0Y2ggaG9sZHMgdGhlIG11dGV4IGxvY2sgZ3VhcmQgYWNyb3NzIGJvdGggdGhlIGNoZWNrIGFuZCB0aGUgYXNzaWdubWVudC5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kvbG9ja2luZyBmaXggaW4gc2FmZSBSdXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCBjb3B5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBrZXJuZWwgaW5mby1sZWFrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliN2ZhYjEyMWJmNDdiN2RhOTg4MmI1OGNmNGZmNjgzODYxOGFkMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIyOjQxOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyBiL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMKaW5kZXggMzJjMTBjM2Y0ZDBmZC4uNjZlZjkxYjNmZjBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzCkBAIC0xNzQsNyAmIzQzOzE3NCw4IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDsgZm9yIERldmljZUNvbmZpZyB7CiAgICAgfQogCiAgICAgZm4gc3RvcmUodGhpczogJmFtcDtEZXZpY2VDb25maWcsIHBhZ2U6ICZhbXA7W3U4XSkgLSZndDsgUmVzdWx0IHsKLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHsKJiM0MzsgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpOwomIzQzOyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7CiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTsKICAgICAgICAgfQogCkBAIC0xODIsNyAmIzQzOzE4Myw3IEBAIGZuIHN0b3JlKHRoaXM6ICZhbXA7RGV2aWNlQ29uZmlnLCBwYWdlOiAmYW1wO1t1OF0pIC0mZ3Q7IFJlc3VsdCB7CiAgICAgICAgIGxldCB2YWx1ZSA9IHRleHQucGFyc2U6OiZsdDt1MzImZ3Q7KCkubWFwX2Vycih8X3wgRUlOVkFMKT87CiAKICAgICAgICAgR2VuRGlza0J1aWxkZXI6OnZhbGlkYXRlX2Jsb2NrX3NpemUodmFsdWUpPzsKLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7CiYjNDM7ICAgICAgICBndWFyZC5ibG9ja19zaXplID0gdmFsdWU7CiAgICAgICAgIE9rKCgpKQogICAgIH0KIH0KQEAgLTIwNCwxMSAmIzQzOzIwNSwxMiBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zJmx0OzImZ3Q7IGZvciBEZXZpY2VDb25maWcgewogICAgIH0KIAogICAgIGZuIHN0b3JlKHRoaXM6ICZhbXA7RGV2aWNlQ29uZmlnLCBwYWdlOiAmYW1wO1t1OF0pIC0mZ3Q7IFJlc3VsdCB7Ci0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7CiYjNDM7ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTsKJiM0MzsgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQgewogICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmRhdGEubG9jaygpLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPzsKJiM0MzsgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPzsKIAogICAgICAgICBPaygoKSkKICAgICB9CkBAIC0yMjUsMTQgJiM0MzsyMjcsMTUgQEAgaW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9ucyZsdDszJmd0OyBmb3IgRGV2aWNlQ29uZmlnIHsKICAgICB9CiAKICAgICBmbiBzdG9yZSh0aGlzOiAmYW1wO0RldmljZUNvbmZpZywgcGFnZTogJmFtcDtbdThdKSAtJmd0OyBSZXN1bHQgewotICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWQgewomIzQzOyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7CiYjNDM7ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHsKICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpOwogICAgICAgICB9CiAKICAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpOwogICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjombHQ7dTY0Jmd0OygpLm1hcF9lcnIofF98IEVJTlZBTCk/OwogCi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliID0gdmFsdWU7CiYjNDM7ICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTsKICAgICAgICAgT2soKCkpCiAgICAgfQogfQpAQCAtMjQ4LDE0ICYjNDM7MjUxLDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7NCZndDsgZm9yIERldmljZUNvbmZpZyB7CiAgICAgfQogCiAgICAgZm4gc3RvcmUodGhpczogJmFtcDtEZXZpY2VDb25maWcsIHBhZ2U6ICZhbXA7W3U4XSkgLSZndDsgUmVzdWx0IHsKLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHsKJiM0MzsgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpOwomIzQzOyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7CiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTsKICAgICAgICAgfQogCiAgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTsKICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6Jmx0O3U4Jmd0OygpLm1hcF9lcnIofF98IEVJTlZBTCk/OwogCi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/OwomIzQzOyAgICAgICAgZ3VhcmQuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/OwogICAgICAgICBPaygoKSkKICAgICB9CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjkwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJ1c3QtQmFzZWQgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbW9kaWZpY2F0aW9uIHRvIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCwgd2hpY2gsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBpcyBhIFJ1c3QgaW1wbGVtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgYHJudWxsYCBibG9jayBkcml2ZXIgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIGNvbmZpZ2ZzLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgYSB2aXJ0dWFsIGJsb2NrIGRldmljZSBhbmQgdGhpcyBpcyB0aGUgY29uZmlnZnMgY29kZSB0aGF0IGFsbG93cyBpdCB0byBiZSBjb25maWd1cmVkLiBUaGUgY29udGV4dCBpcyBpbXBvcnRhbnQgaGVyZTsgSSYjMzk7bGwgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBmdWxseSBncmFzcCB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBhbmQgdGhlIGRlc2lnbiBkZWNpc2lvbnMuCgpGcm9tIHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgbG9ja2luZyBpc3N1ZSB3aXRoaW4gdGhlIGBEZXZpY2VDb25maWdgIHN0cnVjdCB3aGVuIGl0IGNvbWVzIHRvIHRoZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMuIEl0IGxvb2tzIGxpa2UgdGhlIHByaW9yIGNvZGUgdXNlZCBgdGhpcy5kYXRhLmxvY2soKWAgaW4gbXVsdGlwbGUgcGxhY2VzIHdpdGhpbiBlYWNoIGF0dHJpYnV0ZSYjMzk7cyBgc3RvcmVgIG1ldGhvZC4gRWFjaCB0aW1lLCB0aGUgbG9jayB3YXMgZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBtZXRob2Qgc2NvcGUsIHRoZW4gcmUtYWNxdWlyZWQgZm9yIGEgc3Vic2VxdWVudCBhY2Nlc3MuCgpJIHNlZSB0aGF0IHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgYSBtdXRhYmxlIGd1YXJkIHdpdGggYSBzaW5nbGUgbG9jay4gVGhlIGBzdG9yZWAgbWV0aG9kcyBmb3IgdGhlIGBibG9ja19zaXplYCwgYHJvdGF0aW9uYWxgLCBgY2FwYWNpdHlfbWliYCwgYW5kIGBpcnFfbW9kZWAgYXR0cmlidXRlcyBhcmUgYWZmZWN0ZWQuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGNoZWNrIGZvciBgLnBvd2VyZWRgIGFuZCB0aGUgY2hhbmdlIHByZXZlbnRzIHNldHRpbmcgdmFsdWVzIGlmIHRoZSBkZXZpY2UgaXMgcG93ZXJlZC4gSXQgYXBwZWFycyBlYWNoIGF0dHJpYnV0ZSBoYWQgYSBsb2NrIGFjcXVpc2l0aW9uIG9uIHRoZSBgdGhpcy5kYXRhLmxvY2soKWAgd2hpY2ggaXMgbm93IGNvbnNvbGlkYXRlZCBpbnRvIGEgc2luZ2xlIGxvY2sgYnkgaW5pdGlhbGl6aW5nIHRoZSBgbXV0IGd1YXJkYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGxvY2sgaXMgaGVsZCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiBvZiB0aGUgYXR0cmlidXRlJiMzOTtzIGBzdG9yZWAgbWV0aG9kLCBwcmVzdW1hYmx5IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIG9yIGluY29uc2lzdGVuY2llcyB3aGVuIG1vZGlmeWluZyB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gZGF0YS4gQnkgaW5pdGlhbGl6aW5nIGEgZ3VhcmQgYXQgdGhlIHN0YXJ0IGFuZCBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGR1cmF0aW9uLCB3ZSBhdm9pZCBtdWx0aXBsZSBsb2NrIGFjcXVpc2l0aW9ucyB3aXRoaW4gZWFjaCBmdW5jdGlvbi4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBnb29kIGNoYW5nZS4gTG9ja2luZyBpcyBhIGNyaXRpY2FsIGFyZWEgaW4ga2VybmVsIGRldmVsb3BtZW50LCBhbmQgYSBjb25zb2xpZGF0ZWQgbG9jayBoZXJlIGNvdWxkIGltcHJvdmUgdGhlIHJvYnVzdG5lc3MgYW5kIHBvdGVudGlhbGx5IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGJlIGVhc2llciB0byByZWFkLCBiZWNhdXNlIGxlc3MgY29kZSBpcyBuZWVkZWQsIGFuZCBzaG91bGQgYmUgYmV0dGVyIHBlcmZvcm1hbmNlIHRvby4gTm8gbW9yZSB1bm5lY2Vzc2FyeSBsb2NrLXVubG9jayBjeWNsZXMuIEl0IHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2Ugd2hlcmUgdGhlIGAucG93ZXJlZGAgZmxhZyBjb3VsZCBiZSBjaGVja2VkLCBhbmQgdGhlbiBtb2RpZmllZCBiZXR3ZWVuIGxvY2sgYWNxdWlzaXRpb25zLCBkZXBlbmRpbmcgb24gaG93IHRoaXMgaXMgd3JpdHRlbi4gSSYjMzk7bGwgbmVlZCB0byByZWFkIHRoZSB3aWRlciBjb250ZXh0IHRvIGJlIHN1cmUsIGJ1dCBzbyBmYXIsIGl0IGFwcGVhcnMgdG8gYmUgYW4gaW1wcm92ZW1lbnQuIExldCBtZSBjaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYGNvbmZpZ2ZzYCB0byBiZSBzdXJlIHRoYXQgSSBhbSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYwOlx0ICAgICAgICB9XG4gMTYxOlx0XG4gMTYyOlx0ICAgICAgICBPaygoKSlcbiAxNjM6XHQgICAgfVxuIDE2NDpcdH1cbiAxNjU6XHRcbiAxNjY6XHQjW3Z0YWJsZV1cbiAxNjc6XHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMVx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAxNjg6XHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuIDE2OTpcdFxuIDE3MDpcdCAgICBmbiBzaG93KHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVx1MDAzZSBSZXN1bHRcdTAwM2N1c2l6ZVx1MDAzZSB7XG4gMTcxOlx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcbiAxNzI6XHQgICAgICAgIHdyaXRlci53cml0ZV9mbXQoZm10IShcJiMzNDt7fVxcblwmIzM0OywgdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplKSk/O1xuIDE3MzpcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcbiAxNzQ6XHQgICAgfVxuIDE3NTpcdFxuIDE3NjpcdCAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbiAxNzc6XHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuIDE3ODpcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gMTc5Olx0ICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gMTgwOlx0ICAgICAgICB9XG4gMTgxOlx0XG4gMTgyOlx0ICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XG4gMTgzOlx0ICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcdTAwM2N1MzJcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcbiAxODQ6XHRcbiAxODU6XHQgICAgICAgIEdlbkRpc2tCdWlsZGVyOjp2YWxpZGF0ZV9ibG9ja19zaXplKHZhbHVlKT87XG4gMTg2Olx0ICAgICAgICBndWFyZC5ibG9ja19zaXplID0gdmFsdWU7XG4gMTg3Olx0ICAgICAgICBPaygoKSlcbiAxODg6XHQgICAgfVxuIDE4OTpcdH1cbiAxOTA6XHRcbiAxOTE6XHQjW3Z0YWJsZV1cbiAxOTI6XHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMlx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAxOTM6XHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuIDE5NDpcdFxuIDE5NTpcdCAgICBmbiBzaG93KHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVx1MDAzZSBSZXN1bHRcdTAwM2N1c2l6ZVx1MDAzZSB7XG4gMTk2Olx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcbiAxOTc6XHRcbiAxOTg6XHQgICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucm90YXRpb25hbCB7XG4gMTk5Olx0ICAgICAgICAgICAgd3JpdGVyLndyaXRlX3N0cihcJiMzNDsxXFxuXCYjMzQ7KT87XG4gMjAwOlx0ICAgICAgICB9IGVsc2Uge1xuIDIwMTpcdCAgICAgICAgICAgIHdyaXRlci53cml0ZV9zdHIoXCYjMzQ7MFxcblwmIzM0Oyk/O1xuIDIwMjpcdCAgICAgICAgfVxuIDIwMzpcdFxuIDIwNDpcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcbiAyMDU6XHQgICAgfVxuIDIwNjpcdFxuIDIwNzpcdCAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbiAyMDg6XHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuIDIwOTpcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gMjEwOlx0ICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gMjExOlx0ICAgICAgICB9XG4gMjEyOlx0XG4gMjEzOlx0ICAgICAgICBndWFyZC5yb3RhdGlvbmFsID0ga3N0cnRvYm9vbF9ieXRlcyhwYWdlKT87XG4gMjE0Olx0XG4gMjE1Olx0ICAgICAgICBPaygoKSlcbiAyMTY6XHQgICAgfVxuIDIxNzpcdH1cbiAyMTg6XHRcbiAyMTk6XHQjW3Z0YWJsZV1cbiAyMjA6XHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAyMjE6XHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuIDIyMjpcdFxuIDIyMzpcdCAgICBmbiBzaG93KHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVx1MDAzZSBSZXN1bHRcdTAwM2N1c2l6ZVx1MDAzZSB7XG4gMjI0Olx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcbiAyMjU6XHQgICAgICAgIHdyaXRlci53cml0ZV9mbXQoZm10IShcJiMzNDt7fVxcblwmIzM0OywgdGhpcy5kYXRhLmxvY2soKS5jYXBhY2l0eV9taWIpKT87XG4gMjI2Olx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxuIDIyNzpcdCAgICB9XG4gMjI4Olx0XG4gMjI5Olx0ICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuIDIzMDpcdCAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XG4gMjMxOlx0ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAyMzI6XHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAyMzM6XHQgICAgICAgIH1cbiAyMzQ6XHRcbiAyMzU6XHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcbiAyMzY6XHQgICAgICAgIGxldCB2YWx1ZSA9IHRleHQucGFyc2U6Olx1MDAzY3U2NFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xuIDIzNzpcdFxuIDIzODpcdCAgICAgICAgZ3VhcmQuY2FwYWNpdHlfbWliID0gdmFsdWU7XG4gMjM5Olx0ICAgICAgICBPaygoKSlcbiAyNDA6XHQgICAgfVxuIDI0MTpcdH1cbiAyNDI6XHRcbiAyNDM6XHQjW3Z0YWJsZV1cbiAyNDQ6XHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjNFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAyNDU6XHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuIDI0NjpcdFxuIDI0NzpcdCAgICBmbiBzaG93KHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVx1MDAzZSBSZXN1bHRcdTAwM2N1c2l6ZVx1MDAzZSB7XG4gMjQ4Olx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcbiAyNDk6XHQgICAgICAgIHdyaXRlci53cml0ZV9mbXQoZm10IShcJiMzNDt7fVxcblwmIzM0OywgdGhpcy5kYXRhLmxvY2soKS5pcnFfbW9kZSkpPztcbiAyNTA6XHQgICAgICAgIE9rKHdyaXRlci5ieXRlc193cml0dGVuKCkpXG4gMjUxOlx0ICAgIH1cbiAyNTI6XHRcbiAyNTM6XHQgICAgZm4gc3RvcmUodGhpczogXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcdTAwMjZbdThdKSAtXHUwMDNlIFJlc3VsdCB7XG4gMjU0Olx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiAyNTU6XHQgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuIDI1NjpcdCAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuIDI1NzpcdCAgICAgICAgfVxuIDI1ODpcdFxuIDI1OTpcdCAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjQwCgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb21taXQuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gdGhlIGBzdG9yZWAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIGxvY2tpbmcgYHRoaXMuZGF0YWAgKnR3aWNlKjogb25jZSB0byBjaGVjayBpZiBgcG93ZXJlZGAgd2FzIHRydWUsIGFuZCB0aGVuIGFnYWluIHRvIGFjdHVhbGx5IG1vZGlmeSBhIHZhbHVlLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIFRpbWUtb2YtQ2hlY2stdG8tVGltZS1vZi1Vc2UgKFRPQ1RPVSkgcmFjZSBjb25kaXRpb24uIEJldHdlZW4gdGhvc2UgdHdvIGxvY2sgYWNxdWlzaXRpb25zLCBhbm90aGVyIHRocmVhZCBjb3VsZCBoYXZlIG1vZGlmaWVkIHRoZSBzdGF0ZSwgcmVuZGVyaW5nIHRoZSBpbml0aWFsIGNoZWNrIGludmFsaWQuIFRoZSBmaXggaXMgZWxlZ2FudDogIEJ5IGludHJvZHVjaW5nIGEgc2luZ2xlLCBsb25nZXItbGl2ZWQgbG9jayBndWFyZCAoYGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO2ApLCB3ZSBlbnN1cmUgdGhlIGNoZWNrIGFuZCB0aGUgbW9kaWZpY2F0aW9uIGhhcHBlbiBhdG9taWNhbGx5LCB1bmRlciB0aGUgcHJvdGVjdGlvbiBvZiB0aGUgbXV0ZXguCgpOb3csIGEgY3J1Y2lhbCBhc3BlY3QgaXMgZGV0ZXJtaW5pbmcgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcmlzayByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBHaXZlbiB0aGF0IHRoaXMgaXMgUnVzdCBjb2RlLCBhbmQgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIHNhZmUgdHlwZXMgKHByaW1pdGl2ZXMsIGVudW1zLCBzdHJ1Y3QgZmllbGRzKSwgUnVzdCBndWFyYW50ZWVzIHRoYXQgYWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0IGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBrZXkgc2FmZWd1YXJkLiBUaGUgcGF0Y2ggaXRzZWxmIG1lcmVseSBhZGp1c3RzIHRoZSBsb2NraW5nIHNjb3BlOyBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBidWZmZXJzLCBvciBvcGVyYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4gIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgaW52b2x2ZWQgaGVyZS4gS01TQU4sIHdoaWNoIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXNuJiMzOTt0IGFwcGxpY2FibGUgaW4gdGhpcyBzY2VuYXJpby4gVGhlIGVudGlyZSBsb2dpYyBpcyBjb25maW5lZCB0byBhZGp1c3RpbmcgdGhlIGxvY2tpbmcgc2NvcGUgYW5kIGlzIGEgcHVyZSBjb25jdXJyZW5jeSBmaXguIEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUgKFRPQ1RPVSkgYnkgZXh0ZW5kaW5nIHRoZSBsb2NrJiMzOTtzIHNjb3BlLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHByZXNlbnQgaGVyZSwgYW5kIHRoZXJlZm9yZSBhIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4gIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlIHByb3BlcnRpZXMgZm9yIGBzZXQtcmVzdWx0c2AgbmVlZCB0byBiZSBzZXQgd2l0aCBgS01TQU5SZWFzb25pbmdgIGFuZCBgTmVlZHNLTVNBTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIHNjb3BlIGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCBmb3IgYERldmljZUNvbmZpZ2AgY29uZmlnZnMgYXR0cmlidXRlIGBzdG9yZWAgaGFuZGxlcnMuIFByZXZpb3VzbHksIGB0aGlzLmRhdGEubG9jaygpYCB3YXMgYWNxdWlyZWQgdG8gY2hlY2sgYHBvd2VyZWRgIGFuZCB0aGVuIHJlLWFjcXVpcmVkIHRvIHNldCB0aGUgYXR0cmlidXRlIHZhbHVlLCBvcGVuaW5nIGEgcmFjZSB3aW5kb3cgKFRPQ1RPVSkuIFRoZSBwYXRjaCBob2xkcyB0aGUgbXV0ZXggbG9jayBndWFyZCBhY3Jvc3MgYm90aCB0aGUgY2hlY2sgYW5kIHRoZSBhc3NpZ25tZW50LlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeS9sb2NraW5nIGZpeCBpbiBzYWZlIFJ1c3QgY29kZSBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIGNvcHksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGtlcm5lbCBpbmZvLWxlYWtzLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2NvcGUgaW4gYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgIGZvciBgRGV2aWNlQ29uZmlnYCBjb25maWdmcyBhdHRyaWJ1dGUgYHN0b3JlYCBoYW5kbGVycy4gUHJldmlvdXNseSwgYHRoaXMuZGF0YS5sb2NrKClgIHdhcyBhY3F1aXJlZCB0byBjaGVjayBgcG93ZXJlZGAgYW5kIHRoZW4gcmUtYWNxdWlyZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9wZW5pbmcgYSByYWNlIHdpbmRvdyAoVE9DVE9VKS4gVGhlIHBhdGNoIGhvbGRzIHRoZSBtdXRleCBsb2NrIGd1YXJkIGFjcm9zcyBib3RoIHRoZSBjaGVjayBhbmQgdGhlIGFzc2lnbm1lbnQuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgZml4IGluIHNhZmUgUnVzdCBjb2RlIGFuZCBkb2VzIG5vdCBhbGxvY2F0ZSwgY29weSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnRyb2R1Y2Uga2VybmVsIGluZm8tbGVha3MuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjA0LjcyMzk1MDA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzNjA1OTEyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9SVVNUX05VTExcIixcbiAgICBcIlJVU1RcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJCTEtfREVWXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIkRldmljZUNvbmZpZzo6c3RvcmVcIixcbiAgICBcIlxcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MxXFx1MDAzZVxcdTAwM2U6OnN0b3JlXCIsXG4gICAgXCJcXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMlxcdTAwM2VcXHUwMDNlOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzNcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIlxcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2M0XFx1MDAzZVxcdTAwM2U6OnN0b3JlXCIsXG4gICAgXCJOdWxsQmxrRGV2aWNlOjpuZXdcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIHNjb3BlIGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCBmb3IgYERldmljZUNvbmZpZ2AgY29uZmlnZnMgYXR0cmlidXRlIGBzdG9yZWAgaGFuZGxlcnMuIFByZXZpb3VzbHksIGB0aGlzLmRhdGEubG9jaygpYCB3YXMgYWNxdWlyZWQgdG8gY2hlY2sgYHBvd2VyZWRgIGFuZCB0aGVuIHJlLWFjcXVpcmVkIHRvIHNldCB0aGUgYXR0cmlidXRlIHZhbHVlLCBvcGVuaW5nIGEgcmFjZSB3aW5kb3cgKFRPQ1RPVSkuIFRoZSBwYXRjaCBob2xkcyB0aGUgbXV0ZXggbG9jayBndWFyZCBhY3Jvc3MgYm90aCB0aGUgY2hlY2sgYW5kIHRoZSBhc3NpZ25tZW50LlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgZml4IGluIHNhZmUgUnVzdCBjb2RlIGFuZCBkb2VzIG5vdCBhbGxvY2F0ZSwgY29weSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnRyb2R1Y2Uga2VybmVsIGluZm8tbGVha3MuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgY29uZmlnZnMgYXR0cmlidXRlIHN0b3JlIGhhbmRsZXJzIGZvciB0aGUgUnVzdCBudWxsIGJsb2NrIGRldmljZSBkcml2ZXIgKHJudWxsKS4gSG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHN0YXRlIGNoZWNrcyBhbmQgZmllbGQgYXNzaWdubWVudHMgY2xvc2VzIGEgcmFjZSB3aW5kb3cgd2hlbiBhbHRlcmluZyBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiAoYmxvY2tfc2l6ZSwgcm90YXRpb25hbCwgY2FwYWNpdHlfbWliLCBpcnFfbW9kZSkgd2hpbGUgcG93ZXJpbmcgZGV2aWNlcyBvbi9vZmYuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtYmFzZWQsIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGFuZCByZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjA0LjcyMzk1NDQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU0OTQ1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YjdmYWIxMjFiZjQ3YjdkYTk4ODJiNThjZjRmZjY4Mzg2MThhZDEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMjI6NDE6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyBiL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNcXG5pbmRleCAzMmMxMGMzZjRkMGZkLi42NmVmOTFiM2ZmMGNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXFxuQEAgLTE3NCw3ICsxNzQsOCBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzFcXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xcbiAgICAgfVxcbiBcXG4gICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XFxuKyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XFxuKyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xcbiAgICAgICAgIH1cXG4gXFxuQEAgLTE4Miw3ICsxODMsNyBAQCBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4gICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcXHUwMDNjdTMyXFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xcbiBcXG4gICAgICAgICBHZW5EaXNrQnVpbGRlcjo6dmFsaWRhdGVfYmxvY2tfc2l6ZSh2YWx1ZSk/O1xcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuYmxvY2tfc2l6ZSA9IHZhbHVlO1xcbisgICAgICAgIGd1YXJkLmJsb2NrX3NpemUgPSB2YWx1ZTtcXG4gICAgICAgICBPaygoKSlcXG4gICAgIH1cXG4gfVxcbkBAIC0yMDQsMTEgKzIwNSwxMiBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzJcXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xcbiAgICAgfVxcbiBcXG4gICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XFxuKyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XFxuKyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xcbiAgICAgICAgIH1cXG4gXFxuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5yb3RhdGlvbmFsID0ga3N0cnRvYm9vbF9ieXRlcyhwYWdlKT87XFxuKyAgICAgICAgZ3VhcmQucm90YXRpb25hbCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xcbiBcXG4gICAgICAgICBPaygoKSlcXG4gICAgIH1cXG5AQCAtMjI1LDE0ICsyMjcsMTUgQEAgaW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MzXFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcXG4gICAgIH1cXG4gXFxuICAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4tICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWQge1xcbisgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xcbisgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xcbiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gICAgICAgICB9XFxuIFxcbiAgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcXG4gICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcXHUwMDNjdTY0XFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xcbiBcXG4tICAgICAgICB0aGlzLmRhdGEubG9jaygpLmNhcGFjaXR5X21pYiA9IHZhbHVlO1xcbisgICAgICAgIGd1YXJkLmNhcGFjaXR5X21pYiA9IHZhbHVlO1xcbiAgICAgICAgIE9rKCgpKVxcbiAgICAgfVxcbiB9XFxuQEAgLTI0OCwxNCArMjUxLDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjNFxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuICAgICB9XFxuIFxcbiAgICAgZm4gc3RvcmUodGhpczogXFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXFx1MDAyNlt1OF0pIC1cXHUwMDNlIFJlc3VsdCB7XFxuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcXG4rICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4rICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcXG4gICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XFxuICAgICAgICAgfVxcbiBcXG4gICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XFxuICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XFx1MDAzY3U4XFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xcbiBcXG4tICAgICAgICB0aGlzLmRhdGEubG9jaygpLmlycV9tb2RlID0gSVJRTW9kZTo6dHJ5X2Zyb20odmFsdWUpPztcXG4rICAgICAgICBndWFyZC5pcnFfbW9kZSA9IElSUU1vZGU6OnRyeV9mcm9tKHZhbHVlKT87XFxuICAgICAgICAgT2soKCkpXFxuICAgICB9XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MDUuMTkwMDk3MjQyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NTYwNjU5MjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1JVU1RfTlVMTFwiLFxuICAgIFwiUlVTVFwiLFxuICAgIFwiQ09ORklHRlNfRlNcIixcbiAgICBcIkJMS19ERVZcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiRGV2aWNlQ29uZmlnOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzFcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIlxcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MyXFx1MDAzZVxcdTAwM2U6OnN0b3JlXCIsXG4gICAgXCJcXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjM1xcdTAwM2VcXHUwMDNlOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzRcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIk51bGxCbGtEZXZpY2U6Om5ld1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgaW4gdGhlIGNvbmZpZ2ZzIGF0dHJpYnV0ZSBzdG9yZSBoYW5kbGVycyBmb3IgdGhlIFJ1c3QgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyIChybnVsbCkuIEhvbGRpbmcgdGhlIG11dGV4IGFjcm9zcyBzdGF0ZSBjaGVja3MgYW5kIGZpZWxkIGFzc2lnbm1lbnRzIGNsb3NlcyBhIHJhY2Ugd2luZG93IHdoZW4gYWx0ZXJpbmcgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKGJsb2NrX3NpemUsIHJvdGF0aW9uYWwsIGNhcGFjaXR5X21pYiwgaXJxX21vZGUpIHdoaWxlIHBvd2VyaW5nIGRldmljZXMgb24vb2ZmLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLWJhc2VkLCBjb25maWd1cmFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDliN2ZhYjEyMWJmNDdiN2RhOTg4MmI1OGNmNGZmNjgzODYxOGFkMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIyOjQxOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyBiL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNcbmluZGV4IDMyYzEwYzNmNGQwZmQuLjY2ZWY5MWIzZmYwY2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXG5AQCAtMTc0LDcgKzE3NCw4IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbisgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuKyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gICAgICAgICB9XG4gXG5AQCAtMTgyLDcgKzE4Myw3IEBAIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XHUwMDNjdTMyXHUwMDNlKCkubWFwX2Vycih8X3wgRUlOVkFMKT87XG4gXG4gICAgICAgICBHZW5EaXNrQnVpbGRlcjo6dmFsaWRhdGVfYmxvY2tfc2l6ZSh2YWx1ZSk/O1xuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7XG4rICAgICAgICBndWFyZC5ibG9ja19zaXplID0gdmFsdWU7XG4gICAgICAgICBPaygoKSlcbiAgICAgfVxuIH1cbkBAIC0yMDQsMTEgKzIwNSwxMiBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMlx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAgICAgfVxuIFxuICAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4rICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbisgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuICAgICAgICAgfVxuIFxuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5yb3RhdGlvbmFsID0ga3N0cnRvYm9vbF9ieXRlcyhwYWdlKT87XG4rICAgICAgICBndWFyZC5yb3RhdGlvbmFsID0ga3N0cnRvYm9vbF9ieXRlcyhwYWdlKT87XG4gXG4gICAgICAgICBPaygoKSlcbiAgICAgfVxuQEAgLTIyNSwxNCArMjI3LDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MzXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbisgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuKyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gICAgICAgICB9XG4gXG4gICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XG4gICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcdTAwM2N1NjRcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcbiBcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliID0gdmFsdWU7XG4rICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTtcbiAgICAgICAgIE9rKCgpKVxuICAgICB9XG4gfVxuQEAgLTI0OCwxNCArMjUxLDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2M0XHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbisgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuKyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gICAgICAgICB9XG4gXG4gICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XG4gICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcdTAwM2N1OFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xuIFxuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5pcnFfbW9kZSA9IElSUU1vZGU6OnRyeV9mcm9tKHZhbHVlKT87XG4rICAgICAgICBndWFyZC5pcnFfbW9kZSA9IElSUU1vZGU6OnRyeV9mcm9tKHZhbHVlKT87XG4gICAgICAgICBPaygoKSlcbiAgICAgfVxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjA1LjE5MDA5ODY3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNDM3OTY3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogUnVzdCBOdWxsIEJsb2NrIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZXkgd2FudCBtZSB0byBldmFsdWF0ZSB0aGlzIGtlcm5lbCBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBzdGFuZGFyZCBRQSB0YXNrLCBwcm9iYWJseSByZWxhdGVkIHRvIGRlZmVuc2l2ZSBmdXp6aW5nIG9yIHRyaWFnZSwgYW5kIHRoZSByaXNrIGhlcmUgc2VlbXMgbmVnbGlnaWJsZS4gV2UncmUgdGFsa2luZyBhYm91dCBhIGtlcm5lbCBlbmdpbmVlcmluZyBRQSBhbmFseXNpcyB1c2luZyBzeXprYWxsZXIsIHNvIEkgY2FuIHNhZmVseSBwcm9jZWVkLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIGlzIGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYC4gSXQncyBhZGRyZXNzaW5nIGEgbG9ja2luZyBpc3N1ZSB3aXRoaW4gdGhlIFJ1c3QgbnVsbCBibG9jayBkcml2ZXIsIGBybnVsbGAuIEkgY2FuIGFscmVhZHkgc2VlIHRoZSBwcm9ibGVtISBUaGV5IHdlcmUgZHJvcHBpbmcgdGhlIGxvY2sgYmV0d2VlbiBjaGVja2luZyB0aGUgYHBvd2VyZWRgIHN0YXRlIGFuZCB1cGRhdGluZyBgYmxvY2tfc2l6ZWAhIFRoYXQgY3JlYXRlcyBhIHJhY2UgY29uZGl0aW9uLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYSBsb2NraW5nIGVmZmljaWVuY3kgaXNzdWUuIEJlZm9yZSwgdGhlIGNvZGUgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgcnVzdFxuaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbiAgICByZXR1cm4gRXJyKEVCVVNZKTtcbn1cbi4uLlxudGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7XG5gYGBcblxuV2hpY2ggaXMgb2J2aW91c2x5IGZsYXdlZC4gTm93LCB0aGV5J3ZlIGZpeGVkIGl0IGJ5IGhvbGRpbmcgdGhlIGxvY2sgZm9yIHRoZSBlbnRpcmUgY3JpdGljYWwgc2VjdGlvbjpcblxuYGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO2BcblxuTXVjaCBiZXR0ZXIuIEl0J3MgZ29vZCB0byBzZWUgdGhpcyBraW5kIG9mIHZ1bG5lcmFiaWxpdHkgYmVpbmcgaWRlbnRpZmllZCBhbmQgYWRkcmVzc2VkLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB1c2UgdGhlIHN0YW5kYXJkIHRvb2xzIHRvIGRvIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgZmlsZXMgd2l0aGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2AgYW5kIGFzc29jaWF0ZWQgS2NvbmZpZyBmaWxlcyB3aXRoaW4gdGhlIHJlcG9zaXRvcnkuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHJlbGF0ZWQgY29kZSwgYW5kIGFueSBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MTguNjI4MDcxNzI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTk2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJudWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoyMDpzb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjEtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTM3PW9iai0kKENPTkZJR19CTEtfREVWX05VTExfQkxLKVxcdCs9IG51bGxfYmxrL1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSArPSBybnVsbC9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM5LVxcbi0tXFxuZHJpdmVycy9ibG9jay9ybnVsbC9NYWtlZmlsZS0xLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfQkxLX0RFVl9SVVNUX05VTEwpICs9IHJudWxsX21vZC5vXFxuZHJpdmVycy9ibG9jay9ybnVsbC9NYWtlZmlsZTozOnJudWxsX21vZC15IDo9IHJudWxsLm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MTY9cHViKGNyYXRlKSBmbiBzdWJzeXN0ZW0oKSAtXFx1MDAzZSBpbXBsIFBpbkluaXRcXHUwMDNja2VybmVsOjpjb25maWdmczo6U3Vic3lzdGVtXFx1MDAzY0NvbmZpZ1xcdTAwM2UsIEVycm9yXFx1MDAzZSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTI1LVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MjY6ICAgIGtlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbTo6bmV3KGNcXFwicm51bGxcXFwiLCBpdGVtX3R5cGUsIHRyeV9waW5faW5pdCEoQ29uZmlnIHt9KSlcXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTI3LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvcm51bGwucnMtMjItICAgIHR5cGU6IE51bGxCbGtNb2R1bGUsXFxuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5yczoyMzogICAgbmFtZTogXFxcInJudWxsX21vZFxcXCIsXFxuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5ycy0yNC0gICAgYXV0aG9yczogW1xcXCJBbmRyZWFzIEhpbmRib3JnXFxcIl0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjE4LjY4NTY3NzYxMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTk0NjEwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN0YXJ0aW5nIHBvaW50LCBhcyBpZiBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIHJudWxsIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHVuZGVybHlpbmcgbWVjaGFuaWNzIGZvciB0aGUgYHJudWxsYCBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgYm90aCBgZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgLiBUaGUgYEtjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCBhbmQgYW55IGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugd2hldGhlciB0aGUgZHJpdmVyIGlzIGJ1aWx0IGluIG9yIGFzIGEgbW9kdWxlLCBhbnkgdHVuYWJsZSBwYXJhbWV0ZXJzLCBhbmQgbWF5YmUgc29tZSBoZWxwIHRleHQuIFRoZW4sIGBjb25maWdmcy5yc2AgaXMgcmVhbGx5IHdoYXQncyBnb2luZyB0byBiZSBrZXksIGFzIEkgcmVjYWxsIHRoaXMgaXMgaG93IHRoZSBkcml2ZXIgZHluYW1pY2FsbHkgY29uZmlndXJlZC4gU28gSSBleHBlY3QgSSBhbSBzZWVpbmcgaG93IHRoZSBkcml2ZXIgY29uZmlndXJlcyB2aWEgY29uZmlnZnMuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1bnRpbWUgYXNwZWN0cyBhcmUgbWFuYWdlZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZHJpdmVyJ3Mgc3RhdGUgYW5kIGhvdyB0aGV5IGFyZSBwb3B1bGF0ZWQgYnkgdGhlIGNvbmZpZ2ZzIGVudHJpZXMuIEkgYW0gZXhwZWN0aW5nIHNvbWUgc29ydCBvZiBmaWxlIHN0cnVjdHVyZSBtYXBwZWQgdG8gdGhlc2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZXMuIEkgYW50aWNpcGF0ZSBJJ2xsIGZpbmQgdGhlIGxvZ2ljIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIHdyaXRpbmcgdGhlIGRyaXZlciBjb25maWd1cmF0aW9uIHZpYSB0aGUgY29uZmlnZnMgaW50ZXJmYWNlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXNlIGZpbGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDcwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MjEuMjQ1MTQxMTMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBSdXN0IG51bGwgYmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBCTEtfREVWX1JVU1RfTlVMTFxcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIlJ1c3QgbnVsbCBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIFJVU1QgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlNcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhpcyBpcyB0aGUgUnVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbnVsbCBibG9jayBkcml2ZXIuIExpa2VcXG4gIDEwOlxcdFxcdCAgdGhlIEMgdmVyc2lvbiwgdGhlIGRyaXZlciBhbGxvd3MgdGhlIHVzZXIgdG8gY3JlYXRlIHZpcnV0YWwgYmxvY2tcXG4gIDExOlxcdFxcdCAgZGV2aWNlcyB0aGF0IGNhbiBiZSBjb25maWd1cmVkIHZpYSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MToyMS4yNDUyMTY3NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA0NzY0MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgYHJudWxsYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBybnVsbGAgYmxvY2sgZHJpdmVyIGludGVyYWN0cyB3aXRoIGBjb25maWdmc2AsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgY29uZmlnZnMucnNgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIHJpZ2h0IGludG8gdGhlIGNvZGUgYXQgYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgYW5kIHN5bWJvbHMgdGhhdCBhcmUgZGVmaW5pbmcgdGhpcyBpbnRlZ3JhdGlvbi4gV2hhdCBhcmUgdGhlIGNvcmUgcm91dGluZXMgaGFuZGxpbmcgdGhlIGNyZWF0aW9uLCBwb3B1bGF0aW9uLCBhbmQgaW50ZXJhY3Rpb24gb2YgdGhlIGBybnVsbGAgYmxvY2sgZGV2aWNlIGluc3RhbmNlcyB3aXRoaW4gdGhlIGBjb25maWdmc2AgZnJhbWV3b3JrPyBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBzdHJ1Y3R1cmFsIGdsdWUg4oCTIGhvdyB0aGUgZHJpdmVyJ3MgYmxvY2sgZGV2aWNlIHJlcHJlc2VudGF0aW9uIGlzIGV4cG9zZWQgYW5kIG1hbmFnZWQgdGhyb3VnaCB0aGUgZmlsZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMTcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjIzLjI0OTk4MzY0MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0ICAgICAgICB9XFxuIDE2MTpcXHRcXG4gMTYyOlxcdCAgICAgICAgT2soKCkpXFxuIDE2MzpcXHQgICAgfVxcbiAxNjQ6XFx0fVxcbiAxNjU6XFx0XFxuIDE2NjpcXHQjW3Z0YWJsZV1cXG4gMTY3OlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMVxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDE2ODpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAxNjk6XFx0XFxuIDE3MDpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDE3MTpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAxNzI6XFx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXFxcInt9XFxcXG5cXFwiLCB0aGlzLmRhdGEubG9jaygpLmJsb2NrX3NpemUpKT87XFxuIDE3MzpcXHQgICAgICAgIE9rKHdyaXRlci5ieXRlc193cml0dGVuKCkpXFxuIDE3NDpcXHQgICAgfVxcbiAxNzU6XFx0XFxuIDE3NjpcXHQgICAgZm4gc3RvcmUodGhpczogXFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXFx1MDAyNlt1OF0pIC1cXHUwMDNlIFJlc3VsdCB7XFxuIDE3NzpcXHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xcbiAxNzg6XFx0ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcXG4gMTc5OlxcdCAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xcbiAxODA6XFx0ICAgICAgICB9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdCAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xcbiAxODM6XFx0ICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcXHUwMDNjdTMyXFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xcbiAxODQ6XFx0XFxuIDE4NTpcXHQgICAgICAgIEdlbkRpc2tCdWlsZGVyOjp2YWxpZGF0ZV9ibG9ja19zaXplKHZhbHVlKT87XFxuIDE4NjpcXHQgICAgICAgIGd1YXJkLmJsb2NrX3NpemUgPSB2YWx1ZTtcXG4gMTg3OlxcdCAgICAgICAgT2soKCkpXFxuIDE4ODpcXHQgICAgfVxcbiAxODk6XFx0fVxcbiAxOTA6XFx0XFxuIDE5MTpcXHQjW3Z0YWJsZV1cXG4gMTkyOlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMlxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDE5MzpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDE5NjpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHQgICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucm90YXRpb25hbCB7XFxuIDE5OTpcXHQgICAgICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFxcXCIxXFxcXG5cXFwiKT87XFxuIDIwMDpcXHQgICAgICAgIH0gZWxzZSB7XFxuIDIwMTpcXHQgICAgICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFxcXCIwXFxcXG5cXFwiKT87XFxuIDIwMjpcXHQgICAgICAgIH1cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyMDU6XFx0ICAgIH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyMDg6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjA5OlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDIxMDpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjExOlxcdCAgICAgICAgfVxcbiAyMTI6XFx0XFxuIDIxMzpcXHQgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPztcXG4gMjE0OlxcdFxcbiAyMTU6XFx0ICAgICAgICBPaygoKSlcXG4gMjE2OlxcdCAgICB9XFxuIDIxNzpcXHR9XFxuIDIxODpcXHRcXG4gMjE5OlxcdCNbdnRhYmxlXVxcbiAyMjA6XFx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MzXFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcXG4gMjIxOlxcdCAgICB0eXBlIERhdGEgPSBEZXZpY2VDb25maWc7XFxuIDIyMjpcXHRcXG4gMjIzOlxcdCAgICBmbiBzaG93KHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZtdXQgW3U4OyBQQUdFX1NJWkVdKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjdXNpemVcXHUwMDNlIHtcXG4gMjI0OlxcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XFxuIDIyNTpcXHQgICAgICAgIHdyaXRlci53cml0ZV9mbXQoZm10IShcXFwie31cXFxcblxcXCIsIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliKSk/O1xcbiAyMjY6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyMjc6XFx0ICAgIH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyMzA6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjMxOlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDIzMjpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjMzOlxcdCAgICAgICAgfVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcXG4gMjM2OlxcdCAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XFx1MDAzY3U2NFxcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcXG4gMjM3OlxcdFxcbiAyMzg6XFx0ICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTtcXG4gMjM5OlxcdCAgICAgICAgT2soKCkpXFxuIDI0MDpcXHQgICAgfVxcbiAyNDE6XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHQjW3Z0YWJsZV1cXG4gMjQ0OlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjNFxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDI0NTpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAyNDY6XFx0XFxuIDI0NzpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDI0ODpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAyNDk6XFx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXFxcInt9XFxcXG5cXFwiLCB0aGlzLmRhdGEubG9jaygpLmlycV9tb2RlKSk/O1xcbiAyNTA6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyNTE6XFx0ICAgIH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyNTQ6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjU1OlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDI1NjpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjU3OlxcdCAgICAgICAgfVxcbiAyNTg6XFx0XFxuIDI1OTpcXHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MjMuMjUwMTU2NzcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5ODY0Nzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBybnVsbCBhbmQgUnVzdCBLZXJuZWwgU3ltYm9sIE5hbWluZyoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBybnVsbGAgaW50ZXJhY3RzIHdpdGggYGNvbmZpZ2ZzYCBzcGVjaWZpY2FsbHksIGFuZCBJJ20gYWxzbyBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIFJ1c3Qgc3ltYm9scyBhcmUgbmFtZWQgd2l0aGluIHRoZSBrZXJuZWwgY29udGV4dC4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gRmlyc3Qgc3RvcCwgdGhlIGZpbGUgc3lzdGVtLiBXaGVyZSBpcyB0aGUgcmVsZXZhbnQgY29kZT8gQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGZpbGVzIHdpdGhpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9gLiBJJ20gZ29pbmcgdG8gc3RhcnQgbXkgaW5zcGVjdGlvbiB0aGVyZSB0byBzZWUgd2hhdCB0aGUgYXJjaGl0ZWN0dXJlIGlzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhpbmdzLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRlc2lnbiBhbmQgd2hlcmUgdGhlIFJ1c3QgY29tcG9uZW50cyBhcmUgdGllZCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MjUuMjQ4ODA3NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvYmxvY2svcm51bGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiY29uZmlnZnMucnNcIixcbiAgICBcInJudWxsLnJzXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjI1LjI0ODg1ODYyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc3MDU4MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aGUgc2FtZSB0aG91Z2h0czpcblxuKipFeHBsb3JpbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGlzIGNvZGViYXNlLCBhbmQgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIGNvbmZpZ3VyYXRpb24gYW5kIHBvdGVudGlhbGx5LCBudWxsIGRldmljZXMuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHRoaW5ncyBpbnRlcmFjdC4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgcmVsYXRlZCBjb2RlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYGNvbmZpZ2ZzLnJzYCBhbmQgYHJudWxsLnJzYC4gSSB3YW50IHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aG9zZSBmaWxlcyB3aWxsIGlsbHVtaW5hdGUgaG93IHRoZSBjb25maWd1cmF0aW9uIGRhdGEgZmxvd3MsIGFuZCBob3cgdGhlIG51bGwgZGV2aWNlIGlzIGJlaW5nIGltcGxlbWVudGVkIG9yIHVzZWQuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRob3NlIGZpbGVzIHJldmVhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MToyNy4wMjU5MTk3MDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHR1c2Ugc3VwZXI6Ok51bGxCbGtEZXZpY2U7XFxuICAgNDpcXHR1c2Uga2VybmVsOjp7XFxuICAgNTpcXHQgICAgYmxvY2s6Om1xOjpnZW5fZGlzazo6e0dlbkRpc2ssIEdlbkRpc2tCdWlsZGVyfSxcXG4gICA2OlxcdCAgICBjb25maWdmczo6e3NlbGYsIEF0dHJpYnV0ZU9wZXJhdGlvbnN9LFxcbiAgIDc6XFx0ICAgIGNvbmZpZ2ZzX2F0dHJzLFxcbiAgIDg6XFx0ICAgIGZtdDo6e3NlbGYsIFdyaXRlIGFzIF99LFxcbiAgIDk6XFx0ICAgIG5ld19tdXRleCxcXG4gIDEwOlxcdCAgICBwYWdlOjpQQUdFX1NJWkUsXFxuICAxMTpcXHQgICAgcHJlbHVkZTo6KixcXG4gIDEyOlxcdCAgICBzdHI6Ontrc3RydG9ib29sX2J5dGVzLCBDU3RyaW5nfSxcXG4gIDEzOlxcdCAgICBzeW5jOjpNdXRleCxcXG4gIDE0OlxcdH07XFxuICAxNTpcXHRcXG4gIDE2OlxcdHB1YihjcmF0ZSkgZm4gc3Vic3lzdGVtKCkgLVxcdTAwM2UgaW1wbCBQaW5Jbml0XFx1MDAzY2tlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbVxcdTAwM2NDb25maWdcXHUwMDNlLCBFcnJvclxcdTAwM2Uge1xcbiAgMTc6XFx0ICAgIGxldCBpdGVtX3R5cGUgPSBjb25maWdmc19hdHRycyEge1xcbiAgMTg6XFx0ICAgICAgICBjb250YWluZXI6IGNvbmZpZ2ZzOjpTdWJzeXN0ZW1cXHUwMDNjQ29uZmlnXFx1MDAzZSxcXG4gIDE5OlxcdCAgICAgICAgZGF0YTogQ29uZmlnLFxcbiAgMjA6XFx0ICAgICAgICBjaGlsZDogRGV2aWNlQ29uZmlnLFxcbiAgMjE6XFx0ICAgICAgICBhdHRyaWJ1dGVzOiBbXFxuICAyMjpcXHQgICAgICAgICAgICBmZWF0dXJlczogMCxcXG4gIDIzOlxcdCAgICAgICAgXSxcXG4gIDI0OlxcdCAgICB9O1xcbiAgMjU6XFx0XFxuICAyNjpcXHQgICAga2VybmVsOjpjb25maWdmczo6U3Vic3lzdGVtOjpuZXcoY1xcXCJybnVsbFxcXCIsIGl0ZW1fdHlwZSwgdHJ5X3Bpbl9pbml0IShDb25maWcge30pKVxcbiAgMjc6XFx0fVxcbiAgMjg6XFx0XFxuICAyOTpcXHQjW3Bpbl9kYXRhXVxcbiAgMzA6XFx0cHViKGNyYXRlKSBzdHJ1Y3QgQ29uZmlnIHt9XFxuICAzMTpcXHRcXG4gIDMyOlxcdCNbdnRhYmxlXVxcbiAgMzM6XFx0aW1wbCBBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzBcXHUwMDNlIGZvciBDb25maWcge1xcbiAgMzQ6XFx0ICAgIHR5cGUgRGF0YSA9IENvbmZpZztcXG4gIDM1OlxcdFxcbiAgMzY6XFx0ICAgIGZuIHNob3coX3RoaXM6IFxcdTAwMjZDb25maWcsIHBhZ2U6IFxcdTAwMjZtdXQgW3U4OyBQQUdFX1NJWkVdKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjdXNpemVcXHUwMDNlIHtcXG4gIDM3OlxcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XFxuICAzODpcXHQgICAgICAgIHdyaXRlci53cml0ZV9zdHIoXFxcImJsb2Nrc2l6ZSxzaXplLHJvdGF0aW9uYWwsaXJxbW9kZVxcXFxuXFxcIik/O1xcbiAgMzk6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAgNDA6XFx0ICAgIH1cXG4gIDQxOlxcdH1cXG4gIDQyOlxcdFxcbiAgNDM6XFx0I1t2dGFibGVdXFxuICA0NDpcXHRpbXBsIGNvbmZpZ2ZzOjpHcm91cE9wZXJhdGlvbnMgZm9yIENvbmZpZyB7XFxuICA0NTpcXHQgICAgdHlwZSBDaGlsZCA9IERldmljZUNvbmZpZztcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0ICAgIGZuIG1ha2VfZ3JvdXAoXFxuICA0ODpcXHQgICAgICAgIFxcdTAwMjZzZWxmLFxcbiAgNDk6XFx0ICAgICAgICBuYW1lOiBcXHUwMDI2Q1N0cixcXG4gIDUwOlxcdCAgICApIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2NpbXBsIFBpbkluaXRcXHUwMDNjY29uZmlnZnM6Okdyb3VwXFx1MDAzY0RldmljZUNvbmZpZ1xcdTAwM2UsIEVycm9yXFx1MDAzZVxcdTAwM2Uge1xcbiAgNTE6XFx0ICAgICAgICBsZXQgaXRlbV90eXBlID0gY29uZmlnZnNfYXR0cnMhIHtcXG4gIDUyOlxcdCAgICAgICAgICAgIGNvbnRhaW5lcjogY29uZmlnZnM6Okdyb3VwXFx1MDAzY0RldmljZUNvbmZpZ1xcdTAwM2UsXFxuICA1MzpcXHQgICAgICAgICAgICBkYXRhOiBEZXZpY2VDb25maWcsXFxuICA1NDpcXHQgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXFxuICA1NTpcXHQgICAgICAgICAgICAgICAgLy8gTmFtZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDIG51bGxfYmxrXFxuICA1NjpcXHQgICAgICAgICAgICAgICAgcG93ZXI6IDAsXFxuICA1NzpcXHQgICAgICAgICAgICAgICAgYmxvY2tzaXplOiAxLFxcbiAgNTg6XFx0ICAgICAgICAgICAgICAgIHJvdGF0aW9uYWw6IDIsXFxuICA1OTpcXHQgICAgICAgICAgICAgICAgc2l6ZTogMyxcXG4gIDYwOlxcdCAgICAgICAgICAgICAgICBpcnFtb2RlOiA0LFxcbiAgNjE6XFx0ICAgICAgICAgICAgXSxcXG4gIDYyOlxcdCAgICAgICAgfTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0ICAgICAgICBPayhjb25maWdmczo6R3JvdXA6Om5ldyhcXG4gIDY1OlxcdCAgICAgICAgICAgIG5hbWUudHJ5X2ludG8oKT8sXFxuICA2NjpcXHQgICAgICAgICAgICBpdGVtX3R5cGUsXFxuICA2NzpcXHQgICAgICAgICAgICAvLyBUT0RPOiBjYW5ub3QgY29lcmNlIG5ld19tdXRleCEoKSB0byBpbXBsIFBpbkluaXRcXHUwMDNjXywgRXJyb3JcXHUwMDNlLCBzbyBwdXQgbXV0ZXggaW5zaWRlXFxuICA2ODpcXHQgICAgICAgICAgICB0cnlfcGluX2luaXQhKCBEZXZpY2VDb25maWcge1xcbiAgNjk6XFx0ICAgICAgICAgICAgICAgIGRhdGEgXFx1MDAzYy0gbmV3X211dGV4IShEZXZpY2VDb25maWdJbm5lciB7XFxuICA3MDpcXHQgICAgICAgICAgICAgICAgICAgIHBvd2VyZWQ6IGZhbHNlLFxcbiAgNzE6XFx0ICAgICAgICAgICAgICAgICAgICBibG9ja19zaXplOiA0MDk2LFxcbiAgNzI6XFx0ICAgICAgICAgICAgICAgICAgICByb3RhdGlvbmFsOiBmYWxzZSxcXG4gIDczOlxcdCAgICAgICAgICAgICAgICAgICAgZGlzazogTm9uZSxcXG4gIDc0OlxcdCAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHlfbWliOiA0MDk2LFxcbiAgNzU6XFx0ICAgICAgICAgICAgICAgICAgICBpcnFfbW9kZTogSVJRTW9kZTo6Tm9uZSxcXG4gIDc2OlxcdCAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZS50cnlfaW50bygpPyxcXG4gIDc3OlxcdCAgICAgICAgICAgICAgICB9KSxcXG4gIDc4OlxcdCAgICAgICAgICAgIH0pLFxcbiAgNzk6XFx0ICAgICAgICApKVxcbiAgODA6XFx0ICAgIH1cXG4gIDgxOlxcdH1cXG4gIDgyOlxcdFxcbiAgODM6XFx0I1tkZXJpdmUoRGVidWcsIENsb25lLCBDb3B5KV1cXG4gIDg0OlxcdHB1YihjcmF0ZSkgZW51bSBJUlFNb2RlIHtcXG4gIDg1OlxcdCAgICBOb25lLFxcbiAgODY6XFx0ICAgIFNvZnQsXFxuICA4NzpcXHR9XFxuICA4ODpcXHRcXG4gIDg5OlxcdGltcGwgVHJ5RnJvbVxcdTAwM2N1OFxcdTAwM2UgZm9yIElSUU1vZGUge1xcbiAgOTA6XFx0ICAgIHR5cGUgRXJyb3IgPSBrZXJuZWw6OmVycm9yOjpFcnJvcjtcXG4gIDkxOlxcdFxcbiAgOTI6XFx0ICAgIGZuIHRyeV9mcm9tKHZhbHVlOiB1OCkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY1NlbGZcXHUwMDNlIHtcXG4gIDkzOlxcdCAgICAgICAgbWF0Y2ggdmFsdWUge1xcbiAgOTQ6XFx0ICAgICAgICAgICAgMCA9XFx1MDAzZSBPayhTZWxmOjpOb25lKSxcXG4gIDk1OlxcdCAgICAgICAgICAgIDEgPVxcdTAwM2UgT2soU2VsZjo6U29mdCksXFxuICA5NjpcXHQgICAgICAgICAgICBfID1cXHUwMDNlIEVycihFSU5WQUwpLFxcbiAgOTc6XFx0ICAgICAgICB9XFxuICA5ODpcXHQgICAgfVxcbiAgOTk6XFx0fVxcbiAxMDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjI3LjAyNjAxNDQwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDUwMzY4MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIHJudWxsIENvbmZpZ0ZTIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGV4YW1pbmUgdGhlIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgMTAxIHRocm91Z2ggMTYwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvbnRleHQuIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBybnVsbCBibG9jayBkcml2ZXIgY29uY2VwdCwgc28gdGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhleSdyZSBoYW5kbGluZyB0aGUgQ29uZmlnRlMgaW50ZXJmYWNlIGZvciBpdC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHZpcnR1YWwgYmxvY2sgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgZmlsZXN5c3RlbS5cblxuSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugb2JqZWN0IGNyZWF0aW9uLCBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIGRldmljZSBzaXplLCByZWFkLW9ubHkgc3RhdHVzLCBwZXJoYXBzIGV2ZW4gc29tZSBraW5kIG9mIGFjY2VzcyBjb250cm9sIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBDb25maWdGUyBpcyBrbm93biBmb3IgcHJvdmlkaW5nIGEgc3RydWN0dXJlZCB3YXkgdG8gZXhwb3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSdtIGhvcGluZyBpdCdzIHdlbGwtb3JnYW5pemVkIGFuZCBmb2xsb3dzIGEgY29uc2lzdGVudCBwYXR0ZXJuLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBDb25maWdGUyBpZGlvbXMgLSBob3cgdGhleSBkZWZpbmUgdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmVzLCB0aGUgY2FsbGJhY2tzIGZvciBoYW5kbGluZyByZWFkcyBhbmQgd3JpdGVzIHRvIHRob3NlIGF0dHJpYnV0ZXMsIGFuZCBob3cgdGhlIGRldmljZSBpdHNlbGYgaXMgYnJvdWdodCBpbnRvIGJlaW5nIG9yIGRlc3Ryb3llZC5cblxuTXkgZmlyc3QgcmVhZC10aHJvdWdoIHdpbGwgYmUgdG8gZ2V0IGEgZ2VuZXJhbCBvdmVydmlldywgbm90aW5nIGFueSBpbW1lZGlhdGUgcGF0dGVybnMgb3IgZnVuY3Rpb25zIHRoYXQgc2VlbSBpbXBvcnRhbnQuIFRoZW4gSSdsbCBmb2N1cyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gQ29uZmlnRlMgYW5kIHRoZSBibG9jayBkZXZpY2UgZHJpdmVyIGlzIHRoZSBoZWFydCBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgcGFyYW1ldGVycyBhcmUgY29uZmlndXJhYmxlIGFuZCBob3cgdGhvc2UgcGFyYW1ldGVycyBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGF0YSB2YWxpZGF0aW9uIG9yIGVycm9yIGhhbmRsaW5nIHdpbGwgbGVhcCBvdXQgYXQgbWUgcHJldHR5IHF1aWNrbHkuIEkgYW50aWNpcGF0ZSBhIGZhaXIgYml0IG9mIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBjb25zaWRlcmF0aW9ucywgc28gdGhhdCdzIHdoZXJlIEknbGwgcGF5IHBhcnRpY3VsYXIgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDcxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTozMC4wNzYzODU4MDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDE6XFx0aW1wbCBmbXQ6OkRpc3BsYXkgZm9yIElSUU1vZGUge1xcbiAxMDI6XFx0ICAgIGZuIGZtdChcXHUwMDI2c2VsZiwgZjogXFx1MDAyNm11dCBmbXQ6OkZvcm1hdHRlclxcdTAwM2MnX1xcdTAwM2UpIC1cXHUwMDNlIGZtdDo6UmVzdWx0IHtcXG4gMTAzOlxcdCAgICAgICAgbWF0Y2ggc2VsZiB7XFxuIDEwNDpcXHQgICAgICAgICAgICBTZWxmOjpOb25lID1cXHUwMDNlIGYud3JpdGVfc3RyKFxcXCIwXFxcIik/LFxcbiAxMDU6XFx0ICAgICAgICAgICAgU2VsZjo6U29mdCA9XFx1MDAzZSBmLndyaXRlX3N0cihcXFwiMVxcXCIpPyxcXG4gMTA2OlxcdCAgICAgICAgfVxcbiAxMDc6XFx0ICAgICAgICBPaygoKSlcXG4gMTA4OlxcdCAgICB9XFxuIDEwOTpcXHR9XFxuIDExMDpcXHRcXG4gMTExOlxcdCNbcGluX2RhdGFdXFxuIDExMjpcXHRwdWIoY3JhdGUpIHN0cnVjdCBEZXZpY2VDb25maWcge1xcbiAxMTM6XFx0ICAgICNbcGluXVxcbiAxMTQ6XFx0ICAgIGRhdGE6IE11dGV4XFx1MDAzY0RldmljZUNvbmZpZ0lubmVyXFx1MDAzZSxcXG4gMTE1OlxcdH1cXG4gMTE2OlxcdFxcbiAxMTc6XFx0I1twaW5fZGF0YV1cXG4gMTE4OlxcdHN0cnVjdCBEZXZpY2VDb25maWdJbm5lciB7XFxuIDExOTpcXHQgICAgcG93ZXJlZDogYm9vbCxcXG4gMTIwOlxcdCAgICBuYW1lOiBDU3RyaW5nLFxcbiAxMjE6XFx0ICAgIGJsb2NrX3NpemU6IHUzMixcXG4gMTIyOlxcdCAgICByb3RhdGlvbmFsOiBib29sLFxcbiAxMjM6XFx0ICAgIGNhcGFjaXR5X21pYjogdTY0LFxcbiAxMjQ6XFx0ICAgIGlycV9tb2RlOiBJUlFNb2RlLFxcbiAxMjU6XFx0ICAgIGRpc2s6IE9wdGlvblxcdTAwM2NHZW5EaXNrXFx1MDAzY051bGxCbGtEZXZpY2VcXHUwMDNlXFx1MDAzZSxcXG4gMTI2OlxcdH1cXG4gMTI3OlxcdFxcbiAxMjg6XFx0I1t2dGFibGVdXFxuIDEyOTpcXHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzBcXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xcbiAxMzA6XFx0ICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG4gMTMxOlxcdFxcbiAxMzI6XFx0ICAgIGZuIHNob3codGhpczogXFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2N1c2l6ZVxcdTAwM2Uge1xcbiAxMzM6XFx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcXG4gMTM0OlxcdFxcbiAxMzU6XFx0ICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWQge1xcbiAxMzY6XFx0ICAgICAgICAgICAgd3JpdGVyLndyaXRlX3N0cihcXFwiMVxcXFxuXFxcIik/O1xcbiAxMzc6XFx0ICAgICAgICB9IGVsc2Uge1xcbiAxMzg6XFx0ICAgICAgICAgICAgd3JpdGVyLndyaXRlX3N0cihcXFwiMFxcXFxuXFxcIik/O1xcbiAxMzk6XFx0ICAgICAgICB9XFxuIDE0MDpcXHRcXG4gMTQxOlxcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcXG4gMTQyOlxcdCAgICB9XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdCAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4gMTQ1OlxcdCAgICAgICAgbGV0IHBvd2VyX29wID0ga3N0cnRvYm9vbF9ieXRlcyhwYWdlKT87XFxuIDE0NjpcXHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xcbiAxNDc6XFx0XFxuIDE0ODpcXHQgICAgICAgIGlmICFndWFyZC5wb3dlcmVkIFxcdTAwMjZcXHUwMDI2IHBvd2VyX29wIHtcXG4gMTQ5OlxcdCAgICAgICAgICAgIGd1YXJkLmRpc2sgPSBTb21lKE51bGxCbGtEZXZpY2U6Om5ldyhcXG4gMTUwOlxcdCAgICAgICAgICAgICAgICBcXHUwMDI2Z3VhcmQubmFtZSxcXG4gMTUxOlxcdCAgICAgICAgICAgICAgICBndWFyZC5ibG9ja19zaXplLFxcbiAxNTI6XFx0ICAgICAgICAgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwsXFxuIDE1MzpcXHQgICAgICAgICAgICAgICAgZ3VhcmQuY2FwYWNpdHlfbWliLFxcbiAxNTQ6XFx0ICAgICAgICAgICAgICAgIGd1YXJkLmlycV9tb2RlLFxcbiAxNTU6XFx0ICAgICAgICAgICAgKT8pO1xcbiAxNTY6XFx0ICAgICAgICAgICAgZ3VhcmQucG93ZXJlZCA9IHRydWU7XFxuIDE1NzpcXHQgICAgICAgIH0gZWxzZSBpZiBndWFyZC5wb3dlcmVkIFxcdTAwMjZcXHUwMDI2ICFwb3dlcl9vcCB7XFxuIDE1ODpcXHQgICAgICAgICAgICBkcm9wKGd1YXJkLmRpc2sudGFrZSgpKTtcXG4gMTU5OlxcdCAgICAgICAgICAgIGd1YXJkLnBvd2VyZWQgPSBmYWxzZTtcXG4gMTYwOlxcdCAgICAgICAgfVxcbiAxNjE6XFx0XFxuIDE2MjpcXHQgICAgICAgIE9rKCgpKVxcbiAxNjM6XFx0ICAgIH1cXG4gMTY0OlxcdH1cXG4gMTY1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTozMC4wNzY0NjMyMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3NDQxNTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHJudWxsLnJzYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGNpcmNsaW5nIGJhY2ssIGFuZCBteSBpbnRlcm5hbCBjaGVja2xpc3QgaGFzIGZsYWdnZWQgdGhlIGBybnVsbC5yc2AgbW9kdWxlLiBJdCdzIGNydWNpYWwsIG9idmlvdXNseS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBlZGdlIGNhc2VzIGl0IGhhbmRsZXMsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGNvZGUgdG8gcmVmcmVzaCBteSBtZW1vcnksIGNvbmZpcm0gdGhhdCB3ZSdyZSBwcm9wZXJseSBhZGRyZXNzaW5nIHRob3NlIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEknbSBlc3BlY2lhbGx5IGZvY3VzZWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdHMgYmVoYXZpb3IgbWlnaHQgaW5mbHVlbmNlIGRlcGVuZGVudCBzdWJzeXN0ZW1zLiBBcmUgdGhlcmUgYW55IHN1YnRsZSB0aHJlYWRpbmcgaXNzdWVzIEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gdGhlIGluaXRpYWwgcmV2aWV3PyBDb3VsZCBhIHJhY2UgY29uZGl0aW9uIGJlIGx1cmtpbmcgaW4gdGhlcmU/IEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIG5vdCBpbmFkdmVydGVudGx5IGludHJvZHVjaW5nIHZ1bG5lcmFiaWxpdGllcyDigJMgaXQncyBhIGNyaXRpY2FsIGFyZWEsIGFuZCBhIHNlY3VyaXR5IGZsYXcgdGhlcmUgY291bGQgYmUgY2F0YXN0cm9waGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzk1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTozMi41NTA4ODA4MzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5yc1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdC8vISBUaGlzIGlzIGEgUnVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQyBudWxsIGJsb2NrIGRyaXZlci5cXG4gICA0OlxcdFxcbiAgIDU6XFx0bW9kIGNvbmZpZ2ZzO1xcbiAgIDY6XFx0XFxuICAgNzpcXHR1c2UgY29uZmlnZnM6OklSUU1vZGU7XFxuICAgODpcXHR1c2Uga2VybmVsOjp7XFxuICAgOTpcXHQgICAgYmxvY2s6OntcXG4gIDEwOlxcdCAgICAgICAgc2VsZixcXG4gIDExOlxcdCAgICAgICAgbXE6OntcXG4gIDEyOlxcdCAgICAgICAgICAgIHNlbGYsXFxuICAxMzpcXHQgICAgICAgICAgICBnZW5fZGlzazo6e3NlbGYsIEdlbkRpc2t9LFxcbiAgMTQ6XFx0ICAgICAgICAgICAgT3BlcmF0aW9ucywgVGFnU2V0LFxcbiAgMTU6XFx0ICAgICAgICB9LFxcbiAgMTY6XFx0ICAgIH0sXFxuICAxNzpcXHQgICAgcHJlbHVkZTo6KixcXG4gIDE4OlxcdCAgICBzeW5jOjp7YXJlZjo6QVJlZiwgQXJjfSxcXG4gIDE5OlxcdH07XFxuICAyMDpcXHRcXG4gIDIxOlxcdG1vZHVsZSEge1xcbiAgMjI6XFx0ICAgIHR5cGU6IE51bGxCbGtNb2R1bGUsXFxuICAyMzpcXHQgICAgbmFtZTogXFxcInJudWxsX21vZFxcXCIsXFxuICAyNDpcXHQgICAgYXV0aG9yczogW1xcXCJBbmRyZWFzIEhpbmRib3JnXFxcIl0sXFxuICAyNTpcXHQgICAgZGVzY3JpcHRpb246IFxcXCJSdXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBDIG51bGwgYmxvY2sgZHJpdmVyXFxcIixcXG4gIDI2OlxcdCAgICBsaWNlbnNlOiBcXFwiR1BMIHYyXFxcIixcXG4gIDI3OlxcdH1cXG4gIDI4OlxcdFxcbiAgMjk6XFx0I1twaW5fZGF0YV1cXG4gIDMwOlxcdHN0cnVjdCBOdWxsQmxrTW9kdWxlIHtcXG4gIDMxOlxcdCAgICAjW3Bpbl1cXG4gIDMyOlxcdCAgICBjb25maWdmc19zdWJzeXN0ZW06IGtlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbVxcdTAwM2Njb25maWdmczo6Q29uZmlnXFx1MDAzZSxcXG4gIDMzOlxcdH1cXG4gIDM0OlxcdFxcbiAgMzU6XFx0aW1wbCBrZXJuZWw6OkluUGxhY2VNb2R1bGUgZm9yIE51bGxCbGtNb2R1bGUge1xcbiAgMzY6XFx0ICAgIGZuIGluaXQoX21vZHVsZTogXFx1MDAyNidzdGF0aWMgVGhpc01vZHVsZSkgLVxcdTAwM2UgaW1wbCBQaW5Jbml0XFx1MDAzY1NlbGYsIEVycm9yXFx1MDAzZSB7XFxuICAzNzpcXHQgICAgICAgIHByX2luZm8hKFxcXCJSdXN0IG51bGxfYmxrIGxvYWRlZFxcXFxuXFxcIik7XFxuICAzODpcXHRcXG4gIDM5OlxcdCAgICAgICAgdHJ5X3Bpbl9pbml0IShTZWxmIHtcXG4gIDQwOlxcdCAgICAgICAgICAgIGNvbmZpZ2ZzX3N1YnN5c3RlbSBcXHUwMDNjLSBjb25maWdmczo6c3Vic3lzdGVtKCksXFxuICA0MTpcXHQgICAgICAgIH0pXFxuICA0MjpcXHQgICAgfVxcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgTnVsbEJsa0RldmljZTtcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0aW1wbCBOdWxsQmxrRGV2aWNlIHtcXG4gIDQ4OlxcdCAgICBmbiBuZXcoXFxuICA0OTpcXHQgICAgICAgIG5hbWU6IFxcdTAwMjZDU3RyLFxcbiAgNTA6XFx0ICAgICAgICBibG9ja19zaXplOiB1MzIsXFxuICA1MTpcXHQgICAgICAgIHJvdGF0aW9uYWw6IGJvb2wsXFxuICA1MjpcXHQgICAgICAgIGNhcGFjaXR5X21pYjogdTY0LFxcbiAgNTM6XFx0ICAgICAgICBpcnFfbW9kZTogSVJRTW9kZSxcXG4gIDU0OlxcdCAgICApIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2NHZW5EaXNrXFx1MDAzY1NlbGZcXHUwMDNlXFx1MDAzZSB7XFxuICA1NTpcXHQgICAgICAgIGxldCB0YWdzZXQgPSBBcmM6OnBpbl9pbml0KFRhZ1NldDo6bmV3KDEsIDI1NiwgMSksIEdGUF9LRVJORUwpPztcXG4gIDU2OlxcdFxcbiAgNTc6XFx0ICAgICAgICBsZXQgcXVldWVfZGF0YSA9IEJveDo6bmV3KFF1ZXVlRGF0YSB7IGlycV9tb2RlIH0sIEdGUF9LRVJORUwpPztcXG4gIDU4OlxcdFxcbiAgNTk6XFx0ICAgICAgICBnZW5fZGlzazo6R2VuRGlza0J1aWxkZXI6Om5ldygpXFxuICA2MDpcXHQgICAgICAgICAgICAuY2FwYWNpdHlfc2VjdG9ycyhjYXBhY2l0eV9taWIgXFx1MDAzY1xcdTAwM2MgKDIwIC0gYmxvY2s6OlNFQ1RPUl9TSElGVCkpXFxuICA2MTpcXHQgICAgICAgICAgICAubG9naWNhbF9ibG9ja19zaXplKGJsb2NrX3NpemUpP1xcbiAgNjI6XFx0ICAgICAgICAgICAgLnBoeXNpY2FsX2Jsb2NrX3NpemUoYmxvY2tfc2l6ZSk/XFxuICA2MzpcXHQgICAgICAgICAgICAucm90YXRpb25hbChyb3RhdGlvbmFsKVxcbiAgNjQ6XFx0ICAgICAgICAgICAgLmJ1aWxkKGZtdCEoXFxcInt9XFxcIiwgbmFtZS50b19zdHIoKT8pLCB0YWdzZXQsIHF1ZXVlX2RhdGEpXFxuICA2NTpcXHQgICAgfVxcbiAgNjY6XFx0fVxcbiAgNjc6XFx0XFxuICA2ODpcXHRzdHJ1Y3QgUXVldWVEYXRhIHtcXG4gIDY5OlxcdCAgICBpcnFfbW9kZTogSVJRTW9kZSxcXG4gIDcwOlxcdH1cXG4gIDcxOlxcdFxcbiAgNzI6XFx0I1t2dGFibGVdXFxuICA3MzpcXHRpbXBsIE9wZXJhdGlvbnMgZm9yIE51bGxCbGtEZXZpY2Uge1xcbiAgNzQ6XFx0ICAgIHR5cGUgUXVldWVEYXRhID0gS0JveFxcdTAwM2NRdWV1ZURhdGFcXHUwMDNlO1xcbiAgNzU6XFx0XFxuICA3NjpcXHQgICAgI1tpbmxpbmUoYWx3YXlzKV1cXG4gIDc3OlxcdCAgICBmbiBxdWV1ZV9ycShxdWV1ZV9kYXRhOiBcXHUwMDI2UXVldWVEYXRhLCBycTogQVJlZlxcdTAwM2NtcTo6UmVxdWVzdFxcdTAwM2NTZWxmXFx1MDAzZVxcdTAwM2UsIF9pc19sYXN0OiBib29sKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAgNzg6XFx0ICAgICAgICBtYXRjaCBxdWV1ZV9kYXRhLmlycV9tb2RlIHtcXG4gIDc5OlxcdCAgICAgICAgICAgIElSUU1vZGU6Ok5vbmUgPVxcdTAwM2UgbXE6OlJlcXVlc3Q6OmVuZF9vayhycSlcXG4gIDgwOlxcdCAgICAgICAgICAgICAgICAubWFwX2Vycih8X2V8IGtlcm5lbDo6ZXJyb3I6OmNvZGU6OkVJTylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MzIuNTUwOTY5NDk3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NjY1NTcxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBybnVsbCBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gKnJudWxsKiwgdGhlIFJ1c3QtYmFzZWQgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyLCB3aGljaCBJIGtub3cgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19CTEtfREVWX1JVU1RfTlVMTGAsIHVzZXMgY29uZmlnZnMgZm9yIGNvbmZpZ3VyYXRpb24uIFRoZSBmaXJzdCBxdWVzdGlvbiBpcywgd2lsbCB0aGlzIGV2ZW4gYmUgcmVsZXZhbnQgaW4gdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBJJ20gd29ya2luZyB3aXRoIGxpa2UgUUVNVSBvciBHQ0U/IFllcywgaXTigJlzIGEgc29mdHdhcmUtYmFzZWQgdmlydHVhbCBkcml2ZXIsIGp1c3QgbGlrZSBgbnVsbF9ibGtgLCBhbmQgdXNlcyBgL3N5cy9rZXJuZWwvY29uZmlnL3JudWxsLy4uLmAgd2hpY2ggY29uZmlybXMgaXQncyBjb25maWdmcy1kcml2ZW4uIEdvb2QsIGdvb2QuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgYWN0dWFsbHkgZXhlY3V0YWJsZSBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5IGFyZTsgdGhlIGNvcmUgb2YgdGhlIHVwZGF0ZSByZXZvbHZlcyBhcm91bmQgUnVzdCBtZXRob2RzIHRoYXQgaW1wbGVtZW50IHRoZSBgc3RvcmVgIGZ1bmN0aW9uIGZvciB0aGUgcmVsZXZhbnQgY29uZmlnZnMgYXR0cmlidXRlcyB3aXRoaW4gYERldmljZUNvbmZpZ2Ag4oCTIGJsb2Nrc2l6ZSwgcm90YXRpb25hbCBzZXR0aW5ncywgdGhlIHNpemUsIGFuZCBpcnFtb2RlLlxuXG5UaGUgcHJvYmxlbSB0aGV5J3ZlIGFkZHJlc3NlZCBpcyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24uIFRoZSBwcmV2aW91cyBjb2RlIGNoZWNrZWQgdGhlIGB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWRgIHN0YXRlLCByZWxlYXNlZCB0aGUgbG9jaywgYW5kICp0aGVuKiByZWFjcXVpcmVkIGl0IHRvIHVwZGF0ZSB2YXJpb3VzIGF0dHJpYnV0ZXMuIENsZWFybHksIHRoYXQgb3BlbmVkIGEgcmFjZSB3aW5kb3cuIFRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBjb3JyZWN0OiB0aGV5J3JlIG5vdyBob2xkaW5nIHRoZSBgZ3VhcmRgIHRocm91Z2hvdXQgdGhlIGVudGlyZSBgc3RvcmVgIG9wZXJhdGlvbi4gVGhhdCdzIGNsZWFuIGFuZCBzYWZlLlxuXG5Ob3csIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBrbm93IGBCTEtfREVWX1JVU1RfTlVMTGAgcmVxdWlyZXMgYFJVU1RgIGFuZCBgQ09ORklHRlNfRlNgLiBUaW1lIHRvIHB1bGwgdXAgdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgdG8gYmUgY2VydGFpbiBhbmQgY2hlY2sgZm9yIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyBvciBjb25mbGljdHMuIEEgcXVpY2sgcnVuIG9mIGBncmVwcGVyYCBvbiB0aGUga2VybmVsIHNvdXJjZSwgc2VhcmNoaW5nIGZvciBgY29uZmlnIEJMS19ERVZfUlVTVF9OVUxMYCwgYFJVU1RgLCBhbmQgYENPTkZJR0ZTX0ZTYCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDg3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MzcuNDE3NTMxMjQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEwNzk4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1JVU1RfTlVMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWctNC1cXG5kcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWc6NTpjb25maWcgQkxLX0RFVl9SVVNUX05VTExcXG5kcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiUnVzdCBudWxsIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MzkuMzI4MzM1NTMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MDEzMzI3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFJ1c3QgU3ltYm9sIEhhbmRsaW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IFJ1c3Qgc3ltYm9scyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhpcyBgcm51bGxgIGRyaXZlci4gTXkgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXM6IGNoZWNraW5nIGBkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWdgIHNob3dzIGl0ICpkZXBlbmRzIG9uKiBgUlVTVGAgYW5kIGBDT05GSUdGU19GU2AuIFRoYXQgdGVsbHMgbWUgdGhlIGNvbnRleHQgb2Ygd2hlcmUgdG8gbG9vayBhbmQgd2hhdCBmcmFtZXdvcmtzIGFyZSBlbXBsb3llZC5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyOiBob3cgYXJlIHRoZXNlIFJ1c3Qgc3ltYm9scyBhY3R1YWxseSAqcmVwcmVzZW50ZWQqPyBXaGF0J3MgdGhlIG1hbmdsaW5nIG9yIGNvbnZlbnRpb24gYXQgcGxheT8gV2hhdCBmb2N1cyBzeW1ib2xzIGFyZSBhcHByb3ByaWF0ZSBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRlYnVnLiBJIG5lZWQgdG8ga25vdyB0aGUgZW50cnkgcG9pbnRzLiBBcmUgdGhlIGZvY3VzIHN5bWJvbHMgZXZlbiBhcHBsaWNhYmxlIHRvIHRoZSBSdXN0IHN5bWJvbHM/IEkgc2hvdWxkIHNlYXJjaCB0aGUga2VybmVsIGZvciBvdGhlciBSdXN0IGRyaXZlcnMgb3Igc3ltYm9scywgYW55dGhpbmcgdG8gcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhpcy4gQXJlIHRoZXJlIGFueSBleGFtcGxlcyBpbiBgcm51bGxgIGl0c2VsZiB0aGF0IG1pZ2h0IHByb3ZpZGUgc29tZSBhbnN3ZXJzP1xuXG5UaGlua2luZyBtb3JlIGFib3V0IGl0LCBJJ20gcXVlc3Rpb25pbmcgd2hldGhlciBhICpGb2N1c1N5bWJvbCogaXMgdGhlIGNvcnJlY3QgdG9vbC4gQ2FuIHRoZXkgYmUgUnVzdCBzeW1ib2xzLCBvciBhcmUgdGhleSBtb3JlIGdlYXJlZCB0b3dhcmRzIEMgZW50cnkgcG9pbnRzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBMb29raW5nIGF0IHRoZSBmcmFtZXdvcmssIEknbSBnb2luZyB0byBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgYGNvbmZpZ2ZzX2F0dHJzIWAgbWFjcm8uIEkgc2VlIHRoYXQgaXQgZ2VuZXJhdGVzIHZ0YWJsZXMgYW5kIGZ1bmN0aW9ucy4gVGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgbGVhZC4gTGV0J3MgZGlnIGludG8gaG93IHRoYXQgbWFjcm8gd29ya3MgaW4gYHJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgQyBhbmQgUnVzdCBzaWRlcyBpbnRlcmZhY2UgaGVyZSBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5bWJvbCByZXNvbHV0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODE5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjQyLjIyOTY3MDczNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1MjIwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjcm9fcnVsZXMhIGNvbmZpZ2ZzX2F0dHJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInJ1c3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzPTc5MD0gICAgZm4gYXNfcHRyKFxcdTAwMjZzZWxmKSAtXFx1MDAzZSAqY29uc3QgYmluZGluZ3M6OmNvbmZpZ19pdGVtX3R5cGUge1xcbi0tXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtODg2LSNbbWFjcm9fZXhwb3J0XVxcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzOjg4NzptYWNyb19ydWxlcyEgY29uZmlnZnNfYXR0cnMge1xcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTg4OC0gICAgKFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTo0Mi4yODMxOTgyNzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0MDc3ODk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBDb25maWdGUyBBdHRyaWJ1dGUgR2VuZXJhdGlvbiBpbiBSdXN0KipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGUgcGxhY2UgdG8gbG9vayBmb3IgaG93IENvbmZpZ0ZTIGF0dHJpYnV0ZXMgYXJlIGdlbmVyYXRlZCwgb3IgYXQgbGVhc3QgaG93IHRoZXkncmUgaGFuZGxlZCwgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGBydXN0L2tlcm5lbC9jb25maWdmcy5yc2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgODg3LiBUaGF0IGxpbmUgbnVtYmVyIGZlZWxzIGxpa2UgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQgYmFzZWQgb24gc2ltaWxhciBjb2RlIEkndmUgd29ya2VkIG9uIGluIHRoZSBwYXN0LiBJdCdzIHVzdWFsbHkgYXJvdW5kIHRoYXQgYXJlYSB3aGVyZSB0aGUgYXR0cmlidXRlIGNyZWF0aW9uIG9yIG1hbmlwdWxhdGlvbiBsb2dpYyB0ZW5kcyB0byByZXNpZGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgZGlyZWN0IGF0dHJpYnV0ZSBnZW5lcmF0aW9uLCBwZXJoYXBzIHdpdGhpbiBhIGBzdHJ1Y3RgIGRlZmluaXRpb24gb3IgcmVsYXRlZCBtZXRob2RzLCBvciBzb21lIGtpbmQgb2YgaW5kaXJlY3QgY2FsbCB0aGF0IGhhbmRsZXMgYXR0cmlidXRlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgcmV2ZWFscy4gRnJvbSB0aGF0IHBvaW50IEkgY2FuIGV4dHJhcG9sYXRlIG91dHdhcmRzIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIGhvdyBDb25maWdGUyBhdHRyaWJ1dGVzIGFyZSBpbml0aWFsaXplZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIFJ1c3Qga2VybmVsIGNvZGUgYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTo0NC41MjM5NzkzNTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg4MDpcXHQvLy8gICAgICAgICApO1xcbiA4ODE6XFx0Ly8vXFxuIDg4MjpcXHQvLy8gICAgIFxcdTAwMjZDT05GSUdVUkFUSU9OX1RQRVxcbiA4ODM6XFx0Ly8vIH1cXG4gODg0OlxcdC8vLyBgYGBcXG4gODg1OlxcdCNbYWxsb3coY2xpcHB5OjpjcmF0ZV9pbl9tYWNyb19kZWYpXVxcbiA4ODY6XFx0I1ttYWNyb19leHBvcnRdXFxuIDg4NzpcXHRtYWNyb19ydWxlcyEgY29uZmlnZnNfYXR0cnMge1xcbiA4ODg6XFx0ICAgIChcXG4gODg5OlxcdCAgICAgICAgY29udGFpbmVyOiAkY29udGFpbmVyOnR5LFxcbiA4OTA6XFx0ICAgICAgICBkYXRhOiAkZGF0YTp0eSxcXG4gODkxOlxcdCAgICAgICAgYXR0cmlidXRlczogW1xcbiA4OTI6XFx0ICAgICAgICAgICAgJCgkbmFtZTppZGVudDogJGF0dHI6bGl0ZXJhbCksKiAkKCwpP1xcbiA4OTM6XFx0ICAgICAgICBdICQoLCk/XFxuIDg5NDpcXHQgICAgKSA9XFx1MDAzZSB7XFxuIDg5NTpcXHQgICAgICAgICRjcmF0ZTo6Y29uZmlnZnNfYXR0cnMhKFxcbiA4OTY6XFx0ICAgICAgICAgICAgY291bnQ6XFxuIDg5NzpcXHQgICAgICAgICAgICBAY29udGFpbmVyKCRjb250YWluZXIpLFxcbiA4OTg6XFx0ICAgICAgICAgICAgQGRhdGEoJGRhdGEpLFxcbiA4OTk6XFx0ICAgICAgICAgICAgQGNoaWxkKCksXFxuIDkwMDpcXHQgICAgICAgICAgICBAbm9fY2hpbGQoeCksXFxuIDkwMTpcXHQgICAgICAgICAgICBAYXR0cnMoJCgkbmFtZSAkYXR0cikqKSxcXG4gOTAyOlxcdCAgICAgICAgICAgIEBlYXQoJCgkbmFtZSAkYXR0ciwpKiksXFxuIDkwMzpcXHQgICAgICAgICAgICBAYXNzaWduKCksXFxuIDkwNDpcXHQgICAgICAgICAgICBAY250KDB1c2l6ZSksXFxuIDkwNTpcXHQgICAgICAgIClcXG4gOTA2OlxcdCAgICB9O1xcbiA5MDc6XFx0ICAgIChcXG4gOTA4OlxcdCAgICAgICAgY29udGFpbmVyOiAkY29udGFpbmVyOnR5LFxcbiA5MDk6XFx0ICAgICAgICBkYXRhOiAkZGF0YTp0eSxcXG4gOTEwOlxcdCAgICAgICAgY2hpbGQ6ICRjaGlsZDp0eSxcXG4gOTExOlxcdCAgICAgICAgYXR0cmlidXRlczogW1xcbiA5MTI6XFx0ICAgICAgICAgICAgJCgkbmFtZTppZGVudDogJGF0dHI6bGl0ZXJhbCksKiAkKCwpP1xcbiA5MTM6XFx0ICAgICAgICBdICQoLCk/XFxuIDkxNDpcXHQgICAgKSA9XFx1MDAzZSB7XFxuIDkxNTpcXHQgICAgICAgICRjcmF0ZTo6Y29uZmlnZnNfYXR0cnMhKFxcbiA5MTY6XFx0ICAgICAgICAgICAgY291bnQ6XFxuIDkxNzpcXHQgICAgICAgICAgICBAY29udGFpbmVyKCRjb250YWluZXIpLFxcbiA5MTg6XFx0ICAgICAgICAgICAgQGRhdGEoJGRhdGEpLFxcbiA5MTk6XFx0ICAgICAgICAgICAgQGNoaWxkKCRjaGlsZCksXFxuIDkyMDpcXHQgICAgICAgICAgICBAbm9fY2hpbGQoKSxcXG4gOTIxOlxcdCAgICAgICAgICAgIEBhdHRycygkKCRuYW1lICRhdHRyKSopLFxcbiA5MjI6XFx0ICAgICAgICAgICAgQGVhdCgkKCRuYW1lICRhdHRyLCkqKSxcXG4gOTIzOlxcdCAgICAgICAgICAgIEBhc3NpZ24oKSxcXG4gOTI0OlxcdCAgICAgICAgICAgIEBjbnQoMHVzaXplKSxcXG4gOTI1OlxcdCAgICAgICAgKVxcbiA5MjY6XFx0ICAgIH07XFxuIDkyNzpcXHQgICAgKGNvdW50OlxcbiA5Mjg6XFx0ICAgICBAY29udGFpbmVyKCRjb250YWluZXI6dHkpLFxcbiA5Mjk6XFx0ICAgICBAZGF0YSgkZGF0YTp0eSksXFxuIDkzMDpcXHQgICAgIEBjaGlsZCgkKCRjaGlsZDp0eSk/KSxcXG4gOTMxOlxcdCAgICAgQG5vX2NoaWxkKCQoJG5vX2NoaWxkOmlkZW50KT8pLFxcbiA5MzI6XFx0ICAgICBAYXR0cnMoJCgkYW5hbWU6aWRlbnQgJGFhdHRyOmxpdGVyYWwpKiksXFxuIDkzMzpcXHQgICAgIEBlYXQoJG5hbWU6aWRlbnQgJGF0dHI6bGl0ZXJhbCwgJCgkcm5hbWU6aWRlbnQgJHJhdHRyOmxpdGVyYWwsKSopLFxcbiA5MzQ6XFx0ICAgICBAYXNzaWduKCQoJGFzc2lnbjpibG9jaykqKSxcXG4gOTM1OlxcdCAgICAgQGNudCgkY250OmV4cHIpLFxcbiA5MzY6XFx0ICAgICkgPVxcdTAwM2Uge1xcbiA5Mzc6XFx0ICAgICAgICAkY3JhdGU6OmNvbmZpZ2ZzX2F0dHJzIShcXG4gOTM4OlxcdCAgICAgICAgICAgIGNvdW50OlxcbiA5Mzk6XFx0ICAgICAgICAgICAgQGNvbnRhaW5lcigkY29udGFpbmVyKSxcXG4gOTQwOlxcdCAgICAgICAgICAgIEBkYXRhKCRkYXRhKSxcXG4gOTQxOlxcdCAgICAgICAgICAgIEBjaGlsZCgkKCRjaGlsZCk/KSxcXG4gOTQyOlxcdCAgICAgICAgICAgIEBub19jaGlsZCgkKCRub19jaGlsZCk/KSxcXG4gOTQzOlxcdCAgICAgICAgICAgIEBhdHRycygkKCRhbmFtZSAkYWF0dHIpKiksXFxuIDk0NDpcXHQgICAgICAgICAgICBAZWF0KCQoJHJuYW1lICRyYXR0ciwpKiksXFxuIDk0NTpcXHQgICAgICAgICAgICBAYXNzaWduKCQoJGFzc2lnbikqIHtcXG4gOTQ2OlxcdCAgICAgICAgICAgICAgICBjb25zdCBOOiB1c2l6ZSA9ICRjbnQ7XFxuIDk0NzpcXHQgICAgICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBtYWNybyB0ZXh0IGV4cGFuZHMgdG8gYSBjYWxsIHRvIGBBdHRyaWJ1dGU6OmFkZGAuXFxuIDk0ODpcXHRcXG4gOTQ5OlxcdCAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IEJ5IGRlc2lnbiBvZiB0aGlzIG1hY3JvLCB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgd2VcXG4gOTUwOlxcdCAgICAgICAgICAgICAgICAvLyBpbnZva2UgdGhlIGBhZGRgIG1ldGhvZCBvbiBiZWxvdywgaXMgbm90IHZpc2libGUgb3V0c2lkZSBvZlxcbiA5NTE6XFx0ICAgICAgICAgICAgICAgIC8vIHRoZSBtYWNybyBleHBhbnNpb24uIFRoZSBtYWNybyBkb2VzIG5vdCBvcGVyYXRlIGNvbmN1cnJlbnRseVxcbiA5NTI6XFx0ICAgICAgICAgICAgICAgIC8vIG9uIHRoaXMgdmFyaWFibGUsIGFuZCB0aHVzIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGVcXG4gOTUzOlxcdCAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZS5cXG4gOTU0OlxcdCAgICAgICAgICAgICAgICB1bnNhZmUge1xcbiA5NTU6XFx0ICAgICAgICAgICAgICAgICAgICAkY3JhdGU6Om1hY3Jvczo6cGFzdGUhKFxcbiA5NTY6XFx0ICAgICAgICAgICAgICAgICAgICAgICAgW1xcdTAwM2MgJGRhdGE6dXBwZXIgX0FUVFJTIFxcdTAwM2VdXFxuIDk1NzpcXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZDo6XFx1MDAzY04sICRhdHRyLCBfXFx1MDAzZShcXHUwMDI2W1xcdTAwM2MgJGRhdGE6dXBwZXIgXyAkbmFtZTp1cHBlciBfQVRUUiBcXHUwMDNlXSlcXG4gOTU4OlxcdCAgICAgICAgICAgICAgICAgICAgKVxcbiA5NTk6XFx0ICAgICAgICAgICAgICAgIH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjQ0LjUyNDE0MDQ1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTQ0MjgyNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeW1ib2wgUmVzb2x1dGlvbiBpbiBgY29uZmlnZnMucnNgIGFuZCBgcm51bGwucnNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGNvbmZpZ2ZzLnJzYCBhbmQgbm90aWNpbmcgdGhlIGltcGxlbWVudGF0aW9uczogYGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlIGZvciBEZXZpY2VDb25maWdgLCBhbmQgc28gb24sIHVwIHRvIGA0YC4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmZhY2VzIGFyZSByZXNvbHZlZCwgYW5kIGhvdyB3ZSBtaWdodCBkZWJ1ZyB0aGVtIGlmIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHRyYWl0cyBtYXAgdG8gdGhlIHVuZGVybHlpbmcga2VybmVsIHN5bWJvbHMuXG5cbkknbSBjaGVja2luZyBgY29uZmlnZnMucnNgIGFuZCBgcm51bGwucnNgIGZvciByZWxldmFudCBtZXRob2RzIG9yIGZ1bmN0aW9uczogYERldmljZUNvbmZpZzo6c3RvcmVgIHNlZW1zIHJlbGV2YW50LCBhcyBkbyBwb3RlbnRpYWxseSBgcm51bGxfbW9kYCBmdW5jdGlvbnMuIFJ1c3QncyBuYW1lIG1hbmdsaW5nIGNhbiBtYWtlIHRoaXMgYSBiaXQgdHJpY2t5LCBidXQgSSBrbm93IGl0J2xsIHByb2R1Y2Ugc3ltYm9scyBsaWtlIGBfUk52WC4uLmAsIG9yIHRoZSBmdWxseSBkZW1hbmdsZWQgZm9ybSwgZS5nLiwgYFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMVx1MDAzZVx1MDAzZTo6c3RvcmVgLiBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgYHJudWxsX21vZDo6KmAgcGF0dGVybnMgb3IgYW55IEMgc3ltYm9scyB0aGF0IG1heSBiZSBpbnZvbHZlZC5cblxuR2l2ZW4gbXkgcHJldmlvdXMgZXhwZXJpZW5jZSBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9ucyBvciBleGFtcGxlIHBhdGNoZXMgd2hpY2ggbWlnaHQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gaG93IHN5bWJvbHMgYXJlIHN0cnVjdHVyZWQgaW4gRm9jdXNTeW1ib2xzLiBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBwcm9qZWN0J3MgdHJlZSBvciBnaXQgbG9nIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGV4YW1wbGVzIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBzeW1ib2wgbmFtaW5nIG9yIHJlc29sdXRpb24gd2l0aGluIHRoaXMgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODg1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6NDguMDY4NDI2ODA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3NjY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBdHRyaWJ1dGVPcGVyYXRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svcm51bGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy01LSAgICBibG9jazo6bXE6Omdlbl9kaXNrOjp7R2VuRGlzaywgR2VuRGlza0J1aWxkZXJ9LFxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6NjogICAgY29uZmlnZnM6OntzZWxmLCBBdHRyaWJ1dGVPcGVyYXRpb25zfSxcXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTctICAgIGNvbmZpZ2ZzX2F0dHJzLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0zMD1wdWIoY3JhdGUpIHN0cnVjdCBDb25maWcge31cXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMzItI1t2dGFibGVdXFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yczozMzppbXBsIEF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMFxcdTAwM2UgZm9yIENvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0zNC0gICAgdHlwZSBEYXRhID0gQ29uZmlnO1xcbi0tXFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0xMTg9c3RydWN0IERldmljZUNvbmZpZ0lubmVyIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMTI4LSNbdnRhYmxlXVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MTI5OmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMFxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0xMzAtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MTQ0PSAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMTY2LSNbdnRhYmxlXVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MTY3OmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMVxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0xNjgtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MTc2PSAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMTkxLSNbdnRhYmxlXVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MTkyOmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMlxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0xOTMtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MjA3PSAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMjE5LSNbdnRhYmxlXVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MjIwOmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjM1xcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0yMjEtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MjI5PSAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMjQzLSNbdnRhYmxlXVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MjQ0OmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjNFxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0yNDUtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6NDguMTE1MDA5MjY1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMzY4MTc0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERldmljZSBDb25maWd1cmF0aW9uIFN0b3JhZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIGV4YWN0bHkgd2hpY2ggZWxlbWVudHMgYXJlIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGlzIGBEZXZpY2VDb25maWdgIHN0cnVjdHVyZS4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHJldm9sdmVzIGFyb3VuZCB0aGUgYHN0b3JlYCBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2luZyAqZXhhY3RseSouIFNvLCBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZSBgRGV2aWNlQ29uZmlnOjpzdG9yZWAgZnVuY3Rpb24gYmVoYXZlcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgaW1wYWN0IG9uIGF0dHJpYnV0ZXMgbGlrZSBgYmxvY2tzaXplYCwgYHJvdGF0aW9uYWxgLCBgc2l6ZWAsIGFuZCBgaXJxbW9kZWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGtleSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgd2UncmUgZGVhbGluZyB3aXRoLlxuXG5OZXh0LCBJIG5lZWQgdG8gc2VlIGhvdyBgY29uZmlnZnNgIGludGVyYWN0cyB3aXRoIHRoZXNlIHN0b3JhZ2UgbWVjaGFuaXNtcy4gVGhlIHJlYWwgbWFnaWMgaGFwcGVucyB3aXRoaW4gYHJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzYCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBkaWcgaW4gbmV4dC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscywgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aG9zZSBjYWxscywgYW5kIHZlcmlmeSBpZiB0aGVzZSBgc3RvcmVgIGltcGxlbWVudGF0aW9ucyBhcmUgZG9pbmcgZXhhY3RseSB3aGF0IHRoZXkgc2hvdWxkLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGNhbGxzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRoZW1zZWx2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTg2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6NTMuMTUxODI5MjU2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBdHRyaWJ1dGVPcGVyYXRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInJ1c3Qva2VybmVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTc0LS8vISAjW3Z0YWJsZV1cXG5ydXN0L2tlcm5lbC9jb25maWdmcy5yczo3NTovLyEgaW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MwXFx1MDAzZSBmb3IgQ29uZmlndXJhdGlvbiB7XFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNzYtLy8hICAgICB0eXBlIERhdGEgPSBDb25maWd1cmF0aW9uO1xcbi0tXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtODYtLy8hICNbdnRhYmxlXVxcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzOjg3Oi8vISBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzFcXHUwMDNlIGZvciBDb25maWd1cmF0aW9uIHtcXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy04OC0vLyEgICAgIHR5cGUgRGF0YSA9IENvbmZpZ3VyYXRpb247XFxuLS1cXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycz01MzQ9aW1wbFxcdTAwM2Njb25zdCBJRDogdTY0LCBPLCBEYXRhXFx1MDAzZSBBdHRyaWJ1dGVcXHUwMDNjSUQsIE8sIERhdGFcXHUwMDNlXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNTM1LXdoZXJlXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnM6NTM2OiAgICBPOiBBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzY0lELCBEYXRhID0gRGF0YVxcdTAwM2UsXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNTM3LXtcXG4tLVxcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzPTYxMj0gICAgcHViIGNvbnN0IGZuIG5ldyhuYW1lOiBcXHUwMDI2J3N0YXRpYyBDU3RyKSAtXFx1MDAzZSBTZWxmIHtcXG4tLVxcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTY0MC0vLy8gYXR0cmlidXRlcyB2aWEgdGhlIFtga2VybmVsOjpjb25maWdmc19hdHRyc2BdIG1hY3JvLCB0byB0aWVcXG5ydXN0L2tlcm5lbC9jb25maWdmcy5yczo2NDE6Ly8vIGBBdHRyaWJ1dGVPcGVyYXRpb25zYCBpbXBsZW1lbnRhdGlvbnMgdG8gY29uY3JldGUgbmFtZWQgYXR0cmlidXRlcy5cXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy02NDItI1t2dGFibGVdXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnM6NjQzOnB1YiB0cmFpdCBBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzY2NvbnN0IElEOiB1NjQgPSAwXFx1MDAzZSB7XFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNjQ0LSAgICAvLy8gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBmaWVsZCB0aGF0IGlzIGJhY2tpbmcgdGhlXFxuLS1cXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycz02OTM9aW1wbFxcdTAwM2Njb25zdCBOOiB1c2l6ZSwgRGF0YVxcdTAwM2UgQXR0cmlidXRlTGlzdFxcdTAwM2NOLCBEYXRhXFx1MDAzZSB7XFxuLS1cXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy03MTEtICAgICkgd2hlcmVcXG5ydXN0L2tlcm5lbC9jb25maWdmcy5yczo3MTI6ICAgICAgICBPOiBBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzY0lELCBEYXRhID0gRGF0YVxcdTAwM2UsXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNzEzLSAgICB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjUzLjE5OTY1NDk1NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzMyODA5NTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29kZTpcblxuKipEaXZpbmcgaW50byBgY29uZmlnZnMucnNgJ3MgQXR0cmlidXRlIFN0b3JhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBydXN0L2tlcm5lbC9jb25maWdmcy5yc2AgYW5kIHRyeWluZyB0byB0cmFjZSBob3cgZGF0YSBhY3R1YWxseSBnZXRzICpzdG9yZWQqIHVzaW5nIGBBdHRyaWJ1dGVPcGVyYXRpb25zOjpzdG9yZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkaXNwYXRjaCBtZWNoYW5pc20uIExldCdzIHplcm8gaW4gb24gcm91Z2hseSBsaW5lcyA1NDAgdG8gNjAwLCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGZ1bmN0aW9uIGNhbGwgb3Igc3RydWN0dXJlIHJlbGF0ZWQgdG8gdGhpcy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBwYXNzZWQgYXJvdW5kLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgZ3Jhc3Agb24gaG93IGEgc3BlY2lmaWMgYXR0cmlidXRlIHdyaXRlIHVsdGltYXRlbHkgbGFuZHMgaW5zaWRlIHRoZSBgc3RvcmVgIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGZvciBhIGdpdmVuIGNvbmZpZ2ZzIG9iamVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTo1NC45MzI0Njc2NjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHQgICAgLy8vIGBpdGVtYCBtdXN0IGJlIGVtYmVkZGVkIGluIGEgYGJpbmRpbmdzOjpjb25maWdfZ3JvdXBgLlxcbiA1NDE6XFx0ICAgIC8vL1xcbiA1NDI6XFx0ICAgIC8vLyBJZiBgaXRlbWAgZG9lcyBub3QgcmVwcmVzZW50IHRoZSByb290IGdyb3VwIG9mIGEgY29uZmlnZnMgc3Vic3lzdGVtLFxcbiA1NDM6XFx0ICAgIC8vLyB0aGUgZ3JvdXAgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIGBHcm91cFxcdTAwM2NEYXRhXFx1MDAzZWAuXFxuIDU0NDpcXHQgICAgLy8vXFxuIDU0NTpcXHQgICAgLy8vIE90aGVyd2lzZSwgdGhlIGdyb3VwIG11c3QgYmUgYSBlbWJlZGRlZCBpbiBhXFxuIDU0NjpcXHQgICAgLy8vIGBiaW5kaW5nczo6Y29uZmlnZnNfc3Vic3lzdGVtYCB0aGF0IGlzIGVtYmVkZGVkIGluIGEgYFN1YnN5c3RlbVxcdTAwM2NEYXRhXFx1MDAzZWAuXFxuIDU0NzpcXHQgICAgLy8vXFxuIDU0ODpcXHQgICAgLy8vIGBwYWdlYCBtdXN0IHBvaW50IHRvIGEgd3JpdGFibGUgYnVmZmVyIG9mIHNpemUgYXQgbGVhc3QgW2BQQUdFX1NJWkVgXS5cXG4gNTQ5OlxcdCAgICB1bnNhZmUgZXh0ZXJuIFxcXCJDXFxcIiBmbiBzaG93KFxcbiA1NTA6XFx0ICAgICAgICBpdGVtOiAqbXV0IGJpbmRpbmdzOjpjb25maWdfaXRlbSxcXG4gNTUxOlxcdCAgICAgICAgcGFnZTogKm11dCBrZXJuZWw6OmZmaTo6Y19jaGFyLFxcbiA1NTI6XFx0ICAgICkgLVxcdTAwM2UgaXNpemUge1xcbiA1NTM6XFx0ICAgICAgICBsZXQgY19ncm91cDogKm11dCBiaW5kaW5nczo6Y29uZmlnX2dyb3VwID1cXG4gNTU0OlxcdCAgICAgICAgICAgIC8vIFNBRkVUWTogQnkgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cywgYGl0ZW1gIGlzIGVtYmVkZGVkIGluIGFcXG4gNTU1OlxcdCAgICAgICAgICAgIC8vIGBjb25maWdfZ3JvdXBgLlxcbiA1NTY6XFx0ICAgICAgICAgICAgdW5zYWZlIHsgY29udGFpbmVyX29mIShpdGVtLCBiaW5kaW5nczo6Y29uZmlnX2dyb3VwLCBjZ19pdGVtKSB9O1xcbiA1NTc6XFx0XFxuIDU1ODpcXHQgICAgICAgIC8vIFNBRkVUWTogVGhlIGZ1bmN0aW9uIHNhZmV0eSByZXF1aXJlbWVudHMgZm9yIHRoaXMgZnVuY3Rpb24gc2F0aXNmeVxcbiA1NTk6XFx0ICAgICAgICAvLyB0aGUgY29uZGl0aW9ucyBmb3IgdGhpcyBjYWxsLlxcbiA1NjA6XFx0ICAgICAgICBsZXQgZGF0YTogXFx1MDAyNkRhdGEgPSB1bnNhZmUgeyBnZXRfZ3JvdXBfZGF0YShjX2dyb3VwKSB9O1xcbiA1NjE6XFx0XFxuIDU2MjpcXHQgICAgICAgIC8vIFNBRkVUWTogQnkgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cywgYHBhZ2VgIGlzIHdyaXRhYmxlIGZvciBgUEFHRV9TSVpFYC5cXG4gNTYzOlxcdCAgICAgICAgbGV0IHJldCA9IE86OnNob3coZGF0YSwgdW5zYWZlIHsgXFx1MDAyNm11dCAqKHBhZ2UuY2FzdDo6XFx1MDAzY1t1ODsgUEFHRV9TSVpFXVxcdTAwM2UoKSkgfSk7XFxuIDU2NDpcXHRcXG4gNTY1OlxcdCAgICAgICAgbWF0Y2ggcmV0IHtcXG4gNTY2OlxcdCAgICAgICAgICAgIE9rKHNpemUpID1cXHUwMDNlIHNpemUgYXMgaXNpemUsXFxuIDU2NzpcXHQgICAgICAgICAgICBFcnIoZXJyKSA9XFx1MDAzZSBlcnIudG9fZXJybm8oKSBhcyBpc2l6ZSxcXG4gNTY4OlxcdCAgICAgICAgfVxcbiA1Njk6XFx0ICAgIH1cXG4gNTcwOlxcdFxcbiA1NzE6XFx0ICAgIC8vLyAjIFNhZmV0eVxcbiA1NzI6XFx0ICAgIC8vL1xcbiA1NzM6XFx0ICAgIC8vLyBgaXRlbWAgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIGBiaW5kaW5nczo6Y29uZmlnX2dyb3VwYC5cXG4gNTc0OlxcdCAgICAvLy9cXG4gNTc1OlxcdCAgICAvLy8gSWYgYGl0ZW1gIGRvZXMgbm90IHJlcHJlc2VudCB0aGUgcm9vdCBncm91cCBvZiBhIGNvbmZpZ2ZzIHN1YnN5c3RlbSxcXG4gNTc2OlxcdCAgICAvLy8gdGhlIGdyb3VwIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBgR3JvdXBcXHUwMDNjRGF0YVxcdTAwM2VgLlxcbiA1Nzc6XFx0ICAgIC8vL1xcbiA1Nzg6XFx0ICAgIC8vLyBPdGhlcndpc2UsIHRoZSBncm91cCBtdXN0IGJlIGEgZW1iZWRkZWQgaW4gYVxcbiA1Nzk6XFx0ICAgIC8vLyBgYmluZGluZ3M6OmNvbmZpZ2ZzX3N1YnN5c3RlbWAgdGhhdCBpcyBlbWJlZGRlZCBpbiBhIGBTdWJzeXN0ZW1cXHUwMDNjRGF0YVxcdTAwM2VgLlxcbiA1ODA6XFx0ICAgIC8vL1xcbiA1ODE6XFx0ICAgIC8vLyBgcGFnZWAgbXVzdCBwb2ludCB0byBhIHJlYWRhYmxlIGJ1ZmZlciBvZiBzaXplIGF0IGxlYXN0IGBzaXplYC5cXG4gNTgyOlxcdCAgICB1bnNhZmUgZXh0ZXJuIFxcXCJDXFxcIiBmbiBzdG9yZShcXG4gNTgzOlxcdCAgICAgICAgaXRlbTogKm11dCBiaW5kaW5nczo6Y29uZmlnX2l0ZW0sXFxuIDU4NDpcXHQgICAgICAgIHBhZ2U6ICpjb25zdCBrZXJuZWw6OmZmaTo6Y19jaGFyLFxcbiA1ODU6XFx0ICAgICAgICBzaXplOiB1c2l6ZSxcXG4gNTg2OlxcdCAgICApIC1cXHUwMDNlIGlzaXplIHtcXG4gNTg3OlxcdCAgICAgICAgbGV0IGNfZ3JvdXA6ICptdXQgYmluZGluZ3M6OmNvbmZpZ19ncm91cCA9XFxuIDU4ODpcXHQgICAgICAgIC8vIFNBRkVUWTogQnkgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cywgYGl0ZW1gIGlzIGVtYmVkZGVkIGluIGFcXG4gNTg5OlxcdCAgICAgICAgLy8gYGNvbmZpZ19ncm91cGAuXFxuIDU5MDpcXHQgICAgICAgICAgICB1bnNhZmUgeyBjb250YWluZXJfb2YhKGl0ZW0sIGJpbmRpbmdzOjpjb25maWdfZ3JvdXAsIGNnX2l0ZW0pIH07XFxuIDU5MTpcXHRcXG4gNTkyOlxcdCAgICAgICAgLy8gU0FGRVRZOiBUaGUgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cyBmb3IgdGhpcyBmdW5jdGlvbiBzYXRpc2Z5XFxuIDU5MzpcXHQgICAgICAgIC8vIHRoZSBjb25kaXRpb25zIGZvciB0aGlzIGNhbGwuXFxuIDU5NDpcXHQgICAgICAgIGxldCBkYXRhOiBcXHUwMDI2RGF0YSA9IHVuc2FmZSB7IGdldF9ncm91cF9kYXRhKGNfZ3JvdXApIH07XFxuIDU5NTpcXHRcXG4gNTk2OlxcdCAgICAgICAgbGV0IHJldCA9IE86OnN0b3JlKFxcbiA1OTc6XFx0ICAgICAgICAgICAgZGF0YSxcXG4gNTk4OlxcdCAgICAgICAgICAgIC8vIFNBRkVUWTogQnkgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cywgYHBhZ2VgIGlzIHJlYWRhYmxlXFxuIDU5OTpcXHQgICAgICAgICAgICAvLyBmb3IgYXQgbGVhc3QgYHNpemVgLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTo1NC45MzI2MTI2NjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzM1NTc0MTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgcm51bGxgIERyaXZlcidzIENvbmZpZ0ZTIEludGVyZmFjZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgc2hvd2AgYW5kIGBzdG9yZWAgZnVuY3Rpb25zIGluIHRoZSBgQXR0cmlidXRlYCBzdHJ1Y3QgaW50ZXJhY3Qgd2l0aCB0aGUgYEF0dHJpYnV0ZU9wZXJhdGlvbnNgIHRyYWl0LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgcm51bGxfbW9kYCBtb2R1bGUgYW5kIGl0cyBgY29uZmlnZnNgIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHRoZSBgRGV2aWNlQ29uZmlnYC4gSSdtIHNlZWluZyBjYWxscyBsaWtlIGBcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2VcdTAwM2U6OnN0b3JlYCBhbmQgc2ltaWxhciBvbmVzLiBJJ20gYWxzbyByZWZlcmVuY2luZyBmdW5jdGlvbnMgaW4gYHJudWxsLnJzYCBhbmQgYGNvbmZpZ2ZzLnJzYCwgbGlrZSBgTnVsbEJsa0RldmljZTo6bmV3YCBhbmQgYERldmljZUNvbmZpZzo6c3RvcmVgLlxuXG5Ob3csIEknbSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSByZWNlbnQgcGF0Y2gsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCBmaWxlLiBJdCdzIHRoZSBgQXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2VgLCBgXHUwMDNjMlx1MDAzZWAsIGBcdTAwM2MzXHUwMDNlYCwgYW5kIGBcdTAwM2M0XHUwMDNlYCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgdGhlIGtleSBoZXJlOiBgYmxvY2tzaXplYCwgYHJvdGF0aW9uYWxgLCBgc2l6ZWAsIGFuZCBgaXJxbW9kZWAsIHJlc3BlY3RpdmVseS4gRWFjaCBgc3RvcmVgIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UgaXQncyB0YWtpbmcgYSBsb2NrIHRvIGVuc3VyZSBtdXR1YWwgZXhjbHVzaW9uLCBjaGVja2luZyBhIGBwb3dlcmVkYCBzdGF0ZSwgYW5kIHRoZW4gbW9kaWZ5aW5nIGNvbmZpZ3VyYXRpb24gZmllbGRzLiBUaGUgbG9jayBhbmQgdGhlIGBwb3dlcmVkYCBzdGF0ZSBjaGVjayBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nOiBgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7YCBmb2xsb3dlZCBieSBhIGNoZWNrIGFuZCBwb3RlbnRpYWwgZWFybHkgcmV0dXJuLiBUaGUgY29kZSB0aGVuIGVpdGhlciB2YWxpZGF0ZXMgdGhlIGlucHV0LCB1c2luZyBmdW5jdGlvbiBzdWNoIGFzIGBHZW5EaXNrQnVpbGRlcjo6dmFsaWRhdGVfYmxvY2tfc2l6ZWAgb3IgcGFyc2VzIHVzaW5nIGBrc3RydG9ib29sX2J5dGVzYCBvciBgSVJRTW9kZTo6dHJ5X2Zyb21gLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25maWd1cmF0aW9uIHN1cmZhY2Ugd2FycmFudCBmdXp6aW5nP1xuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogRGVmaW5pdGVseS4gVGhlIGBCTEtfREVWX1JVU1RfTlVMTGAgZHJpdmVyIGlzIGEgc29mdHdhcmUgYmxvY2sgZGV2aWNlIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwcy5cbiogICAqKkNvbmN1cnJlbmN5L0xvY2tpbmcgSW1wYWN0OioqIFllcywgdGhpcyBwYXRjaCBpcyBkaXJlY3RseSBtb2RpZnlpbmcgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byBjbG9zZSByYWNlIHdpbmRvd3Mgd2hlcmUgdGhlIGxvY2sgd2FzIGRyb3BwZWQgYmV0d2VlbiB0aGUgYHBvd2VyZWRgIHN0YXRlIGNoZWNrIGFuZCBtb2RpZmljYXRpb24gb2YgY29uZmlndXJhdGlvbiBmaWVsZHMuIFRoaXMgaXMgc2VjdXJpdHktc2Vuc2l0aXZlIHN0dWZmLlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZyA9IFRydWUuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IEVuYWJsZUNvbmZpZ3MuIEkgbmVlZCB0byBjb25maXJtOlxuXG4qICAgYEJMS19ERVZfUlVTVF9OVUxMYDogQ2hlY2suXG4qICAgYFJVU1RgOiBDaGVjay5cbiogICBgQ09ORklHRlNfRlNgOiBDaGVjay5cbiogICBgQkxPQ0tgOiBUaGlzIGlzIGEgc3RhbmRhcmQgcGFyZW50IGZvciBibG9jayBkZXZpY2VzLCBidXQgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MjowMi4yODgzNTcyMzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDg0NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qcm51bGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjIwOnNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDI6MDIuMzM2NDQ3MjI0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTcyMDQyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUnVzdCBOdWxsIEJsb2NrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfUlVTVF9OVUxMYC4gIE15IGZpcnN0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBMZXQncyBzZWUuLi4gSSdtIHByZXR0eSBzdXJlIGl0IHdvdWxkIGJlIGluIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgLCBzbyBJJ2xsIGNoZWNrIHRoYXQgZmlyc3QuIFRoZW4sIHNpbmNlIEkga25vdyB0aGUgc3BlY2lmaWNzIEknbSBsb29raW5nIGZvciwgSSBzaG91bGQgZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZ2AuIEFoLCBoZXJlIGl0IGlzOlxuXG5gYGBrY29uZmlnXG5jb25maWcgQkxLX0RFVl9SVVNUX05VTExcbiAgICB0cmlzdGF0ZSBcIlJ1c3QgbnVsbCBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcIlxuICAgIGRlcGVuZHMgb24gUlVTVCBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNcbmBgYFxuXG5TbywgdGhhdCB0ZWxscyBtZSB0aGUgZHJpdmVyIGRlcGVuZHMgb24gYFJVU1RgIGFuZCBgQ09ORklHRlNfRlNgLiBHb3QgaXQuIE5vdywgd2hhdCB3YXMgSSBjaGVja2luZyBpbiBgZHJpdmVycy9ibG9jay9LY29uZmlnYD8gSnVzdCBtYWtpbmcgc3VyZSB0aGVyZSB3YXNuJ3Qgc29tZXRoaW5nIGVsc2UgbW9yZSBnbG9iYWwuIEknbGwgdGFrZSBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgZmlyc3QgdHdlbnR5IGxpbmVzLCB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIHJlbGV2YW50Li4uIFxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MjowNC43OTM2NTQ0NDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBCbG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBCTEtfREVWXFxuICAgNzpcXHRcXHRib29sIFxcXCJCbG9jayBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiAgIDk6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB2YXJpb3VzIGRpZmZlcmVudCBibG9jayBkZXZpY2VcXG4gIDEyOlxcdFxcdCAgZHJpdmVycy4gVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkO1xcbiAgMTU6XFx0XFx0ICBvbmx5IGRvIHRoaXMgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBCTEtfREVWXFxuICAxODpcXHRcXG4gIDE5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnXFxcIlxcbiAgMjA6XFx0c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWdcXFwiXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBCTEtfREVWX0ZEXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTm9ybWFsIGZsb3BweSBkaXNrIHN1cHBvcnRcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfTUFZX0hBVkVfUENfRkRDXFxuICAyNTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQyOjA0Ljc5MzczNTQ1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTI3NDQ2MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUnVzdCBOdWxsIEJsb2NrIERyaXZlciBDb25maWdmcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaGVyZSBpcyBvbiB0aGUgY2hhbmdlcyB0byB0aGUgUnVzdCBudWxsIGJsb2NrIGRyaXZlciwgc3BlY2lmaWNhbGx5IGl0cyBjb25maWdmcyBpbnRlcmZhY2UsIGFuZCBob3cgaXQgaW1wYWN0cyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBJIHNlZSB0aGF0IGBCTEtfREVWX1JVU1RfTlVMTGAsIGBCTEtfREVWYCwgYEJMT0NLYCwgYFJVU1RgLCBhbmQgYENPTkZJR0ZTX0ZTYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucy5cblxuRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzLiBJJ3ZlIHBpbnBvaW50ZWQgdGhlIG1ldGhvZHMgYmVpbmcgbW9kaWZpZWQgd2l0aGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlc2UgbWV0aG9kczpcblxuKiAgIGBcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2VcdTAwM2U6OnN0b3JlYFxuKiAgIGBcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2VcdTAwM2U6OnN0b3JlYFxuKiAgIGBcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzNcdTAwM2VcdTAwM2U6OnN0b3JlYFxuKiAgIGBcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzRcdTAwM2VcdTAwM2U6OnN0b3JlYFxuKiAgIGBEZXZpY2VDb25maWc6OnN0b3JlYFxuKiAgIGBybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWc6OnN0b3JlYFxuKiAgIGBOdWxsQmxrRGV2aWNlOjpuZXdgXG5cblRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBhdHRyaWJ1dGUgb3BlcmF0aW9ucyB3aXRoaW4gY29uZmlnZnMsIGFuZCBhbHNvIHRoZSBkZXZpY2UgY3JlYXRpb24sIHNvIGl0IGxvb2tzIGxpa2UgY29uZmlnZnMgbW9kaWZpY2F0aW9ucyBpbmNsdWRlIGJvdGggdGhlIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgY3JlYXRpb24gb2YgdGhlIGJsb2NrIGRldmljZS5cblxuVGhlIHJlYXNvbmluZyBoZXJlIG1ha2VzIHNlbnNlOiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIEJ5IGhvbGRpbmcgdGhlIGxvY2sgZHVyaW5nIHZhbGlkYXRpb24sIHBhcnNpbmcsIGFuZCBhc3NpZ25tZW50IHdpdGhpbiB0aGUgY29uZmlnZnMgaW50ZXJmYWNlLCB3ZSBlbGltaW5hdGUgdGhlIHBvdGVudGlhbCBmb3IgZGV2aWNlIHNldHRpbmdzIHRvIGJlIGFsdGVyZWQgd2hpbGUgdGhlIGRldmljZSBpcyBsaXZlLiBTaW5jZSB0aGlzIGlzIGFuIGVtdWxhdGVkIGRyaXZlciBhbmQgY29uZmlndXJhYmxlIHZpYSB1c2Vyc3BhY2UgdGhyb3VnaCBjb25maWdmcywgaXQncyB2ZXJ5IGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmdXp6aW5nIHRhcmdldHMgYXJlIGRlZmluZWQgYXM6XG5cbiogICBgRGV2aWNlQ29uZmlnOjpzdG9yZWBcbiogICBgXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlXHUwMDNlOjpzdG9yZWBcbiogICBgXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MyXHUwMDNlXHUwMDNlOjpzdG9yZWBcbiogICBgXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MzXHUwMDNlXHUwMDNlOjpzdG9yZWBcbiogICBgXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2M0XHUwMDNlXHUwMDNlOjpzdG9yZWBcbiogICBgTnVsbEJsa0RldmljZTo6bmV3YFxuXG5UaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIGJlIHJlbGV2YW50IGFyZTpcblxuKiAgIGBCTEtfREVWX1JVU1RfTlVMTGBcbiogICBgUlVTVGBcbiogICBgQ09ORklHRlNfRlNgXG4qICAgYEJMS19ERVZgXG4qICAgYEJMT0NLYFxuXG5XaXRoIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIG5vdyBtb3ZlIGZvcndhcmQuIExldCdzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTYwLCJPdXRwdXRUb2tlbnMiOjI3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQyOjEwLjcyMTE4MzYwM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NTAyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1JVU1RfTlVMTFwiLFxuICAgIFwiUlVTVFwiLFxuICAgIFwiQ09ORklHRlNfRlNcIixcbiAgICBcIkJMS19ERVZcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiRGV2aWNlQ29uZmlnOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzFcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIlxcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MyXFx1MDAzZVxcdTAwM2U6OnN0b3JlXCIsXG4gICAgXCJcXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjM1xcdTAwM2VcXHUwMDNlOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzRcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIk51bGxCbGtEZXZpY2U6Om5ld1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgaW4gdGhlIGNvbmZpZ2ZzIGF0dHJpYnV0ZSBzdG9yZSBoYW5kbGVycyBmb3IgdGhlIFJ1c3QgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyIChybnVsbCkuIEhvbGRpbmcgdGhlIG11dGV4IGFjcm9zcyBzdGF0ZSBjaGVja3MgYW5kIGZpZWxkIGFzc2lnbm1lbnRzIGNsb3NlcyBhIHJhY2Ugd2luZG93IHdoZW4gYWx0ZXJpbmcgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKGJsb2NrX3NpemUsIHJvdGF0aW9uYWwsIGNhcGFjaXR5X21pYiwgaXJxX21vZGUpIHdoaWxlIHBvd2VyaW5nIGRldmljZXMgb24vb2ZmLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLWJhc2VkLCBjb25maWd1cmFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfUlVTVF9OVUxMXCIsXG4gICAgXCJSVVNUXCIsXG4gICAgXCJDT05GSUdGU19GU1wiLFxuICAgIFwiQkxLX0RFVlwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJEZXZpY2VDb25maWc6OnN0b3JlXCIsXG4gICAgXCJcXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMVxcdTAwM2VcXHUwMDNlOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzJcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIlxcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MzXFx1MDAzZVxcdTAwM2U6OnN0b3JlXCIsXG4gICAgXCJcXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjNFxcdTAwM2VcXHUwMDNlOjpzdG9yZVwiLFxuICAgIFwiTnVsbEJsa0RldmljZTo6bmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgY29uZmlnZnMgYXR0cmlidXRlIHN0b3JlIGhhbmRsZXJzIGZvciB0aGUgUnVzdCBudWxsIGJsb2NrIGRldmljZSBkcml2ZXIgKHJudWxsKS4gSG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHN0YXRlIGNoZWNrcyBhbmQgZmllbGQgYXNzaWdubWVudHMgY2xvc2VzIGEgcmFjZSB3aW5kb3cgd2hlbiBhbHRlcmluZyBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiAoYmxvY2tfc2l6ZSwgcm90YXRpb25hbCwgY2FwYWNpdHlfbWliLCBpcnFfbW9kZSkgd2hpbGUgcG93ZXJpbmcgZGV2aWNlcyBvbi9vZmYuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtYmFzZWQsIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGFuZCByZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQyOjEwLjc5NjY5MzQ2MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyODc4MzkyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MjoxMC43OTcyMjExNjJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDI4NzMwNjc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2NvcGUgaW4gYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgIGZvciBgRGV2aWNlQ29uZmlnYCBjb25maWdmcyBhdHRyaWJ1dGUgYHN0b3JlYCBoYW5kbGVycy4gUHJldmlvdXNseSwgYHRoaXMuZGF0YS5sb2NrKClgIHdhcyBhY3F1aXJlZCB0byBjaGVjayBgcG93ZXJlZGAgYW5kIHRoZW4gcmUtYWNxdWlyZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9wZW5pbmcgYSByYWNlIHdpbmRvdyAoVE9DVE9VKS4gVGhlIHBhdGNoIGhvbGRzIHRoZSBtdXRleCBsb2NrIGd1YXJkIGFjcm9zcyBib3RoIHRoZSBjaGVjayBhbmQgdGhlIGFzc2lnbm1lbnQuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kvbG9ja2luZyBmaXggaW4gc2FmZSBSdXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCBjb3B5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBrZXJuZWwgaW5mby1sZWFrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YjdmYWIxMjFiZjQ3YjdkYTk4ODJiNThjZjRmZjY4Mzg2MThhZDEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjo0MTowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMgYi9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXG5pbmRleCAzMmMxMGMzZjRkMGZkLi42NmVmOTFiM2ZmMGNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc1xuKysrIGIvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc1xuQEAgLTE3NCw3ICsxNzQsOCBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMVx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAgICAgfVxuIFxuICAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4rICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbisgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuICAgICAgICAgfVxuIFxuQEAgLTE4Miw3ICsxODMsNyBAQCBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbiAgICAgICAgIGxldCB2YWx1ZSA9IHRleHQucGFyc2U6Olx1MDAzY3UzMlx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xuIFxuICAgICAgICAgR2VuRGlza0J1aWxkZXI6OnZhbGlkYXRlX2Jsb2NrX3NpemUodmFsdWUpPztcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuYmxvY2tfc2l6ZSA9IHZhbHVlO1xuKyAgICAgICAgZ3VhcmQuYmxvY2tfc2l6ZSA9IHZhbHVlO1xuICAgICAgICAgT2soKCkpXG4gICAgIH1cbiB9XG5AQCAtMjA0LDExICsyMDUsMTIgQEAgaW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG4gICAgIH1cbiBcbiAgICAgZm4gc3RvcmUodGhpczogXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcdTAwMjZbdThdKSAtXHUwMDNlIFJlc3VsdCB7XG4tICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWQge1xuKyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XG4rICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAgICAgICAgIH1cbiBcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkucm90YXRpb25hbCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xuKyAgICAgICAgZ3VhcmQucm90YXRpb25hbCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xuIFxuICAgICAgICAgT2soKCkpXG4gICAgIH1cbkBAIC0yMjUsMTQgKzIyNywxNSBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAgICAgfVxuIFxuICAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4rICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbisgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuICAgICAgICAgfVxuIFxuICAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xuICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XHUwMDNjdTY0XHUwMDNlKCkubWFwX2Vycih8X3wgRUlOVkFMKT87XG4gXG4tICAgICAgICB0aGlzLmRhdGEubG9jaygpLmNhcGFjaXR5X21pYiA9IHZhbHVlO1xuKyAgICAgICAgZ3VhcmQuY2FwYWNpdHlfbWliID0gdmFsdWU7XG4gICAgICAgICBPaygoKSlcbiAgICAgfVxuIH1cbkBAIC0yNDgsMTQgKzI1MSwxNSBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjNFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAgICAgfVxuIFxuICAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4rICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbisgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuICAgICAgICAgfVxuIFxuICAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xuICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XHUwMDNjdThcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcbiBcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/O1xuKyAgICAgICAgZ3VhcmQuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/O1xuICAgICAgICAgT2soKCkpXG4gICAgIH1cbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MjoxMC43OTcyMjIxMTJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTA3OTQ4NDE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSdXN0LUJhc2VkIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc2AsIHdoaWNoLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgaXMgYSBSdXN0IGltcGxlbWVudGF0aW9uIHJlbGF0ZWQgdG8gdGhlIGBybnVsbGAgYmxvY2sgZHJpdmVyIGFuZCBpdHMgaW50ZWdyYXRpb24gd2l0aCBjb25maWdmcy4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgYSB2aXJ0dWFsIGJsb2NrIGRldmljZSBhbmQgdGhpcyBpcyB0aGUgY29uZmlnZnMgY29kZSB0aGF0IGFsbG93cyBpdCB0byBiZSBjb25maWd1cmVkLiBUaGUgY29udGV4dCBpcyBpbXBvcnRhbnQgaGVyZTsgSSdsbCB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGZ1bGx5IGdyYXNwIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgZGVzaWduIGRlY2lzaW9ucy5cblxuRnJvbSB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIGxvY2tpbmcgaXNzdWUgd2l0aGluIHRoZSBgRGV2aWNlQ29uZmlnYCBzdHJ1Y3Qgd2hlbiBpdCBjb21lcyB0byB0aGUgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzLiBJdCBsb29rcyBsaWtlIHRoZSBwcmlvciBjb2RlIHVzZWQgYHRoaXMuZGF0YS5sb2NrKClgIGluIG11bHRpcGxlIHBsYWNlcyB3aXRoaW4gZWFjaCBhdHRyaWJ1dGUncyBgc3RvcmVgIG1ldGhvZC4gRWFjaCB0aW1lLCB0aGUgbG9jayB3YXMgZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBtZXRob2Qgc2NvcGUsIHRoZW4gcmUtYWNxdWlyZWQgZm9yIGEgc3Vic2VxdWVudCBhY2Nlc3MuXG5cbkkgc2VlIHRoYXQgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGFkZGluZyBhIG11dGFibGUgZ3VhcmQgd2l0aCBhIHNpbmdsZSBsb2NrLiBUaGUgYHN0b3JlYCBtZXRob2RzIGZvciB0aGUgYGJsb2NrX3NpemVgLCBgcm90YXRpb25hbGAsIGBjYXBhY2l0eV9taWJgLCBhbmQgYGlycV9tb2RlYCBhdHRyaWJ1dGVzIGFyZSBhZmZlY3RlZC4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgY2hlY2sgZm9yIGAucG93ZXJlZGAgYW5kIHRoZSBjaGFuZ2UgcHJldmVudHMgc2V0dGluZyB2YWx1ZXMgaWYgdGhlIGRldmljZSBpcyBwb3dlcmVkLiBJdCBhcHBlYXJzIGVhY2ggYXR0cmlidXRlIGhhZCBhIGxvY2sgYWNxdWlzaXRpb24gb24gdGhlIGB0aGlzLmRhdGEubG9jaygpYCB3aGljaCBpcyBub3cgY29uc29saWRhdGVkIGludG8gYSBzaW5nbGUgbG9jayBieSBpbml0aWFsaXppbmcgdGhlIGBtdXQgZ3VhcmRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbG9jayBpcyBoZWxkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUncyBgc3RvcmVgIG1ldGhvZCwgcHJlc3VtYWJseSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbmNpZXMgd2hlbiBtb2RpZnlpbmcgdGhlIGRldmljZSBjb25maWd1cmF0aW9uIGRhdGEuIEJ5IGluaXRpYWxpemluZyBhIGd1YXJkIGF0IHRoZSBzdGFydCBhbmQgaG9sZGluZyBpdCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiwgd2UgYXZvaWQgbXVsdGlwbGUgbG9jayBhY3F1aXNpdGlvbnMgd2l0aGluIGVhY2ggZnVuY3Rpb24uXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBnb29kIGNoYW5nZS4gTG9ja2luZyBpcyBhIGNyaXRpY2FsIGFyZWEgaW4ga2VybmVsIGRldmVsb3BtZW50LCBhbmQgYSBjb25zb2xpZGF0ZWQgbG9jayBoZXJlIGNvdWxkIGltcHJvdmUgdGhlIHJvYnVzdG5lc3MgYW5kIHBvdGVudGlhbGx5IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGJlIGVhc2llciB0byByZWFkLCBiZWNhdXNlIGxlc3MgY29kZSBpcyBuZWVkZWQsIGFuZCBzaG91bGQgYmUgYmV0dGVyIHBlcmZvcm1hbmNlIHRvby4gTm8gbW9yZSB1bm5lY2Vzc2FyeSBsb2NrLXVubG9jayBjeWNsZXMuIEl0IHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2Ugd2hlcmUgdGhlIGAucG93ZXJlZGAgZmxhZyBjb3VsZCBiZSBjaGVja2VkLCBhbmQgdGhlbiBtb2RpZmllZCBiZXR3ZWVuIGxvY2sgYWNxdWlzaXRpb25zLCBkZXBlbmRpbmcgb24gaG93IHRoaXMgaXMgd3JpdHRlbi4gSSdsbCBuZWVkIHRvIHJlYWQgdGhlIHdpZGVyIGNvbnRleHQgdG8gYmUgc3VyZSwgYnV0IHNvIGZhciwgaXQgYXBwZWFycyB0byBiZSBhbiBpbXByb3ZlbWVudC4gTGV0IG1lIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgY29uZmlnZnNgIHRvIGJlIHN1cmUgdGhhdCBJIGFtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjkwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDI6MTkuODc2NzEwMzExWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0ICAgICAgICB9XFxuIDE2MTpcXHRcXG4gMTYyOlxcdCAgICAgICAgT2soKCkpXFxuIDE2MzpcXHQgICAgfVxcbiAxNjQ6XFx0fVxcbiAxNjU6XFx0XFxuIDE2NjpcXHQjW3Z0YWJsZV1cXG4gMTY3OlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMVxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDE2ODpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAxNjk6XFx0XFxuIDE3MDpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDE3MTpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAxNzI6XFx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXFxcInt9XFxcXG5cXFwiLCB0aGlzLmRhdGEubG9jaygpLmJsb2NrX3NpemUpKT87XFxuIDE3MzpcXHQgICAgICAgIE9rKHdyaXRlci5ieXRlc193cml0dGVuKCkpXFxuIDE3NDpcXHQgICAgfVxcbiAxNzU6XFx0XFxuIDE3NjpcXHQgICAgZm4gc3RvcmUodGhpczogXFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXFx1MDAyNlt1OF0pIC1cXHUwMDNlIFJlc3VsdCB7XFxuIDE3NzpcXHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xcbiAxNzg6XFx0ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcXG4gMTc5OlxcdCAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xcbiAxODA6XFx0ICAgICAgICB9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdCAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xcbiAxODM6XFx0ICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcXHUwMDNjdTMyXFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xcbiAxODQ6XFx0XFxuIDE4NTpcXHQgICAgICAgIEdlbkRpc2tCdWlsZGVyOjp2YWxpZGF0ZV9ibG9ja19zaXplKHZhbHVlKT87XFxuIDE4NjpcXHQgICAgICAgIGd1YXJkLmJsb2NrX3NpemUgPSB2YWx1ZTtcXG4gMTg3OlxcdCAgICAgICAgT2soKCkpXFxuIDE4ODpcXHQgICAgfVxcbiAxODk6XFx0fVxcbiAxOTA6XFx0XFxuIDE5MTpcXHQjW3Z0YWJsZV1cXG4gMTkyOlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMlxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDE5MzpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDE5NjpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHQgICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucm90YXRpb25hbCB7XFxuIDE5OTpcXHQgICAgICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFxcXCIxXFxcXG5cXFwiKT87XFxuIDIwMDpcXHQgICAgICAgIH0gZWxzZSB7XFxuIDIwMTpcXHQgICAgICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFxcXCIwXFxcXG5cXFwiKT87XFxuIDIwMjpcXHQgICAgICAgIH1cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyMDU6XFx0ICAgIH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyMDg6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjA5OlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDIxMDpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjExOlxcdCAgICAgICAgfVxcbiAyMTI6XFx0XFxuIDIxMzpcXHQgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPztcXG4gMjE0OlxcdFxcbiAyMTU6XFx0ICAgICAgICBPaygoKSlcXG4gMjE2OlxcdCAgICB9XFxuIDIxNzpcXHR9XFxuIDIxODpcXHRcXG4gMjE5OlxcdCNbdnRhYmxlXVxcbiAyMjA6XFx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MzXFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcXG4gMjIxOlxcdCAgICB0eXBlIERhdGEgPSBEZXZpY2VDb25maWc7XFxuIDIyMjpcXHRcXG4gMjIzOlxcdCAgICBmbiBzaG93KHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZtdXQgW3U4OyBQQUdFX1NJWkVdKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjdXNpemVcXHUwMDNlIHtcXG4gMjI0OlxcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XFxuIDIyNTpcXHQgICAgICAgIHdyaXRlci53cml0ZV9mbXQoZm10IShcXFwie31cXFxcblxcXCIsIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliKSk/O1xcbiAyMjY6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyMjc6XFx0ICAgIH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyMzA6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjMxOlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDIzMjpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjMzOlxcdCAgICAgICAgfVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcXG4gMjM2OlxcdCAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XFx1MDAzY3U2NFxcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcXG4gMjM3OlxcdFxcbiAyMzg6XFx0ICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTtcXG4gMjM5OlxcdCAgICAgICAgT2soKCkpXFxuIDI0MDpcXHQgICAgfVxcbiAyNDE6XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHQjW3Z0YWJsZV1cXG4gMjQ0OlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjNFxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDI0NTpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAyNDY6XFx0XFxuIDI0NzpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDI0ODpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAyNDk6XFx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXFxcInt9XFxcXG5cXFwiLCB0aGlzLmRhdGEubG9jaygpLmlycV9tb2RlKSk/O1xcbiAyNTA6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyNTE6XFx0ICAgIH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyNTQ6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjU1OlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDI1NjpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjU3OlxcdCAgICAgICAgfVxcbiAyNTg6XFx0XFxuIDI1OTpcXHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDI6MTkuODc2ODE0MTMxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMDc2OTQ5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvbW1pdC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiB0aGUgYHN0b3JlYCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgLiBQcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgbG9ja2luZyBgdGhpcy5kYXRhYCAqdHdpY2UqOiBvbmNlIHRvIGNoZWNrIGlmIGBwb3dlcmVkYCB3YXMgdHJ1ZSwgYW5kIHRoZW4gYWdhaW4gdG8gYWN0dWFsbHkgbW9kaWZ5IGEgdmFsdWUuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgVGltZS1vZi1DaGVjay10by1UaW1lLW9mLVVzZSAoVE9DVE9VKSByYWNlIGNvbmRpdGlvbi4gQmV0d2VlbiB0aG9zZSB0d28gbG9jayBhY3F1aXNpdGlvbnMsIGFub3RoZXIgdGhyZWFkIGNvdWxkIGhhdmUgbW9kaWZpZWQgdGhlIHN0YXRlLCByZW5kZXJpbmcgdGhlIGluaXRpYWwgY2hlY2sgaW52YWxpZC4gVGhlIGZpeCBpcyBlbGVnYW50OiAgQnkgaW50cm9kdWNpbmcgYSBzaW5nbGUsIGxvbmdlci1saXZlZCBsb2NrIGd1YXJkIChgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7YCksIHdlIGVuc3VyZSB0aGUgY2hlY2sgYW5kIHRoZSBtb2RpZmljYXRpb24gaGFwcGVuIGF0b21pY2FsbHksIHVuZGVyIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBtdXRleC5cblxuTm93LCBhIGNydWNpYWwgYXNwZWN0IGlzIGRldGVybWluaW5nIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHJpc2sgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gR2l2ZW4gdGhhdCB0aGlzIGlzIFJ1c3QgY29kZSwgYW5kIGl0J3Mgb3BlcmF0aW5nIG9uIHNhZmUgdHlwZXMgKHByaW1pdGl2ZXMsIGVudW1zLCBzdHJ1Y3QgZmllbGRzKSwgUnVzdCBndWFyYW50ZWVzIHRoYXQgYWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0IGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBrZXkgc2FmZWd1YXJkLiBUaGUgcGF0Y2ggaXRzZWxmIG1lcmVseSBhZGp1c3RzIHRoZSBsb2NraW5nIHNjb3BlOyBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGJ1ZmZlcnMsIG9yIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLiAgSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIGludm9sdmVkIGhlcmUuIEtNU0FOLCB3aGljaCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnksIGlzbid0IGFwcGxpY2FibGUgaW4gdGhpcyBzY2VuYXJpby4gVGhlIGVudGlyZSBsb2dpYyBpcyBjb25maW5lZCB0byBhZGp1c3RpbmcgdGhlIGxvY2tpbmcgc2NvcGUgYW5kIGlzIGEgcHVyZSBjb25jdXJyZW5jeSBmaXguIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhlIHBhdGNoIHNwZWNpZmljYWxseSBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChUT0NUT1UpIGJ5IGV4dGVuZGluZyB0aGUgbG9jaydzIHNjb3BlLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UgcHJlc2VudCBoZXJlLCBhbmQgdGhlcmVmb3JlIGEgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiAgSSBhbSBjb25maWRlbnQgdGhhdCB0aGUgcHJvcGVydGllcyBmb3IgYHNldC1yZXN1bHRzYCBuZWVkIHRvIGJlIHNldCB3aXRoIGBLTVNBTlJlYXNvbmluZ2AgYW5kIGBOZWVkc0tNU0FOYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY0MCwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MjoyNS4wODQ1MTI0NloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2NvcGUgaW4gYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgIGZvciBgRGV2aWNlQ29uZmlnYCBjb25maWdmcyBhdHRyaWJ1dGUgYHN0b3JlYCBoYW5kbGVycy4gUHJldmlvdXNseSwgYHRoaXMuZGF0YS5sb2NrKClgIHdhcyBhY3F1aXJlZCB0byBjaGVjayBgcG93ZXJlZGAgYW5kIHRoZW4gcmUtYWNxdWlyZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9wZW5pbmcgYSByYWNlIHdpbmRvdyAoVE9DVE9VKS4gVGhlIHBhdGNoIGhvbGRzIHRoZSBtdXRleCBsb2NrIGd1YXJkIGFjcm9zcyBib3RoIHRoZSBjaGVjayBhbmQgdGhlIGFzc2lnbm1lbnQuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kvbG9ja2luZyBmaXggaW4gc2FmZSBSdXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCBjb3B5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBrZXJuZWwgaW5mby1sZWFrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzY29wZSBpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc2AgZm9yIGBEZXZpY2VDb25maWdgIGNvbmZpZ2ZzIGF0dHJpYnV0ZSBgc3RvcmVgIGhhbmRsZXJzLiBQcmV2aW91c2x5LCBgdGhpcy5kYXRhLmxvY2soKWAgd2FzIGFjcXVpcmVkIHRvIGNoZWNrIGBwb3dlcmVkYCBhbmQgdGhlbiByZS1hY3F1aXJlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3BlbmluZyBhIHJhY2Ugd2luZG93IChUT0NUT1UpLiBUaGUgcGF0Y2ggaG9sZHMgdGhlIG11dGV4IGxvY2sgZ3VhcmQgYWNyb3NzIGJvdGggdGhlIGNoZWNrIGFuZCB0aGUgYXNzaWdubWVudC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeS9sb2NraW5nIGZpeCBpbiBzYWZlIFJ1c3QgY29kZSBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIGNvcHksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGtlcm5lbCBpbmZvLWxlYWtzLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxjcj6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 22:19:45 +0000 UTC FinishedAt: 2026-09-08 22:42:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_RUST_NULL", "RUST", "CONFIGFS_FS", "BLK_DEV", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_RUST_NULL", "RUST", "CONFIGFS_FS", "BLK_DEV", "BLOCK" ], "series_id": "e68f03e7-09dd-492d-a1fe-97daa55551d0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "DeviceConfig::store", "\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c1\u003e\u003e::store", "\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c2\u003e\u003e::store", "\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c3\u003e\u003e::store", "\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c4\u003e\u003e::store", "NullBlkDevice::new" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUlVTVF9OVUxMJiMzNDssCiAgICAmIzM0O1JVU1QmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OywKICAgICYjMzQ7QkxLX0RFViYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O0RldmljZUNvbmZpZzo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2VcdTAwM2U6OnN0b3JlJiMzNDssCiAgICAmIzM0O1x1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZVx1MDAzZTo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2M0XHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtOdWxsQmxrRGV2aWNlOjpuZXcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzY29wZSBpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc2AgZm9yIGBEZXZpY2VDb25maWdgIGNvbmZpZ2ZzIGF0dHJpYnV0ZSBgc3RvcmVgIGhhbmRsZXJzLiBQcmV2aW91c2x5LCBgdGhpcy5kYXRhLmxvY2soKWAgd2FzIGFjcXVpcmVkIHRvIGNoZWNrIGBwb3dlcmVkYCBhbmQgdGhlbiByZS1hY3F1aXJlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3BlbmluZyBhIHJhY2Ugd2luZG93IChUT0NUT1UpLiBUaGUgcGF0Y2ggaG9sZHMgdGhlIG11dGV4IGxvY2sgZ3VhcmQgYWNyb3NzIGJvdGggdGhlIGNoZWNrIGFuZCB0aGUgYXNzaWdubWVudC5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kvbG9ja2luZyBmaXggaW4gc2FmZSBSdXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCBjb3B5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBrZXJuZWwgaW5mby1sZWFrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgY29uZmlnZnMgYXR0cmlidXRlIHN0b3JlIGhhbmRsZXJzIGZvciB0aGUgUnVzdCBudWxsIGJsb2NrIGRldmljZSBkcml2ZXIgKHJudWxsKS4gSG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHN0YXRlIGNoZWNrcyBhbmQgZmllbGQgYXNzaWdubWVudHMgY2xvc2VzIGEgcmFjZSB3aW5kb3cgd2hlbiBhbHRlcmluZyBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiAoYmxvY2tfc2l6ZSwgcm90YXRpb25hbCwgY2FwYWNpdHlfbWliLCBpcnFfbW9kZSkgd2hpbGUgcG93ZXJpbmcgZGV2aWNlcyBvbi9vZmYuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtYmFzZWQsIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YjdmYWIxMjFiZjQ3YjdkYTk4ODJiNThjZjRmZjY4Mzg2MThhZDEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjo0MTowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzIGIvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc1xuaW5kZXggMzJjMTBjM2Y0ZDBmZC4uNjZlZjkxYjNmZjBjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNcbkBAIC0xNzQsNyAmIzQzOzE3NCw4IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbiYjNDM7ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiYjNDM7ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAgICAgICAgIH1cbiBcbkBAIC0xODIsNyAmIzQzOzE4Myw3IEBAIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XHUwMDNjdTMyXHUwMDNlKCkubWFwX2Vycih8X3wgRUlOVkFMKT87XG4gXG4gICAgICAgICBHZW5EaXNrQnVpbGRlcjo6dmFsaWRhdGVfYmxvY2tfc2l6ZSh2YWx1ZSk/O1xuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7XG4mIzQzOyAgICAgICAgZ3VhcmQuYmxvY2tfc2l6ZSA9IHZhbHVlO1xuICAgICAgICAgT2soKCkpXG4gICAgIH1cbiB9XG5AQCAtMjA0LDExICYjNDM7MjA1LDEyIEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MyXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbiYjNDM7ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiYjNDM7ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAgICAgICAgIH1cbiBcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkucm90YXRpb25hbCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xuJiM0MzsgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPztcbiBcbiAgICAgICAgIE9rKCgpKVxuICAgICB9XG5AQCAtMjI1LDE0ICYjNDM7MjI3LDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MzXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbiYjNDM7ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiYjNDM7ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAgICAgICAgIH1cbiBcbiAgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcbiAgICAgICAgIGxldCB2YWx1ZSA9IHRleHQucGFyc2U6Olx1MDAzY3U2NFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xuIFxuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5jYXBhY2l0eV9taWIgPSB2YWx1ZTtcbiYjNDM7ICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTtcbiAgICAgICAgIE9rKCgpKVxuICAgICB9XG4gfVxuQEAgLTI0OCwxNCAmIzQzOzI1MSwxNSBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjNFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAgICAgfVxuIFxuICAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4mIzQzOyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XG4mIzQzOyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gICAgICAgICB9XG4gXG4gICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XG4gICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcdTAwM2N1OFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xuIFxuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5pcnFfbW9kZSA9IElSUU1vZGU6OnRyeV9mcm9tKHZhbHVlKT87XG4mIzQzOyAgICAgICAgZ3VhcmQuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/O1xuICAgICAgICAgT2soKCkpXG4gICAgIH1cbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9SVVNUX05VTEwmIzM0OywKICAgICYjMzQ7UlVTVCYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICAgJiMzNDtCTEtfREVWJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7RGV2aWNlQ29uZmlnOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2VcdTAwM2U6OnN0b3JlJiMzNDssCiAgICAmIzM0O1x1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMlx1MDAzZVx1MDAzZTo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MzXHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzRcdTAwM2VcdTAwM2U6OnN0b3JlJiMzNDssCiAgICAmIzM0O051bGxCbGtEZXZpY2U6Om5ldyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGJlaGF2aW9yIGluIHRoZSBjb25maWdmcyBhdHRyaWJ1dGUgc3RvcmUgaGFuZGxlcnMgZm9yIHRoZSBSdXN0IG51bGwgYmxvY2sgZGV2aWNlIGRyaXZlciAocm51bGwpLiBIb2xkaW5nIHRoZSBtdXRleCBhY3Jvc3Mgc3RhdGUgY2hlY2tzIGFuZCBmaWVsZCBhc3NpZ25tZW50cyBjbG9zZXMgYSByYWNlIHdpbmRvdyB3aGVuIGFsdGVyaW5nIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uIChibG9ja19zaXplLCByb3RhdGlvbmFsLCBjYXBhY2l0eV9taWIsIGlycV9tb2RlKSB3aGlsZSBwb3dlcmluZyBkZXZpY2VzIG9uL29mZi4gVGhlIGRyaXZlciBpcyBzb2Z0d2FyZS1iYXNlZCwgY29uZmlndXJhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjb25maWdmcyBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgYW5kIHJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliN2ZhYjEyMWJmNDdiN2RhOTg4MmI1OGNmNGZmNjgzODYxOGFkMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIyOjQxOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyBiL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMKaW5kZXggMzJjMTBjM2Y0ZDBmZC4uNjZlZjkxYjNmZjBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzCkBAIC0xNzQsNyAmIzQzOzE3NCw4IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDsgZm9yIERldmljZUNvbmZpZyB7CiAgICAgfQogCiAgICAgZm4gc3RvcmUodGhpczogJmFtcDtEZXZpY2VDb25maWcsIHBhZ2U6ICZhbXA7W3U4XSkgLSZndDsgUmVzdWx0IHsKLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHsKJiM0MzsgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpOwomIzQzOyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7CiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTsKICAgICAgICAgfQogCkBAIC0xODIsNyAmIzQzOzE4Myw3IEBAIGZuIHN0b3JlKHRoaXM6ICZhbXA7RGV2aWNlQ29uZmlnLCBwYWdlOiAmYW1wO1t1OF0pIC0mZ3Q7IFJlc3VsdCB7CiAgICAgICAgIGxldCB2YWx1ZSA9IHRleHQucGFyc2U6OiZsdDt1MzImZ3Q7KCkubWFwX2Vycih8X3wgRUlOVkFMKT87CiAKICAgICAgICAgR2VuRGlza0J1aWxkZXI6OnZhbGlkYXRlX2Jsb2NrX3NpemUodmFsdWUpPzsKLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7CiYjNDM7ICAgICAgICBndWFyZC5ibG9ja19zaXplID0gdmFsdWU7CiAgICAgICAgIE9rKCgpKQogICAgIH0KIH0KQEAgLTIwNCwxMSAmIzQzOzIwNSwxMiBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zJmx0OzImZ3Q7IGZvciBEZXZpY2VDb25maWcgewogICAgIH0KIAogICAgIGZuIHN0b3JlKHRoaXM6ICZhbXA7RGV2aWNlQ29uZmlnLCBwYWdlOiAmYW1wO1t1OF0pIC0mZ3Q7IFJlc3VsdCB7Ci0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7CiYjNDM7ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTsKJiM0MzsgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQgewogICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmRhdGEubG9jaygpLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPzsKJiM0MzsgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPzsKIAogICAgICAgICBPaygoKSkKICAgICB9CkBAIC0yMjUsMTQgJiM0MzsyMjcsMTUgQEAgaW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9ucyZsdDszJmd0OyBmb3IgRGV2aWNlQ29uZmlnIHsKICAgICB9CiAKICAgICBmbiBzdG9yZSh0aGlzOiAmYW1wO0RldmljZUNvbmZpZywgcGFnZTogJmFtcDtbdThdKSAtJmd0OyBSZXN1bHQgewotICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWQgewomIzQzOyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7CiYjNDM7ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHsKICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpOwogICAgICAgICB9CiAKICAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpOwogICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjombHQ7dTY0Jmd0OygpLm1hcF9lcnIofF98IEVJTlZBTCk/OwogCi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliID0gdmFsdWU7CiYjNDM7ICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTsKICAgICAgICAgT2soKCkpCiAgICAgfQogfQpAQCAtMjQ4LDE0ICYjNDM7MjUxLDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7NCZndDsgZm9yIERldmljZUNvbmZpZyB7CiAgICAgfQogCiAgICAgZm4gc3RvcmUodGhpczogJmFtcDtEZXZpY2VDb25maWcsIHBhZ2U6ICZhbXA7W3U4XSkgLSZndDsgUmVzdWx0IHsKLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHsKJiM0MzsgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpOwomIzQzOyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7CiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTsKICAgICAgICAgfQogCiAgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTsKICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6Jmx0O3U4Jmd0OygpLm1hcF9lcnIofF98IEVJTlZBTCk/OwogCi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/OwomIzQzOyAgICAgICAgZ3VhcmQuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/OwogICAgICAgICBPaygoKSkKICAgICB9CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBSdXN0IE51bGwgQmxvY2sgRHJpdmVyKioKCk9rYXksIHNvIHRoZXkgd2FudCBtZSB0byBldmFsdWF0ZSB0aGlzIGtlcm5lbCBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBzdGFuZGFyZCBRQSB0YXNrLCBwcm9iYWJseSByZWxhdGVkIHRvIGRlZmVuc2l2ZSBmdXp6aW5nIG9yIHRyaWFnZSwgYW5kIHRoZSByaXNrIGhlcmUgc2VlbXMgbmVnbGlnaWJsZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBrZXJuZWwgZW5naW5lZXJpbmcgUUEgYW5hbHlzaXMgdXNpbmcgc3l6a2FsbGVyLCBzbyBJIGNhbiBzYWZlbHkgcHJvY2VlZC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIGlzIGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYC4gSXQmIzM5O3MgYWRkcmVzc2luZyBhIGxvY2tpbmcgaXNzdWUgd2l0aGluIHRoZSBSdXN0IG51bGwgYmxvY2sgZHJpdmVyLCBgcm51bGxgLiBJIGNhbiBhbHJlYWR5IHNlZSB0aGUgcHJvYmxlbSEgVGhleSB3ZXJlIGRyb3BwaW5nIHRoZSBsb2NrIGJldHdlZW4gY2hlY2tpbmcgdGhlIGBwb3dlcmVkYCBzdGF0ZSBhbmQgdXBkYXRpbmcgYGJsb2NrX3NpemVgISBUaGF0IGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbiwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgbG9ja2luZyBlZmZpY2llbmN5IGlzc3VlLiBCZWZvcmUsIHRoZSBjb2RlIGxvb2tlZCBsaWtlIHRoaXM6CgpgYGBydXN0CmlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7CiAgICByZXR1cm4gRXJyKEVCVVNZKTsKfQouLi4KdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7CmBgYAoKV2hpY2ggaXMgb2J2aW91c2x5IGZsYXdlZC4gTm93LCB0aGV5JiMzOTt2ZSBmaXhlZCBpdCBieSBob2xkaW5nIHRoZSBsb2NrIGZvciB0aGUgZW50aXJlIGNyaXRpY2FsIHNlY3Rpb246CgpgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7YAoKTXVjaCBiZXR0ZXIuIEl0JiMzOTtzIGdvb2QgdG8gc2VlIHRoaXMga2luZCBvZiB2dWxuZXJhYmlsaXR5IGJlaW5nIGlkZW50aWZpZWQgYW5kIGFkZHJlc3NlZC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdXNlIHRoZSBzdGFuZGFyZCB0b29scyB0byBkbyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGZpbGVzIHdpdGhpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9gIGFuZCBhc3NvY2lhdGVkIEtjb25maWcgZmlsZXMgd2l0aGluIHRoZSByZXBvc2l0b3J5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcmVsYXRlZCBjb2RlLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlLWVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm51bGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOT1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MjA6c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTIxLVxuLS1cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU9Mzc9b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXHQmIzQzOz0gbnVsbF9ibGsvXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19CTEtfREVWX1JVU1RfTlVMTCkgJiM0Mzs9IHJudWxsL1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zOS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3JudWxsL01ha2VmaWxlLTEtXG5kcml2ZXJzL2Jsb2NrL3JudWxsL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSAmIzQzOz0gcm51bGxfbW9kLm9cbmRyaXZlcnMvYmxvY2svcm51bGwvTWFrZWZpbGU6MzpybnVsbF9tb2QteSA6PSBybnVsbC5vXG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0xNj1wdWIoY3JhdGUpIGZuIHN1YnN5c3RlbSgpIC1cdTAwM2UgaW1wbCBQaW5Jbml0XHUwMDNja2VybmVsOjpjb25maWdmczo6U3Vic3lzdGVtXHUwMDNjQ29uZmlnXHUwMDNlLCBFcnJvclx1MDAzZSB7XG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0yNS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MjY6ICAgIGtlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbTo6bmV3KGNcJiMzNDtybnVsbFwmIzM0OywgaXRlbV90eXBlLCB0cnlfcGluX2luaXQhKENvbmZpZyB7fSkpXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTI3LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3JudWxsL3JudWxsLnJzLTIyLSAgICB0eXBlOiBOdWxsQmxrTW9kdWxlLFxuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5yczoyMzogICAgbmFtZTogXCYjMzQ7cm51bGxfbW9kXCYjMzQ7LFxuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5ycy0yNC0gICAgYXV0aG9yczogW1wmIzM0O0FuZHJlYXMgSGluZGJvcmdcJiMzNDtdLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN0YXJ0aW5nIHBvaW50LCBhcyBpZiBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgcm51bGwgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHVuZGVybHlpbmcgbWVjaGFuaWNzIGZvciB0aGUgYHJudWxsYCBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgYm90aCBgZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgLiBUaGUgYEtjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCBhbmQgYW55IGRlcGVuZGVuY2llcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHdoZXRoZXIgdGhlIGRyaXZlciBpcyBidWlsdCBpbiBvciBhcyBhIG1vZHVsZSwgYW55IHR1bmFibGUgcGFyYW1ldGVycywgYW5kIG1heWJlIHNvbWUgaGVscCB0ZXh0LiBUaGVuLCBgY29uZmlnZnMucnNgIGlzIHJlYWxseSB3aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGtleSwgYXMgSSByZWNhbGwgdGhpcyBpcyBob3cgdGhlIGRyaXZlciBkeW5hbWljYWxseSBjb25maWd1cmVkLiBTbyBJIGV4cGVjdCBJIGFtIHNlZWluZyBob3cgdGhlIGRyaXZlciBjb25maWd1cmVzIHZpYSBjb25maWdmcy4gVGhpcyBpcyB3aGVyZSB0aGUgcnVudGltZSBhc3BlY3RzIGFyZSBtYW5hZ2VkLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZHJpdmVyJiMzOTtzIHN0YXRlIGFuZCBob3cgdGhleSBhcmUgcG9wdWxhdGVkIGJ5IHRoZSBjb25maWdmcyBlbnRyaWVzLiBJIGFtIGV4cGVjdGluZyBzb21lIHNvcnQgb2YgZmlsZSBzdHJ1Y3R1cmUgbWFwcGVkIHRvIHRoZXNlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGVzLiBJIGFudGljaXBhdGUgSSYjMzk7bGwgZmluZCB0aGUgbG9naWMgZm9yIGNyZWF0aW5nLCByZWFkaW5nLCBhbmQgd3JpdGluZyB0aGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gdmlhIHRoZSBjb25maWdmcyBpbnRlcmZhY2UuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVzZSBmaWxlcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBSdXN0IG51bGwgYmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIEJMS19ERVZfUlVTVF9OVUxMXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtSdXN0IG51bGwgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIFJVU1QgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgaXMgdGhlIFJ1c3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIG51bGwgYmxvY2sgZHJpdmVyLiBMaWtlXG4gIDEwOlx0XHQgIHRoZSBDIHZlcnNpb24sIHRoZSBkcml2ZXIgYWxsb3dzIHRoZSB1c2VyIHRvIGNyZWF0ZSB2aXJ1dGFsIGJsb2NrXG4gIDExOlx0XHQgIGRldmljZXMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB2aWEgdmFyaW91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAxNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBgcm51bGxgIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBybnVsbGAgYmxvY2sgZHJpdmVyIGludGVyYWN0cyB3aXRoIGBjb25maWdmc2AsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgY29uZmlnZnMucnNgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGRpdmluZyByaWdodCBpbnRvIHRoZSBjb2RlIGF0IGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYC4gSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBzeW1ib2xzIHRoYXQgYXJlIGRlZmluaW5nIHRoaXMgaW50ZWdyYXRpb24uIFdoYXQgYXJlIHRoZSBjb3JlIHJvdXRpbmVzIGhhbmRsaW5nIHRoZSBjcmVhdGlvbiwgcG9wdWxhdGlvbiwgYW5kIGludGVyYWN0aW9uIG9mIHRoZSBgcm51bGxgIGJsb2NrIGRldmljZSBpbnN0YW5jZXMgd2l0aGluIHRoZSBgY29uZmlnZnNgIGZyYW1ld29yaz8gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBzdHJ1Y3R1cmFsIGdsdWUg4oCTIGhvdyB0aGUgZHJpdmVyJiMzOTtzIGJsb2NrIGRldmljZSByZXByZXNlbnRhdGlvbiBpcyBleHBvc2VkIGFuZCBtYW5hZ2VkIHRocm91Z2ggdGhlIGZpbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdCAgICAgICAgfVxuIDE2MTpcdFxuIDE2MjpcdCAgICAgICAgT2soKCkpXG4gMTYzOlx0ICAgIH1cbiAxNjQ6XHR9XG4gMTY1Olx0XG4gMTY2Olx0I1t2dGFibGVdXG4gMTY3Olx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG4gMTY4Olx0ICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcbiAxNjk6XHRcbiAxNzA6XHQgICAgZm4gc2hvdyh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cdTAwM2UgUmVzdWx0XHUwMDNjdXNpemVcdTAwM2Uge1xuIDE3MTpcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XG4gMTcyOlx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXCYjMzQ7e31cXG5cJiMzNDssIHRoaXMuZGF0YS5sb2NrKCkuYmxvY2tfc2l6ZSkpPztcbiAxNzM6XHQgICAgICAgIE9rKHdyaXRlci5ieXRlc193cml0dGVuKCkpXG4gMTc0Olx0ICAgIH1cbiAxNzU6XHRcbiAxNzY6XHQgICAgZm4gc3RvcmUodGhpczogXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcdTAwMjZbdThdKSAtXHUwMDNlIFJlc3VsdCB7XG4gMTc3Olx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiAxNzg6XHQgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuIDE3OTpcdCAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuIDE4MDpcdCAgICAgICAgfVxuIDE4MTpcdFxuIDE4MjpcdCAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xuIDE4MzpcdCAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XHUwMDNjdTMyXHUwMDNlKCkubWFwX2Vycih8X3wgRUlOVkFMKT87XG4gMTg0Olx0XG4gMTg1Olx0ICAgICAgICBHZW5EaXNrQnVpbGRlcjo6dmFsaWRhdGVfYmxvY2tfc2l6ZSh2YWx1ZSk/O1xuIDE4NjpcdCAgICAgICAgZ3VhcmQuYmxvY2tfc2l6ZSA9IHZhbHVlO1xuIDE4NzpcdCAgICAgICAgT2soKCkpXG4gMTg4Olx0ICAgIH1cbiAxODk6XHR9XG4gMTkwOlx0XG4gMTkxOlx0I1t2dGFibGVdXG4gMTkyOlx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG4gMTkzOlx0ICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcbiAxOTQ6XHRcbiAxOTU6XHQgICAgZm4gc2hvdyh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cdTAwM2UgUmVzdWx0XHUwMDNjdXNpemVcdTAwM2Uge1xuIDE5NjpcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XG4gMTk3Olx0XG4gMTk4Olx0ICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnJvdGF0aW9uYWwge1xuIDE5OTpcdCAgICAgICAgICAgIHdyaXRlci53cml0ZV9zdHIoXCYjMzQ7MVxcblwmIzM0Oyk/O1xuIDIwMDpcdCAgICAgICAgfSBlbHNlIHtcbiAyMDE6XHQgICAgICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFwmIzM0OzBcXG5cJiMzNDspPztcbiAyMDI6XHQgICAgICAgIH1cbiAyMDM6XHRcbiAyMDQ6XHQgICAgICAgIE9rKHdyaXRlci5ieXRlc193cml0dGVuKCkpXG4gMjA1Olx0ICAgIH1cbiAyMDY6XHRcbiAyMDc6XHQgICAgZm4gc3RvcmUodGhpczogXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcdTAwMjZbdThdKSAtXHUwMDNlIFJlc3VsdCB7XG4gMjA4Olx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiAyMDk6XHQgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuIDIxMDpcdCAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuIDIxMTpcdCAgICAgICAgfVxuIDIxMjpcdFxuIDIxMzpcdCAgICAgICAgZ3VhcmQucm90YXRpb25hbCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xuIDIxNDpcdFxuIDIxNTpcdCAgICAgICAgT2soKCkpXG4gMjE2Olx0ICAgIH1cbiAyMTc6XHR9XG4gMjE4Olx0XG4gMjE5Olx0I1t2dGFibGVdXG4gMjIwOlx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzNcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG4gMjIxOlx0ICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcbiAyMjI6XHRcbiAyMjM6XHQgICAgZm4gc2hvdyh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cdTAwM2UgUmVzdWx0XHUwMDNjdXNpemVcdTAwM2Uge1xuIDIyNDpcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XG4gMjI1Olx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXCYjMzQ7e31cXG5cJiMzNDssIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliKSk/O1xuIDIyNjpcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcbiAyMjc6XHQgICAgfVxuIDIyODpcdFxuIDIyOTpcdCAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbiAyMzA6XHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuIDIzMTpcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gMjMyOlx0ICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gMjMzOlx0ICAgICAgICB9XG4gMjM0Olx0XG4gMjM1Olx0ICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XG4gMjM2Olx0ICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcdTAwM2N1NjRcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcbiAyMzc6XHRcbiAyMzg6XHQgICAgICAgIGd1YXJkLmNhcGFjaXR5X21pYiA9IHZhbHVlO1xuIDIzOTpcdCAgICAgICAgT2soKCkpXG4gMjQwOlx0ICAgIH1cbiAyNDE6XHR9XG4gMjQyOlx0XG4gMjQzOlx0I1t2dGFibGVdXG4gMjQ0Olx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzRcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG4gMjQ1Olx0ICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcbiAyNDY6XHRcbiAyNDc6XHQgICAgZm4gc2hvdyh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cdTAwM2UgUmVzdWx0XHUwMDNjdXNpemVcdTAwM2Uge1xuIDI0ODpcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XG4gMjQ5Olx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXCYjMzQ7e31cXG5cJiMzNDssIHRoaXMuZGF0YS5sb2NrKCkuaXJxX21vZGUpKT87XG4gMjUwOlx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxuIDI1MTpcdCAgICB9XG4gMjUyOlx0XG4gMjUzOlx0ICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuIDI1NDpcdCAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XG4gMjU1Olx0ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAyNTY6XHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAyNTc6XHQgICAgICAgIH1cbiAyNTg6XHRcbiAyNTk6XHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzQxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gcm51bGwgYW5kIFJ1c3QgS2VybmVsIFN5bWJvbCBOYW1pbmcqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBybnVsbGAgaW50ZXJhY3RzIHdpdGggYGNvbmZpZ2ZzYCBzcGVjaWZpY2FsbHksIGFuZCBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaG93IHRoZSBSdXN0IHN5bWJvbHMgYXJlIG5hbWVkIHdpdGhpbiB0aGUga2VybmVsIGNvbnRleHQuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uLiBGaXJzdCBzdG9wLCB0aGUgZmlsZSBzeXN0ZW0uIFdoZXJlIGlzIHRoZSByZWxldmFudCBjb2RlPyBBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGZpbGVzIHdpdGhpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9gLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IG15IGluc3BlY3Rpb24gdGhlcmUgdG8gc2VlIHdoYXQgdGhlIGFyY2hpdGVjdHVyZSBpcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoaW5ncy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVzaWduIGFuZCB3aGVyZSB0aGUgUnVzdCBjb21wb25lbnRzIGFyZSB0aWVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JudWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnMucnMmIzM0OywKICAgICYjMzQ7cm51bGwucnMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTg1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aGUgc2FtZSB0aG91Z2h0czoKCioqRXhwbG9yaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGlzIGNvZGViYXNlLCBhbmQgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBjb25maWd1cmF0aW9uIGFuZCBwb3RlbnRpYWxseSwgbnVsbCBkZXZpY2VzLiBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSB0aGluZ3MgaW50ZXJhY3QuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIHJlbGF0ZWQgY29kZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBjb25maWdmcy5yc2AgYW5kIGBybnVsbC5yc2AuIEkgd2FudCB0byBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGZsb3dzLCBhbmQgaG93IHRoZSBudWxsIGRldmljZSBpcyBiZWluZyBpbXBsZW1lbnRlZCBvciB1c2VkLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhvc2UgZmlsZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHR1c2Ugc3VwZXI6Ok51bGxCbGtEZXZpY2U7XG4gICA0Olx0dXNlIGtlcm5lbDo6e1xuICAgNTpcdCAgICBibG9jazo6bXE6Omdlbl9kaXNrOjp7R2VuRGlzaywgR2VuRGlza0J1aWxkZXJ9LFxuICAgNjpcdCAgICBjb25maWdmczo6e3NlbGYsIEF0dHJpYnV0ZU9wZXJhdGlvbnN9LFxuICAgNzpcdCAgICBjb25maWdmc19hdHRycyxcbiAgIDg6XHQgICAgZm10Ojp7c2VsZiwgV3JpdGUgYXMgX30sXG4gICA5Olx0ICAgIG5ld19tdXRleCxcbiAgMTA6XHQgICAgcGFnZTo6UEFHRV9TSVpFLFxuICAxMTpcdCAgICBwcmVsdWRlOjoqLFxuICAxMjpcdCAgICBzdHI6Ontrc3RydG9ib29sX2J5dGVzLCBDU3RyaW5nfSxcbiAgMTM6XHQgICAgc3luYzo6TXV0ZXgsXG4gIDE0Olx0fTtcbiAgMTU6XHRcbiAgMTY6XHRwdWIoY3JhdGUpIGZuIHN1YnN5c3RlbSgpIC1cdTAwM2UgaW1wbCBQaW5Jbml0XHUwMDNja2VybmVsOjpjb25maWdmczo6U3Vic3lzdGVtXHUwMDNjQ29uZmlnXHUwMDNlLCBFcnJvclx1MDAzZSB7XG4gIDE3Olx0ICAgIGxldCBpdGVtX3R5cGUgPSBjb25maWdmc19hdHRycyEge1xuICAxODpcdCAgICAgICAgY29udGFpbmVyOiBjb25maWdmczo6U3Vic3lzdGVtXHUwMDNjQ29uZmlnXHUwMDNlLFxuICAxOTpcdCAgICAgICAgZGF0YTogQ29uZmlnLFxuICAyMDpcdCAgICAgICAgY2hpbGQ6IERldmljZUNvbmZpZyxcbiAgMjE6XHQgICAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgMjI6XHQgICAgICAgICAgICBmZWF0dXJlczogMCxcbiAgMjM6XHQgICAgICAgIF0sXG4gIDI0Olx0ICAgIH07XG4gIDI1Olx0XG4gIDI2Olx0ICAgIGtlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbTo6bmV3KGNcJiMzNDtybnVsbFwmIzM0OywgaXRlbV90eXBlLCB0cnlfcGluX2luaXQhKENvbmZpZyB7fSkpXG4gIDI3Olx0fVxuICAyODpcdFxuICAyOTpcdCNbcGluX2RhdGFdXG4gIDMwOlx0cHViKGNyYXRlKSBzdHJ1Y3QgQ29uZmlnIHt9XG4gIDMxOlx0XG4gIDMyOlx0I1t2dGFibGVdXG4gIDMzOlx0aW1wbCBBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMFx1MDAzZSBmb3IgQ29uZmlnIHtcbiAgMzQ6XHQgICAgdHlwZSBEYXRhID0gQ29uZmlnO1xuICAzNTpcdFxuICAzNjpcdCAgICBmbiBzaG93KF90aGlzOiBcdTAwMjZDb25maWcsIHBhZ2U6IFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cdTAwM2UgUmVzdWx0XHUwMDNjdXNpemVcdTAwM2Uge1xuICAzNzpcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XG4gIDM4Olx0ICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFwmIzM0O2Jsb2Nrc2l6ZSxzaXplLHJvdGF0aW9uYWwsaXJxbW9kZVxcblwmIzM0Oyk/O1xuICAzOTpcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcbiAgNDA6XHQgICAgfVxuICA0MTpcdH1cbiAgNDI6XHRcbiAgNDM6XHQjW3Z0YWJsZV1cbiAgNDQ6XHRpbXBsIGNvbmZpZ2ZzOjpHcm91cE9wZXJhdGlvbnMgZm9yIENvbmZpZyB7XG4gIDQ1Olx0ICAgIHR5cGUgQ2hpbGQgPSBEZXZpY2VDb25maWc7XG4gIDQ2Olx0XG4gIDQ3Olx0ICAgIGZuIG1ha2VfZ3JvdXAoXG4gIDQ4Olx0ICAgICAgICBcdTAwMjZzZWxmLFxuICA0OTpcdCAgICAgICAgbmFtZTogXHUwMDI2Q1N0cixcbiAgNTA6XHQgICAgKSAtXHUwMDNlIFJlc3VsdFx1MDAzY2ltcGwgUGluSW5pdFx1MDAzY2NvbmZpZ2ZzOjpHcm91cFx1MDAzY0RldmljZUNvbmZpZ1x1MDAzZSwgRXJyb3JcdTAwM2VcdTAwM2Uge1xuICA1MTpcdCAgICAgICAgbGV0IGl0ZW1fdHlwZSA9IGNvbmZpZ2ZzX2F0dHJzISB7XG4gIDUyOlx0ICAgICAgICAgICAgY29udGFpbmVyOiBjb25maWdmczo6R3JvdXBcdTAwM2NEZXZpY2VDb25maWdcdTAwM2UsXG4gIDUzOlx0ICAgICAgICAgICAgZGF0YTogRGV2aWNlQ29uZmlnLFxuICA1NDpcdCAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgNTU6XHQgICAgICAgICAgICAgICAgLy8gTmFtZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDIG51bGxfYmxrXG4gIDU2Olx0ICAgICAgICAgICAgICAgIHBvd2VyOiAwLFxuICA1NzpcdCAgICAgICAgICAgICAgICBibG9ja3NpemU6IDEsXG4gIDU4Olx0ICAgICAgICAgICAgICAgIHJvdGF0aW9uYWw6IDIsXG4gIDU5Olx0ICAgICAgICAgICAgICAgIHNpemU6IDMsXG4gIDYwOlx0ICAgICAgICAgICAgICAgIGlycW1vZGU6IDQsXG4gIDYxOlx0ICAgICAgICAgICAgXSxcbiAgNjI6XHQgICAgICAgIH07XG4gIDYzOlx0XG4gIDY0Olx0ICAgICAgICBPayhjb25maWdmczo6R3JvdXA6Om5ldyhcbiAgNjU6XHQgICAgICAgICAgICBuYW1lLnRyeV9pbnRvKCk/LFxuICA2NjpcdCAgICAgICAgICAgIGl0ZW1fdHlwZSxcbiAgNjc6XHQgICAgICAgICAgICAvLyBUT0RPOiBjYW5ub3QgY29lcmNlIG5ld19tdXRleCEoKSB0byBpbXBsIFBpbkluaXRcdTAwM2NfLCBFcnJvclx1MDAzZSwgc28gcHV0IG11dGV4IGluc2lkZVxuICA2ODpcdCAgICAgICAgICAgIHRyeV9waW5faW5pdCEoIERldmljZUNvbmZpZyB7XG4gIDY5Olx0ICAgICAgICAgICAgICAgIGRhdGEgXHUwMDNjLSBuZXdfbXV0ZXghKERldmljZUNvbmZpZ0lubmVyIHtcbiAgNzA6XHQgICAgICAgICAgICAgICAgICAgIHBvd2VyZWQ6IGZhbHNlLFxuICA3MTpcdCAgICAgICAgICAgICAgICAgICAgYmxvY2tfc2l6ZTogNDA5NixcbiAgNzI6XHQgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uYWw6IGZhbHNlLFxuICA3MzpcdCAgICAgICAgICAgICAgICAgICAgZGlzazogTm9uZSxcbiAgNzQ6XHQgICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5X21pYjogNDA5NixcbiAgNzU6XHQgICAgICAgICAgICAgICAgICAgIGlycV9tb2RlOiBJUlFNb2RlOjpOb25lLFxuICA3NjpcdCAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZS50cnlfaW50bygpPyxcbiAgNzc6XHQgICAgICAgICAgICAgICAgfSksXG4gIDc4Olx0ICAgICAgICAgICAgfSksXG4gIDc5Olx0ICAgICAgICApKVxuICA4MDpcdCAgICB9XG4gIDgxOlx0fVxuICA4MjpcdFxuICA4MzpcdCNbZGVyaXZlKERlYnVnLCBDbG9uZSwgQ29weSldXG4gIDg0Olx0cHViKGNyYXRlKSBlbnVtIElSUU1vZGUge1xuICA4NTpcdCAgICBOb25lLFxuICA4NjpcdCAgICBTb2Z0LFxuICA4NzpcdH1cbiAgODg6XHRcbiAgODk6XHRpbXBsIFRyeUZyb21cdTAwM2N1OFx1MDAzZSBmb3IgSVJRTW9kZSB7XG4gIDkwOlx0ICAgIHR5cGUgRXJyb3IgPSBrZXJuZWw6OmVycm9yOjpFcnJvcjtcbiAgOTE6XHRcbiAgOTI6XHQgICAgZm4gdHJ5X2Zyb20odmFsdWU6IHU4KSAtXHUwMDNlIFJlc3VsdFx1MDAzY1NlbGZcdTAwM2Uge1xuICA5MzpcdCAgICAgICAgbWF0Y2ggdmFsdWUge1xuICA5NDpcdCAgICAgICAgICAgIDAgPVx1MDAzZSBPayhTZWxmOjpOb25lKSxcbiAgOTU6XHQgICAgICAgICAgICAxID1cdTAwM2UgT2soU2VsZjo6U29mdCksXG4gIDk2Olx0ICAgICAgICAgICAgXyA9XHUwMDNlIEVycihFSU5WQUwpLFxuICA5NzpcdCAgICAgICAgfVxuICA5ODpcdCAgICB9XG4gIDk5Olx0fVxuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDcxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBybnVsbCBDb25maWdGUyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZXhhbWluZSB0aGUgYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgIGZpbGUsIHNwZWNpZmljYWxseSBsaW5lcyAxMDEgdGhyb3VnaCAxNjAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgY29udGV4dC4gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBybnVsbCBibG9jayBkcml2ZXIgY29uY2VwdCwgc28gdGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIENvbmZpZ0ZTIGludGVyZmFjZSBmb3IgaXQuIEkgd2FudCB0byBzZWUgaG93IHRoZSB2aXJ0dWFsIGJsb2NrIGRldmljZSBpcyBjb25maWd1cmVkIHRocm91Z2ggdGhlIGZpbGVzeXN0ZW0uCgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugb2JqZWN0IGNyZWF0aW9uLCBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIGRldmljZSBzaXplLCByZWFkLW9ubHkgc3RhdHVzLCBwZXJoYXBzIGV2ZW4gc29tZSBraW5kIG9mIGFjY2VzcyBjb250cm9sIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBDb25maWdGUyBpcyBrbm93biBmb3IgcHJvdmlkaW5nIGEgc3RydWN0dXJlZCB3YXkgdG8gZXhwb3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1vcmdhbml6ZWQgYW5kIGZvbGxvd3MgYSBjb25zaXN0ZW50IHBhdHRlcm4uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBDb25maWdGUyBpZGlvbXMgLSBob3cgdGhleSBkZWZpbmUgdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmVzLCB0aGUgY2FsbGJhY2tzIGZvciBoYW5kbGluZyByZWFkcyBhbmQgd3JpdGVzIHRvIHRob3NlIGF0dHJpYnV0ZXMsIGFuZCBob3cgdGhlIGRldmljZSBpdHNlbGYgaXMgYnJvdWdodCBpbnRvIGJlaW5nIG9yIGRlc3Ryb3llZC4KCk15IGZpcnN0IHJlYWQtdGhyb3VnaCB3aWxsIGJlIHRvIGdldCBhIGdlbmVyYWwgb3ZlcnZpZXcsIG5vdGluZyBhbnkgaW1tZWRpYXRlIHBhdHRlcm5zIG9yIGZ1bmN0aW9ucyB0aGF0IHNlZW0gaW1wb3J0YW50LiBUaGVuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiBDb25maWdGUyBhbmQgdGhlIGJsb2NrIGRldmljZSBkcml2ZXIgaXMgdGhlIGhlYXJ0IG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgcGFyYW1ldGVycyBhcmUgY29uZmlndXJhYmxlIGFuZCBob3cgdGhvc2UgcGFyYW1ldGVycyBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGF0YSB2YWxpZGF0aW9uIG9yIGVycm9yIGhhbmRsaW5nIHdpbGwgbGVhcCBvdXQgYXQgbWUgcHJldHR5IHF1aWNrbHkuIEkgYW50aWNpcGF0ZSBhIGZhaXIgYml0IG9mIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBjb25zaWRlcmF0aW9ucywgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBwYXkgcGFydGljdWxhciBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0aW1wbCBmbXQ6OkRpc3BsYXkgZm9yIElSUU1vZGUge1xuIDEwMjpcdCAgICBmbiBmbXQoXHUwMDI2c2VsZiwgZjogXHUwMDI2bXV0IGZtdDo6Rm9ybWF0dGVyXHUwMDNjJiMzOTtfXHUwMDNlKSAtXHUwMDNlIGZtdDo6UmVzdWx0IHtcbiAxMDM6XHQgICAgICAgIG1hdGNoIHNlbGYge1xuIDEwNDpcdCAgICAgICAgICAgIFNlbGY6Ok5vbmUgPVx1MDAzZSBmLndyaXRlX3N0cihcJiMzNDswXCYjMzQ7KT8sXG4gMTA1Olx0ICAgICAgICAgICAgU2VsZjo6U29mdCA9XHUwMDNlIGYud3JpdGVfc3RyKFwmIzM0OzFcJiMzNDspPyxcbiAxMDY6XHQgICAgICAgIH1cbiAxMDc6XHQgICAgICAgIE9rKCgpKVxuIDEwODpcdCAgICB9XG4gMTA5Olx0fVxuIDExMDpcdFxuIDExMTpcdCNbcGluX2RhdGFdXG4gMTEyOlx0cHViKGNyYXRlKSBzdHJ1Y3QgRGV2aWNlQ29uZmlnIHtcbiAxMTM6XHQgICAgI1twaW5dXG4gMTE0Olx0ICAgIGRhdGE6IE11dGV4XHUwMDNjRGV2aWNlQ29uZmlnSW5uZXJcdTAwM2UsXG4gMTE1Olx0fVxuIDExNjpcdFxuIDExNzpcdCNbcGluX2RhdGFdXG4gMTE4Olx0c3RydWN0IERldmljZUNvbmZpZ0lubmVyIHtcbiAxMTk6XHQgICAgcG93ZXJlZDogYm9vbCxcbiAxMjA6XHQgICAgbmFtZTogQ1N0cmluZyxcbiAxMjE6XHQgICAgYmxvY2tfc2l6ZTogdTMyLFxuIDEyMjpcdCAgICByb3RhdGlvbmFsOiBib29sLFxuIDEyMzpcdCAgICBjYXBhY2l0eV9taWI6IHU2NCxcbiAxMjQ6XHQgICAgaXJxX21vZGU6IElSUU1vZGUsXG4gMTI1Olx0ICAgIGRpc2s6IE9wdGlvblx1MDAzY0dlbkRpc2tcdTAwM2NOdWxsQmxrRGV2aWNlXHUwMDNlXHUwMDNlLFxuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHQjW3Z0YWJsZV1cbiAxMjk6XHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAxMzA6XHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuIDEzMTpcdFxuIDEzMjpcdCAgICBmbiBzaG93KHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVx1MDAzZSBSZXN1bHRcdTAwM2N1c2l6ZVx1MDAzZSB7XG4gMTMzOlx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcbiAxMzQ6XHRcbiAxMzU6XHQgICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4gMTM2Olx0ICAgICAgICAgICAgd3JpdGVyLndyaXRlX3N0cihcJiMzNDsxXFxuXCYjMzQ7KT87XG4gMTM3Olx0ICAgICAgICB9IGVsc2Uge1xuIDEzODpcdCAgICAgICAgICAgIHdyaXRlci53cml0ZV9zdHIoXCYjMzQ7MFxcblwmIzM0Oyk/O1xuIDEzOTpcdCAgICAgICAgfVxuIDE0MDpcdFxuIDE0MTpcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcbiAxNDI6XHQgICAgfVxuIDE0MzpcdFxuIDE0NDpcdCAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbiAxNDU6XHQgICAgICAgIGxldCBwb3dlcl9vcCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xuIDE0NjpcdCAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XG4gMTQ3Olx0XG4gMTQ4Olx0ICAgICAgICBpZiAhZ3VhcmQucG93ZXJlZCBcdTAwMjZcdTAwMjYgcG93ZXJfb3Age1xuIDE0OTpcdCAgICAgICAgICAgIGd1YXJkLmRpc2sgPSBTb21lKE51bGxCbGtEZXZpY2U6Om5ldyhcbiAxNTA6XHQgICAgICAgICAgICAgICAgXHUwMDI2Z3VhcmQubmFtZSxcbiAxNTE6XHQgICAgICAgICAgICAgICAgZ3VhcmQuYmxvY2tfc2l6ZSxcbiAxNTI6XHQgICAgICAgICAgICAgICAgZ3VhcmQucm90YXRpb25hbCxcbiAxNTM6XHQgICAgICAgICAgICAgICAgZ3VhcmQuY2FwYWNpdHlfbWliLFxuIDE1NDpcdCAgICAgICAgICAgICAgICBndWFyZC5pcnFfbW9kZSxcbiAxNTU6XHQgICAgICAgICAgICApPyk7XG4gMTU2Olx0ICAgICAgICAgICAgZ3VhcmQucG93ZXJlZCA9IHRydWU7XG4gMTU3Olx0ICAgICAgICB9IGVsc2UgaWYgZ3VhcmQucG93ZXJlZCBcdTAwMjZcdTAwMjYgIXBvd2VyX29wIHtcbiAxNTg6XHQgICAgICAgICAgICBkcm9wKGd1YXJkLmRpc2sudGFrZSgpKTtcbiAxNTk6XHQgICAgICAgICAgICBndWFyZC5wb3dlcmVkID0gZmFsc2U7XG4gMTYwOlx0ICAgICAgICB9XG4gMTYxOlx0XG4gMTYyOlx0ICAgICAgICBPaygoKSlcbiAxNjM6XHQgICAgfVxuIDE2NDpcdH1cbiAxNjU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc5NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBybnVsbC5yc2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGNpcmNsaW5nIGJhY2ssIGFuZCBteSBpbnRlcm5hbCBjaGVja2xpc3QgaGFzIGZsYWdnZWQgdGhlIGBybnVsbC5yc2AgbW9kdWxlLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHkuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGVkZ2UgY2FzZXMgaXQgaGFuZGxlcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSB0byByZWZyZXNoIG15IG1lbW9yeSwgY29uZmlybSB0aGF0IHdlJiMzOTtyZSBwcm9wZXJseSBhZGRyZXNzaW5nIHRob3NlIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEkmIzM5O20gZXNwZWNpYWxseSBmb2N1c2VkIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXRzIGJlaGF2aW9yIG1pZ2h0IGluZmx1ZW5jZSBkZXBlbmRlbnQgc3Vic3lzdGVtcy4gQXJlIHRoZXJlIGFueSBzdWJ0bGUgdGhyZWFkaW5nIGlzc3VlcyBJIG1pZ2h0IGhhdmUgbWlzc2VkIGluIHRoZSBpbml0aWFsIHJldmlldz8gQ291bGQgYSByYWNlIGNvbmRpdGlvbiBiZSBsdXJraW5nIGluIHRoZXJlPyBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSYjMzk7cmUgbm90IGluYWR2ZXJ0ZW50bHkgaW50cm9kdWNpbmcgdnVsbmVyYWJpbGl0aWVzIOKAkyBpdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEsIGFuZCBhIHNlY3VyaXR5IGZsYXcgdGhlcmUgY291bGQgYmUgY2F0YXN0cm9waGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm51bGwvcm51bGwucnMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdC8vISBUaGlzIGlzIGEgUnVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQyBudWxsIGJsb2NrIGRyaXZlci5cbiAgIDQ6XHRcbiAgIDU6XHRtb2QgY29uZmlnZnM7XG4gICA2Olx0XG4gICA3Olx0dXNlIGNvbmZpZ2ZzOjpJUlFNb2RlO1xuICAgODpcdHVzZSBrZXJuZWw6OntcbiAgIDk6XHQgICAgYmxvY2s6OntcbiAgMTA6XHQgICAgICAgIHNlbGYsXG4gIDExOlx0ICAgICAgICBtcTo6e1xuICAxMjpcdCAgICAgICAgICAgIHNlbGYsXG4gIDEzOlx0ICAgICAgICAgICAgZ2VuX2Rpc2s6OntzZWxmLCBHZW5EaXNrfSxcbiAgMTQ6XHQgICAgICAgICAgICBPcGVyYXRpb25zLCBUYWdTZXQsXG4gIDE1Olx0ICAgICAgICB9LFxuICAxNjpcdCAgICB9LFxuICAxNzpcdCAgICBwcmVsdWRlOjoqLFxuICAxODpcdCAgICBzeW5jOjp7YXJlZjo6QVJlZiwgQXJjfSxcbiAgMTk6XHR9O1xuICAyMDpcdFxuICAyMTpcdG1vZHVsZSEge1xuICAyMjpcdCAgICB0eXBlOiBOdWxsQmxrTW9kdWxlLFxuICAyMzpcdCAgICBuYW1lOiBcJiMzNDtybnVsbF9tb2RcJiMzNDssXG4gIDI0Olx0ICAgIGF1dGhvcnM6IFtcJiMzNDtBbmRyZWFzIEhpbmRib3JnXCYjMzQ7XSxcbiAgMjU6XHQgICAgZGVzY3JpcHRpb246IFwmIzM0O1J1c3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIEMgbnVsbCBibG9jayBkcml2ZXJcJiMzNDssXG4gIDI2Olx0ICAgIGxpY2Vuc2U6IFwmIzM0O0dQTCB2MlwmIzM0OyxcbiAgMjc6XHR9XG4gIDI4Olx0XG4gIDI5Olx0I1twaW5fZGF0YV1cbiAgMzA6XHRzdHJ1Y3QgTnVsbEJsa01vZHVsZSB7XG4gIDMxOlx0ICAgICNbcGluXVxuICAzMjpcdCAgICBjb25maWdmc19zdWJzeXN0ZW06IGtlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbVx1MDAzY2NvbmZpZ2ZzOjpDb25maWdcdTAwM2UsXG4gIDMzOlx0fVxuICAzNDpcdFxuICAzNTpcdGltcGwga2VybmVsOjpJblBsYWNlTW9kdWxlIGZvciBOdWxsQmxrTW9kdWxlIHtcbiAgMzY6XHQgICAgZm4gaW5pdChfbW9kdWxlOiBcdTAwMjYmIzM5O3N0YXRpYyBUaGlzTW9kdWxlKSAtXHUwMDNlIGltcGwgUGluSW5pdFx1MDAzY1NlbGYsIEVycm9yXHUwMDNlIHtcbiAgMzc6XHQgICAgICAgIHByX2luZm8hKFwmIzM0O1J1c3QgbnVsbF9ibGsgbG9hZGVkXFxuXCYjMzQ7KTtcbiAgMzg6XHRcbiAgMzk6XHQgICAgICAgIHRyeV9waW5faW5pdCEoU2VsZiB7XG4gIDQwOlx0ICAgICAgICAgICAgY29uZmlnZnNfc3Vic3lzdGVtIFx1MDAzYy0gY29uZmlnZnM6OnN1YnN5c3RlbSgpLFxuICA0MTpcdCAgICAgICAgfSlcbiAgNDI6XHQgICAgfVxuICA0MzpcdH1cbiAgNDQ6XHRcbiAgNDU6XHRzdHJ1Y3QgTnVsbEJsa0RldmljZTtcbiAgNDY6XHRcbiAgNDc6XHRpbXBsIE51bGxCbGtEZXZpY2Uge1xuICA0ODpcdCAgICBmbiBuZXcoXG4gIDQ5Olx0ICAgICAgICBuYW1lOiBcdTAwMjZDU3RyLFxuICA1MDpcdCAgICAgICAgYmxvY2tfc2l6ZTogdTMyLFxuICA1MTpcdCAgICAgICAgcm90YXRpb25hbDogYm9vbCxcbiAgNTI6XHQgICAgICAgIGNhcGFjaXR5X21pYjogdTY0LFxuICA1MzpcdCAgICAgICAgaXJxX21vZGU6IElSUU1vZGUsXG4gIDU0Olx0ICAgICkgLVx1MDAzZSBSZXN1bHRcdTAwM2NHZW5EaXNrXHUwMDNjU2VsZlx1MDAzZVx1MDAzZSB7XG4gIDU1Olx0ICAgICAgICBsZXQgdGFnc2V0ID0gQXJjOjpwaW5faW5pdChUYWdTZXQ6Om5ldygxLCAyNTYsIDEpLCBHRlBfS0VSTkVMKT87XG4gIDU2Olx0XG4gIDU3Olx0ICAgICAgICBsZXQgcXVldWVfZGF0YSA9IEJveDo6bmV3KFF1ZXVlRGF0YSB7IGlycV9tb2RlIH0sIEdGUF9LRVJORUwpPztcbiAgNTg6XHRcbiAgNTk6XHQgICAgICAgIGdlbl9kaXNrOjpHZW5EaXNrQnVpbGRlcjo6bmV3KClcbiAgNjA6XHQgICAgICAgICAgICAuY2FwYWNpdHlfc2VjdG9ycyhjYXBhY2l0eV9taWIgXHUwMDNjXHUwMDNjICgyMCAtIGJsb2NrOjpTRUNUT1JfU0hJRlQpKVxuICA2MTpcdCAgICAgICAgICAgIC5sb2dpY2FsX2Jsb2NrX3NpemUoYmxvY2tfc2l6ZSk/XG4gIDYyOlx0ICAgICAgICAgICAgLnBoeXNpY2FsX2Jsb2NrX3NpemUoYmxvY2tfc2l6ZSk/XG4gIDYzOlx0ICAgICAgICAgICAgLnJvdGF0aW9uYWwocm90YXRpb25hbClcbiAgNjQ6XHQgICAgICAgICAgICAuYnVpbGQoZm10IShcJiMzNDt7fVwmIzM0OywgbmFtZS50b19zdHIoKT8pLCB0YWdzZXQsIHF1ZXVlX2RhdGEpXG4gIDY1Olx0ICAgIH1cbiAgNjY6XHR9XG4gIDY3Olx0XG4gIDY4Olx0c3RydWN0IFF1ZXVlRGF0YSB7XG4gIDY5Olx0ICAgIGlycV9tb2RlOiBJUlFNb2RlLFxuICA3MDpcdH1cbiAgNzE6XHRcbiAgNzI6XHQjW3Z0YWJsZV1cbiAgNzM6XHRpbXBsIE9wZXJhdGlvbnMgZm9yIE51bGxCbGtEZXZpY2Uge1xuICA3NDpcdCAgICB0eXBlIFF1ZXVlRGF0YSA9IEtCb3hcdTAwM2NRdWV1ZURhdGFcdTAwM2U7XG4gIDc1Olx0XG4gIDc2Olx0ICAgICNbaW5saW5lKGFsd2F5cyldXG4gIDc3Olx0ICAgIGZuIHF1ZXVlX3JxKHF1ZXVlX2RhdGE6IFx1MDAyNlF1ZXVlRGF0YSwgcnE6IEFSZWZcdTAwM2NtcTo6UmVxdWVzdFx1MDAzY1NlbGZcdTAwM2VcdTAwM2UsIF9pc19sYXN0OiBib29sKSAtXHUwMDNlIFJlc3VsdCB7XG4gIDc4Olx0ICAgICAgICBtYXRjaCBxdWV1ZV9kYXRhLmlycV9tb2RlIHtcbiAgNzk6XHQgICAgICAgICAgICBJUlFNb2RlOjpOb25lID1cdTAwM2UgbXE6OlJlcXVlc3Q6OmVuZF9vayhycSlcbiAgODA6XHQgICAgICAgICAgICAgICAgLm1hcF9lcnIofF9lfCBrZXJuZWw6OmVycm9yOjpjb2RlOjpFSU8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgcm51bGwgRHJpdmVyIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gKnJudWxsKiwgdGhlIFJ1c3QtYmFzZWQgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyLCB3aGljaCBJIGtub3cgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19CTEtfREVWX1JVU1RfTlVMTGAsIHVzZXMgY29uZmlnZnMgZm9yIGNvbmZpZ3VyYXRpb24uIFRoZSBmaXJzdCBxdWVzdGlvbiBpcywgd2lsbCB0aGlzIGV2ZW4gYmUgcmVsZXZhbnQgaW4gdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBJJiMzOTttIHdvcmtpbmcgd2l0aCBsaWtlIFFFTVUgb3IgR0NFPyBZZXMsIGl04oCZcyBhIHNvZnR3YXJlLWJhc2VkIHZpcnR1YWwgZHJpdmVyLCBqdXN0IGxpa2UgYG51bGxfYmxrYCwgYW5kIHVzZXMgYC9zeXMva2VybmVsL2NvbmZpZy9ybnVsbC8uLi5gIHdoaWNoIGNvbmZpcm1zIGl0JiMzOTtzIGNvbmZpZ2ZzLWRyaXZlbi4gR29vZCwgZ29vZC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgYWN0dWFsbHkgZXhlY3V0YWJsZSBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5IGFyZTsgdGhlIGNvcmUgb2YgdGhlIHVwZGF0ZSByZXZvbHZlcyBhcm91bmQgUnVzdCBtZXRob2RzIHRoYXQgaW1wbGVtZW50IHRoZSBgc3RvcmVgIGZ1bmN0aW9uIGZvciB0aGUgcmVsZXZhbnQgY29uZmlnZnMgYXR0cmlidXRlcyB3aXRoaW4gYERldmljZUNvbmZpZ2Ag4oCTIGJsb2Nrc2l6ZSwgcm90YXRpb25hbCBzZXR0aW5ncywgdGhlIHNpemUsIGFuZCBpcnFtb2RlLgoKVGhlIHByb2JsZW0gdGhleSYjMzk7dmUgYWRkcmVzc2VkIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbi4gVGhlIHByZXZpb3VzIGNvZGUgY2hlY2tlZCB0aGUgYHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZGAgc3RhdGUsIHJlbGVhc2VkIHRoZSBsb2NrLCBhbmQgKnRoZW4qIHJlYWNxdWlyZWQgaXQgdG8gdXBkYXRlIHZhcmlvdXMgYXR0cmlidXRlcy4gQ2xlYXJseSwgdGhhdCBvcGVuZWQgYSByYWNlIHdpbmRvdy4gVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGNvcnJlY3Q6IHRoZXkmIzM5O3JlIG5vdyBob2xkaW5nIHRoZSBgZ3VhcmRgIHRocm91Z2hvdXQgdGhlIGVudGlyZSBgc3RvcmVgIG9wZXJhdGlvbi4gVGhhdCYjMzk7cyBjbGVhbiBhbmQgc2FmZS4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBrbm93IGBCTEtfREVWX1JVU1RfTlVMTGAgcmVxdWlyZXMgYFJVU1RgIGFuZCBgQ09ORklHRlNfRlNgLiBUaW1lIHRvIHB1bGwgdXAgdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgdG8gYmUgY2VydGFpbiBhbmQgY2hlY2sgZm9yIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyBvciBjb25mbGljdHMuIEEgcXVpY2sgcnVuIG9mIGBncmVwcGVyYCBvbiB0aGUga2VybmVsIHNvdXJjZSwgc2VhcmNoaW5nIGZvciBgY29uZmlnIEJMS19ERVZfUlVTVF9OVUxMYCwgYFJVU1RgLCBhbmQgYENPTkZJR0ZTX0ZTYCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1JVU1RfTlVMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWctNC1cbmRyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZzo1OmNvbmZpZyBCTEtfREVWX1JVU1RfTlVMTFxuZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtSdXN0IG51bGwgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODE5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBSdXN0IFN5bWJvbCBIYW5kbGluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IFJ1c3Qgc3ltYm9scyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhpcyBgcm51bGxgIGRyaXZlci4gTXkgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXM6IGNoZWNraW5nIGBkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWdgIHNob3dzIGl0ICpkZXBlbmRzIG9uKiBgUlVTVGAgYW5kIGBDT05GSUdGU19GU2AuIFRoYXQgdGVsbHMgbWUgdGhlIGNvbnRleHQgb2Ygd2hlcmUgdG8gbG9vayBhbmQgd2hhdCBmcmFtZXdvcmtzIGFyZSBlbXBsb3llZC4KCk5vdywgdGhlIGNvcmUgb2YgdGhlIG1hdHRlcjogaG93IGFyZSB0aGVzZSBSdXN0IHN5bWJvbHMgYWN0dWFsbHkgKnJlcHJlc2VudGVkKj8gV2hhdCYjMzk7cyB0aGUgbWFuZ2xpbmcgb3IgY29udmVudGlvbiBhdCBwbGF5PyBXaGF0IGZvY3VzIHN5bWJvbHMgYXJlIGFwcHJvcHJpYXRlIGhlcmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gZGVidWcuIEkgbmVlZCB0byBrbm93IHRoZSBlbnRyeSBwb2ludHMuIEFyZSB0aGUgZm9jdXMgc3ltYm9scyBldmVuIGFwcGxpY2FibGUgdG8gdGhlIFJ1c3Qgc3ltYm9scz8gSSBzaG91bGQgc2VhcmNoIHRoZSBrZXJuZWwgZm9yIG90aGVyIFJ1c3QgZHJpdmVycyBvciBzeW1ib2xzLCBhbnl0aGluZyB0byBwcm92aWRlIGluc2lnaHQgaW50byB0aGlzLiBBcmUgdGhlcmUgYW55IGV4YW1wbGVzIGluIGBybnVsbGAgaXRzZWxmIHRoYXQgbWlnaHQgcHJvdmlkZSBzb21lIGFuc3dlcnM/CgpUaGlua2luZyBtb3JlIGFib3V0IGl0LCBJJiMzOTttIHF1ZXN0aW9uaW5nIHdoZXRoZXIgYSAqRm9jdXNTeW1ib2wqIGlzIHRoZSBjb3JyZWN0IHRvb2wuIENhbiB0aGV5IGJlIFJ1c3Qgc3ltYm9scywgb3IgYXJlIHRoZXkgbW9yZSBnZWFyZWQgdG93YXJkcyBDIGVudHJ5IHBvaW50cz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gTG9va2luZyBhdCB0aGUgZnJhbWV3b3JrLCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBgY29uZmlnZnNfYXR0cnMhYCBtYWNyby4gSSBzZWUgdGhhdCBpdCBnZW5lcmF0ZXMgdnRhYmxlcyBhbmQgZnVuY3Rpb25zLiBUaGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBsZWFkLiBMZXQmIzM5O3MgZGlnIGludG8gaG93IHRoYXQgbWFjcm8gd29ya3MgaW4gYHJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgQyBhbmQgUnVzdCBzaWRlcyBpbnRlcmZhY2UgaGVyZSBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5bWJvbCByZXNvbHV0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY3JvX3J1bGVzISBjb25maWdmc19hdHRycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3J1c3QvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3J1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzPTc5MD0gICAgZm4gYXNfcHRyKFx1MDAyNnNlbGYpIC1cdTAwM2UgKmNvbnN0IGJpbmRpbmdzOjpjb25maWdfaXRlbV90eXBlIHtcbi0tXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy04ODYtI1ttYWNyb19leHBvcnRdXG5ydXN0L2tlcm5lbC9jb25maWdmcy5yczo4ODc6bWFjcm9fcnVsZXMhIGNvbmZpZ2ZzX2F0dHJzIHtcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTg4OC0gICAgKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQyNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQ29uZmlnRlMgQXR0cmlidXRlIEdlbmVyYXRpb24gaW4gUnVzdCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoZSBwbGFjZSB0byBsb29rIGZvciBob3cgQ29uZmlnRlMgYXR0cmlidXRlcyBhcmUgZ2VuZXJhdGVkLCBvciBhdCBsZWFzdCBob3cgdGhleSYjMzk7cmUgaGFuZGxlZCwgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGBydXN0L2tlcm5lbC9jb25maWdmcy5yc2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDg4Ny4gVGhhdCBsaW5lIG51bWJlciBmZWVscyBsaWtlIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50IGJhc2VkIG9uIHNpbWlsYXIgY29kZSBJJiMzOTt2ZSB3b3JrZWQgb24gaW4gdGhlIHBhc3QuIEl0JiMzOTtzIHVzdWFsbHkgYXJvdW5kIHRoYXQgYXJlYSB3aGVyZSB0aGUgYXR0cmlidXRlIGNyZWF0aW9uIG9yIG1hbmlwdWxhdGlvbiBsb2dpYyB0ZW5kcyB0byByZXNpZGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGRpcmVjdCBhdHRyaWJ1dGUgZ2VuZXJhdGlvbiwgcGVyaGFwcyB3aXRoaW4gYSBgc3RydWN0YCBkZWZpbml0aW9uIG9yIHJlbGF0ZWQgbWV0aG9kcywgb3Igc29tZSBraW5kIG9mIGluZGlyZWN0IGNhbGwgdGhhdCBoYW5kbGVzIGF0dHJpYnV0ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSByZXZlYWxzLiBGcm9tIHRoYXQgcG9pbnQgSSBjYW4gZXh0cmFwb2xhdGUgb3V0d2FyZHMgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgaG93IENvbmZpZ0ZTIGF0dHJpYnV0ZXMgYXJlIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIHdpdGhpbiB0aGUgUnVzdCBrZXJuZWwgY29kZSBiYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3J1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4ODA6XHQvLy8gICAgICAgICApO1xuIDg4MTpcdC8vL1xuIDg4MjpcdC8vLyAgICAgXHUwMDI2Q09ORklHVVJBVElPTl9UUEVcbiA4ODM6XHQvLy8gfVxuIDg4NDpcdC8vLyBgYGBcbiA4ODU6XHQjW2FsbG93KGNsaXBweTo6Y3JhdGVfaW5fbWFjcm9fZGVmKV1cbiA4ODY6XHQjW21hY3JvX2V4cG9ydF1cbiA4ODc6XHRtYWNyb19ydWxlcyEgY29uZmlnZnNfYXR0cnMge1xuIDg4ODpcdCAgICAoXG4gODg5Olx0ICAgICAgICBjb250YWluZXI6ICRjb250YWluZXI6dHksXG4gODkwOlx0ICAgICAgICBkYXRhOiAkZGF0YTp0eSxcbiA4OTE6XHQgICAgICAgIGF0dHJpYnV0ZXM6IFtcbiA4OTI6XHQgICAgICAgICAgICAkKCRuYW1lOmlkZW50OiAkYXR0cjpsaXRlcmFsKSwqICQoLCk/XG4gODkzOlx0ICAgICAgICBdICQoLCk/XG4gODk0Olx0ICAgICkgPVx1MDAzZSB7XG4gODk1Olx0ICAgICAgICAkY3JhdGU6OmNvbmZpZ2ZzX2F0dHJzIShcbiA4OTY6XHQgICAgICAgICAgICBjb3VudDpcbiA4OTc6XHQgICAgICAgICAgICBAY29udGFpbmVyKCRjb250YWluZXIpLFxuIDg5ODpcdCAgICAgICAgICAgIEBkYXRhKCRkYXRhKSxcbiA4OTk6XHQgICAgICAgICAgICBAY2hpbGQoKSxcbiA5MDA6XHQgICAgICAgICAgICBAbm9fY2hpbGQoeCksXG4gOTAxOlx0ICAgICAgICAgICAgQGF0dHJzKCQoJG5hbWUgJGF0dHIpKiksXG4gOTAyOlx0ICAgICAgICAgICAgQGVhdCgkKCRuYW1lICRhdHRyLCkqKSxcbiA5MDM6XHQgICAgICAgICAgICBAYXNzaWduKCksXG4gOTA0Olx0ICAgICAgICAgICAgQGNudCgwdXNpemUpLFxuIDkwNTpcdCAgICAgICAgKVxuIDkwNjpcdCAgICB9O1xuIDkwNzpcdCAgICAoXG4gOTA4Olx0ICAgICAgICBjb250YWluZXI6ICRjb250YWluZXI6dHksXG4gOTA5Olx0ICAgICAgICBkYXRhOiAkZGF0YTp0eSxcbiA5MTA6XHQgICAgICAgIGNoaWxkOiAkY2hpbGQ6dHksXG4gOTExOlx0ICAgICAgICBhdHRyaWJ1dGVzOiBbXG4gOTEyOlx0ICAgICAgICAgICAgJCgkbmFtZTppZGVudDogJGF0dHI6bGl0ZXJhbCksKiAkKCwpP1xuIDkxMzpcdCAgICAgICAgXSAkKCwpP1xuIDkxNDpcdCAgICApID1cdTAwM2Uge1xuIDkxNTpcdCAgICAgICAgJGNyYXRlOjpjb25maWdmc19hdHRycyEoXG4gOTE2Olx0ICAgICAgICAgICAgY291bnQ6XG4gOTE3Olx0ICAgICAgICAgICAgQGNvbnRhaW5lcigkY29udGFpbmVyKSxcbiA5MTg6XHQgICAgICAgICAgICBAZGF0YSgkZGF0YSksXG4gOTE5Olx0ICAgICAgICAgICAgQGNoaWxkKCRjaGlsZCksXG4gOTIwOlx0ICAgICAgICAgICAgQG5vX2NoaWxkKCksXG4gOTIxOlx0ICAgICAgICAgICAgQGF0dHJzKCQoJG5hbWUgJGF0dHIpKiksXG4gOTIyOlx0ICAgICAgICAgICAgQGVhdCgkKCRuYW1lICRhdHRyLCkqKSxcbiA5MjM6XHQgICAgICAgICAgICBAYXNzaWduKCksXG4gOTI0Olx0ICAgICAgICAgICAgQGNudCgwdXNpemUpLFxuIDkyNTpcdCAgICAgICAgKVxuIDkyNjpcdCAgICB9O1xuIDkyNzpcdCAgICAoY291bnQ6XG4gOTI4Olx0ICAgICBAY29udGFpbmVyKCRjb250YWluZXI6dHkpLFxuIDkyOTpcdCAgICAgQGRhdGEoJGRhdGE6dHkpLFxuIDkzMDpcdCAgICAgQGNoaWxkKCQoJGNoaWxkOnR5KT8pLFxuIDkzMTpcdCAgICAgQG5vX2NoaWxkKCQoJG5vX2NoaWxkOmlkZW50KT8pLFxuIDkzMjpcdCAgICAgQGF0dHJzKCQoJGFuYW1lOmlkZW50ICRhYXR0cjpsaXRlcmFsKSopLFxuIDkzMzpcdCAgICAgQGVhdCgkbmFtZTppZGVudCAkYXR0cjpsaXRlcmFsLCAkKCRybmFtZTppZGVudCAkcmF0dHI6bGl0ZXJhbCwpKiksXG4gOTM0Olx0ICAgICBAYXNzaWduKCQoJGFzc2lnbjpibG9jaykqKSxcbiA5MzU6XHQgICAgIEBjbnQoJGNudDpleHByKSxcbiA5MzY6XHQgICAgKSA9XHUwMDNlIHtcbiA5Mzc6XHQgICAgICAgICRjcmF0ZTo6Y29uZmlnZnNfYXR0cnMhKFxuIDkzODpcdCAgICAgICAgICAgIGNvdW50OlxuIDkzOTpcdCAgICAgICAgICAgIEBjb250YWluZXIoJGNvbnRhaW5lciksXG4gOTQwOlx0ICAgICAgICAgICAgQGRhdGEoJGRhdGEpLFxuIDk0MTpcdCAgICAgICAgICAgIEBjaGlsZCgkKCRjaGlsZCk/KSxcbiA5NDI6XHQgICAgICAgICAgICBAbm9fY2hpbGQoJCgkbm9fY2hpbGQpPyksXG4gOTQzOlx0ICAgICAgICAgICAgQGF0dHJzKCQoJGFuYW1lICRhYXR0cikqKSxcbiA5NDQ6XHQgICAgICAgICAgICBAZWF0KCQoJHJuYW1lICRyYXR0ciwpKiksXG4gOTQ1Olx0ICAgICAgICAgICAgQGFzc2lnbigkKCRhc3NpZ24pKiB7XG4gOTQ2Olx0ICAgICAgICAgICAgICAgIGNvbnN0IE46IHVzaXplID0gJGNudDtcbiA5NDc6XHQgICAgICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBtYWNybyB0ZXh0IGV4cGFuZHMgdG8gYSBjYWxsIHRvIGBBdHRyaWJ1dGU6OmFkZGAuXG4gOTQ4Olx0XG4gOTQ5Olx0ICAgICAgICAgICAgICAgIC8vIFNBRkVUWTogQnkgZGVzaWduIG9mIHRoaXMgbWFjcm8sIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB3ZVxuIDk1MDpcdCAgICAgICAgICAgICAgICAvLyBpbnZva2UgdGhlIGBhZGRgIG1ldGhvZCBvbiBiZWxvdywgaXMgbm90IHZpc2libGUgb3V0c2lkZSBvZlxuIDk1MTpcdCAgICAgICAgICAgICAgICAvLyB0aGUgbWFjcm8gZXhwYW5zaW9uLiBUaGUgbWFjcm8gZG9lcyBub3Qgb3BlcmF0ZSBjb25jdXJyZW50bHlcbiA5NTI6XHQgICAgICAgICAgICAgICAgLy8gb24gdGhpcyB2YXJpYWJsZSwgYW5kIHRodXMgd2UgaGF2ZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZVxuIDk1MzpcdCAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZS5cbiA5NTQ6XHQgICAgICAgICAgICAgICAgdW5zYWZlIHtcbiA5NTU6XHQgICAgICAgICAgICAgICAgICAgICRjcmF0ZTo6bWFjcm9zOjpwYXN0ZSEoXG4gOTU2Olx0ICAgICAgICAgICAgICAgICAgICAgICAgW1x1MDAzYyAkZGF0YTp1cHBlciBfQVRUUlMgXHUwMDNlXVxuIDk1NzpcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkOjpcdTAwM2NOLCAkYXR0ciwgX1x1MDAzZShcdTAwMjZbXHUwMDNjICRkYXRhOnVwcGVyIF8gJG5hbWU6dXBwZXIgX0FUVFIgXHUwMDNlXSlcbiA5NTg6XHQgICAgICAgICAgICAgICAgICAgIClcbiA5NTk6XHQgICAgICAgICAgICAgICAgfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4ODUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN5bWJvbCBSZXNvbHV0aW9uIGluIGBjb25maWdmcy5yc2AgYW5kIGBybnVsbC5yc2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBjb25maWdmcy5yc2AgYW5kIG5vdGljaW5nIHRoZSBpbXBsZW1lbnRhdGlvbnM6IGBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zJmx0OzEmZ3Q7IGZvciBEZXZpY2VDb25maWdgLCBhbmQgc28gb24sIHVwIHRvIGA0YC4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmZhY2VzIGFyZSByZXNvbHZlZCwgYW5kIGhvdyB3ZSBtaWdodCBkZWJ1ZyB0aGVtIGlmIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHRyYWl0cyBtYXAgdG8gdGhlIHVuZGVybHlpbmcga2VybmVsIHN5bWJvbHMuCgpJJiMzOTttIGNoZWNraW5nIGBjb25maWdmcy5yc2AgYW5kIGBybnVsbC5yc2AgZm9yIHJlbGV2YW50IG1ldGhvZHMgb3IgZnVuY3Rpb25zOiBgRGV2aWNlQ29uZmlnOjpzdG9yZWAgc2VlbXMgcmVsZXZhbnQsIGFzIGRvIHBvdGVudGlhbGx5IGBybnVsbF9tb2RgIGZ1bmN0aW9ucy4gUnVzdCYjMzk7cyBuYW1lIG1hbmdsaW5nIGNhbiBtYWtlIHRoaXMgYSBiaXQgdHJpY2t5LCBidXQgSSBrbm93IGl0JiMzOTtsbCBwcm9kdWNlIHN5bWJvbHMgbGlrZSBgX1JOdlguLi5gLCBvciB0aGUgZnVsbHkgZGVtYW5nbGVkIGZvcm0sIGUuZy4sIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDsmZ3Q7OjpzdG9yZWAuIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb3V0IGZvciBgcm51bGxfbW9kOjoqYCBwYXR0ZXJucyBvciBhbnkgQyBzeW1ib2xzIHRoYXQgbWF5IGJlIGludm9sdmVkLgoKR2l2ZW4gbXkgcHJldmlvdXMgZXhwZXJpZW5jZSBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9ucyBvciBleGFtcGxlIHBhdGNoZXMgd2hpY2ggbWlnaHQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gaG93IHN5bWJvbHMgYXJlIHN0cnVjdHVyZWQgaW4gRm9jdXNTeW1ib2xzLiBJZiB0aGF0IGRvZXNuJiMzOTt0IHdvcmssIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHByb2plY3QmIzM5O3MgdHJlZSBvciBnaXQgbG9nIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGV4YW1wbGVzIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBzeW1ib2wgbmFtaW5nIG9yIHJlc29sdXRpb24gd2l0aGluIHRoaXMgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0F0dHJpYnV0ZU9wZXJhdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JudWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtNS0gICAgYmxvY2s6Om1xOjpnZW5fZGlzazo6e0dlbkRpc2ssIEdlbkRpc2tCdWlsZGVyfSxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6NjogICAgY29uZmlnZnM6OntzZWxmLCBBdHRyaWJ1dGVPcGVyYXRpb25zfSxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtNy0gICAgY29uZmlnZnNfYXR0cnMsXG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0zMD1wdWIoY3JhdGUpIHN0cnVjdCBDb25maWcge31cbi0tXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTMyLSNbdnRhYmxlXVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yczozMzppbXBsIEF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MwXHUwMDNlIGZvciBDb25maWcge1xuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0zNC0gICAgdHlwZSBEYXRhID0gQ29uZmlnO1xuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MTE4PXN0cnVjdCBEZXZpY2VDb25maWdJbm5lciB7XG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0xMjgtI1t2dGFibGVdXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzOjEyOTppbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMTMwLSAgICB0eXBlIERhdGEgPSBEZXZpY2VDb25maWc7XG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0xNDQ9ICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMTY2LSNbdnRhYmxlXVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yczoxNjc6aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTE2OC0gICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MTc2PSAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTE5MS0jW3Z0YWJsZV1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MTkyOmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MyXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0xOTMtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcbi0tXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzPTIwNz0gICAgZm4gc3RvcmUodGhpczogXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcdTAwMjZbdThdKSAtXHUwMDNlIFJlc3VsdCB7XG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0yMTktI1t2dGFibGVdXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzOjIyMDppbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMjIxLSAgICB0eXBlIERhdGEgPSBEZXZpY2VDb25maWc7XG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0yMjk9ICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMjQzLSNbdnRhYmxlXVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yczoyNDQ6aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzRcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTI0NS0gICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEZXZpY2UgQ29uZmlndXJhdGlvbiBTdG9yYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIGV4YWN0bHkgd2hpY2ggZWxlbWVudHMgYXJlIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGlzIGBEZXZpY2VDb25maWdgIHN0cnVjdHVyZS4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHJldm9sdmVzIGFyb3VuZCB0aGUgYHN0b3JlYCBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdpbmcgKmV4YWN0bHkqLiBTbywgSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhlIGBEZXZpY2VDb25maWc6OnN0b3JlYCBmdW5jdGlvbiBiZWhhdmVzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIHRoZSBpbXBhY3Qgb24gYXR0cmlidXRlcyBsaWtlIGBibG9ja3NpemVgLCBgcm90YXRpb25hbGAsIGBzaXplYCwgYW5kIGBpcnFtb2RlYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKTmV4dCwgSSBuZWVkIHRvIHNlZSBob3cgYGNvbmZpZ2ZzYCBpbnRlcmFjdHMgd2l0aCB0aGVzZSBzdG9yYWdlIG1lY2hhbmlzbXMuIFRoZSByZWFsIG1hZ2ljIGhhcHBlbnMgd2l0aGluIGBydXN0L2tlcm5lbC9jb25maWdmcy5yc2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGRpZyBpbiBuZXh0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzLCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRob3NlIGNhbGxzLCBhbmQgdmVyaWZ5IGlmIHRoZXNlIGBzdG9yZWAgaW1wbGVtZW50YXRpb25zIGFyZSBkb2luZyBleGFjdGx5IHdoYXQgdGhleSBzaG91bGQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgY2FsbHMgYW5kIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdGhlbXNlbHZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QXR0cmlidXRlT3BlcmF0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3J1c3Qva2VybmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3J1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTc0LS8vISAjW3Z0YWJsZV1cbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzOjc1Oi8vISBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMFx1MDAzZSBmb3IgQ29uZmlndXJhdGlvbiB7XG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy03Ni0vLyEgICAgIHR5cGUgRGF0YSA9IENvbmZpZ3VyYXRpb247XG4tLVxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtODYtLy8hICNbdnRhYmxlXVxucnVzdC9rZXJuZWwvY29uZmlnZnMucnM6ODc6Ly8hIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlIGZvciBDb25maWd1cmF0aW9uIHtcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTg4LS8vISAgICAgdHlwZSBEYXRhID0gQ29uZmlndXJhdGlvbjtcbi0tXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycz01MzQ9aW1wbFx1MDAzY2NvbnN0IElEOiB1NjQsIE8sIERhdGFcdTAwM2UgQXR0cmlidXRlXHUwMDNjSUQsIE8sIERhdGFcdTAwM2VcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTUzNS13aGVyZVxucnVzdC9rZXJuZWwvY29uZmlnZnMucnM6NTM2OiAgICBPOiBBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjSUQsIERhdGEgPSBEYXRhXHUwMDNlLFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNTM3LXtcbi0tXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycz02MTI9ICAgIHB1YiBjb25zdCBmbiBuZXcobmFtZTogXHUwMDI2JiMzOTtzdGF0aWMgQ1N0cikgLVx1MDAzZSBTZWxmIHtcbi0tXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy02NDAtLy8vIGF0dHJpYnV0ZXMgdmlhIHRoZSBbYGtlcm5lbDo6Y29uZmlnZnNfYXR0cnNgXSBtYWNybywgdG8gdGllXG5ydXN0L2tlcm5lbC9jb25maWdmcy5yczo2NDE6Ly8vIGBBdHRyaWJ1dGVPcGVyYXRpb25zYCBpbXBsZW1lbnRhdGlvbnMgdG8gY29uY3JldGUgbmFtZWQgYXR0cmlidXRlcy5cbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTY0Mi0jW3Z0YWJsZV1cbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzOjY0MzpwdWIgdHJhaXQgQXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzY2NvbnN0IElEOiB1NjQgPSAwXHUwMDNlIHtcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTY0NC0gICAgLy8vIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZmllbGQgdGhhdCBpcyBiYWNraW5nIHRoZVxuLS1cbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzPTY5Mz1pbXBsXHUwMDNjY29uc3QgTjogdXNpemUsIERhdGFcdTAwM2UgQXR0cmlidXRlTGlzdFx1MDAzY04sIERhdGFcdTAwM2Uge1xuLS1cbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTcxMS0gICAgKSB3aGVyZVxucnVzdC9rZXJuZWwvY29uZmlnZnMucnM6NzEyOiAgICAgICAgTzogQXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzY0lELCBEYXRhID0gRGF0YVx1MDAzZSxcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTcxMy0gICAge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAwNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvZGU6CgoqKkRpdmluZyBpbnRvIGBjb25maWdmcy5yc2AmIzM5O3MgQXR0cmlidXRlIFN0b3JhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYHJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzYCBhbmQgdHJ5aW5nIHRvIHRyYWNlIGhvdyBkYXRhIGFjdHVhbGx5IGdldHMgKnN0b3JlZCogdXNpbmcgYEF0dHJpYnV0ZU9wZXJhdGlvbnM6OnN0b3JlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRpc3BhdGNoIG1lY2hhbmlzbS4gTGV0JiMzOTtzIHplcm8gaW4gb24gcm91Z2hseSBsaW5lcyA1NDAgdG8gNjAwLCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBmdW5jdGlvbiBjYWxsIG9yIHN0cnVjdHVyZSByZWxhdGVkIHRvIHRoaXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBwYXNzZWQgYXJvdW5kLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgZ3Jhc3Agb24gaG93IGEgc3BlY2lmaWMgYXR0cmlidXRlIHdyaXRlIHVsdGltYXRlbHkgbGFuZHMgaW5zaWRlIHRoZSBgc3RvcmVgIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGZvciBhIGdpdmVuIGNvbmZpZ2ZzIG9iamVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtydXN0L2tlcm5lbC9jb25maWdmcy5ycyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0ICAgIC8vLyBgaXRlbWAgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIGBiaW5kaW5nczo6Y29uZmlnX2dyb3VwYC5cbiA1NDE6XHQgICAgLy8vXG4gNTQyOlx0ICAgIC8vLyBJZiBgaXRlbWAgZG9lcyBub3QgcmVwcmVzZW50IHRoZSByb290IGdyb3VwIG9mIGEgY29uZmlnZnMgc3Vic3lzdGVtLFxuIDU0MzpcdCAgICAvLy8gdGhlIGdyb3VwIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBgR3JvdXBcdTAwM2NEYXRhXHUwMDNlYC5cbiA1NDQ6XHQgICAgLy8vXG4gNTQ1Olx0ICAgIC8vLyBPdGhlcndpc2UsIHRoZSBncm91cCBtdXN0IGJlIGEgZW1iZWRkZWQgaW4gYVxuIDU0NjpcdCAgICAvLy8gYGJpbmRpbmdzOjpjb25maWdmc19zdWJzeXN0ZW1gIHRoYXQgaXMgZW1iZWRkZWQgaW4gYSBgU3Vic3lzdGVtXHUwMDNjRGF0YVx1MDAzZWAuXG4gNTQ3Olx0ICAgIC8vL1xuIDU0ODpcdCAgICAvLy8gYHBhZ2VgIG11c3QgcG9pbnQgdG8gYSB3cml0YWJsZSBidWZmZXIgb2Ygc2l6ZSBhdCBsZWFzdCBbYFBBR0VfU0laRWBdLlxuIDU0OTpcdCAgICB1bnNhZmUgZXh0ZXJuIFwmIzM0O0NcJiMzNDsgZm4gc2hvdyhcbiA1NTA6XHQgICAgICAgIGl0ZW06ICptdXQgYmluZGluZ3M6OmNvbmZpZ19pdGVtLFxuIDU1MTpcdCAgICAgICAgcGFnZTogKm11dCBrZXJuZWw6OmZmaTo6Y19jaGFyLFxuIDU1MjpcdCAgICApIC1cdTAwM2UgaXNpemUge1xuIDU1MzpcdCAgICAgICAgbGV0IGNfZ3JvdXA6ICptdXQgYmluZGluZ3M6OmNvbmZpZ19ncm91cCA9XG4gNTU0Olx0ICAgICAgICAgICAgLy8gU0FGRVRZOiBCeSBmdW5jdGlvbiBzYWZldHkgcmVxdWlyZW1lbnRzLCBgaXRlbWAgaXMgZW1iZWRkZWQgaW4gYVxuIDU1NTpcdCAgICAgICAgICAgIC8vIGBjb25maWdfZ3JvdXBgLlxuIDU1NjpcdCAgICAgICAgICAgIHVuc2FmZSB7IGNvbnRhaW5lcl9vZiEoaXRlbSwgYmluZGluZ3M6OmNvbmZpZ19ncm91cCwgY2dfaXRlbSkgfTtcbiA1NTc6XHRcbiA1NTg6XHQgICAgICAgIC8vIFNBRkVUWTogVGhlIGZ1bmN0aW9uIHNhZmV0eSByZXF1aXJlbWVudHMgZm9yIHRoaXMgZnVuY3Rpb24gc2F0aXNmeVxuIDU1OTpcdCAgICAgICAgLy8gdGhlIGNvbmRpdGlvbnMgZm9yIHRoaXMgY2FsbC5cbiA1NjA6XHQgICAgICAgIGxldCBkYXRhOiBcdTAwMjZEYXRhID0gdW5zYWZlIHsgZ2V0X2dyb3VwX2RhdGEoY19ncm91cCkgfTtcbiA1NjE6XHRcbiA1NjI6XHQgICAgICAgIC8vIFNBRkVUWTogQnkgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cywgYHBhZ2VgIGlzIHdyaXRhYmxlIGZvciBgUEFHRV9TSVpFYC5cbiA1NjM6XHQgICAgICAgIGxldCByZXQgPSBPOjpzaG93KGRhdGEsIHVuc2FmZSB7IFx1MDAyNm11dCAqKHBhZ2UuY2FzdDo6XHUwMDNjW3U4OyBQQUdFX1NJWkVdXHUwMDNlKCkpIH0pO1xuIDU2NDpcdFxuIDU2NTpcdCAgICAgICAgbWF0Y2ggcmV0IHtcbiA1NjY6XHQgICAgICAgICAgICBPayhzaXplKSA9XHUwMDNlIHNpemUgYXMgaXNpemUsXG4gNTY3Olx0ICAgICAgICAgICAgRXJyKGVycikgPVx1MDAzZSBlcnIudG9fZXJybm8oKSBhcyBpc2l6ZSxcbiA1Njg6XHQgICAgICAgIH1cbiA1Njk6XHQgICAgfVxuIDU3MDpcdFxuIDU3MTpcdCAgICAvLy8gIyBTYWZldHlcbiA1NzI6XHQgICAgLy8vXG4gNTczOlx0ICAgIC8vLyBgaXRlbWAgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIGBiaW5kaW5nczo6Y29uZmlnX2dyb3VwYC5cbiA1NzQ6XHQgICAgLy8vXG4gNTc1Olx0ICAgIC8vLyBJZiBgaXRlbWAgZG9lcyBub3QgcmVwcmVzZW50IHRoZSByb290IGdyb3VwIG9mIGEgY29uZmlnZnMgc3Vic3lzdGVtLFxuIDU3NjpcdCAgICAvLy8gdGhlIGdyb3VwIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBgR3JvdXBcdTAwM2NEYXRhXHUwMDNlYC5cbiA1Nzc6XHQgICAgLy8vXG4gNTc4Olx0ICAgIC8vLyBPdGhlcndpc2UsIHRoZSBncm91cCBtdXN0IGJlIGEgZW1iZWRkZWQgaW4gYVxuIDU3OTpcdCAgICAvLy8gYGJpbmRpbmdzOjpjb25maWdmc19zdWJzeXN0ZW1gIHRoYXQgaXMgZW1iZWRkZWQgaW4gYSBgU3Vic3lzdGVtXHUwMDNjRGF0YVx1MDAzZWAuXG4gNTgwOlx0ICAgIC8vL1xuIDU4MTpcdCAgICAvLy8gYHBhZ2VgIG11c3QgcG9pbnQgdG8gYSByZWFkYWJsZSBidWZmZXIgb2Ygc2l6ZSBhdCBsZWFzdCBgc2l6ZWAuXG4gNTgyOlx0ICAgIHVuc2FmZSBleHRlcm4gXCYjMzQ7Q1wmIzM0OyBmbiBzdG9yZShcbiA1ODM6XHQgICAgICAgIGl0ZW06ICptdXQgYmluZGluZ3M6OmNvbmZpZ19pdGVtLFxuIDU4NDpcdCAgICAgICAgcGFnZTogKmNvbnN0IGtlcm5lbDo6ZmZpOjpjX2NoYXIsXG4gNTg1Olx0ICAgICAgICBzaXplOiB1c2l6ZSxcbiA1ODY6XHQgICAgKSAtXHUwMDNlIGlzaXplIHtcbiA1ODc6XHQgICAgICAgIGxldCBjX2dyb3VwOiAqbXV0IGJpbmRpbmdzOjpjb25maWdfZ3JvdXAgPVxuIDU4ODpcdCAgICAgICAgLy8gU0FGRVRZOiBCeSBmdW5jdGlvbiBzYWZldHkgcmVxdWlyZW1lbnRzLCBgaXRlbWAgaXMgZW1iZWRkZWQgaW4gYVxuIDU4OTpcdCAgICAgICAgLy8gYGNvbmZpZ19ncm91cGAuXG4gNTkwOlx0ICAgICAgICAgICAgdW5zYWZlIHsgY29udGFpbmVyX29mIShpdGVtLCBiaW5kaW5nczo6Y29uZmlnX2dyb3VwLCBjZ19pdGVtKSB9O1xuIDU5MTpcdFxuIDU5MjpcdCAgICAgICAgLy8gU0FGRVRZOiBUaGUgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cyBmb3IgdGhpcyBmdW5jdGlvbiBzYXRpc2Z5XG4gNTkzOlx0ICAgICAgICAvLyB0aGUgY29uZGl0aW9ucyBmb3IgdGhpcyBjYWxsLlxuIDU5NDpcdCAgICAgICAgbGV0IGRhdGE6IFx1MDAyNkRhdGEgPSB1bnNhZmUgeyBnZXRfZ3JvdXBfZGF0YShjX2dyb3VwKSB9O1xuIDU5NTpcdFxuIDU5NjpcdCAgICAgICAgbGV0IHJldCA9IE86OnN0b3JlKFxuIDU5NzpcdCAgICAgICAgICAgIGRhdGEsXG4gNTk4Olx0ICAgICAgICAgICAgLy8gU0FGRVRZOiBCeSBmdW5jdGlvbiBzYWZldHkgcmVxdWlyZW1lbnRzLCBgcGFnZWAgaXMgcmVhZGFibGVcbiA1OTk6XHQgICAgICAgICAgICAvLyBmb3IgYXQgbGVhc3QgYHNpemVgLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMwMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgcm51bGxgIERyaXZlciYjMzk7cyBDb25maWdGUyBJbnRlcmZhY2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYHNob3dgIGFuZCBgc3RvcmVgIGZ1bmN0aW9ucyBpbiB0aGUgYEF0dHJpYnV0ZWAgc3RydWN0IGludGVyYWN0IHdpdGggdGhlIGBBdHRyaWJ1dGVPcGVyYXRpb25zYCB0cmFpdCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHJudWxsX21vZGAgbW9kdWxlIGFuZCBpdHMgYGNvbmZpZ2ZzYCBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgYERldmljZUNvbmZpZ2AuIEkmIzM5O20gc2VlaW5nIGNhbGxzIGxpa2UgYCZsdDtybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9ucyZsdDsxJmd0OyZndDs6OnN0b3JlYCBhbmQgc2ltaWxhciBvbmVzLiBJJiMzOTttIGFsc28gcmVmZXJlbmNpbmcgZnVuY3Rpb25zIGluIGBybnVsbC5yc2AgYW5kIGBjb25maWdmcy5yc2AsIGxpa2UgYE51bGxCbGtEZXZpY2U6Om5ld2AgYW5kIGBEZXZpY2VDb25maWc6OnN0b3JlYC4KCk5vdywgSSYjMzk7bSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSByZWNlbnQgcGF0Y2gsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCBmaWxlLiBJdCYjMzk7cyB0aGUgYEF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDtgLCBgJmx0OzImZ3Q7YCwgYCZsdDszJmd0O2AsIGFuZCBgJmx0OzQmZ3Q7YCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgdGhlIGtleSBoZXJlOiBgYmxvY2tzaXplYCwgYHJvdGF0aW9uYWxgLCBgc2l6ZWAsIGFuZCBgaXJxbW9kZWAsIHJlc3BlY3RpdmVseS4gRWFjaCBgc3RvcmVgIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UgaXQmIzM5O3MgdGFraW5nIGEgbG9jayB0byBlbnN1cmUgbXV0dWFsIGV4Y2x1c2lvbiwgY2hlY2tpbmcgYSBgcG93ZXJlZGAgc3RhdGUsIGFuZCB0aGVuIG1vZGlmeWluZyBjb25maWd1cmF0aW9uIGZpZWxkcy4gVGhlIGxvY2sgYW5kIHRoZSBgcG93ZXJlZGAgc3RhdGUgY2hlY2sgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZzogYGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO2AgZm9sbG93ZWQgYnkgYSBjaGVjayBhbmQgcG90ZW50aWFsIGVhcmx5IHJldHVybi4gVGhlIGNvZGUgdGhlbiBlaXRoZXIgdmFsaWRhdGVzIHRoZSBpbnB1dCwgdXNpbmcgZnVuY3Rpb24gc3VjaCBhcyBgR2VuRGlza0J1aWxkZXI6OnZhbGlkYXRlX2Jsb2NrX3NpemVgIG9yIHBhcnNlcyB1c2luZyBga3N0cnRvYm9vbF9ieXRlc2Agb3IgYElSUU1vZGU6OnRyeV9mcm9tYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGNvbmZpZ3VyYXRpb24gc3VyZmFjZSB3YXJyYW50IGZ1enppbmc/CgoqICAgKipSZWFjaGFiaWxpdHk6KiogRGVmaW5pdGVseS4gVGhlIGBCTEtfREVWX1JVU1RfTlVMTGAgZHJpdmVyIGlzIGEgc29mdHdhcmUgYmxvY2sgZGV2aWNlIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwcy4KKiAgICoqQ29uY3VycmVuY3kvTG9ja2luZyBJbXBhY3Q6KiogWWVzLCB0aGlzIHBhdGNoIGlzIGRpcmVjdGx5IG1vZGlmeWluZyBsb2NraW5nIGJlaGF2aW9yIGluIHRoZSBrZXJuZWwuIFRoZSBnb2FsIGlzIHRvIGNsb3NlIHJhY2Ugd2luZG93cyB3aGVyZSB0aGUgbG9jayB3YXMgZHJvcHBlZCBiZXR3ZWVuIHRoZSBgcG93ZXJlZGAgc3RhdGUgY2hlY2sgYW5kIG1vZGlmaWNhdGlvbiBvZiBjb25maWd1cmF0aW9uIGZpZWxkcy4gVGhpcyBpcyBzZWN1cml0eS1zZW5zaXRpdmUgc3R1ZmYuCgpUaGVyZWZvcmUsIFdvcnRoRnV6emluZyA9IFRydWUuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgRW5hYmxlQ29uZmlncy4gSSBuZWVkIHRvIGNvbmZpcm06CgoqICAgYEJMS19ERVZfUlVTVF9OVUxMYDogQ2hlY2suCiogICBgUlVTVGA6IENoZWNrLgoqICAgYENPTkZJR0ZTX0ZTYDogQ2hlY2suCiogICBgQkxPQ0tgOiBUaGlzIGlzIGEgc3RhbmRhcmQgcGFyZW50IGZvciBibG9jayBkZXZpY2VzLCBidXQgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlLipybnVsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTE5PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoyMDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFJ1c3QgTnVsbCBCbG9jayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0RFVl9SVVNUX05VTExgLiAgTXkgZmlyc3QgbW92ZSBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCB3b3VsZCBiZSBpbiBgZHJpdmVycy9ibG9jay9LY29uZmlnYCwgc28gSSYjMzk7bGwgY2hlY2sgdGhhdCBmaXJzdC4gVGhlbiwgc2luY2UgSSBrbm93IHRoZSBzcGVjaWZpY3MgSSYjMzk7bSBsb29raW5nIGZvciwgSSBzaG91bGQgZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZ2AuIEFoLCBoZXJlIGl0IGlzOgoKYGBga2NvbmZpZwpjb25maWcgQkxLX0RFVl9SVVNUX05VTEwKICAgIHRyaXN0YXRlICYjMzQ7UnVzdCBudWxsIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKSYjMzQ7CiAgICBkZXBlbmRzIG9uIFJVU1QgJmFtcDsmYW1wOyBDT05GSUdGU19GUwpgYGAKClNvLCB0aGF0IHRlbGxzIG1lIHRoZSBkcml2ZXIgZGVwZW5kcyBvbiBgUlVTVGAgYW5kIGBDT05GSUdGU19GU2AuIEdvdCBpdC4gTm93LCB3aGF0IHdhcyBJIGNoZWNraW5nIGluIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgPyBKdXN0IG1ha2luZyBzdXJlIHRoZXJlIHdhc24mIzM5O3Qgc29tZXRoaW5nIGVsc2UgbW9yZSBnbG9iYWwuIEkmIzM5O2xsIHRha2UgYSBxdWljayBnbGFuY2UgYXQgdGhlIGZpcnN0IHR3ZW50eSBsaW5lcywgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQuLi4gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEJsb2NrIGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIEJMS19ERVZcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7QmxvY2sgZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAgOTpcdFx0ZGVmYXVsdCB5XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB2YXJpb3VzIGRpZmZlcmVudCBibG9jayBkZXZpY2VcbiAgMTI6XHRcdCAgZHJpdmVycy4gVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZDtcbiAgMTU6XHRcdCAgb25seSBkbyB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgMTY6XHRcbiAgMTc6XHRpZiBCTEtfREVWXG4gIDE4Olx0XG4gIDE5Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZ1wmIzM0O1xuICAyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWdcJiMzNDtcbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgQkxLX0RFVl9GRFxuICAyMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Tm9ybWFsIGZsb3BweSBkaXNrIHN1cHBvcnRcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gQVJDSF9NQVlfSEFWRV9QQ19GRENcbiAgMjU6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNjAKCQkJCQkJCW91dHB1dDogMjcwCgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUnVzdCBOdWxsIEJsb2NrIERyaXZlciBDb25maWdmcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHRoZSBjaGFuZ2VzIHRvIHRoZSBSdXN0IG51bGwgYmxvY2sgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIGNvbmZpZ2ZzIGludGVyZmFjZSwgYW5kIGhvdyBpdCBpbXBhY3RzIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEkgc2VlIHRoYXQgYEJMS19ERVZfUlVTVF9OVUxMYCwgYEJMS19ERVZgLCBgQkxPQ0tgLCBgUlVTVGAsIGFuZCBgQ09ORklHRlNfRlNgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLgoKRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzLiBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoZSBtZXRob2RzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGVzZSBtZXRob2RzOgoKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MiZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MyZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7NCZndDsmZ3Q7OjpzdG9yZWAKKiAgIGBEZXZpY2VDb25maWc6OnN0b3JlYAoqICAgYHJudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZzo6c3RvcmVgCiogICBgTnVsbEJsa0RldmljZTo6bmV3YAoKVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGF0dHJpYnV0ZSBvcGVyYXRpb25zIHdpdGhpbiBjb25maWdmcywgYW5kIGFsc28gdGhlIGRldmljZSBjcmVhdGlvbiwgc28gaXQgbG9va3MgbGlrZSBjb25maWdmcyBtb2RpZmljYXRpb25zIGluY2x1ZGUgYm90aCB0aGUgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBjcmVhdGlvbiBvZiB0aGUgYmxvY2sgZGV2aWNlLgoKVGhlIHJlYXNvbmluZyBoZXJlIG1ha2VzIHNlbnNlOiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIEJ5IGhvbGRpbmcgdGhlIGxvY2sgZHVyaW5nIHZhbGlkYXRpb24sIHBhcnNpbmcsIGFuZCBhc3NpZ25tZW50IHdpdGhpbiB0aGUgY29uZmlnZnMgaW50ZXJmYWNlLCB3ZSBlbGltaW5hdGUgdGhlIHBvdGVudGlhbCBmb3IgZGV2aWNlIHNldHRpbmdzIHRvIGJlIGFsdGVyZWQgd2hpbGUgdGhlIGRldmljZSBpcyBsaXZlLiBTaW5jZSB0aGlzIGlzIGFuIGVtdWxhdGVkIGRyaXZlciBhbmQgY29uZmlndXJhYmxlIHZpYSB1c2Vyc3BhY2UgdGhyb3VnaCBjb25maWdmcywgaXQmIzM5O3MgdmVyeSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0cyBhcmUgZGVmaW5lZCBhczoKCiogICBgRGV2aWNlQ29uZmlnOjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MiZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MyZndDsmZ3Q7OjpzdG9yZWAKKiAgIGAmbHQ7cm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7NCZndDsmZ3Q7OjpzdG9yZWAKKiAgIGBOdWxsQmxrRGV2aWNlOjpuZXdgCgpUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIGJlIHJlbGV2YW50IGFyZToKCiogICBgQkxLX0RFVl9SVVNUX05VTExgCiogICBgUlVTVGAKKiAgIGBDT05GSUdGU19GU2AKKiAgIGBCTEtfREVWYAoqICAgYEJMT0NLYAoKV2l0aCB0aGlzIGluZm9ybWF0aW9uLCBJIGNhbiBub3cgbW92ZSBmb3J3YXJkLiBMZXQmIzM5O3MgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUlVTVF9OVUxMJiMzNDssCiAgICAmIzM0O1JVU1QmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OywKICAgICYjMzQ7QkxLX0RFViYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O0RldmljZUNvbmZpZzo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2VcdTAwM2U6OnN0b3JlJiMzNDssCiAgICAmIzM0O1x1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZVx1MDAzZTo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2M0XHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtOdWxsQmxrRGV2aWNlOjpuZXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgY29uZmlnZnMgYXR0cmlidXRlIHN0b3JlIGhhbmRsZXJzIGZvciB0aGUgUnVzdCBudWxsIGJsb2NrIGRldmljZSBkcml2ZXIgKHJudWxsKS4gSG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHN0YXRlIGNoZWNrcyBhbmQgZmllbGQgYXNzaWdubWVudHMgY2xvc2VzIGEgcmFjZSB3aW5kb3cgd2hlbiBhbHRlcmluZyBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiAoYmxvY2tfc2l6ZSwgcm90YXRpb25hbCwgY2FwYWNpdHlfbWliLCBpcnFfbW9kZSkgd2hpbGUgcG93ZXJpbmcgZGV2aWNlcyBvbi9vZmYuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtYmFzZWQsIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfUlVTVF9OVUxMJiMzNDssCiAgICAmIzM0O1JVU1QmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OywKICAgICYjMzQ7QkxLX0RFViYjMzQ7LAogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O0RldmljZUNvbmZpZzo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2VcdTAwM2U6OnN0b3JlJiMzNDssCiAgICAmIzM0O1x1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZVx1MDAzZTo6c3RvcmUmIzM0OywKICAgICYjMzQ7XHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2M0XHUwMDNlXHUwMDNlOjpzdG9yZSYjMzQ7LAogICAgJiMzNDtOdWxsQmxrRGV2aWNlOjpuZXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgY29uZmlnZnMgYXR0cmlidXRlIHN0b3JlIGhhbmRsZXJzIGZvciB0aGUgUnVzdCBudWxsIGJsb2NrIGRldmljZSBkcml2ZXIgKHJudWxsKS4gSG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHN0YXRlIGNoZWNrcyBhbmQgZmllbGQgYXNzaWdubWVudHMgY2xvc2VzIGEgcmFjZSB3aW5kb3cgd2hlbiBhbHRlcmluZyBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiAoYmxvY2tfc2l6ZSwgcm90YXRpb25hbCwgY2FwYWNpdHlfbWliLCBpcnFfbW9kZSkgd2hpbGUgcG93ZXJpbmcgZGV2aWNlcyBvbi9vZmYuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtYmFzZWQsIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzY29wZSBpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc2AgZm9yIGBEZXZpY2VDb25maWdgIGNvbmZpZ2ZzIGF0dHJpYnV0ZSBgc3RvcmVgIGhhbmRsZXJzLiBQcmV2aW91c2x5LCBgdGhpcy5kYXRhLmxvY2soKWAgd2FzIGFjcXVpcmVkIHRvIGNoZWNrIGBwb3dlcmVkYCBhbmQgdGhlbiByZS1hY3F1aXJlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3BlbmluZyBhIHJhY2Ugd2luZG93IChUT0NUT1UpLiBUaGUgcGF0Y2ggaG9sZHMgdGhlIG11dGV4IGxvY2sgZ3VhcmQgYWNyb3NzIGJvdGggdGhlIGNoZWNrIGFuZCB0aGUgYXNzaWdubWVudC5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kvbG9ja2luZyBmaXggaW4gc2FmZSBSdXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCBjb3B5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBrZXJuZWwgaW5mby1sZWFrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliN2ZhYjEyMWJmNDdiN2RhOTg4MmI1OGNmNGZmNjgzODYxOGFkMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIyOjQxOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyBiL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMKaW5kZXggMzJjMTBjM2Y0ZDBmZC4uNjZlZjkxYjNmZjBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzCkBAIC0xNzQsNyAmIzQzOzE3NCw4IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7MSZndDsgZm9yIERldmljZUNvbmZpZyB7CiAgICAgfQogCiAgICAgZm4gc3RvcmUodGhpczogJmFtcDtEZXZpY2VDb25maWcsIHBhZ2U6ICZhbXA7W3U4XSkgLSZndDsgUmVzdWx0IHsKLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHsKJiM0MzsgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpOwomIzQzOyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7CiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTsKICAgICAgICAgfQogCkBAIC0xODIsNyAmIzQzOzE4Myw3IEBAIGZuIHN0b3JlKHRoaXM6ICZhbXA7RGV2aWNlQ29uZmlnLCBwYWdlOiAmYW1wO1t1OF0pIC0mZ3Q7IFJlc3VsdCB7CiAgICAgICAgIGxldCB2YWx1ZSA9IHRleHQucGFyc2U6OiZsdDt1MzImZ3Q7KCkubWFwX2Vycih8X3wgRUlOVkFMKT87CiAKICAgICAgICAgR2VuRGlza0J1aWxkZXI6OnZhbGlkYXRlX2Jsb2NrX3NpemUodmFsdWUpPzsKLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7CiYjNDM7ICAgICAgICBndWFyZC5ibG9ja19zaXplID0gdmFsdWU7CiAgICAgICAgIE9rKCgpKQogICAgIH0KIH0KQEAgLTIwNCwxMSAmIzQzOzIwNSwxMiBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zJmx0OzImZ3Q7IGZvciBEZXZpY2VDb25maWcgewogICAgIH0KIAogICAgIGZuIHN0b3JlKHRoaXM6ICZhbXA7RGV2aWNlQ29uZmlnLCBwYWdlOiAmYW1wO1t1OF0pIC0mZ3Q7IFJlc3VsdCB7Ci0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7CiYjNDM7ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTsKJiM0MzsgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQgewogICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmRhdGEubG9jaygpLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPzsKJiM0MzsgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPzsKIAogICAgICAgICBPaygoKSkKICAgICB9CkBAIC0yMjUsMTQgJiM0MzsyMjcsMTUgQEAgaW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9ucyZsdDszJmd0OyBmb3IgRGV2aWNlQ29uZmlnIHsKICAgICB9CiAKICAgICBmbiBzdG9yZSh0aGlzOiAmYW1wO0RldmljZUNvbmZpZywgcGFnZTogJmFtcDtbdThdKSAtJmd0OyBSZXN1bHQgewotICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWQgewomIzQzOyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7CiYjNDM7ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHsKICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpOwogICAgICAgICB9CiAKICAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpOwogICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjombHQ7dTY0Jmd0OygpLm1hcF9lcnIofF98IEVJTlZBTCk/OwogCi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliID0gdmFsdWU7CiYjNDM7ICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTsKICAgICAgICAgT2soKCkpCiAgICAgfQogfQpAQCAtMjQ4LDE0ICYjNDM7MjUxLDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnMmbHQ7NCZndDsgZm9yIERldmljZUNvbmZpZyB7CiAgICAgfQogCiAgICAgZm4gc3RvcmUodGhpczogJmFtcDtEZXZpY2VDb25maWcsIHBhZ2U6ICZhbXA7W3U4XSkgLSZndDsgUmVzdWx0IHsKLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHsKJiM0MzsgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpOwomIzQzOyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7CiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTsKICAgICAgICAgfQogCiAgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTsKICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6Jmx0O3U4Jmd0OygpLm1hcF9lcnIofF98IEVJTlZBTCk/OwogCi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/OwomIzQzOyAgICAgICAgZ3VhcmQuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/OwogICAgICAgICBPaygoKSkKICAgICB9CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjkwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJ1c3QtQmFzZWQgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbW9kaWZpY2F0aW9uIHRvIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCwgd2hpY2gsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBpcyBhIFJ1c3QgaW1wbGVtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgYHJudWxsYCBibG9jayBkcml2ZXIgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIGNvbmZpZ2ZzLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgYSB2aXJ0dWFsIGJsb2NrIGRldmljZSBhbmQgdGhpcyBpcyB0aGUgY29uZmlnZnMgY29kZSB0aGF0IGFsbG93cyBpdCB0byBiZSBjb25maWd1cmVkLiBUaGUgY29udGV4dCBpcyBpbXBvcnRhbnQgaGVyZTsgSSYjMzk7bGwgd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBmdWxseSBncmFzcCB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBhbmQgdGhlIGRlc2lnbiBkZWNpc2lvbnMuCgpGcm9tIHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgbG9ja2luZyBpc3N1ZSB3aXRoaW4gdGhlIGBEZXZpY2VDb25maWdgIHN0cnVjdCB3aGVuIGl0IGNvbWVzIHRvIHRoZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMuIEl0IGxvb2tzIGxpa2UgdGhlIHByaW9yIGNvZGUgdXNlZCBgdGhpcy5kYXRhLmxvY2soKWAgaW4gbXVsdGlwbGUgcGxhY2VzIHdpdGhpbiBlYWNoIGF0dHJpYnV0ZSYjMzk7cyBgc3RvcmVgIG1ldGhvZC4gRWFjaCB0aW1lLCB0aGUgbG9jayB3YXMgZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBtZXRob2Qgc2NvcGUsIHRoZW4gcmUtYWNxdWlyZWQgZm9yIGEgc3Vic2VxdWVudCBhY2Nlc3MuCgpJIHNlZSB0aGF0IHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgYSBtdXRhYmxlIGd1YXJkIHdpdGggYSBzaW5nbGUgbG9jay4gVGhlIGBzdG9yZWAgbWV0aG9kcyBmb3IgdGhlIGBibG9ja19zaXplYCwgYHJvdGF0aW9uYWxgLCBgY2FwYWNpdHlfbWliYCwgYW5kIGBpcnFfbW9kZWAgYXR0cmlidXRlcyBhcmUgYWZmZWN0ZWQuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGNoZWNrIGZvciBgLnBvd2VyZWRgIGFuZCB0aGUgY2hhbmdlIHByZXZlbnRzIHNldHRpbmcgdmFsdWVzIGlmIHRoZSBkZXZpY2UgaXMgcG93ZXJlZC4gSXQgYXBwZWFycyBlYWNoIGF0dHJpYnV0ZSBoYWQgYSBsb2NrIGFjcXVpc2l0aW9uIG9uIHRoZSBgdGhpcy5kYXRhLmxvY2soKWAgd2hpY2ggaXMgbm93IGNvbnNvbGlkYXRlZCBpbnRvIGEgc2luZ2xlIGxvY2sgYnkgaW5pdGlhbGl6aW5nIHRoZSBgbXV0IGd1YXJkYC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGxvY2sgaXMgaGVsZCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiBvZiB0aGUgYXR0cmlidXRlJiMzOTtzIGBzdG9yZWAgbWV0aG9kLCBwcmVzdW1hYmx5IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIG9yIGluY29uc2lzdGVuY2llcyB3aGVuIG1vZGlmeWluZyB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gZGF0YS4gQnkgaW5pdGlhbGl6aW5nIGEgZ3VhcmQgYXQgdGhlIHN0YXJ0IGFuZCBob2xkaW5nIGl0IGZvciB0aGUgZW50aXJlIGR1cmF0aW9uLCB3ZSBhdm9pZCBtdWx0aXBsZSBsb2NrIGFjcXVpc2l0aW9ucyB3aXRoaW4gZWFjaCBmdW5jdGlvbi4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBnb29kIGNoYW5nZS4gTG9ja2luZyBpcyBhIGNyaXRpY2FsIGFyZWEgaW4ga2VybmVsIGRldmVsb3BtZW50LCBhbmQgYSBjb25zb2xpZGF0ZWQgbG9jayBoZXJlIGNvdWxkIGltcHJvdmUgdGhlIHJvYnVzdG5lc3MgYW5kIHBvdGVudGlhbGx5IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGJlIGVhc2llciB0byByZWFkLCBiZWNhdXNlIGxlc3MgY29kZSBpcyBuZWVkZWQsIGFuZCBzaG91bGQgYmUgYmV0dGVyIHBlcmZvcm1hbmNlIHRvby4gTm8gbW9yZSB1bm5lY2Vzc2FyeSBsb2NrLXVubG9jayBjeWNsZXMuIEl0IHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2Ugd2hlcmUgdGhlIGAucG93ZXJlZGAgZmxhZyBjb3VsZCBiZSBjaGVja2VkLCBhbmQgdGhlbiBtb2RpZmllZCBiZXR3ZWVuIGxvY2sgYWNxdWlzaXRpb25zLCBkZXBlbmRpbmcgb24gaG93IHRoaXMgaXMgd3JpdHRlbi4gSSYjMzk7bGwgbmVlZCB0byByZWFkIHRoZSB3aWRlciBjb250ZXh0IHRvIGJlIHN1cmUsIGJ1dCBzbyBmYXIsIGl0IGFwcGVhcnMgdG8gYmUgYW4gaW1wcm92ZW1lbnQuIExldCBtZSBjaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYGNvbmZpZ2ZzYCB0byBiZSBzdXJlIHRoYXQgSSBhbSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYwOlx0ICAgICAgICB9XG4gMTYxOlx0XG4gMTYyOlx0ICAgICAgICBPaygoKSlcbiAxNjM6XHQgICAgfVxuIDE2NDpcdH1cbiAxNjU6XHRcbiAxNjY6XHQjW3Z0YWJsZV1cbiAxNjc6XHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMVx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAxNjg6XHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuIDE2OTpcdFxuIDE3MDpcdCAgICBmbiBzaG93KHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVx1MDAzZSBSZXN1bHRcdTAwM2N1c2l6ZVx1MDAzZSB7XG4gMTcxOlx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcbiAxNzI6XHQgICAgICAgIHdyaXRlci53cml0ZV9mbXQoZm10IShcJiMzNDt7fVxcblwmIzM0OywgdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplKSk/O1xuIDE3MzpcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcbiAxNzQ6XHQgICAgfVxuIDE3NTpcdFxuIDE3NjpcdCAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbiAxNzc6XHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuIDE3ODpcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gMTc5Olx0ICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gMTgwOlx0ICAgICAgICB9XG4gMTgxOlx0XG4gMTgyOlx0ICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XG4gMTgzOlx0ICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcdTAwM2N1MzJcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcbiAxODQ6XHRcbiAxODU6XHQgICAgICAgIEdlbkRpc2tCdWlsZGVyOjp2YWxpZGF0ZV9ibG9ja19zaXplKHZhbHVlKT87XG4gMTg2Olx0ICAgICAgICBndWFyZC5ibG9ja19zaXplID0gdmFsdWU7XG4gMTg3Olx0ICAgICAgICBPaygoKSlcbiAxODg6XHQgICAgfVxuIDE4OTpcdH1cbiAxOTA6XHRcbiAxOTE6XHQjW3Z0YWJsZV1cbiAxOTI6XHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMlx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAxOTM6XHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuIDE5NDpcdFxuIDE5NTpcdCAgICBmbiBzaG93KHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVx1MDAzZSBSZXN1bHRcdTAwM2N1c2l6ZVx1MDAzZSB7XG4gMTk2Olx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcbiAxOTc6XHRcbiAxOTg6XHQgICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucm90YXRpb25hbCB7XG4gMTk5Olx0ICAgICAgICAgICAgd3JpdGVyLndyaXRlX3N0cihcJiMzNDsxXFxuXCYjMzQ7KT87XG4gMjAwOlx0ICAgICAgICB9IGVsc2Uge1xuIDIwMTpcdCAgICAgICAgICAgIHdyaXRlci53cml0ZV9zdHIoXCYjMzQ7MFxcblwmIzM0Oyk/O1xuIDIwMjpcdCAgICAgICAgfVxuIDIwMzpcdFxuIDIwNDpcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcbiAyMDU6XHQgICAgfVxuIDIwNjpcdFxuIDIwNzpcdCAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbiAyMDg6XHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuIDIwOTpcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gMjEwOlx0ICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gMjExOlx0ICAgICAgICB9XG4gMjEyOlx0XG4gMjEzOlx0ICAgICAgICBndWFyZC5yb3RhdGlvbmFsID0ga3N0cnRvYm9vbF9ieXRlcyhwYWdlKT87XG4gMjE0Olx0XG4gMjE1Olx0ICAgICAgICBPaygoKSlcbiAyMTY6XHQgICAgfVxuIDIxNzpcdH1cbiAyMTg6XHRcbiAyMTk6XHQjW3Z0YWJsZV1cbiAyMjA6XHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAyMjE6XHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuIDIyMjpcdFxuIDIyMzpcdCAgICBmbiBzaG93KHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVx1MDAzZSBSZXN1bHRcdTAwM2N1c2l6ZVx1MDAzZSB7XG4gMjI0Olx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcbiAyMjU6XHQgICAgICAgIHdyaXRlci53cml0ZV9mbXQoZm10IShcJiMzNDt7fVxcblwmIzM0OywgdGhpcy5kYXRhLmxvY2soKS5jYXBhY2l0eV9taWIpKT87XG4gMjI2Olx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxuIDIyNzpcdCAgICB9XG4gMjI4Olx0XG4gMjI5Olx0ICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuIDIzMDpcdCAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XG4gMjMxOlx0ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAyMzI6XHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAyMzM6XHQgICAgICAgIH1cbiAyMzQ6XHRcbiAyMzU6XHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcbiAyMzY6XHQgICAgICAgIGxldCB2YWx1ZSA9IHRleHQucGFyc2U6Olx1MDAzY3U2NFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xuIDIzNzpcdFxuIDIzODpcdCAgICAgICAgZ3VhcmQuY2FwYWNpdHlfbWliID0gdmFsdWU7XG4gMjM5Olx0ICAgICAgICBPaygoKSlcbiAyNDA6XHQgICAgfVxuIDI0MTpcdH1cbiAyNDI6XHRcbiAyNDM6XHQjW3Z0YWJsZV1cbiAyNDQ6XHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjNFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAyNDU6XHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xuIDI0NjpcdFxuIDI0NzpcdCAgICBmbiBzaG93KHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVx1MDAzZSBSZXN1bHRcdTAwM2N1c2l6ZVx1MDAzZSB7XG4gMjQ4Olx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcbiAyNDk6XHQgICAgICAgIHdyaXRlci53cml0ZV9mbXQoZm10IShcJiMzNDt7fVxcblwmIzM0OywgdGhpcy5kYXRhLmxvY2soKS5pcnFfbW9kZSkpPztcbiAyNTA6XHQgICAgICAgIE9rKHdyaXRlci5ieXRlc193cml0dGVuKCkpXG4gMjUxOlx0ICAgIH1cbiAyNTI6XHRcbiAyNTM6XHQgICAgZm4gc3RvcmUodGhpczogXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcdTAwMjZbdThdKSAtXHUwMDNlIFJlc3VsdCB7XG4gMjU0Olx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbiAyNTU6XHQgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuIDI1NjpcdCAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuIDI1NzpcdCAgICAgICAgfVxuIDI1ODpcdFxuIDI1OTpcdCAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjQwCgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb21taXQuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gdGhlIGBzdG9yZWAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIGxvY2tpbmcgYHRoaXMuZGF0YWAgKnR3aWNlKjogb25jZSB0byBjaGVjayBpZiBgcG93ZXJlZGAgd2FzIHRydWUsIGFuZCB0aGVuIGFnYWluIHRvIGFjdHVhbGx5IG1vZGlmeSBhIHZhbHVlLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIFRpbWUtb2YtQ2hlY2stdG8tVGltZS1vZi1Vc2UgKFRPQ1RPVSkgcmFjZSBjb25kaXRpb24uIEJldHdlZW4gdGhvc2UgdHdvIGxvY2sgYWNxdWlzaXRpb25zLCBhbm90aGVyIHRocmVhZCBjb3VsZCBoYXZlIG1vZGlmaWVkIHRoZSBzdGF0ZSwgcmVuZGVyaW5nIHRoZSBpbml0aWFsIGNoZWNrIGludmFsaWQuIFRoZSBmaXggaXMgZWxlZ2FudDogIEJ5IGludHJvZHVjaW5nIGEgc2luZ2xlLCBsb25nZXItbGl2ZWQgbG9jayBndWFyZCAoYGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO2ApLCB3ZSBlbnN1cmUgdGhlIGNoZWNrIGFuZCB0aGUgbW9kaWZpY2F0aW9uIGhhcHBlbiBhdG9taWNhbGx5LCB1bmRlciB0aGUgcHJvdGVjdGlvbiBvZiB0aGUgbXV0ZXguCgpOb3csIGEgY3J1Y2lhbCBhc3BlY3QgaXMgZGV0ZXJtaW5pbmcgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcmlzayByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBHaXZlbiB0aGF0IHRoaXMgaXMgUnVzdCBjb2RlLCBhbmQgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uIHNhZmUgdHlwZXMgKHByaW1pdGl2ZXMsIGVudW1zLCBzdHJ1Y3QgZmllbGRzKSwgUnVzdCBndWFyYW50ZWVzIHRoYXQgYWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0IGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBrZXkgc2FmZWd1YXJkLiBUaGUgcGF0Y2ggaXRzZWxmIG1lcmVseSBhZGp1c3RzIHRoZSBsb2NraW5nIHNjb3BlOyBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBidWZmZXJzLCBvciBvcGVyYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4gIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgaW52b2x2ZWQgaGVyZS4gS01TQU4sIHdoaWNoIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgaXNuJiMzOTt0IGFwcGxpY2FibGUgaW4gdGhpcyBzY2VuYXJpby4gVGhlIGVudGlyZSBsb2dpYyBpcyBjb25maW5lZCB0byBhZGp1c3RpbmcgdGhlIGxvY2tpbmcgc2NvcGUgYW5kIGlzIGEgcHVyZSBjb25jdXJyZW5jeSBmaXguIEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUgKFRPQ1RPVSkgYnkgZXh0ZW5kaW5nIHRoZSBsb2NrJiMzOTtzIHNjb3BlLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHByZXNlbnQgaGVyZSwgYW5kIHRoZXJlZm9yZSBhIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4gIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlIHByb3BlcnRpZXMgZm9yIGBzZXQtcmVzdWx0c2AgbmVlZCB0byBiZSBzZXQgd2l0aCBgS01TQU5SZWFzb25pbmdgIGFuZCBgTmVlZHNLTVNBTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIHNjb3BlIGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCBmb3IgYERldmljZUNvbmZpZ2AgY29uZmlnZnMgYXR0cmlidXRlIGBzdG9yZWAgaGFuZGxlcnMuIFByZXZpb3VzbHksIGB0aGlzLmRhdGEubG9jaygpYCB3YXMgYWNxdWlyZWQgdG8gY2hlY2sgYHBvd2VyZWRgIGFuZCB0aGVuIHJlLWFjcXVpcmVkIHRvIHNldCB0aGUgYXR0cmlidXRlIHZhbHVlLCBvcGVuaW5nIGEgcmFjZSB3aW5kb3cgKFRPQ1RPVSkuIFRoZSBwYXRjaCBob2xkcyB0aGUgbXV0ZXggbG9jayBndWFyZCBhY3Jvc3MgYm90aCB0aGUgY2hlY2sgYW5kIHRoZSBhc3NpZ25tZW50LlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeS9sb2NraW5nIGZpeCBpbiBzYWZlIFJ1c3QgY29kZSBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIGNvcHksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGtlcm5lbCBpbmZvLWxlYWtzLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2NvcGUgaW4gYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgIGZvciBgRGV2aWNlQ29uZmlnYCBjb25maWdmcyBhdHRyaWJ1dGUgYHN0b3JlYCBoYW5kbGVycy4gUHJldmlvdXNseSwgYHRoaXMuZGF0YS5sb2NrKClgIHdhcyBhY3F1aXJlZCB0byBjaGVjayBgcG93ZXJlZGAgYW5kIHRoZW4gcmUtYWNxdWlyZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9wZW5pbmcgYSByYWNlIHdpbmRvdyAoVE9DVE9VKS4gVGhlIHBhdGNoIGhvbGRzIHRoZSBtdXRleCBsb2NrIGd1YXJkIGFjcm9zcyBib3RoIHRoZSBjaGVjayBhbmQgdGhlIGFzc2lnbm1lbnQuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgZml4IGluIHNhZmUgUnVzdCBjb2RlIGFuZCBkb2VzIG5vdCBhbGxvY2F0ZSwgY29weSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnRyb2R1Y2Uga2VybmVsIGluZm8tbGVha3MuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjA0LjcyMzk1MDA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzNjA1OTEyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9SVVNUX05VTExcIixcbiAgICBcIlJVU1RcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJCTEtfREVWXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIkRldmljZUNvbmZpZzo6c3RvcmVcIixcbiAgICBcIlxcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MxXFx1MDAzZVxcdTAwM2U6OnN0b3JlXCIsXG4gICAgXCJcXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMlxcdTAwM2VcXHUwMDNlOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzNcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIlxcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2M0XFx1MDAzZVxcdTAwM2U6OnN0b3JlXCIsXG4gICAgXCJOdWxsQmxrRGV2aWNlOjpuZXdcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIHNjb3BlIGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCBmb3IgYERldmljZUNvbmZpZ2AgY29uZmlnZnMgYXR0cmlidXRlIGBzdG9yZWAgaGFuZGxlcnMuIFByZXZpb3VzbHksIGB0aGlzLmRhdGEubG9jaygpYCB3YXMgYWNxdWlyZWQgdG8gY2hlY2sgYHBvd2VyZWRgIGFuZCB0aGVuIHJlLWFjcXVpcmVkIHRvIHNldCB0aGUgYXR0cmlidXRlIHZhbHVlLCBvcGVuaW5nIGEgcmFjZSB3aW5kb3cgKFRPQ1RPVSkuIFRoZSBwYXRjaCBob2xkcyB0aGUgbXV0ZXggbG9jayBndWFyZCBhY3Jvc3MgYm90aCB0aGUgY2hlY2sgYW5kIHRoZSBhc3NpZ25tZW50LlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgZml4IGluIHNhZmUgUnVzdCBjb2RlIGFuZCBkb2VzIG5vdCBhbGxvY2F0ZSwgY29weSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnRyb2R1Y2Uga2VybmVsIGluZm8tbGVha3MuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgY29uZmlnZnMgYXR0cmlidXRlIHN0b3JlIGhhbmRsZXJzIGZvciB0aGUgUnVzdCBudWxsIGJsb2NrIGRldmljZSBkcml2ZXIgKHJudWxsKS4gSG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHN0YXRlIGNoZWNrcyBhbmQgZmllbGQgYXNzaWdubWVudHMgY2xvc2VzIGEgcmFjZSB3aW5kb3cgd2hlbiBhbHRlcmluZyBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiAoYmxvY2tfc2l6ZSwgcm90YXRpb25hbCwgY2FwYWNpdHlfbWliLCBpcnFfbW9kZSkgd2hpbGUgcG93ZXJpbmcgZGV2aWNlcyBvbi9vZmYuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtYmFzZWQsIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGFuZCByZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjA0LjcyMzk1NDQ3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU0OTQ1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YjdmYWIxMjFiZjQ3YjdkYTk4ODJiNThjZjRmZjY4Mzg2MThhZDEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMjI6NDE6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyBiL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNcXG5pbmRleCAzMmMxMGMzZjRkMGZkLi42NmVmOTFiM2ZmMGNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXFxuQEAgLTE3NCw3ICsxNzQsOCBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzFcXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xcbiAgICAgfVxcbiBcXG4gICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XFxuKyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XFxuKyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xcbiAgICAgICAgIH1cXG4gXFxuQEAgLTE4Miw3ICsxODMsNyBAQCBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4gICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcXHUwMDNjdTMyXFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xcbiBcXG4gICAgICAgICBHZW5EaXNrQnVpbGRlcjo6dmFsaWRhdGVfYmxvY2tfc2l6ZSh2YWx1ZSk/O1xcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuYmxvY2tfc2l6ZSA9IHZhbHVlO1xcbisgICAgICAgIGd1YXJkLmJsb2NrX3NpemUgPSB2YWx1ZTtcXG4gICAgICAgICBPaygoKSlcXG4gICAgIH1cXG4gfVxcbkBAIC0yMDQsMTEgKzIwNSwxMiBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzJcXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xcbiAgICAgfVxcbiBcXG4gICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XFxuKyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XFxuKyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xcbiAgICAgICAgIH1cXG4gXFxuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5yb3RhdGlvbmFsID0ga3N0cnRvYm9vbF9ieXRlcyhwYWdlKT87XFxuKyAgICAgICAgZ3VhcmQucm90YXRpb25hbCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xcbiBcXG4gICAgICAgICBPaygoKSlcXG4gICAgIH1cXG5AQCAtMjI1LDE0ICsyMjcsMTUgQEAgaW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MzXFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcXG4gICAgIH1cXG4gXFxuICAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4tICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWQge1xcbisgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xcbisgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xcbiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gICAgICAgICB9XFxuIFxcbiAgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcXG4gICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcXHUwMDNjdTY0XFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xcbiBcXG4tICAgICAgICB0aGlzLmRhdGEubG9jaygpLmNhcGFjaXR5X21pYiA9IHZhbHVlO1xcbisgICAgICAgIGd1YXJkLmNhcGFjaXR5X21pYiA9IHZhbHVlO1xcbiAgICAgICAgIE9rKCgpKVxcbiAgICAgfVxcbiB9XFxuQEAgLTI0OCwxNCArMjUxLDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjNFxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuICAgICB9XFxuIFxcbiAgICAgZm4gc3RvcmUodGhpczogXFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXFx1MDAyNlt1OF0pIC1cXHUwMDNlIFJlc3VsdCB7XFxuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcXG4rICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4rICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcXG4gICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XFxuICAgICAgICAgfVxcbiBcXG4gICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XFxuICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XFx1MDAzY3U4XFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xcbiBcXG4tICAgICAgICB0aGlzLmRhdGEubG9jaygpLmlycV9tb2RlID0gSVJRTW9kZTo6dHJ5X2Zyb20odmFsdWUpPztcXG4rICAgICAgICBndWFyZC5pcnFfbW9kZSA9IElSUU1vZGU6OnRyeV9mcm9tKHZhbHVlKT87XFxuICAgICAgICAgT2soKCkpXFxuICAgICB9XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MDUuMTkwMDk3MjQyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NTYwNjU5MjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1JVU1RfTlVMTFwiLFxuICAgIFwiUlVTVFwiLFxuICAgIFwiQ09ORklHRlNfRlNcIixcbiAgICBcIkJMS19ERVZcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiRGV2aWNlQ29uZmlnOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzFcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIlxcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MyXFx1MDAzZVxcdTAwM2U6OnN0b3JlXCIsXG4gICAgXCJcXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjM1xcdTAwM2VcXHUwMDNlOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzRcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIk51bGxCbGtEZXZpY2U6Om5ld1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgaW4gdGhlIGNvbmZpZ2ZzIGF0dHJpYnV0ZSBzdG9yZSBoYW5kbGVycyBmb3IgdGhlIFJ1c3QgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyIChybnVsbCkuIEhvbGRpbmcgdGhlIG11dGV4IGFjcm9zcyBzdGF0ZSBjaGVja3MgYW5kIGZpZWxkIGFzc2lnbm1lbnRzIGNsb3NlcyBhIHJhY2Ugd2luZG93IHdoZW4gYWx0ZXJpbmcgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKGJsb2NrX3NpemUsIHJvdGF0aW9uYWwsIGNhcGFjaXR5X21pYiwgaXJxX21vZGUpIHdoaWxlIHBvd2VyaW5nIGRldmljZXMgb24vb2ZmLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLWJhc2VkLCBjb25maWd1cmFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDliN2ZhYjEyMWJmNDdiN2RhOTg4MmI1OGNmNGZmNjgzODYxOGFkMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIyOjQxOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycyBiL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNcbmluZGV4IDMyYzEwYzNmNGQwZmQuLjY2ZWY5MWIzZmYwY2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXG5AQCAtMTc0LDcgKzE3NCw4IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbisgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuKyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gICAgICAgICB9XG4gXG5AQCAtMTgyLDcgKzE4Myw3IEBAIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XHUwMDNjdTMyXHUwMDNlKCkubWFwX2Vycih8X3wgRUlOVkFMKT87XG4gXG4gICAgICAgICBHZW5EaXNrQnVpbGRlcjo6dmFsaWRhdGVfYmxvY2tfc2l6ZSh2YWx1ZSk/O1xuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7XG4rICAgICAgICBndWFyZC5ibG9ja19zaXplID0gdmFsdWU7XG4gICAgICAgICBPaygoKSlcbiAgICAgfVxuIH1cbkBAIC0yMDQsMTEgKzIwNSwxMiBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMlx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAgICAgfVxuIFxuICAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4rICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbisgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuICAgICAgICAgfVxuIFxuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5yb3RhdGlvbmFsID0ga3N0cnRvYm9vbF9ieXRlcyhwYWdlKT87XG4rICAgICAgICBndWFyZC5yb3RhdGlvbmFsID0ga3N0cnRvYm9vbF9ieXRlcyhwYWdlKT87XG4gXG4gICAgICAgICBPaygoKSlcbiAgICAgfVxuQEAgLTIyNSwxNCArMjI3LDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MzXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbisgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuKyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gICAgICAgICB9XG4gXG4gICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XG4gICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcdTAwM2N1NjRcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcbiBcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliID0gdmFsdWU7XG4rICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTtcbiAgICAgICAgIE9rKCgpKVxuICAgICB9XG4gfVxuQEAgLTI0OCwxNCArMjUxLDE1IEBAIGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2M0XHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xuICAgICB9XG4gXG4gICAgIGZuIHN0b3JlKHRoaXM6IFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXHUwMDI2W3U4XSkgLVx1MDAzZSBSZXN1bHQge1xuLSAgICAgICAgaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbisgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xuKyAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XG4gICAgICAgICAgICAgcmV0dXJuIEVycihFQlVTWSk7XG4gICAgICAgICB9XG4gXG4gICAgICAgICBsZXQgdGV4dCA9IGNvcmU6OnN0cjo6ZnJvbV91dGY4KHBhZ2UpPy50cmltKCk7XG4gICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcdTAwM2N1OFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xuIFxuLSAgICAgICAgdGhpcy5kYXRhLmxvY2soKS5pcnFfbW9kZSA9IElSUU1vZGU6OnRyeV9mcm9tKHZhbHVlKT87XG4rICAgICAgICBndWFyZC5pcnFfbW9kZSA9IElSUU1vZGU6OnRyeV9mcm9tKHZhbHVlKT87XG4gICAgICAgICBPaygoKSlcbiAgICAgfVxuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjA1LjE5MDA5ODY3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNDM3OTY3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogUnVzdCBOdWxsIEJsb2NrIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZXkgd2FudCBtZSB0byBldmFsdWF0ZSB0aGlzIGtlcm5lbCBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBzdGFuZGFyZCBRQSB0YXNrLCBwcm9iYWJseSByZWxhdGVkIHRvIGRlZmVuc2l2ZSBmdXp6aW5nIG9yIHRyaWFnZSwgYW5kIHRoZSByaXNrIGhlcmUgc2VlbXMgbmVnbGlnaWJsZS4gV2UncmUgdGFsa2luZyBhYm91dCBhIGtlcm5lbCBlbmdpbmVlcmluZyBRQSBhbmFseXNpcyB1c2luZyBzeXprYWxsZXIsIHNvIEkgY2FuIHNhZmVseSBwcm9jZWVkLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIGlzIGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYC4gSXQncyBhZGRyZXNzaW5nIGEgbG9ja2luZyBpc3N1ZSB3aXRoaW4gdGhlIFJ1c3QgbnVsbCBibG9jayBkcml2ZXIsIGBybnVsbGAuIEkgY2FuIGFscmVhZHkgc2VlIHRoZSBwcm9ibGVtISBUaGV5IHdlcmUgZHJvcHBpbmcgdGhlIGxvY2sgYmV0d2VlbiBjaGVja2luZyB0aGUgYHBvd2VyZWRgIHN0YXRlIGFuZCB1cGRhdGluZyBgYmxvY2tfc2l6ZWAhIFRoYXQgY3JlYXRlcyBhIHJhY2UgY29uZGl0aW9uLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYSBsb2NraW5nIGVmZmljaWVuY3kgaXNzdWUuIEJlZm9yZSwgdGhlIGNvZGUgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgcnVzdFxuaWYgdGhpcy5kYXRhLmxvY2soKS5wb3dlcmVkIHtcbiAgICByZXR1cm4gRXJyKEVCVVNZKTtcbn1cbi4uLlxudGhpcy5kYXRhLmxvY2soKS5ibG9ja19zaXplID0gdmFsdWU7XG5gYGBcblxuV2hpY2ggaXMgb2J2aW91c2x5IGZsYXdlZC4gTm93LCB0aGV5J3ZlIGZpeGVkIGl0IGJ5IGhvbGRpbmcgdGhlIGxvY2sgZm9yIHRoZSBlbnRpcmUgY3JpdGljYWwgc2VjdGlvbjpcblxuYGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO2BcblxuTXVjaCBiZXR0ZXIuIEl0J3MgZ29vZCB0byBzZWUgdGhpcyBraW5kIG9mIHZ1bG5lcmFiaWxpdHkgYmVpbmcgaWRlbnRpZmllZCBhbmQgYWRkcmVzc2VkLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB1c2UgdGhlIHN0YW5kYXJkIHRvb2xzIHRvIGRvIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgZmlsZXMgd2l0aGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2AgYW5kIGFzc29jaWF0ZWQgS2NvbmZpZyBmaWxlcyB3aXRoaW4gdGhlIHJlcG9zaXRvcnkuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHJlbGF0ZWQgY29kZSwgYW5kIGFueSBwb3RlbnRpYWwgc2lkZS1lZmZlY3RzIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MTguNjI4MDcxNzI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTk2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJudWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE5PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoyMDpzb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjEtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTM3PW9iai0kKENPTkZJR19CTEtfREVWX05VTExfQkxLKVxcdCs9IG51bGxfYmxrL1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSArPSBybnVsbC9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM5LVxcbi0tXFxuZHJpdmVycy9ibG9jay9ybnVsbC9NYWtlZmlsZS0xLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfQkxLX0RFVl9SVVNUX05VTEwpICs9IHJudWxsX21vZC5vXFxuZHJpdmVycy9ibG9jay9ybnVsbC9NYWtlZmlsZTozOnJudWxsX21vZC15IDo9IHJudWxsLm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MTY9cHViKGNyYXRlKSBmbiBzdWJzeXN0ZW0oKSAtXFx1MDAzZSBpbXBsIFBpbkluaXRcXHUwMDNja2VybmVsOjpjb25maWdmczo6U3Vic3lzdGVtXFx1MDAzY0NvbmZpZ1xcdTAwM2UsIEVycm9yXFx1MDAzZSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTI1LVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MjY6ICAgIGtlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbTo6bmV3KGNcXFwicm51bGxcXFwiLCBpdGVtX3R5cGUsIHRyeV9waW5faW5pdCEoQ29uZmlnIHt9KSlcXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTI3LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvcm51bGwucnMtMjItICAgIHR5cGU6IE51bGxCbGtNb2R1bGUsXFxuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5yczoyMzogICAgbmFtZTogXFxcInJudWxsX21vZFxcXCIsXFxuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5ycy0yNC0gICAgYXV0aG9yczogW1xcXCJBbmRyZWFzIEhpbmRib3JnXFxcIl0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjE4LjY4NTY3NzYxMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTk0NjEwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN0YXJ0aW5nIHBvaW50LCBhcyBpZiBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIHJudWxsIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZGlyZWN0aW9uIGlzIGNsZWFyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHVuZGVybHlpbmcgbWVjaGFuaWNzIGZvciB0aGUgYHJudWxsYCBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgYm90aCBgZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgLiBUaGUgYEtjb25maWdgIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCBhbmQgYW55IGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugd2hldGhlciB0aGUgZHJpdmVyIGlzIGJ1aWx0IGluIG9yIGFzIGEgbW9kdWxlLCBhbnkgdHVuYWJsZSBwYXJhbWV0ZXJzLCBhbmQgbWF5YmUgc29tZSBoZWxwIHRleHQuIFRoZW4sIGBjb25maWdmcy5yc2AgaXMgcmVhbGx5IHdoYXQncyBnb2luZyB0byBiZSBrZXksIGFzIEkgcmVjYWxsIHRoaXMgaXMgaG93IHRoZSBkcml2ZXIgZHluYW1pY2FsbHkgY29uZmlndXJlZC4gU28gSSBleHBlY3QgSSBhbSBzZWVpbmcgaG93IHRoZSBkcml2ZXIgY29uZmlndXJlcyB2aWEgY29uZmlnZnMuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1bnRpbWUgYXNwZWN0cyBhcmUgbWFuYWdlZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZHJpdmVyJ3Mgc3RhdGUgYW5kIGhvdyB0aGV5IGFyZSBwb3B1bGF0ZWQgYnkgdGhlIGNvbmZpZ2ZzIGVudHJpZXMuIEkgYW0gZXhwZWN0aW5nIHNvbWUgc29ydCBvZiBmaWxlIHN0cnVjdHVyZSBtYXBwZWQgdG8gdGhlc2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZXMuIEkgYW50aWNpcGF0ZSBJJ2xsIGZpbmQgdGhlIGxvZ2ljIGZvciBjcmVhdGluZywgcmVhZGluZywgYW5kIHdyaXRpbmcgdGhlIGRyaXZlciBjb25maWd1cmF0aW9uIHZpYSB0aGUgY29uZmlnZnMgaW50ZXJmYWNlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXNlIGZpbGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDcwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MjEuMjQ1MTQxMTMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBSdXN0IG51bGwgYmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBCTEtfREVWX1JVU1RfTlVMTFxcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIlJ1c3QgbnVsbCBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIFJVU1QgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlNcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhpcyBpcyB0aGUgUnVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbnVsbCBibG9jayBkcml2ZXIuIExpa2VcXG4gIDEwOlxcdFxcdCAgdGhlIEMgdmVyc2lvbiwgdGhlIGRyaXZlciBhbGxvd3MgdGhlIHVzZXIgdG8gY3JlYXRlIHZpcnV0YWwgYmxvY2tcXG4gIDExOlxcdFxcdCAgZGV2aWNlcyB0aGF0IGNhbiBiZSBjb25maWd1cmVkIHZpYSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MToyMS4yNDUyMTY3NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA0NzY0MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgYHJudWxsYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBybnVsbGAgYmxvY2sgZHJpdmVyIGludGVyYWN0cyB3aXRoIGBjb25maWdmc2AsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgY29uZmlnZnMucnNgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIHJpZ2h0IGludG8gdGhlIGNvZGUgYXQgYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgYW5kIHN5bWJvbHMgdGhhdCBhcmUgZGVmaW5pbmcgdGhpcyBpbnRlZ3JhdGlvbi4gV2hhdCBhcmUgdGhlIGNvcmUgcm91dGluZXMgaGFuZGxpbmcgdGhlIGNyZWF0aW9uLCBwb3B1bGF0aW9uLCBhbmQgaW50ZXJhY3Rpb24gb2YgdGhlIGBybnVsbGAgYmxvY2sgZGV2aWNlIGluc3RhbmNlcyB3aXRoaW4gdGhlIGBjb25maWdmc2AgZnJhbWV3b3JrPyBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBzdHJ1Y3R1cmFsIGdsdWUg4oCTIGhvdyB0aGUgZHJpdmVyJ3MgYmxvY2sgZGV2aWNlIHJlcHJlc2VudGF0aW9uIGlzIGV4cG9zZWQgYW5kIG1hbmFnZWQgdGhyb3VnaCB0aGUgZmlsZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMTcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjIzLjI0OTk4MzY0MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0ICAgICAgICB9XFxuIDE2MTpcXHRcXG4gMTYyOlxcdCAgICAgICAgT2soKCkpXFxuIDE2MzpcXHQgICAgfVxcbiAxNjQ6XFx0fVxcbiAxNjU6XFx0XFxuIDE2NjpcXHQjW3Z0YWJsZV1cXG4gMTY3OlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMVxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDE2ODpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAxNjk6XFx0XFxuIDE3MDpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDE3MTpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAxNzI6XFx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXFxcInt9XFxcXG5cXFwiLCB0aGlzLmRhdGEubG9jaygpLmJsb2NrX3NpemUpKT87XFxuIDE3MzpcXHQgICAgICAgIE9rKHdyaXRlci5ieXRlc193cml0dGVuKCkpXFxuIDE3NDpcXHQgICAgfVxcbiAxNzU6XFx0XFxuIDE3NjpcXHQgICAgZm4gc3RvcmUodGhpczogXFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXFx1MDAyNlt1OF0pIC1cXHUwMDNlIFJlc3VsdCB7XFxuIDE3NzpcXHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xcbiAxNzg6XFx0ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcXG4gMTc5OlxcdCAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xcbiAxODA6XFx0ICAgICAgICB9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdCAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xcbiAxODM6XFx0ICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcXHUwMDNjdTMyXFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xcbiAxODQ6XFx0XFxuIDE4NTpcXHQgICAgICAgIEdlbkRpc2tCdWlsZGVyOjp2YWxpZGF0ZV9ibG9ja19zaXplKHZhbHVlKT87XFxuIDE4NjpcXHQgICAgICAgIGd1YXJkLmJsb2NrX3NpemUgPSB2YWx1ZTtcXG4gMTg3OlxcdCAgICAgICAgT2soKCkpXFxuIDE4ODpcXHQgICAgfVxcbiAxODk6XFx0fVxcbiAxOTA6XFx0XFxuIDE5MTpcXHQjW3Z0YWJsZV1cXG4gMTkyOlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMlxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDE5MzpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDE5NjpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHQgICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucm90YXRpb25hbCB7XFxuIDE5OTpcXHQgICAgICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFxcXCIxXFxcXG5cXFwiKT87XFxuIDIwMDpcXHQgICAgICAgIH0gZWxzZSB7XFxuIDIwMTpcXHQgICAgICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFxcXCIwXFxcXG5cXFwiKT87XFxuIDIwMjpcXHQgICAgICAgIH1cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyMDU6XFx0ICAgIH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyMDg6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjA5OlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDIxMDpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjExOlxcdCAgICAgICAgfVxcbiAyMTI6XFx0XFxuIDIxMzpcXHQgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPztcXG4gMjE0OlxcdFxcbiAyMTU6XFx0ICAgICAgICBPaygoKSlcXG4gMjE2OlxcdCAgICB9XFxuIDIxNzpcXHR9XFxuIDIxODpcXHRcXG4gMjE5OlxcdCNbdnRhYmxlXVxcbiAyMjA6XFx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MzXFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcXG4gMjIxOlxcdCAgICB0eXBlIERhdGEgPSBEZXZpY2VDb25maWc7XFxuIDIyMjpcXHRcXG4gMjIzOlxcdCAgICBmbiBzaG93KHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZtdXQgW3U4OyBQQUdFX1NJWkVdKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjdXNpemVcXHUwMDNlIHtcXG4gMjI0OlxcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XFxuIDIyNTpcXHQgICAgICAgIHdyaXRlci53cml0ZV9mbXQoZm10IShcXFwie31cXFxcblxcXCIsIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliKSk/O1xcbiAyMjY6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyMjc6XFx0ICAgIH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyMzA6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjMxOlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDIzMjpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjMzOlxcdCAgICAgICAgfVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcXG4gMjM2OlxcdCAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XFx1MDAzY3U2NFxcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcXG4gMjM3OlxcdFxcbiAyMzg6XFx0ICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTtcXG4gMjM5OlxcdCAgICAgICAgT2soKCkpXFxuIDI0MDpcXHQgICAgfVxcbiAyNDE6XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHQjW3Z0YWJsZV1cXG4gMjQ0OlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjNFxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDI0NTpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAyNDY6XFx0XFxuIDI0NzpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDI0ODpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAyNDk6XFx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXFxcInt9XFxcXG5cXFwiLCB0aGlzLmRhdGEubG9jaygpLmlycV9tb2RlKSk/O1xcbiAyNTA6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyNTE6XFx0ICAgIH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyNTQ6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjU1OlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDI1NjpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjU3OlxcdCAgICAgICAgfVxcbiAyNTg6XFx0XFxuIDI1OTpcXHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MjMuMjUwMTU2NzcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5ODY0Nzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBybnVsbCBhbmQgUnVzdCBLZXJuZWwgU3ltYm9sIE5hbWluZyoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGBybnVsbGAgaW50ZXJhY3RzIHdpdGggYGNvbmZpZ2ZzYCBzcGVjaWZpY2FsbHksIGFuZCBJJ20gYWxzbyBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIFJ1c3Qgc3ltYm9scyBhcmUgbmFtZWQgd2l0aGluIHRoZSBrZXJuZWwgY29udGV4dC4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gRmlyc3Qgc3RvcCwgdGhlIGZpbGUgc3lzdGVtLiBXaGVyZSBpcyB0aGUgcmVsZXZhbnQgY29kZT8gQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGZpbGVzIHdpdGhpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9gLiBJJ20gZ29pbmcgdG8gc3RhcnQgbXkgaW5zcGVjdGlvbiB0aGVyZSB0byBzZWUgd2hhdCB0aGUgYXJjaGl0ZWN0dXJlIGlzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhpbmdzLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRlc2lnbiBhbmQgd2hlcmUgdGhlIFJ1c3QgY29tcG9uZW50cyBhcmUgdGllZCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MjUuMjQ4ODA3NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvYmxvY2svcm51bGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiY29uZmlnZnMucnNcIixcbiAgICBcInJudWxsLnJzXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjI1LjI0ODg1ODYyMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc3MDU4MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aGUgc2FtZSB0aG91Z2h0czpcblxuKipFeHBsb3JpbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGlzIGNvZGViYXNlLCBhbmQgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIGNvbmZpZ3VyYXRpb24gYW5kIHBvdGVudGlhbGx5LCBudWxsIGRldmljZXMuIEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHRoaW5ncyBpbnRlcmFjdC4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgcmVsYXRlZCBjb2RlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYGNvbmZpZ2ZzLnJzYCBhbmQgYHJudWxsLnJzYC4gSSB3YW50IHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIHdpdGhpbiB0aG9zZSBmaWxlcyB3aWxsIGlsbHVtaW5hdGUgaG93IHRoZSBjb25maWd1cmF0aW9uIGRhdGEgZmxvd3MsIGFuZCBob3cgdGhlIG51bGwgZGV2aWNlIGlzIGJlaW5nIGltcGxlbWVudGVkIG9yIHVzZWQuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRob3NlIGZpbGVzIHJldmVhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MToyNy4wMjU5MTk3MDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHR1c2Ugc3VwZXI6Ok51bGxCbGtEZXZpY2U7XFxuICAgNDpcXHR1c2Uga2VybmVsOjp7XFxuICAgNTpcXHQgICAgYmxvY2s6Om1xOjpnZW5fZGlzazo6e0dlbkRpc2ssIEdlbkRpc2tCdWlsZGVyfSxcXG4gICA2OlxcdCAgICBjb25maWdmczo6e3NlbGYsIEF0dHJpYnV0ZU9wZXJhdGlvbnN9LFxcbiAgIDc6XFx0ICAgIGNvbmZpZ2ZzX2F0dHJzLFxcbiAgIDg6XFx0ICAgIGZtdDo6e3NlbGYsIFdyaXRlIGFzIF99LFxcbiAgIDk6XFx0ICAgIG5ld19tdXRleCxcXG4gIDEwOlxcdCAgICBwYWdlOjpQQUdFX1NJWkUsXFxuICAxMTpcXHQgICAgcHJlbHVkZTo6KixcXG4gIDEyOlxcdCAgICBzdHI6Ontrc3RydG9ib29sX2J5dGVzLCBDU3RyaW5nfSxcXG4gIDEzOlxcdCAgICBzeW5jOjpNdXRleCxcXG4gIDE0OlxcdH07XFxuICAxNTpcXHRcXG4gIDE2OlxcdHB1YihjcmF0ZSkgZm4gc3Vic3lzdGVtKCkgLVxcdTAwM2UgaW1wbCBQaW5Jbml0XFx1MDAzY2tlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbVxcdTAwM2NDb25maWdcXHUwMDNlLCBFcnJvclxcdTAwM2Uge1xcbiAgMTc6XFx0ICAgIGxldCBpdGVtX3R5cGUgPSBjb25maWdmc19hdHRycyEge1xcbiAgMTg6XFx0ICAgICAgICBjb250YWluZXI6IGNvbmZpZ2ZzOjpTdWJzeXN0ZW1cXHUwMDNjQ29uZmlnXFx1MDAzZSxcXG4gIDE5OlxcdCAgICAgICAgZGF0YTogQ29uZmlnLFxcbiAgMjA6XFx0ICAgICAgICBjaGlsZDogRGV2aWNlQ29uZmlnLFxcbiAgMjE6XFx0ICAgICAgICBhdHRyaWJ1dGVzOiBbXFxuICAyMjpcXHQgICAgICAgICAgICBmZWF0dXJlczogMCxcXG4gIDIzOlxcdCAgICAgICAgXSxcXG4gIDI0OlxcdCAgICB9O1xcbiAgMjU6XFx0XFxuICAyNjpcXHQgICAga2VybmVsOjpjb25maWdmczo6U3Vic3lzdGVtOjpuZXcoY1xcXCJybnVsbFxcXCIsIGl0ZW1fdHlwZSwgdHJ5X3Bpbl9pbml0IShDb25maWcge30pKVxcbiAgMjc6XFx0fVxcbiAgMjg6XFx0XFxuICAyOTpcXHQjW3Bpbl9kYXRhXVxcbiAgMzA6XFx0cHViKGNyYXRlKSBzdHJ1Y3QgQ29uZmlnIHt9XFxuICAzMTpcXHRcXG4gIDMyOlxcdCNbdnRhYmxlXVxcbiAgMzM6XFx0aW1wbCBBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzBcXHUwMDNlIGZvciBDb25maWcge1xcbiAgMzQ6XFx0ICAgIHR5cGUgRGF0YSA9IENvbmZpZztcXG4gIDM1OlxcdFxcbiAgMzY6XFx0ICAgIGZuIHNob3coX3RoaXM6IFxcdTAwMjZDb25maWcsIHBhZ2U6IFxcdTAwMjZtdXQgW3U4OyBQQUdFX1NJWkVdKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjdXNpemVcXHUwMDNlIHtcXG4gIDM3OlxcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XFxuICAzODpcXHQgICAgICAgIHdyaXRlci53cml0ZV9zdHIoXFxcImJsb2Nrc2l6ZSxzaXplLHJvdGF0aW9uYWwsaXJxbW9kZVxcXFxuXFxcIik/O1xcbiAgMzk6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAgNDA6XFx0ICAgIH1cXG4gIDQxOlxcdH1cXG4gIDQyOlxcdFxcbiAgNDM6XFx0I1t2dGFibGVdXFxuICA0NDpcXHRpbXBsIGNvbmZpZ2ZzOjpHcm91cE9wZXJhdGlvbnMgZm9yIENvbmZpZyB7XFxuICA0NTpcXHQgICAgdHlwZSBDaGlsZCA9IERldmljZUNvbmZpZztcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0ICAgIGZuIG1ha2VfZ3JvdXAoXFxuICA0ODpcXHQgICAgICAgIFxcdTAwMjZzZWxmLFxcbiAgNDk6XFx0ICAgICAgICBuYW1lOiBcXHUwMDI2Q1N0cixcXG4gIDUwOlxcdCAgICApIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2NpbXBsIFBpbkluaXRcXHUwMDNjY29uZmlnZnM6Okdyb3VwXFx1MDAzY0RldmljZUNvbmZpZ1xcdTAwM2UsIEVycm9yXFx1MDAzZVxcdTAwM2Uge1xcbiAgNTE6XFx0ICAgICAgICBsZXQgaXRlbV90eXBlID0gY29uZmlnZnNfYXR0cnMhIHtcXG4gIDUyOlxcdCAgICAgICAgICAgIGNvbnRhaW5lcjogY29uZmlnZnM6Okdyb3VwXFx1MDAzY0RldmljZUNvbmZpZ1xcdTAwM2UsXFxuICA1MzpcXHQgICAgICAgICAgICBkYXRhOiBEZXZpY2VDb25maWcsXFxuICA1NDpcXHQgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXFxuICA1NTpcXHQgICAgICAgICAgICAgICAgLy8gTmFtZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDIG51bGxfYmxrXFxuICA1NjpcXHQgICAgICAgICAgICAgICAgcG93ZXI6IDAsXFxuICA1NzpcXHQgICAgICAgICAgICAgICAgYmxvY2tzaXplOiAxLFxcbiAgNTg6XFx0ICAgICAgICAgICAgICAgIHJvdGF0aW9uYWw6IDIsXFxuICA1OTpcXHQgICAgICAgICAgICAgICAgc2l6ZTogMyxcXG4gIDYwOlxcdCAgICAgICAgICAgICAgICBpcnFtb2RlOiA0LFxcbiAgNjE6XFx0ICAgICAgICAgICAgXSxcXG4gIDYyOlxcdCAgICAgICAgfTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0ICAgICAgICBPayhjb25maWdmczo6R3JvdXA6Om5ldyhcXG4gIDY1OlxcdCAgICAgICAgICAgIG5hbWUudHJ5X2ludG8oKT8sXFxuICA2NjpcXHQgICAgICAgICAgICBpdGVtX3R5cGUsXFxuICA2NzpcXHQgICAgICAgICAgICAvLyBUT0RPOiBjYW5ub3QgY29lcmNlIG5ld19tdXRleCEoKSB0byBpbXBsIFBpbkluaXRcXHUwMDNjXywgRXJyb3JcXHUwMDNlLCBzbyBwdXQgbXV0ZXggaW5zaWRlXFxuICA2ODpcXHQgICAgICAgICAgICB0cnlfcGluX2luaXQhKCBEZXZpY2VDb25maWcge1xcbiAgNjk6XFx0ICAgICAgICAgICAgICAgIGRhdGEgXFx1MDAzYy0gbmV3X211dGV4IShEZXZpY2VDb25maWdJbm5lciB7XFxuICA3MDpcXHQgICAgICAgICAgICAgICAgICAgIHBvd2VyZWQ6IGZhbHNlLFxcbiAgNzE6XFx0ICAgICAgICAgICAgICAgICAgICBibG9ja19zaXplOiA0MDk2LFxcbiAgNzI6XFx0ICAgICAgICAgICAgICAgICAgICByb3RhdGlvbmFsOiBmYWxzZSxcXG4gIDczOlxcdCAgICAgICAgICAgICAgICAgICAgZGlzazogTm9uZSxcXG4gIDc0OlxcdCAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHlfbWliOiA0MDk2LFxcbiAgNzU6XFx0ICAgICAgICAgICAgICAgICAgICBpcnFfbW9kZTogSVJRTW9kZTo6Tm9uZSxcXG4gIDc2OlxcdCAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZS50cnlfaW50bygpPyxcXG4gIDc3OlxcdCAgICAgICAgICAgICAgICB9KSxcXG4gIDc4OlxcdCAgICAgICAgICAgIH0pLFxcbiAgNzk6XFx0ICAgICAgICApKVxcbiAgODA6XFx0ICAgIH1cXG4gIDgxOlxcdH1cXG4gIDgyOlxcdFxcbiAgODM6XFx0I1tkZXJpdmUoRGVidWcsIENsb25lLCBDb3B5KV1cXG4gIDg0OlxcdHB1YihjcmF0ZSkgZW51bSBJUlFNb2RlIHtcXG4gIDg1OlxcdCAgICBOb25lLFxcbiAgODY6XFx0ICAgIFNvZnQsXFxuICA4NzpcXHR9XFxuICA4ODpcXHRcXG4gIDg5OlxcdGltcGwgVHJ5RnJvbVxcdTAwM2N1OFxcdTAwM2UgZm9yIElSUU1vZGUge1xcbiAgOTA6XFx0ICAgIHR5cGUgRXJyb3IgPSBrZXJuZWw6OmVycm9yOjpFcnJvcjtcXG4gIDkxOlxcdFxcbiAgOTI6XFx0ICAgIGZuIHRyeV9mcm9tKHZhbHVlOiB1OCkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY1NlbGZcXHUwMDNlIHtcXG4gIDkzOlxcdCAgICAgICAgbWF0Y2ggdmFsdWUge1xcbiAgOTQ6XFx0ICAgICAgICAgICAgMCA9XFx1MDAzZSBPayhTZWxmOjpOb25lKSxcXG4gIDk1OlxcdCAgICAgICAgICAgIDEgPVxcdTAwM2UgT2soU2VsZjo6U29mdCksXFxuICA5NjpcXHQgICAgICAgICAgICBfID1cXHUwMDNlIEVycihFSU5WQUwpLFxcbiAgOTc6XFx0ICAgICAgICB9XFxuICA5ODpcXHQgICAgfVxcbiAgOTk6XFx0fVxcbiAxMDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjI3LjAyNjAxNDQwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDUwMzY4MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIHJudWxsIENvbmZpZ0ZTIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGV4YW1pbmUgdGhlIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgMTAxIHRocm91Z2ggMTYwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvbnRleHQuIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBybnVsbCBibG9jayBkcml2ZXIgY29uY2VwdCwgc28gdGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhleSdyZSBoYW5kbGluZyB0aGUgQ29uZmlnRlMgaW50ZXJmYWNlIGZvciBpdC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHZpcnR1YWwgYmxvY2sgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgZmlsZXN5c3RlbS5cblxuSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugb2JqZWN0IGNyZWF0aW9uLCBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIGRldmljZSBzaXplLCByZWFkLW9ubHkgc3RhdHVzLCBwZXJoYXBzIGV2ZW4gc29tZSBraW5kIG9mIGFjY2VzcyBjb250cm9sIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBDb25maWdGUyBpcyBrbm93biBmb3IgcHJvdmlkaW5nIGEgc3RydWN0dXJlZCB3YXkgdG8gZXhwb3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSdtIGhvcGluZyBpdCdzIHdlbGwtb3JnYW5pemVkIGFuZCBmb2xsb3dzIGEgY29uc2lzdGVudCBwYXR0ZXJuLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBDb25maWdGUyBpZGlvbXMgLSBob3cgdGhleSBkZWZpbmUgdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmVzLCB0aGUgY2FsbGJhY2tzIGZvciBoYW5kbGluZyByZWFkcyBhbmQgd3JpdGVzIHRvIHRob3NlIGF0dHJpYnV0ZXMsIGFuZCBob3cgdGhlIGRldmljZSBpdHNlbGYgaXMgYnJvdWdodCBpbnRvIGJlaW5nIG9yIGRlc3Ryb3llZC5cblxuTXkgZmlyc3QgcmVhZC10aHJvdWdoIHdpbGwgYmUgdG8gZ2V0IGEgZ2VuZXJhbCBvdmVydmlldywgbm90aW5nIGFueSBpbW1lZGlhdGUgcGF0dGVybnMgb3IgZnVuY3Rpb25zIHRoYXQgc2VlbSBpbXBvcnRhbnQuIFRoZW4gSSdsbCBmb2N1cyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gQ29uZmlnRlMgYW5kIHRoZSBibG9jayBkZXZpY2UgZHJpdmVyIGlzIHRoZSBoZWFydCBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgcGFyYW1ldGVycyBhcmUgY29uZmlndXJhYmxlIGFuZCBob3cgdGhvc2UgcGFyYW1ldGVycyBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGF0YSB2YWxpZGF0aW9uIG9yIGVycm9yIGhhbmRsaW5nIHdpbGwgbGVhcCBvdXQgYXQgbWUgcHJldHR5IHF1aWNrbHkuIEkgYW50aWNpcGF0ZSBhIGZhaXIgYml0IG9mIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGFuZCBwb3RlbnRpYWwgbG9ja2luZyBjb25zaWRlcmF0aW9ucywgc28gdGhhdCdzIHdoZXJlIEknbGwgcGF5IHBhcnRpY3VsYXIgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDcxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTozMC4wNzYzODU4MDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDY1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDE6XFx0aW1wbCBmbXQ6OkRpc3BsYXkgZm9yIElSUU1vZGUge1xcbiAxMDI6XFx0ICAgIGZuIGZtdChcXHUwMDI2c2VsZiwgZjogXFx1MDAyNm11dCBmbXQ6OkZvcm1hdHRlclxcdTAwM2MnX1xcdTAwM2UpIC1cXHUwMDNlIGZtdDo6UmVzdWx0IHtcXG4gMTAzOlxcdCAgICAgICAgbWF0Y2ggc2VsZiB7XFxuIDEwNDpcXHQgICAgICAgICAgICBTZWxmOjpOb25lID1cXHUwMDNlIGYud3JpdGVfc3RyKFxcXCIwXFxcIik/LFxcbiAxMDU6XFx0ICAgICAgICAgICAgU2VsZjo6U29mdCA9XFx1MDAzZSBmLndyaXRlX3N0cihcXFwiMVxcXCIpPyxcXG4gMTA2OlxcdCAgICAgICAgfVxcbiAxMDc6XFx0ICAgICAgICBPaygoKSlcXG4gMTA4OlxcdCAgICB9XFxuIDEwOTpcXHR9XFxuIDExMDpcXHRcXG4gMTExOlxcdCNbcGluX2RhdGFdXFxuIDExMjpcXHRwdWIoY3JhdGUpIHN0cnVjdCBEZXZpY2VDb25maWcge1xcbiAxMTM6XFx0ICAgICNbcGluXVxcbiAxMTQ6XFx0ICAgIGRhdGE6IE11dGV4XFx1MDAzY0RldmljZUNvbmZpZ0lubmVyXFx1MDAzZSxcXG4gMTE1OlxcdH1cXG4gMTE2OlxcdFxcbiAxMTc6XFx0I1twaW5fZGF0YV1cXG4gMTE4OlxcdHN0cnVjdCBEZXZpY2VDb25maWdJbm5lciB7XFxuIDExOTpcXHQgICAgcG93ZXJlZDogYm9vbCxcXG4gMTIwOlxcdCAgICBuYW1lOiBDU3RyaW5nLFxcbiAxMjE6XFx0ICAgIGJsb2NrX3NpemU6IHUzMixcXG4gMTIyOlxcdCAgICByb3RhdGlvbmFsOiBib29sLFxcbiAxMjM6XFx0ICAgIGNhcGFjaXR5X21pYjogdTY0LFxcbiAxMjQ6XFx0ICAgIGlycV9tb2RlOiBJUlFNb2RlLFxcbiAxMjU6XFx0ICAgIGRpc2s6IE9wdGlvblxcdTAwM2NHZW5EaXNrXFx1MDAzY051bGxCbGtEZXZpY2VcXHUwMDNlXFx1MDAzZSxcXG4gMTI2OlxcdH1cXG4gMTI3OlxcdFxcbiAxMjg6XFx0I1t2dGFibGVdXFxuIDEyOTpcXHRpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzBcXHUwMDNlIGZvciBEZXZpY2VDb25maWcge1xcbiAxMzA6XFx0ICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG4gMTMxOlxcdFxcbiAxMzI6XFx0ICAgIGZuIHNob3codGhpczogXFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXFx1MDAyNm11dCBbdTg7IFBBR0VfU0laRV0pIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2N1c2l6ZVxcdTAwM2Uge1xcbiAxMzM6XFx0ICAgICAgICBsZXQgbXV0IHdyaXRlciA9IGtlcm5lbDo6c3RyOjpGb3JtYXR0ZXI6Om5ldyhwYWdlKTtcXG4gMTM0OlxcdFxcbiAxMzU6XFx0ICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWQge1xcbiAxMzY6XFx0ICAgICAgICAgICAgd3JpdGVyLndyaXRlX3N0cihcXFwiMVxcXFxuXFxcIik/O1xcbiAxMzc6XFx0ICAgICAgICB9IGVsc2Uge1xcbiAxMzg6XFx0ICAgICAgICAgICAgd3JpdGVyLndyaXRlX3N0cihcXFwiMFxcXFxuXFxcIik/O1xcbiAxMzk6XFx0ICAgICAgICB9XFxuIDE0MDpcXHRcXG4gMTQxOlxcdCAgICAgICAgT2sod3JpdGVyLmJ5dGVzX3dyaXR0ZW4oKSlcXG4gMTQyOlxcdCAgICB9XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdCAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4gMTQ1OlxcdCAgICAgICAgbGV0IHBvd2VyX29wID0ga3N0cnRvYm9vbF9ieXRlcyhwYWdlKT87XFxuIDE0NjpcXHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xcbiAxNDc6XFx0XFxuIDE0ODpcXHQgICAgICAgIGlmICFndWFyZC5wb3dlcmVkIFxcdTAwMjZcXHUwMDI2IHBvd2VyX29wIHtcXG4gMTQ5OlxcdCAgICAgICAgICAgIGd1YXJkLmRpc2sgPSBTb21lKE51bGxCbGtEZXZpY2U6Om5ldyhcXG4gMTUwOlxcdCAgICAgICAgICAgICAgICBcXHUwMDI2Z3VhcmQubmFtZSxcXG4gMTUxOlxcdCAgICAgICAgICAgICAgICBndWFyZC5ibG9ja19zaXplLFxcbiAxNTI6XFx0ICAgICAgICAgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwsXFxuIDE1MzpcXHQgICAgICAgICAgICAgICAgZ3VhcmQuY2FwYWNpdHlfbWliLFxcbiAxNTQ6XFx0ICAgICAgICAgICAgICAgIGd1YXJkLmlycV9tb2RlLFxcbiAxNTU6XFx0ICAgICAgICAgICAgKT8pO1xcbiAxNTY6XFx0ICAgICAgICAgICAgZ3VhcmQucG93ZXJlZCA9IHRydWU7XFxuIDE1NzpcXHQgICAgICAgIH0gZWxzZSBpZiBndWFyZC5wb3dlcmVkIFxcdTAwMjZcXHUwMDI2ICFwb3dlcl9vcCB7XFxuIDE1ODpcXHQgICAgICAgICAgICBkcm9wKGd1YXJkLmRpc2sudGFrZSgpKTtcXG4gMTU5OlxcdCAgICAgICAgICAgIGd1YXJkLnBvd2VyZWQgPSBmYWxzZTtcXG4gMTYwOlxcdCAgICAgICAgfVxcbiAxNjE6XFx0XFxuIDE2MjpcXHQgICAgICAgIE9rKCgpKVxcbiAxNjM6XFx0ICAgIH1cXG4gMTY0OlxcdH1cXG4gMTY1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTozMC4wNzY0NjMyMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ3NDQxNTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHJudWxsLnJzYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGNpcmNsaW5nIGJhY2ssIGFuZCBteSBpbnRlcm5hbCBjaGVja2xpc3QgaGFzIGZsYWdnZWQgdGhlIGBybnVsbC5yc2AgbW9kdWxlLiBJdCdzIGNydWNpYWwsIG9idmlvdXNseS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBlZGdlIGNhc2VzIGl0IGhhbmRsZXMsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIGNvZGUgdG8gcmVmcmVzaCBteSBtZW1vcnksIGNvbmZpcm0gdGhhdCB3ZSdyZSBwcm9wZXJseSBhZGRyZXNzaW5nIHRob3NlIG1lbW9yeSBzYWZldHkgY29uY2VybnMuIEknbSBlc3BlY2lhbGx5IGZvY3VzZWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdHMgYmVoYXZpb3IgbWlnaHQgaW5mbHVlbmNlIGRlcGVuZGVudCBzdWJzeXN0ZW1zLiBBcmUgdGhlcmUgYW55IHN1YnRsZSB0aHJlYWRpbmcgaXNzdWVzIEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gdGhlIGluaXRpYWwgcmV2aWV3PyBDb3VsZCBhIHJhY2UgY29uZGl0aW9uIGJlIGx1cmtpbmcgaW4gdGhlcmU/IEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIG5vdCBpbmFkdmVydGVudGx5IGludHJvZHVjaW5nIHZ1bG5lcmFiaWxpdGllcyDigJMgaXQncyBhIGNyaXRpY2FsIGFyZWEsIGFuZCBhIHNlY3VyaXR5IGZsYXcgdGhlcmUgY291bGQgYmUgY2F0YXN0cm9waGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzk1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTozMi41NTA4ODA4MzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5yc1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdC8vISBUaGlzIGlzIGEgUnVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQyBudWxsIGJsb2NrIGRyaXZlci5cXG4gICA0OlxcdFxcbiAgIDU6XFx0bW9kIGNvbmZpZ2ZzO1xcbiAgIDY6XFx0XFxuICAgNzpcXHR1c2UgY29uZmlnZnM6OklSUU1vZGU7XFxuICAgODpcXHR1c2Uga2VybmVsOjp7XFxuICAgOTpcXHQgICAgYmxvY2s6OntcXG4gIDEwOlxcdCAgICAgICAgc2VsZixcXG4gIDExOlxcdCAgICAgICAgbXE6OntcXG4gIDEyOlxcdCAgICAgICAgICAgIHNlbGYsXFxuICAxMzpcXHQgICAgICAgICAgICBnZW5fZGlzazo6e3NlbGYsIEdlbkRpc2t9LFxcbiAgMTQ6XFx0ICAgICAgICAgICAgT3BlcmF0aW9ucywgVGFnU2V0LFxcbiAgMTU6XFx0ICAgICAgICB9LFxcbiAgMTY6XFx0ICAgIH0sXFxuICAxNzpcXHQgICAgcHJlbHVkZTo6KixcXG4gIDE4OlxcdCAgICBzeW5jOjp7YXJlZjo6QVJlZiwgQXJjfSxcXG4gIDE5OlxcdH07XFxuICAyMDpcXHRcXG4gIDIxOlxcdG1vZHVsZSEge1xcbiAgMjI6XFx0ICAgIHR5cGU6IE51bGxCbGtNb2R1bGUsXFxuICAyMzpcXHQgICAgbmFtZTogXFxcInJudWxsX21vZFxcXCIsXFxuICAyNDpcXHQgICAgYXV0aG9yczogW1xcXCJBbmRyZWFzIEhpbmRib3JnXFxcIl0sXFxuICAyNTpcXHQgICAgZGVzY3JpcHRpb246IFxcXCJSdXN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBDIG51bGwgYmxvY2sgZHJpdmVyXFxcIixcXG4gIDI2OlxcdCAgICBsaWNlbnNlOiBcXFwiR1BMIHYyXFxcIixcXG4gIDI3OlxcdH1cXG4gIDI4OlxcdFxcbiAgMjk6XFx0I1twaW5fZGF0YV1cXG4gIDMwOlxcdHN0cnVjdCBOdWxsQmxrTW9kdWxlIHtcXG4gIDMxOlxcdCAgICAjW3Bpbl1cXG4gIDMyOlxcdCAgICBjb25maWdmc19zdWJzeXN0ZW06IGtlcm5lbDo6Y29uZmlnZnM6OlN1YnN5c3RlbVxcdTAwM2Njb25maWdmczo6Q29uZmlnXFx1MDAzZSxcXG4gIDMzOlxcdH1cXG4gIDM0OlxcdFxcbiAgMzU6XFx0aW1wbCBrZXJuZWw6OkluUGxhY2VNb2R1bGUgZm9yIE51bGxCbGtNb2R1bGUge1xcbiAgMzY6XFx0ICAgIGZuIGluaXQoX21vZHVsZTogXFx1MDAyNidzdGF0aWMgVGhpc01vZHVsZSkgLVxcdTAwM2UgaW1wbCBQaW5Jbml0XFx1MDAzY1NlbGYsIEVycm9yXFx1MDAzZSB7XFxuICAzNzpcXHQgICAgICAgIHByX2luZm8hKFxcXCJSdXN0IG51bGxfYmxrIGxvYWRlZFxcXFxuXFxcIik7XFxuICAzODpcXHRcXG4gIDM5OlxcdCAgICAgICAgdHJ5X3Bpbl9pbml0IShTZWxmIHtcXG4gIDQwOlxcdCAgICAgICAgICAgIGNvbmZpZ2ZzX3N1YnN5c3RlbSBcXHUwMDNjLSBjb25maWdmczo6c3Vic3lzdGVtKCksXFxuICA0MTpcXHQgICAgICAgIH0pXFxuICA0MjpcXHQgICAgfVxcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgTnVsbEJsa0RldmljZTtcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0aW1wbCBOdWxsQmxrRGV2aWNlIHtcXG4gIDQ4OlxcdCAgICBmbiBuZXcoXFxuICA0OTpcXHQgICAgICAgIG5hbWU6IFxcdTAwMjZDU3RyLFxcbiAgNTA6XFx0ICAgICAgICBibG9ja19zaXplOiB1MzIsXFxuICA1MTpcXHQgICAgICAgIHJvdGF0aW9uYWw6IGJvb2wsXFxuICA1MjpcXHQgICAgICAgIGNhcGFjaXR5X21pYjogdTY0LFxcbiAgNTM6XFx0ICAgICAgICBpcnFfbW9kZTogSVJRTW9kZSxcXG4gIDU0OlxcdCAgICApIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2NHZW5EaXNrXFx1MDAzY1NlbGZcXHUwMDNlXFx1MDAzZSB7XFxuICA1NTpcXHQgICAgICAgIGxldCB0YWdzZXQgPSBBcmM6OnBpbl9pbml0KFRhZ1NldDo6bmV3KDEsIDI1NiwgMSksIEdGUF9LRVJORUwpPztcXG4gIDU2OlxcdFxcbiAgNTc6XFx0ICAgICAgICBsZXQgcXVldWVfZGF0YSA9IEJveDo6bmV3KFF1ZXVlRGF0YSB7IGlycV9tb2RlIH0sIEdGUF9LRVJORUwpPztcXG4gIDU4OlxcdFxcbiAgNTk6XFx0ICAgICAgICBnZW5fZGlzazo6R2VuRGlza0J1aWxkZXI6Om5ldygpXFxuICA2MDpcXHQgICAgICAgICAgICAuY2FwYWNpdHlfc2VjdG9ycyhjYXBhY2l0eV9taWIgXFx1MDAzY1xcdTAwM2MgKDIwIC0gYmxvY2s6OlNFQ1RPUl9TSElGVCkpXFxuICA2MTpcXHQgICAgICAgICAgICAubG9naWNhbF9ibG9ja19zaXplKGJsb2NrX3NpemUpP1xcbiAgNjI6XFx0ICAgICAgICAgICAgLnBoeXNpY2FsX2Jsb2NrX3NpemUoYmxvY2tfc2l6ZSk/XFxuICA2MzpcXHQgICAgICAgICAgICAucm90YXRpb25hbChyb3RhdGlvbmFsKVxcbiAgNjQ6XFx0ICAgICAgICAgICAgLmJ1aWxkKGZtdCEoXFxcInt9XFxcIiwgbmFtZS50b19zdHIoKT8pLCB0YWdzZXQsIHF1ZXVlX2RhdGEpXFxuICA2NTpcXHQgICAgfVxcbiAgNjY6XFx0fVxcbiAgNjc6XFx0XFxuICA2ODpcXHRzdHJ1Y3QgUXVldWVEYXRhIHtcXG4gIDY5OlxcdCAgICBpcnFfbW9kZTogSVJRTW9kZSxcXG4gIDcwOlxcdH1cXG4gIDcxOlxcdFxcbiAgNzI6XFx0I1t2dGFibGVdXFxuICA3MzpcXHRpbXBsIE9wZXJhdGlvbnMgZm9yIE51bGxCbGtEZXZpY2Uge1xcbiAgNzQ6XFx0ICAgIHR5cGUgUXVldWVEYXRhID0gS0JveFxcdTAwM2NRdWV1ZURhdGFcXHUwMDNlO1xcbiAgNzU6XFx0XFxuICA3NjpcXHQgICAgI1tpbmxpbmUoYWx3YXlzKV1cXG4gIDc3OlxcdCAgICBmbiBxdWV1ZV9ycShxdWV1ZV9kYXRhOiBcXHUwMDI2UXVldWVEYXRhLCBycTogQVJlZlxcdTAwM2NtcTo6UmVxdWVzdFxcdTAwM2NTZWxmXFx1MDAzZVxcdTAwM2UsIF9pc19sYXN0OiBib29sKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAgNzg6XFx0ICAgICAgICBtYXRjaCBxdWV1ZV9kYXRhLmlycV9tb2RlIHtcXG4gIDc5OlxcdCAgICAgICAgICAgIElSUU1vZGU6Ok5vbmUgPVxcdTAwM2UgbXE6OlJlcXVlc3Q6OmVuZF9vayhycSlcXG4gIDgwOlxcdCAgICAgICAgICAgICAgICAubWFwX2Vycih8X2V8IGtlcm5lbDo6ZXJyb3I6OmNvZGU6OkVJTylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MzIuNTUwOTY5NDk3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NjY1NTcxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBybnVsbCBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gKnJudWxsKiwgdGhlIFJ1c3QtYmFzZWQgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyLCB3aGljaCBJIGtub3cgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19CTEtfREVWX1JVU1RfTlVMTGAsIHVzZXMgY29uZmlnZnMgZm9yIGNvbmZpZ3VyYXRpb24uIFRoZSBmaXJzdCBxdWVzdGlvbiBpcywgd2lsbCB0aGlzIGV2ZW4gYmUgcmVsZXZhbnQgaW4gdGhlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBJJ20gd29ya2luZyB3aXRoIGxpa2UgUUVNVSBvciBHQ0U/IFllcywgaXTigJlzIGEgc29mdHdhcmUtYmFzZWQgdmlydHVhbCBkcml2ZXIsIGp1c3QgbGlrZSBgbnVsbF9ibGtgLCBhbmQgdXNlcyBgL3N5cy9rZXJuZWwvY29uZmlnL3JudWxsLy4uLmAgd2hpY2ggY29uZmlybXMgaXQncyBjb25maWdmcy1kcml2ZW4uIEdvb2QsIGdvb2QuXG5cbk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgYWN0dWFsbHkgZXhlY3V0YWJsZSBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5IGFyZTsgdGhlIGNvcmUgb2YgdGhlIHVwZGF0ZSByZXZvbHZlcyBhcm91bmQgUnVzdCBtZXRob2RzIHRoYXQgaW1wbGVtZW50IHRoZSBgc3RvcmVgIGZ1bmN0aW9uIGZvciB0aGUgcmVsZXZhbnQgY29uZmlnZnMgYXR0cmlidXRlcyB3aXRoaW4gYERldmljZUNvbmZpZ2Ag4oCTIGJsb2Nrc2l6ZSwgcm90YXRpb25hbCBzZXR0aW5ncywgdGhlIHNpemUsIGFuZCBpcnFtb2RlLlxuXG5UaGUgcHJvYmxlbSB0aGV5J3ZlIGFkZHJlc3NlZCBpcyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24uIFRoZSBwcmV2aW91cyBjb2RlIGNoZWNrZWQgdGhlIGB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWRgIHN0YXRlLCByZWxlYXNlZCB0aGUgbG9jaywgYW5kICp0aGVuKiByZWFjcXVpcmVkIGl0IHRvIHVwZGF0ZSB2YXJpb3VzIGF0dHJpYnV0ZXMuIENsZWFybHksIHRoYXQgb3BlbmVkIGEgcmFjZSB3aW5kb3cuIFRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBjb3JyZWN0OiB0aGV5J3JlIG5vdyBob2xkaW5nIHRoZSBgZ3VhcmRgIHRocm91Z2hvdXQgdGhlIGVudGlyZSBgc3RvcmVgIG9wZXJhdGlvbi4gVGhhdCdzIGNsZWFuIGFuZCBzYWZlLlxuXG5Ob3csIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBrbm93IGBCTEtfREVWX1JVU1RfTlVMTGAgcmVxdWlyZXMgYFJVU1RgIGFuZCBgQ09ORklHRlNfRlNgLiBUaW1lIHRvIHB1bGwgdXAgdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgdG8gYmUgY2VydGFpbiBhbmQgY2hlY2sgZm9yIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyBvciBjb25mbGljdHMuIEEgcXVpY2sgcnVuIG9mIGBncmVwcGVyYCBvbiB0aGUga2VybmVsIHNvdXJjZSwgc2VhcmNoaW5nIGZvciBgY29uZmlnIEJMS19ERVZfUlVTVF9OVUxMYCwgYFJVU1RgLCBhbmQgYENPTkZJR0ZTX0ZTYCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VycyBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDg3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MzcuNDE3NTMxMjQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTEwNzk4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1JVU1RfTlVMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWctNC1cXG5kcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWc6NTpjb25maWcgQkxLX0RFVl9SVVNUX05VTExcXG5kcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiUnVzdCBudWxsIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6MzkuMzI4MzM1NTMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MDEzMzI3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFJ1c3QgU3ltYm9sIEhhbmRsaW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IFJ1c3Qgc3ltYm9scyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhpcyBgcm51bGxgIGRyaXZlci4gTXkgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXM6IGNoZWNraW5nIGBkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWdgIHNob3dzIGl0ICpkZXBlbmRzIG9uKiBgUlVTVGAgYW5kIGBDT05GSUdGU19GU2AuIFRoYXQgdGVsbHMgbWUgdGhlIGNvbnRleHQgb2Ygd2hlcmUgdG8gbG9vayBhbmQgd2hhdCBmcmFtZXdvcmtzIGFyZSBlbXBsb3llZC5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyOiBob3cgYXJlIHRoZXNlIFJ1c3Qgc3ltYm9scyBhY3R1YWxseSAqcmVwcmVzZW50ZWQqPyBXaGF0J3MgdGhlIG1hbmdsaW5nIG9yIGNvbnZlbnRpb24gYXQgcGxheT8gV2hhdCBmb2N1cyBzeW1ib2xzIGFyZSBhcHByb3ByaWF0ZSBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRlYnVnLiBJIG5lZWQgdG8ga25vdyB0aGUgZW50cnkgcG9pbnRzLiBBcmUgdGhlIGZvY3VzIHN5bWJvbHMgZXZlbiBhcHBsaWNhYmxlIHRvIHRoZSBSdXN0IHN5bWJvbHM/IEkgc2hvdWxkIHNlYXJjaCB0aGUga2VybmVsIGZvciBvdGhlciBSdXN0IGRyaXZlcnMgb3Igc3ltYm9scywgYW55dGhpbmcgdG8gcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhpcy4gQXJlIHRoZXJlIGFueSBleGFtcGxlcyBpbiBgcm51bGxgIGl0c2VsZiB0aGF0IG1pZ2h0IHByb3ZpZGUgc29tZSBhbnN3ZXJzP1xuXG5UaGlua2luZyBtb3JlIGFib3V0IGl0LCBJJ20gcXVlc3Rpb25pbmcgd2hldGhlciBhICpGb2N1c1N5bWJvbCogaXMgdGhlIGNvcnJlY3QgdG9vbC4gQ2FuIHRoZXkgYmUgUnVzdCBzeW1ib2xzLCBvciBhcmUgdGhleSBtb3JlIGdlYXJlZCB0b3dhcmRzIEMgZW50cnkgcG9pbnRzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBMb29raW5nIGF0IHRoZSBmcmFtZXdvcmssIEknbSBnb2luZyB0byBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgYGNvbmZpZ2ZzX2F0dHJzIWAgbWFjcm8uIEkgc2VlIHRoYXQgaXQgZ2VuZXJhdGVzIHZ0YWJsZXMgYW5kIGZ1bmN0aW9ucy4gVGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgbGVhZC4gTGV0J3MgZGlnIGludG8gaG93IHRoYXQgbWFjcm8gd29ya3MgaW4gYHJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgQyBhbmQgUnVzdCBzaWRlcyBpbnRlcmZhY2UgaGVyZSBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5bWJvbCByZXNvbHV0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODE5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjQyLjIyOTY3MDczNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM1MjIwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjcm9fcnVsZXMhIGNvbmZpZ2ZzX2F0dHJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInJ1c3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzPTc5MD0gICAgZm4gYXNfcHRyKFxcdTAwMjZzZWxmKSAtXFx1MDAzZSAqY29uc3QgYmluZGluZ3M6OmNvbmZpZ19pdGVtX3R5cGUge1xcbi0tXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtODg2LSNbbWFjcm9fZXhwb3J0XVxcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzOjg4NzptYWNyb19ydWxlcyEgY29uZmlnZnNfYXR0cnMge1xcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTg4OC0gICAgKFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTo0Mi4yODMxOTgyNzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0MDc3ODk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBDb25maWdGUyBBdHRyaWJ1dGUgR2VuZXJhdGlvbiBpbiBSdXN0KipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGUgcGxhY2UgdG8gbG9vayBmb3IgaG93IENvbmZpZ0ZTIGF0dHJpYnV0ZXMgYXJlIGdlbmVyYXRlZCwgb3IgYXQgbGVhc3QgaG93IHRoZXkncmUgaGFuZGxlZCwgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGluIGBydXN0L2tlcm5lbC9jb25maWdmcy5yc2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgODg3LiBUaGF0IGxpbmUgbnVtYmVyIGZlZWxzIGxpa2UgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQgYmFzZWQgb24gc2ltaWxhciBjb2RlIEkndmUgd29ya2VkIG9uIGluIHRoZSBwYXN0LiBJdCdzIHVzdWFsbHkgYXJvdW5kIHRoYXQgYXJlYSB3aGVyZSB0aGUgYXR0cmlidXRlIGNyZWF0aW9uIG9yIG1hbmlwdWxhdGlvbiBsb2dpYyB0ZW5kcyB0byByZXNpZGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgZGlyZWN0IGF0dHJpYnV0ZSBnZW5lcmF0aW9uLCBwZXJoYXBzIHdpdGhpbiBhIGBzdHJ1Y3RgIGRlZmluaXRpb24gb3IgcmVsYXRlZCBtZXRob2RzLCBvciBzb21lIGtpbmQgb2YgaW5kaXJlY3QgY2FsbCB0aGF0IGhhbmRsZXMgYXR0cmlidXRlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgcmV2ZWFscy4gRnJvbSB0aGF0IHBvaW50IEkgY2FuIGV4dHJhcG9sYXRlIG91dHdhcmRzIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIGhvdyBDb25maWdGUyBhdHRyaWJ1dGVzIGFyZSBpbml0aWFsaXplZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIFJ1c3Qga2VybmVsIGNvZGUgYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTo0NC41MjM5NzkzNTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg4MDpcXHQvLy8gICAgICAgICApO1xcbiA4ODE6XFx0Ly8vXFxuIDg4MjpcXHQvLy8gICAgIFxcdTAwMjZDT05GSUdVUkFUSU9OX1RQRVxcbiA4ODM6XFx0Ly8vIH1cXG4gODg0OlxcdC8vLyBgYGBcXG4gODg1OlxcdCNbYWxsb3coY2xpcHB5OjpjcmF0ZV9pbl9tYWNyb19kZWYpXVxcbiA4ODY6XFx0I1ttYWNyb19leHBvcnRdXFxuIDg4NzpcXHRtYWNyb19ydWxlcyEgY29uZmlnZnNfYXR0cnMge1xcbiA4ODg6XFx0ICAgIChcXG4gODg5OlxcdCAgICAgICAgY29udGFpbmVyOiAkY29udGFpbmVyOnR5LFxcbiA4OTA6XFx0ICAgICAgICBkYXRhOiAkZGF0YTp0eSxcXG4gODkxOlxcdCAgICAgICAgYXR0cmlidXRlczogW1xcbiA4OTI6XFx0ICAgICAgICAgICAgJCgkbmFtZTppZGVudDogJGF0dHI6bGl0ZXJhbCksKiAkKCwpP1xcbiA4OTM6XFx0ICAgICAgICBdICQoLCk/XFxuIDg5NDpcXHQgICAgKSA9XFx1MDAzZSB7XFxuIDg5NTpcXHQgICAgICAgICRjcmF0ZTo6Y29uZmlnZnNfYXR0cnMhKFxcbiA4OTY6XFx0ICAgICAgICAgICAgY291bnQ6XFxuIDg5NzpcXHQgICAgICAgICAgICBAY29udGFpbmVyKCRjb250YWluZXIpLFxcbiA4OTg6XFx0ICAgICAgICAgICAgQGRhdGEoJGRhdGEpLFxcbiA4OTk6XFx0ICAgICAgICAgICAgQGNoaWxkKCksXFxuIDkwMDpcXHQgICAgICAgICAgICBAbm9fY2hpbGQoeCksXFxuIDkwMTpcXHQgICAgICAgICAgICBAYXR0cnMoJCgkbmFtZSAkYXR0cikqKSxcXG4gOTAyOlxcdCAgICAgICAgICAgIEBlYXQoJCgkbmFtZSAkYXR0ciwpKiksXFxuIDkwMzpcXHQgICAgICAgICAgICBAYXNzaWduKCksXFxuIDkwNDpcXHQgICAgICAgICAgICBAY250KDB1c2l6ZSksXFxuIDkwNTpcXHQgICAgICAgIClcXG4gOTA2OlxcdCAgICB9O1xcbiA5MDc6XFx0ICAgIChcXG4gOTA4OlxcdCAgICAgICAgY29udGFpbmVyOiAkY29udGFpbmVyOnR5LFxcbiA5MDk6XFx0ICAgICAgICBkYXRhOiAkZGF0YTp0eSxcXG4gOTEwOlxcdCAgICAgICAgY2hpbGQ6ICRjaGlsZDp0eSxcXG4gOTExOlxcdCAgICAgICAgYXR0cmlidXRlczogW1xcbiA5MTI6XFx0ICAgICAgICAgICAgJCgkbmFtZTppZGVudDogJGF0dHI6bGl0ZXJhbCksKiAkKCwpP1xcbiA5MTM6XFx0ICAgICAgICBdICQoLCk/XFxuIDkxNDpcXHQgICAgKSA9XFx1MDAzZSB7XFxuIDkxNTpcXHQgICAgICAgICRjcmF0ZTo6Y29uZmlnZnNfYXR0cnMhKFxcbiA5MTY6XFx0ICAgICAgICAgICAgY291bnQ6XFxuIDkxNzpcXHQgICAgICAgICAgICBAY29udGFpbmVyKCRjb250YWluZXIpLFxcbiA5MTg6XFx0ICAgICAgICAgICAgQGRhdGEoJGRhdGEpLFxcbiA5MTk6XFx0ICAgICAgICAgICAgQGNoaWxkKCRjaGlsZCksXFxuIDkyMDpcXHQgICAgICAgICAgICBAbm9fY2hpbGQoKSxcXG4gOTIxOlxcdCAgICAgICAgICAgIEBhdHRycygkKCRuYW1lICRhdHRyKSopLFxcbiA5MjI6XFx0ICAgICAgICAgICAgQGVhdCgkKCRuYW1lICRhdHRyLCkqKSxcXG4gOTIzOlxcdCAgICAgICAgICAgIEBhc3NpZ24oKSxcXG4gOTI0OlxcdCAgICAgICAgICAgIEBjbnQoMHVzaXplKSxcXG4gOTI1OlxcdCAgICAgICAgKVxcbiA5MjY6XFx0ICAgIH07XFxuIDkyNzpcXHQgICAgKGNvdW50OlxcbiA5Mjg6XFx0ICAgICBAY29udGFpbmVyKCRjb250YWluZXI6dHkpLFxcbiA5Mjk6XFx0ICAgICBAZGF0YSgkZGF0YTp0eSksXFxuIDkzMDpcXHQgICAgIEBjaGlsZCgkKCRjaGlsZDp0eSk/KSxcXG4gOTMxOlxcdCAgICAgQG5vX2NoaWxkKCQoJG5vX2NoaWxkOmlkZW50KT8pLFxcbiA5MzI6XFx0ICAgICBAYXR0cnMoJCgkYW5hbWU6aWRlbnQgJGFhdHRyOmxpdGVyYWwpKiksXFxuIDkzMzpcXHQgICAgIEBlYXQoJG5hbWU6aWRlbnQgJGF0dHI6bGl0ZXJhbCwgJCgkcm5hbWU6aWRlbnQgJHJhdHRyOmxpdGVyYWwsKSopLFxcbiA5MzQ6XFx0ICAgICBAYXNzaWduKCQoJGFzc2lnbjpibG9jaykqKSxcXG4gOTM1OlxcdCAgICAgQGNudCgkY250OmV4cHIpLFxcbiA5MzY6XFx0ICAgICkgPVxcdTAwM2Uge1xcbiA5Mzc6XFx0ICAgICAgICAkY3JhdGU6OmNvbmZpZ2ZzX2F0dHJzIShcXG4gOTM4OlxcdCAgICAgICAgICAgIGNvdW50OlxcbiA5Mzk6XFx0ICAgICAgICAgICAgQGNvbnRhaW5lcigkY29udGFpbmVyKSxcXG4gOTQwOlxcdCAgICAgICAgICAgIEBkYXRhKCRkYXRhKSxcXG4gOTQxOlxcdCAgICAgICAgICAgIEBjaGlsZCgkKCRjaGlsZCk/KSxcXG4gOTQyOlxcdCAgICAgICAgICAgIEBub19jaGlsZCgkKCRub19jaGlsZCk/KSxcXG4gOTQzOlxcdCAgICAgICAgICAgIEBhdHRycygkKCRhbmFtZSAkYWF0dHIpKiksXFxuIDk0NDpcXHQgICAgICAgICAgICBAZWF0KCQoJHJuYW1lICRyYXR0ciwpKiksXFxuIDk0NTpcXHQgICAgICAgICAgICBAYXNzaWduKCQoJGFzc2lnbikqIHtcXG4gOTQ2OlxcdCAgICAgICAgICAgICAgICBjb25zdCBOOiB1c2l6ZSA9ICRjbnQ7XFxuIDk0NzpcXHQgICAgICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBtYWNybyB0ZXh0IGV4cGFuZHMgdG8gYSBjYWxsIHRvIGBBdHRyaWJ1dGU6OmFkZGAuXFxuIDk0ODpcXHRcXG4gOTQ5OlxcdCAgICAgICAgICAgICAgICAvLyBTQUZFVFk6IEJ5IGRlc2lnbiBvZiB0aGlzIG1hY3JvLCB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgd2VcXG4gOTUwOlxcdCAgICAgICAgICAgICAgICAvLyBpbnZva2UgdGhlIGBhZGRgIG1ldGhvZCBvbiBiZWxvdywgaXMgbm90IHZpc2libGUgb3V0c2lkZSBvZlxcbiA5NTE6XFx0ICAgICAgICAgICAgICAgIC8vIHRoZSBtYWNybyBleHBhbnNpb24uIFRoZSBtYWNybyBkb2VzIG5vdCBvcGVyYXRlIGNvbmN1cnJlbnRseVxcbiA5NTI6XFx0ICAgICAgICAgICAgICAgIC8vIG9uIHRoaXMgdmFyaWFibGUsIGFuZCB0aHVzIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGVcXG4gOTUzOlxcdCAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZS5cXG4gOTU0OlxcdCAgICAgICAgICAgICAgICB1bnNhZmUge1xcbiA5NTU6XFx0ICAgICAgICAgICAgICAgICAgICAkY3JhdGU6Om1hY3Jvczo6cGFzdGUhKFxcbiA5NTY6XFx0ICAgICAgICAgICAgICAgICAgICAgICAgW1xcdTAwM2MgJGRhdGE6dXBwZXIgX0FUVFJTIFxcdTAwM2VdXFxuIDk1NzpcXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZDo6XFx1MDAzY04sICRhdHRyLCBfXFx1MDAzZShcXHUwMDI2W1xcdTAwM2MgJGRhdGE6dXBwZXIgXyAkbmFtZTp1cHBlciBfQVRUUiBcXHUwMDNlXSlcXG4gOTU4OlxcdCAgICAgICAgICAgICAgICAgICAgKVxcbiA5NTk6XFx0ICAgICAgICAgICAgICAgIH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjQ0LjUyNDE0MDQ1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTQ0MjgyNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeW1ib2wgUmVzb2x1dGlvbiBpbiBgY29uZmlnZnMucnNgIGFuZCBgcm51bGwucnNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGNvbmZpZ2ZzLnJzYCBhbmQgbm90aWNpbmcgdGhlIGltcGxlbWVudGF0aW9uczogYGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlIGZvciBEZXZpY2VDb25maWdgLCBhbmQgc28gb24sIHVwIHRvIGA0YC4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmZhY2VzIGFyZSByZXNvbHZlZCwgYW5kIGhvdyB3ZSBtaWdodCBkZWJ1ZyB0aGVtIGlmIG5lY2Vzc2FyeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHRyYWl0cyBtYXAgdG8gdGhlIHVuZGVybHlpbmcga2VybmVsIHN5bWJvbHMuXG5cbkknbSBjaGVja2luZyBgY29uZmlnZnMucnNgIGFuZCBgcm51bGwucnNgIGZvciByZWxldmFudCBtZXRob2RzIG9yIGZ1bmN0aW9uczogYERldmljZUNvbmZpZzo6c3RvcmVgIHNlZW1zIHJlbGV2YW50LCBhcyBkbyBwb3RlbnRpYWxseSBgcm51bGxfbW9kYCBmdW5jdGlvbnMuIFJ1c3QncyBuYW1lIG1hbmdsaW5nIGNhbiBtYWtlIHRoaXMgYSBiaXQgdHJpY2t5LCBidXQgSSBrbm93IGl0J2xsIHByb2R1Y2Ugc3ltYm9scyBsaWtlIGBfUk52WC4uLmAsIG9yIHRoZSBmdWxseSBkZW1hbmdsZWQgZm9ybSwgZS5nLiwgYFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMVx1MDAzZVx1MDAzZTo6c3RvcmVgLiBJIHNob3VsZCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgYHJudWxsX21vZDo6KmAgcGF0dGVybnMgb3IgYW55IEMgc3ltYm9scyB0aGF0IG1heSBiZSBpbnZvbHZlZC5cblxuR2l2ZW4gbXkgcHJldmlvdXMgZXhwZXJpZW5jZSBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9ucyBvciBleGFtcGxlIHBhdGNoZXMgd2hpY2ggbWlnaHQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gaG93IHN5bWJvbHMgYXJlIHN0cnVjdHVyZWQgaW4gRm9jdXNTeW1ib2xzLiBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBwcm9qZWN0J3MgdHJlZSBvciBnaXQgbG9nIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGV4YW1wbGVzIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBzeW1ib2wgbmFtaW5nIG9yIHJlc29sdXRpb24gd2l0aGluIHRoaXMgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODg1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6NDguMDY4NDI2ODA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3NjY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBdHRyaWJ1dGVPcGVyYXRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svcm51bGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy01LSAgICBibG9jazo6bXE6Omdlbl9kaXNrOjp7R2VuRGlzaywgR2VuRGlza0J1aWxkZXJ9LFxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6NjogICAgY29uZmlnZnM6OntzZWxmLCBBdHRyaWJ1dGVPcGVyYXRpb25zfSxcXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzLTctICAgIGNvbmZpZ2ZzX2F0dHJzLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0zMD1wdWIoY3JhdGUpIHN0cnVjdCBDb25maWcge31cXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMzItI1t2dGFibGVdXFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yczozMzppbXBsIEF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMFxcdTAwM2UgZm9yIENvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0zNC0gICAgdHlwZSBEYXRhID0gQ29uZmlnO1xcbi0tXFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz0xMTg9c3RydWN0IERldmljZUNvbmZpZ0lubmVyIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMTI4LSNbdnRhYmxlXVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MTI5OmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMFxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0xMzAtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MTQ0PSAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMTY2LSNbdnRhYmxlXVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MTY3OmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMVxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0xNjgtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MTc2PSAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMTkxLSNbdnRhYmxlXVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MTkyOmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMlxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0xOTMtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MjA3PSAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMjE5LSNbdnRhYmxlXVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MjIwOmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjM1xcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0yMjEtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9MjI5PSAgICBmbiBzdG9yZSh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2W3U4XSkgLVxcdTAwM2UgUmVzdWx0IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtMjQzLSNbdnRhYmxlXVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6MjQ0OmltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjNFxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy0yNDUtICAgIHR5cGUgRGF0YSA9IERldmljZUNvbmZpZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6NDguMTE1MDA5MjY1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMzY4MTc0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERldmljZSBDb25maWd1cmF0aW9uIFN0b3JhZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIGV4YWN0bHkgd2hpY2ggZWxlbWVudHMgYXJlIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGlzIGBEZXZpY2VDb25maWdgIHN0cnVjdHVyZS4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHJldm9sdmVzIGFyb3VuZCB0aGUgYHN0b3JlYCBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjaGFuZ2luZyAqZXhhY3RseSouIFNvLCBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZSBgRGV2aWNlQ29uZmlnOjpzdG9yZWAgZnVuY3Rpb24gYmVoYXZlcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgaW1wYWN0IG9uIGF0dHJpYnV0ZXMgbGlrZSBgYmxvY2tzaXplYCwgYHJvdGF0aW9uYWxgLCBgc2l6ZWAsIGFuZCBgaXJxbW9kZWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGtleSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgd2UncmUgZGVhbGluZyB3aXRoLlxuXG5OZXh0LCBJIG5lZWQgdG8gc2VlIGhvdyBgY29uZmlnZnNgIGludGVyYWN0cyB3aXRoIHRoZXNlIHN0b3JhZ2UgbWVjaGFuaXNtcy4gVGhlIHJlYWwgbWFnaWMgaGFwcGVucyB3aXRoaW4gYHJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzYCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBkaWcgaW4gbmV4dC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscywgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aG9zZSBjYWxscywgYW5kIHZlcmlmeSBpZiB0aGVzZSBgc3RvcmVgIGltcGxlbWVudGF0aW9ucyBhcmUgZG9pbmcgZXhhY3RseSB3aGF0IHRoZXkgc2hvdWxkLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGNhbGxzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRoZW1zZWx2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTg2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDE6NTMuMTUxODI5MjU2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBdHRyaWJ1dGVPcGVyYXRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInJ1c3Qva2VybmVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTc0LS8vISAjW3Z0YWJsZV1cXG5ydXN0L2tlcm5lbC9jb25maWdmcy5yczo3NTovLyEgaW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MwXFx1MDAzZSBmb3IgQ29uZmlndXJhdGlvbiB7XFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNzYtLy8hICAgICB0eXBlIERhdGEgPSBDb25maWd1cmF0aW9uO1xcbi0tXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtODYtLy8hICNbdnRhYmxlXVxcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzOjg3Oi8vISBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzFcXHUwMDNlIGZvciBDb25maWd1cmF0aW9uIHtcXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy04OC0vLyEgICAgIHR5cGUgRGF0YSA9IENvbmZpZ3VyYXRpb247XFxuLS1cXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycz01MzQ9aW1wbFxcdTAwM2Njb25zdCBJRDogdTY0LCBPLCBEYXRhXFx1MDAzZSBBdHRyaWJ1dGVcXHUwMDNjSUQsIE8sIERhdGFcXHUwMDNlXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNTM1LXdoZXJlXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnM6NTM2OiAgICBPOiBBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzY0lELCBEYXRhID0gRGF0YVxcdTAwM2UsXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNTM3LXtcXG4tLVxcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzPTYxMj0gICAgcHViIGNvbnN0IGZuIG5ldyhuYW1lOiBcXHUwMDI2J3N0YXRpYyBDU3RyKSAtXFx1MDAzZSBTZWxmIHtcXG4tLVxcbnJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzLTY0MC0vLy8gYXR0cmlidXRlcyB2aWEgdGhlIFtga2VybmVsOjpjb25maWdmc19hdHRyc2BdIG1hY3JvLCB0byB0aWVcXG5ydXN0L2tlcm5lbC9jb25maWdmcy5yczo2NDE6Ly8vIGBBdHRyaWJ1dGVPcGVyYXRpb25zYCBpbXBsZW1lbnRhdGlvbnMgdG8gY29uY3JldGUgbmFtZWQgYXR0cmlidXRlcy5cXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy02NDItI1t2dGFibGVdXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnM6NjQzOnB1YiB0cmFpdCBBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzY2NvbnN0IElEOiB1NjQgPSAwXFx1MDAzZSB7XFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNjQ0LSAgICAvLy8gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBmaWVsZCB0aGF0IGlzIGJhY2tpbmcgdGhlXFxuLS1cXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycz02OTM9aW1wbFxcdTAwM2Njb25zdCBOOiB1c2l6ZSwgRGF0YVxcdTAwM2UgQXR0cmlidXRlTGlzdFxcdTAwM2NOLCBEYXRhXFx1MDAzZSB7XFxuLS1cXG5ydXN0L2tlcm5lbC9jb25maWdmcy5ycy03MTEtICAgICkgd2hlcmVcXG5ydXN0L2tlcm5lbC9jb25maWdmcy5yczo3MTI6ICAgICAgICBPOiBBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzY0lELCBEYXRhID0gRGF0YVxcdTAwM2UsXFxucnVzdC9rZXJuZWwvY29uZmlnZnMucnMtNzEzLSAgICB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQxOjUzLjE5OTY1NDk1NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzMyODA5NTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29kZTpcblxuKipEaXZpbmcgaW50byBgY29uZmlnZnMucnNgJ3MgQXR0cmlidXRlIFN0b3JhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBydXN0L2tlcm5lbC9jb25maWdmcy5yc2AgYW5kIHRyeWluZyB0byB0cmFjZSBob3cgZGF0YSBhY3R1YWxseSBnZXRzICpzdG9yZWQqIHVzaW5nIGBBdHRyaWJ1dGVPcGVyYXRpb25zOjpzdG9yZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkaXNwYXRjaCBtZWNoYW5pc20uIExldCdzIHplcm8gaW4gb24gcm91Z2hseSBsaW5lcyA1NDAgdG8gNjAwLCB0aGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGZ1bmN0aW9uIGNhbGwgb3Igc3RydWN0dXJlIHJlbGF0ZWQgdG8gdGhpcy4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBwYXNzZWQgYXJvdW5kLiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgZ3Jhc3Agb24gaG93IGEgc3BlY2lmaWMgYXR0cmlidXRlIHdyaXRlIHVsdGltYXRlbHkgbGFuZHMgaW5zaWRlIHRoZSBgc3RvcmVgIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGZvciBhIGdpdmVuIGNvbmZpZ2ZzIG9iamVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTo1NC45MzI0Njc2NjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInJ1c3Qva2VybmVsL2NvbmZpZ2ZzLnJzXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHQgICAgLy8vIGBpdGVtYCBtdXN0IGJlIGVtYmVkZGVkIGluIGEgYGJpbmRpbmdzOjpjb25maWdfZ3JvdXBgLlxcbiA1NDE6XFx0ICAgIC8vL1xcbiA1NDI6XFx0ICAgIC8vLyBJZiBgaXRlbWAgZG9lcyBub3QgcmVwcmVzZW50IHRoZSByb290IGdyb3VwIG9mIGEgY29uZmlnZnMgc3Vic3lzdGVtLFxcbiA1NDM6XFx0ICAgIC8vLyB0aGUgZ3JvdXAgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIGBHcm91cFxcdTAwM2NEYXRhXFx1MDAzZWAuXFxuIDU0NDpcXHQgICAgLy8vXFxuIDU0NTpcXHQgICAgLy8vIE90aGVyd2lzZSwgdGhlIGdyb3VwIG11c3QgYmUgYSBlbWJlZGRlZCBpbiBhXFxuIDU0NjpcXHQgICAgLy8vIGBiaW5kaW5nczo6Y29uZmlnZnNfc3Vic3lzdGVtYCB0aGF0IGlzIGVtYmVkZGVkIGluIGEgYFN1YnN5c3RlbVxcdTAwM2NEYXRhXFx1MDAzZWAuXFxuIDU0NzpcXHQgICAgLy8vXFxuIDU0ODpcXHQgICAgLy8vIGBwYWdlYCBtdXN0IHBvaW50IHRvIGEgd3JpdGFibGUgYnVmZmVyIG9mIHNpemUgYXQgbGVhc3QgW2BQQUdFX1NJWkVgXS5cXG4gNTQ5OlxcdCAgICB1bnNhZmUgZXh0ZXJuIFxcXCJDXFxcIiBmbiBzaG93KFxcbiA1NTA6XFx0ICAgICAgICBpdGVtOiAqbXV0IGJpbmRpbmdzOjpjb25maWdfaXRlbSxcXG4gNTUxOlxcdCAgICAgICAgcGFnZTogKm11dCBrZXJuZWw6OmZmaTo6Y19jaGFyLFxcbiA1NTI6XFx0ICAgICkgLVxcdTAwM2UgaXNpemUge1xcbiA1NTM6XFx0ICAgICAgICBsZXQgY19ncm91cDogKm11dCBiaW5kaW5nczo6Y29uZmlnX2dyb3VwID1cXG4gNTU0OlxcdCAgICAgICAgICAgIC8vIFNBRkVUWTogQnkgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cywgYGl0ZW1gIGlzIGVtYmVkZGVkIGluIGFcXG4gNTU1OlxcdCAgICAgICAgICAgIC8vIGBjb25maWdfZ3JvdXBgLlxcbiA1NTY6XFx0ICAgICAgICAgICAgdW5zYWZlIHsgY29udGFpbmVyX29mIShpdGVtLCBiaW5kaW5nczo6Y29uZmlnX2dyb3VwLCBjZ19pdGVtKSB9O1xcbiA1NTc6XFx0XFxuIDU1ODpcXHQgICAgICAgIC8vIFNBRkVUWTogVGhlIGZ1bmN0aW9uIHNhZmV0eSByZXF1aXJlbWVudHMgZm9yIHRoaXMgZnVuY3Rpb24gc2F0aXNmeVxcbiA1NTk6XFx0ICAgICAgICAvLyB0aGUgY29uZGl0aW9ucyBmb3IgdGhpcyBjYWxsLlxcbiA1NjA6XFx0ICAgICAgICBsZXQgZGF0YTogXFx1MDAyNkRhdGEgPSB1bnNhZmUgeyBnZXRfZ3JvdXBfZGF0YShjX2dyb3VwKSB9O1xcbiA1NjE6XFx0XFxuIDU2MjpcXHQgICAgICAgIC8vIFNBRkVUWTogQnkgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cywgYHBhZ2VgIGlzIHdyaXRhYmxlIGZvciBgUEFHRV9TSVpFYC5cXG4gNTYzOlxcdCAgICAgICAgbGV0IHJldCA9IE86OnNob3coZGF0YSwgdW5zYWZlIHsgXFx1MDAyNm11dCAqKHBhZ2UuY2FzdDo6XFx1MDAzY1t1ODsgUEFHRV9TSVpFXVxcdTAwM2UoKSkgfSk7XFxuIDU2NDpcXHRcXG4gNTY1OlxcdCAgICAgICAgbWF0Y2ggcmV0IHtcXG4gNTY2OlxcdCAgICAgICAgICAgIE9rKHNpemUpID1cXHUwMDNlIHNpemUgYXMgaXNpemUsXFxuIDU2NzpcXHQgICAgICAgICAgICBFcnIoZXJyKSA9XFx1MDAzZSBlcnIudG9fZXJybm8oKSBhcyBpc2l6ZSxcXG4gNTY4OlxcdCAgICAgICAgfVxcbiA1Njk6XFx0ICAgIH1cXG4gNTcwOlxcdFxcbiA1NzE6XFx0ICAgIC8vLyAjIFNhZmV0eVxcbiA1NzI6XFx0ICAgIC8vL1xcbiA1NzM6XFx0ICAgIC8vLyBgaXRlbWAgbXVzdCBiZSBlbWJlZGRlZCBpbiBhIGBiaW5kaW5nczo6Y29uZmlnX2dyb3VwYC5cXG4gNTc0OlxcdCAgICAvLy9cXG4gNTc1OlxcdCAgICAvLy8gSWYgYGl0ZW1gIGRvZXMgbm90IHJlcHJlc2VudCB0aGUgcm9vdCBncm91cCBvZiBhIGNvbmZpZ2ZzIHN1YnN5c3RlbSxcXG4gNTc2OlxcdCAgICAvLy8gdGhlIGdyb3VwIG11c3QgYmUgZW1iZWRkZWQgaW4gYSBgR3JvdXBcXHUwMDNjRGF0YVxcdTAwM2VgLlxcbiA1Nzc6XFx0ICAgIC8vL1xcbiA1Nzg6XFx0ICAgIC8vLyBPdGhlcndpc2UsIHRoZSBncm91cCBtdXN0IGJlIGEgZW1iZWRkZWQgaW4gYVxcbiA1Nzk6XFx0ICAgIC8vLyBgYmluZGluZ3M6OmNvbmZpZ2ZzX3N1YnN5c3RlbWAgdGhhdCBpcyBlbWJlZGRlZCBpbiBhIGBTdWJzeXN0ZW1cXHUwMDNjRGF0YVxcdTAwM2VgLlxcbiA1ODA6XFx0ICAgIC8vL1xcbiA1ODE6XFx0ICAgIC8vLyBgcGFnZWAgbXVzdCBwb2ludCB0byBhIHJlYWRhYmxlIGJ1ZmZlciBvZiBzaXplIGF0IGxlYXN0IGBzaXplYC5cXG4gNTgyOlxcdCAgICB1bnNhZmUgZXh0ZXJuIFxcXCJDXFxcIiBmbiBzdG9yZShcXG4gNTgzOlxcdCAgICAgICAgaXRlbTogKm11dCBiaW5kaW5nczo6Y29uZmlnX2l0ZW0sXFxuIDU4NDpcXHQgICAgICAgIHBhZ2U6ICpjb25zdCBrZXJuZWw6OmZmaTo6Y19jaGFyLFxcbiA1ODU6XFx0ICAgICAgICBzaXplOiB1c2l6ZSxcXG4gNTg2OlxcdCAgICApIC1cXHUwMDNlIGlzaXplIHtcXG4gNTg3OlxcdCAgICAgICAgbGV0IGNfZ3JvdXA6ICptdXQgYmluZGluZ3M6OmNvbmZpZ19ncm91cCA9XFxuIDU4ODpcXHQgICAgICAgIC8vIFNBRkVUWTogQnkgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cywgYGl0ZW1gIGlzIGVtYmVkZGVkIGluIGFcXG4gNTg5OlxcdCAgICAgICAgLy8gYGNvbmZpZ19ncm91cGAuXFxuIDU5MDpcXHQgICAgICAgICAgICB1bnNhZmUgeyBjb250YWluZXJfb2YhKGl0ZW0sIGJpbmRpbmdzOjpjb25maWdfZ3JvdXAsIGNnX2l0ZW0pIH07XFxuIDU5MTpcXHRcXG4gNTkyOlxcdCAgICAgICAgLy8gU0FGRVRZOiBUaGUgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cyBmb3IgdGhpcyBmdW5jdGlvbiBzYXRpc2Z5XFxuIDU5MzpcXHQgICAgICAgIC8vIHRoZSBjb25kaXRpb25zIGZvciB0aGlzIGNhbGwuXFxuIDU5NDpcXHQgICAgICAgIGxldCBkYXRhOiBcXHUwMDI2RGF0YSA9IHVuc2FmZSB7IGdldF9ncm91cF9kYXRhKGNfZ3JvdXApIH07XFxuIDU5NTpcXHRcXG4gNTk2OlxcdCAgICAgICAgbGV0IHJldCA9IE86OnN0b3JlKFxcbiA1OTc6XFx0ICAgICAgICAgICAgZGF0YSxcXG4gNTk4OlxcdCAgICAgICAgICAgIC8vIFNBRkVUWTogQnkgZnVuY3Rpb24gc2FmZXR5IHJlcXVpcmVtZW50cywgYHBhZ2VgIGlzIHJlYWRhYmxlXFxuIDU5OTpcXHQgICAgICAgICAgICAvLyBmb3IgYXQgbGVhc3QgYHNpemVgLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MTo1NC45MzI2MTI2NjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzM1NTc0MTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgcm51bGxgIERyaXZlcidzIENvbmZpZ0ZTIEludGVyZmFjZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgc2hvd2AgYW5kIGBzdG9yZWAgZnVuY3Rpb25zIGluIHRoZSBgQXR0cmlidXRlYCBzdHJ1Y3QgaW50ZXJhY3Qgd2l0aCB0aGUgYEF0dHJpYnV0ZU9wZXJhdGlvbnNgIHRyYWl0LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgcm51bGxfbW9kYCBtb2R1bGUgYW5kIGl0cyBgY29uZmlnZnNgIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHRoZSBgRGV2aWNlQ29uZmlnYC4gSSdtIHNlZWluZyBjYWxscyBsaWtlIGBcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2VcdTAwM2U6OnN0b3JlYCBhbmQgc2ltaWxhciBvbmVzLiBJJ20gYWxzbyByZWZlcmVuY2luZyBmdW5jdGlvbnMgaW4gYHJudWxsLnJzYCBhbmQgYGNvbmZpZ2ZzLnJzYCwgbGlrZSBgTnVsbEJsa0RldmljZTo6bmV3YCBhbmQgYERldmljZUNvbmZpZzo6c3RvcmVgLlxuXG5Ob3csIEknbSBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoZSByZWNlbnQgcGF0Y2gsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYCBmaWxlLiBJdCdzIHRoZSBgQXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2VgLCBgXHUwMDNjMlx1MDAzZWAsIGBcdTAwM2MzXHUwMDNlYCwgYW5kIGBcdTAwM2M0XHUwMDNlYCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgdGhlIGtleSBoZXJlOiBgYmxvY2tzaXplYCwgYHJvdGF0aW9uYWxgLCBgc2l6ZWAsIGFuZCBgaXJxbW9kZWAsIHJlc3BlY3RpdmVseS4gRWFjaCBgc3RvcmVgIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UgaXQncyB0YWtpbmcgYSBsb2NrIHRvIGVuc3VyZSBtdXR1YWwgZXhjbHVzaW9uLCBjaGVja2luZyBhIGBwb3dlcmVkYCBzdGF0ZSwgYW5kIHRoZW4gbW9kaWZ5aW5nIGNvbmZpZ3VyYXRpb24gZmllbGRzLiBUaGUgbG9jayBhbmQgdGhlIGBwb3dlcmVkYCBzdGF0ZSBjaGVjayBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nOiBgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7YCBmb2xsb3dlZCBieSBhIGNoZWNrIGFuZCBwb3RlbnRpYWwgZWFybHkgcmV0dXJuLiBUaGUgY29kZSB0aGVuIGVpdGhlciB2YWxpZGF0ZXMgdGhlIGlucHV0LCB1c2luZyBmdW5jdGlvbiBzdWNoIGFzIGBHZW5EaXNrQnVpbGRlcjo6dmFsaWRhdGVfYmxvY2tfc2l6ZWAgb3IgcGFyc2VzIHVzaW5nIGBrc3RydG9ib29sX2J5dGVzYCBvciBgSVJRTW9kZTo6dHJ5X2Zyb21gLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25maWd1cmF0aW9uIHN1cmZhY2Ugd2FycmFudCBmdXp6aW5nP1xuXG4qICAgKipSZWFjaGFiaWxpdHk6KiogRGVmaW5pdGVseS4gVGhlIGBCTEtfREVWX1JVU1RfTlVMTGAgZHJpdmVyIGlzIGEgc29mdHdhcmUgYmxvY2sgZGV2aWNlIGFjY2Vzc2libGUgdmlhIGNvbmZpZ2ZzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwcy5cbiogICAqKkNvbmN1cnJlbmN5L0xvY2tpbmcgSW1wYWN0OioqIFllcywgdGhpcyBwYXRjaCBpcyBkaXJlY3RseSBtb2RpZnlpbmcgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byBjbG9zZSByYWNlIHdpbmRvd3Mgd2hlcmUgdGhlIGxvY2sgd2FzIGRyb3BwZWQgYmV0d2VlbiB0aGUgYHBvd2VyZWRgIHN0YXRlIGNoZWNrIGFuZCBtb2RpZmljYXRpb24gb2YgY29uZmlndXJhdGlvbiBmaWVsZHMuIFRoaXMgaXMgc2VjdXJpdHktc2Vuc2l0aXZlIHN0dWZmLlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZyA9IFRydWUuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IEVuYWJsZUNvbmZpZ3MuIEkgbmVlZCB0byBjb25maXJtOlxuXG4qICAgYEJMS19ERVZfUlVTVF9OVUxMYDogQ2hlY2suXG4qICAgYFJVU1RgOiBDaGVjay5cbiogICBgQ09ORklHRlNfRlNgOiBDaGVjay5cbiogICBgQkxPQ0tgOiBUaGlzIGlzIGEgc3RhbmRhcmQgcGFyZW50IGZvciBibG9jayBkZXZpY2VzLCBidXQgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MjowMi4yODgzNTcyMzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDg0NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qcm51bGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjIwOnNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDI6MDIuMzM2NDQ3MjI0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTcyMDQyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUnVzdCBOdWxsIEJsb2NrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19ERVZfUlVTVF9OVUxMYC4gIE15IGZpcnN0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBMZXQncyBzZWUuLi4gSSdtIHByZXR0eSBzdXJlIGl0IHdvdWxkIGJlIGluIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgLCBzbyBJJ2xsIGNoZWNrIHRoYXQgZmlyc3QuIFRoZW4sIHNpbmNlIEkga25vdyB0aGUgc3BlY2lmaWNzIEknbSBsb29raW5nIGZvciwgSSBzaG91bGQgZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvYmxvY2svcm51bGwvS2NvbmZpZ2AuIEFoLCBoZXJlIGl0IGlzOlxuXG5gYGBrY29uZmlnXG5jb25maWcgQkxLX0RFVl9SVVNUX05VTExcbiAgICB0cmlzdGF0ZSBcIlJ1c3QgbnVsbCBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcIlxuICAgIGRlcGVuZHMgb24gUlVTVCBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNcbmBgYFxuXG5TbywgdGhhdCB0ZWxscyBtZSB0aGUgZHJpdmVyIGRlcGVuZHMgb24gYFJVU1RgIGFuZCBgQ09ORklHRlNfRlNgLiBHb3QgaXQuIE5vdywgd2hhdCB3YXMgSSBjaGVja2luZyBpbiBgZHJpdmVycy9ibG9jay9LY29uZmlnYD8gSnVzdCBtYWtpbmcgc3VyZSB0aGVyZSB3YXNuJ3Qgc29tZXRoaW5nIGVsc2UgbW9yZSBnbG9iYWwuIEknbGwgdGFrZSBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgZmlyc3QgdHdlbnR5IGxpbmVzLCB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIHJlbGV2YW50Li4uIFxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MjowNC43OTM2NTQ0NDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBCbG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBCTEtfREVWXFxuICAgNzpcXHRcXHRib29sIFxcXCJCbG9jayBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiAgIDk6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB2YXJpb3VzIGRpZmZlcmVudCBibG9jayBkZXZpY2VcXG4gIDEyOlxcdFxcdCAgZHJpdmVycy4gVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkO1xcbiAgMTU6XFx0XFx0ICBvbmx5IGRvIHRoaXMgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBCTEtfREVWXFxuICAxODpcXHRcXG4gIDE5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnXFxcIlxcbiAgMjA6XFx0c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWdcXFwiXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBCTEtfREVWX0ZEXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTm9ybWFsIGZsb3BweSBkaXNrIHN1cHBvcnRcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfTUFZX0hBVkVfUENfRkRDXFxuICAyNTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQyOjA0Ljc5MzczNTQ1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTI3NDQ2MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUnVzdCBOdWxsIEJsb2NrIERyaXZlciBDb25maWdmcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaGVyZSBpcyBvbiB0aGUgY2hhbmdlcyB0byB0aGUgUnVzdCBudWxsIGJsb2NrIGRyaXZlciwgc3BlY2lmaWNhbGx5IGl0cyBjb25maWdmcyBpbnRlcmZhY2UsIGFuZCBob3cgaXQgaW1wYWN0cyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBJIHNlZSB0aGF0IGBCTEtfREVWX1JVU1RfTlVMTGAsIGBCTEtfREVWYCwgYEJMT0NLYCwgYFJVU1RgLCBhbmQgYENPTkZJR0ZTX0ZTYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucy5cblxuRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzLiBJJ3ZlIHBpbnBvaW50ZWQgdGhlIG1ldGhvZHMgYmVpbmcgbW9kaWZpZWQgd2l0aGluIGBkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlc2UgbWV0aG9kczpcblxuKiAgIGBcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzFcdTAwM2VcdTAwM2U6OnN0b3JlYFxuKiAgIGBcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2VcdTAwM2U6OnN0b3JlYFxuKiAgIGBcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzNcdTAwM2VcdTAwM2U6OnN0b3JlYFxuKiAgIGBcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzRcdTAwM2VcdTAwM2U6OnN0b3JlYFxuKiAgIGBEZXZpY2VDb25maWc6OnN0b3JlYFxuKiAgIGBybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWc6OnN0b3JlYFxuKiAgIGBOdWxsQmxrRGV2aWNlOjpuZXdgXG5cblRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBhdHRyaWJ1dGUgb3BlcmF0aW9ucyB3aXRoaW4gY29uZmlnZnMsIGFuZCBhbHNvIHRoZSBkZXZpY2UgY3JlYXRpb24sIHNvIGl0IGxvb2tzIGxpa2UgY29uZmlnZnMgbW9kaWZpY2F0aW9ucyBpbmNsdWRlIGJvdGggdGhlIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgY3JlYXRpb24gb2YgdGhlIGJsb2NrIGRldmljZS5cblxuVGhlIHJlYXNvbmluZyBoZXJlIG1ha2VzIHNlbnNlOiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIEJ5IGhvbGRpbmcgdGhlIGxvY2sgZHVyaW5nIHZhbGlkYXRpb24sIHBhcnNpbmcsIGFuZCBhc3NpZ25tZW50IHdpdGhpbiB0aGUgY29uZmlnZnMgaW50ZXJmYWNlLCB3ZSBlbGltaW5hdGUgdGhlIHBvdGVudGlhbCBmb3IgZGV2aWNlIHNldHRpbmdzIHRvIGJlIGFsdGVyZWQgd2hpbGUgdGhlIGRldmljZSBpcyBsaXZlLiBTaW5jZSB0aGlzIGlzIGFuIGVtdWxhdGVkIGRyaXZlciBhbmQgY29uZmlndXJhYmxlIHZpYSB1c2Vyc3BhY2UgdGhyb3VnaCBjb25maWdmcywgaXQncyB2ZXJ5IGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmdXp6aW5nIHRhcmdldHMgYXJlIGRlZmluZWQgYXM6XG5cbiogICBgRGV2aWNlQ29uZmlnOjpzdG9yZWBcbiogICBgXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MxXHUwMDNlXHUwMDNlOjpzdG9yZWBcbiogICBgXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MyXHUwMDNlXHUwMDNlOjpzdG9yZWBcbiogICBgXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2MzXHUwMDNlXHUwMDNlOjpzdG9yZWBcbiogICBgXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcdTAwM2M0XHUwMDNlXHUwMDNlOjpzdG9yZWBcbiogICBgTnVsbEJsa0RldmljZTo6bmV3YFxuXG5UaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHRvIGJlIHJlbGV2YW50IGFyZTpcblxuKiAgIGBCTEtfREVWX1JVU1RfTlVMTGBcbiogICBgUlVTVGBcbiogICBgQ09ORklHRlNfRlNgXG4qICAgYEJMS19ERVZgXG4qICAgYEJMT0NLYFxuXG5XaXRoIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIG5vdyBtb3ZlIGZvcndhcmQuIExldCdzIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTYwLCJPdXRwdXRUb2tlbnMiOjI3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQyOjEwLjcyMTE4MzYwM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NTAyMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1JVU1RfTlVMTFwiLFxuICAgIFwiUlVTVFwiLFxuICAgIFwiQ09ORklHRlNfRlNcIixcbiAgICBcIkJMS19ERVZcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiRGV2aWNlQ29uZmlnOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzFcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIlxcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MyXFx1MDAzZVxcdTAwM2U6OnN0b3JlXCIsXG4gICAgXCJcXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjM1xcdTAwM2VcXHUwMDNlOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzRcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIk51bGxCbGtEZXZpY2U6Om5ld1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgYmVoYXZpb3IgaW4gdGhlIGNvbmZpZ2ZzIGF0dHJpYnV0ZSBzdG9yZSBoYW5kbGVycyBmb3IgdGhlIFJ1c3QgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyIChybnVsbCkuIEhvbGRpbmcgdGhlIG11dGV4IGFjcm9zcyBzdGF0ZSBjaGVja3MgYW5kIGZpZWxkIGFzc2lnbm1lbnRzIGNsb3NlcyBhIHJhY2Ugd2luZG93IHdoZW4gYWx0ZXJpbmcgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24gKGJsb2NrX3NpemUsIHJvdGF0aW9uYWwsIGNhcGFjaXR5X21pYiwgaXJxX21vZGUpIHdoaWxlIHBvd2VyaW5nIGRldmljZXMgb24vb2ZmLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLWJhc2VkLCBjb25maWd1cmFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNvbmZpZ2ZzIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfUlVTVF9OVUxMXCIsXG4gICAgXCJSVVNUXCIsXG4gICAgXCJDT05GSUdGU19GU1wiLFxuICAgIFwiQkxLX0RFVlwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJEZXZpY2VDb25maWc6OnN0b3JlXCIsXG4gICAgXCJcXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMVxcdTAwM2VcXHUwMDNlOjpzdG9yZVwiLFxuICAgIFwiXFx1MDAzY3JudWxsX21vZDo6Y29uZmlnZnM6OkRldmljZUNvbmZpZyBhcyBrZXJuZWw6OmNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXFx1MDAzYzJcXHUwMDNlXFx1MDAzZTo6c3RvcmVcIixcbiAgICBcIlxcdTAwM2NybnVsbF9tb2Q6OmNvbmZpZ2ZzOjpEZXZpY2VDb25maWcgYXMga2VybmVsOjpjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MzXFx1MDAzZVxcdTAwM2U6OnN0b3JlXCIsXG4gICAgXCJcXHUwMDNjcm51bGxfbW9kOjpjb25maWdmczo6RGV2aWNlQ29uZmlnIGFzIGtlcm5lbDo6Y29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjNFxcdTAwM2VcXHUwMDNlOjpzdG9yZVwiLFxuICAgIFwiTnVsbEJsa0RldmljZTo6bmV3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgY29uZmlnZnMgYXR0cmlidXRlIHN0b3JlIGhhbmRsZXJzIGZvciB0aGUgUnVzdCBudWxsIGJsb2NrIGRldmljZSBkcml2ZXIgKHJudWxsKS4gSG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHN0YXRlIGNoZWNrcyBhbmQgZmllbGQgYXNzaWdubWVudHMgY2xvc2VzIGEgcmFjZSB3aW5kb3cgd2hlbiBhbHRlcmluZyBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiAoYmxvY2tfc2l6ZSwgcm90YXRpb25hbCwgY2FwYWNpdHlfbWliLCBpcnFfbW9kZSkgd2hpbGUgcG93ZXJpbmcgZGV2aWNlcyBvbi9vZmYuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtYmFzZWQsIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY29uZmlnZnMgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGFuZCByZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjQyOjEwLjc5NjY5MzQ2MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyODc4MzkyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MjoxMC43OTcyMjExNjJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDI4NzMwNjc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2NvcGUgaW4gYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgIGZvciBgRGV2aWNlQ29uZmlnYCBjb25maWdmcyBhdHRyaWJ1dGUgYHN0b3JlYCBoYW5kbGVycy4gUHJldmlvdXNseSwgYHRoaXMuZGF0YS5sb2NrKClgIHdhcyBhY3F1aXJlZCB0byBjaGVjayBgcG93ZXJlZGAgYW5kIHRoZW4gcmUtYWNxdWlyZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9wZW5pbmcgYSByYWNlIHdpbmRvdyAoVE9DVE9VKS4gVGhlIHBhdGNoIGhvbGRzIHRoZSBtdXRleCBsb2NrIGd1YXJkIGFjcm9zcyBib3RoIHRoZSBjaGVjayBhbmQgdGhlIGFzc2lnbm1lbnQuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kvbG9ja2luZyBmaXggaW4gc2FmZSBSdXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCBjb3B5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBrZXJuZWwgaW5mby1sZWFrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YjdmYWIxMjFiZjQ3YjdkYTk4ODJiNThjZjRmZjY4Mzg2MThhZDEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjo0MTowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMgYi9kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXG5pbmRleCAzMmMxMGMzZjRkMGZkLi42NmVmOTFiM2ZmMGNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc1xuKysrIGIvZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc1xuQEAgLTE3NCw3ICsxNzQsOCBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjMVx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAgICAgfVxuIFxuICAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4rICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbisgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuICAgICAgICAgfVxuIFxuQEAgLTE4Miw3ICsxODMsNyBAQCBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbiAgICAgICAgIGxldCB2YWx1ZSA9IHRleHQucGFyc2U6Olx1MDAzY3UzMlx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xuIFxuICAgICAgICAgR2VuRGlza0J1aWxkZXI6OnZhbGlkYXRlX2Jsb2NrX3NpemUodmFsdWUpPztcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuYmxvY2tfc2l6ZSA9IHZhbHVlO1xuKyAgICAgICAgZ3VhcmQuYmxvY2tfc2l6ZSA9IHZhbHVlO1xuICAgICAgICAgT2soKCkpXG4gICAgIH1cbiB9XG5AQCAtMjA0LDExICsyMDUsMTIgQEAgaW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1x1MDAzYzJcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XG4gICAgIH1cbiBcbiAgICAgZm4gc3RvcmUodGhpczogXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcdTAwMjZbdThdKSAtXHUwMDNlIFJlc3VsdCB7XG4tICAgICAgICBpZiB0aGlzLmRhdGEubG9jaygpLnBvd2VyZWQge1xuKyAgICAgICAgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7XG4rICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcbiAgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcbiAgICAgICAgIH1cbiBcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkucm90YXRpb25hbCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xuKyAgICAgICAgZ3VhcmQucm90YXRpb25hbCA9IGtzdHJ0b2Jvb2xfYnl0ZXMocGFnZSk/O1xuIFxuICAgICAgICAgT2soKCkpXG4gICAgIH1cbkBAIC0yMjUsMTQgKzIyNywxNSBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjM1x1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAgICAgfVxuIFxuICAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4rICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbisgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuICAgICAgICAgfVxuIFxuICAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xuICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XHUwMDNjdTY0XHUwMDNlKCkubWFwX2Vycih8X3wgRUlOVkFMKT87XG4gXG4tICAgICAgICB0aGlzLmRhdGEubG9jaygpLmNhcGFjaXR5X21pYiA9IHZhbHVlO1xuKyAgICAgICAgZ3VhcmQuY2FwYWNpdHlfbWliID0gdmFsdWU7XG4gICAgICAgICBPaygoKSlcbiAgICAgfVxuIH1cbkBAIC0yNDgsMTQgKzI1MSwxNSBAQCBpbXBsIGNvbmZpZ2ZzOjpBdHRyaWJ1dGVPcGVyYXRpb25zXHUwMDNjNFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcbiAgICAgfVxuIFxuICAgICBmbiBzdG9yZSh0aGlzOiBcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFx1MDAyNlt1OF0pIC1cdTAwM2UgUmVzdWx0IHtcbi0gICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucG93ZXJlZCB7XG4rICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcbisgICAgICAgIGlmIGd1YXJkLnBvd2VyZWQge1xuICAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xuICAgICAgICAgfVxuIFxuICAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xuICAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XHUwMDNjdThcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcbiBcbi0gICAgICAgIHRoaXMuZGF0YS5sb2NrKCkuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/O1xuKyAgICAgICAgZ3VhcmQuaXJxX21vZGUgPSBJUlFNb2RlOjp0cnlfZnJvbSh2YWx1ZSk/O1xuICAgICAgICAgT2soKCkpXG4gICAgIH1cbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MjoxMC43OTcyMjIxMTJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTA3OTQ4NDE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSdXN0LUJhc2VkIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc2AsIHdoaWNoLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgaXMgYSBSdXN0IGltcGxlbWVudGF0aW9uIHJlbGF0ZWQgdG8gdGhlIGBybnVsbGAgYmxvY2sgZHJpdmVyIGFuZCBpdHMgaW50ZWdyYXRpb24gd2l0aCBjb25maWdmcy4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgYSB2aXJ0dWFsIGJsb2NrIGRldmljZSBhbmQgdGhpcyBpcyB0aGUgY29uZmlnZnMgY29kZSB0aGF0IGFsbG93cyBpdCB0byBiZSBjb25maWd1cmVkLiBUaGUgY29udGV4dCBpcyBpbXBvcnRhbnQgaGVyZTsgSSdsbCB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGZ1bGx5IGdyYXNwIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgZGVzaWduIGRlY2lzaW9ucy5cblxuRnJvbSB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIGxvY2tpbmcgaXNzdWUgd2l0aGluIHRoZSBgRGV2aWNlQ29uZmlnYCBzdHJ1Y3Qgd2hlbiBpdCBjb21lcyB0byB0aGUgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzLiBJdCBsb29rcyBsaWtlIHRoZSBwcmlvciBjb2RlIHVzZWQgYHRoaXMuZGF0YS5sb2NrKClgIGluIG11bHRpcGxlIHBsYWNlcyB3aXRoaW4gZWFjaCBhdHRyaWJ1dGUncyBgc3RvcmVgIG1ldGhvZC4gRWFjaCB0aW1lLCB0aGUgbG9jayB3YXMgZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBtZXRob2Qgc2NvcGUsIHRoZW4gcmUtYWNxdWlyZWQgZm9yIGEgc3Vic2VxdWVudCBhY2Nlc3MuXG5cbkkgc2VlIHRoYXQgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGFkZGluZyBhIG11dGFibGUgZ3VhcmQgd2l0aCBhIHNpbmdsZSBsb2NrLiBUaGUgYHN0b3JlYCBtZXRob2RzIGZvciB0aGUgYGJsb2NrX3NpemVgLCBgcm90YXRpb25hbGAsIGBjYXBhY2l0eV9taWJgLCBhbmQgYGlycV9tb2RlYCBhdHRyaWJ1dGVzIGFyZSBhZmZlY3RlZC4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgY2hlY2sgZm9yIGAucG93ZXJlZGAgYW5kIHRoZSBjaGFuZ2UgcHJldmVudHMgc2V0dGluZyB2YWx1ZXMgaWYgdGhlIGRldmljZSBpcyBwb3dlcmVkLiBJdCBhcHBlYXJzIGVhY2ggYXR0cmlidXRlIGhhZCBhIGxvY2sgYWNxdWlzaXRpb24gb24gdGhlIGB0aGlzLmRhdGEubG9jaygpYCB3aGljaCBpcyBub3cgY29uc29saWRhdGVkIGludG8gYSBzaW5nbGUgbG9jayBieSBpbml0aWFsaXppbmcgdGhlIGBtdXQgZ3VhcmRgLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbG9jayBpcyBoZWxkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUncyBgc3RvcmVgIG1ldGhvZCwgcHJlc3VtYWJseSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBvciBpbmNvbnNpc3RlbmNpZXMgd2hlbiBtb2RpZnlpbmcgdGhlIGRldmljZSBjb25maWd1cmF0aW9uIGRhdGEuIEJ5IGluaXRpYWxpemluZyBhIGd1YXJkIGF0IHRoZSBzdGFydCBhbmQgaG9sZGluZyBpdCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiwgd2UgYXZvaWQgbXVsdGlwbGUgbG9jayBhY3F1aXNpdGlvbnMgd2l0aGluIGVhY2ggZnVuY3Rpb24uXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBnb29kIGNoYW5nZS4gTG9ja2luZyBpcyBhIGNyaXRpY2FsIGFyZWEgaW4ga2VybmVsIGRldmVsb3BtZW50LCBhbmQgYSBjb25zb2xpZGF0ZWQgbG9jayBoZXJlIGNvdWxkIGltcHJvdmUgdGhlIHJvYnVzdG5lc3MgYW5kIHBvdGVudGlhbGx5IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGJlIGVhc2llciB0byByZWFkLCBiZWNhdXNlIGxlc3MgY29kZSBpcyBuZWVkZWQsIGFuZCBzaG91bGQgYmUgYmV0dGVyIHBlcmZvcm1hbmNlIHRvby4gTm8gbW9yZSB1bm5lY2Vzc2FyeSBsb2NrLXVubG9jayBjeWNsZXMuIEl0IHByZXZlbnRzIGEgcG90ZW50aWFsIHJhY2Ugd2hlcmUgdGhlIGAucG93ZXJlZGAgZmxhZyBjb3VsZCBiZSBjaGVja2VkLCBhbmQgdGhlbiBtb2RpZmllZCBiZXR3ZWVuIGxvY2sgYWNxdWlzaXRpb25zLCBkZXBlbmRpbmcgb24gaG93IHRoaXMgaXMgd3JpdHRlbi4gSSdsbCBuZWVkIHRvIHJlYWQgdGhlIHdpZGVyIGNvbnRleHQgdG8gYmUgc3VyZSwgYnV0IHNvIGZhciwgaXQgYXBwZWFycyB0byBiZSBhbiBpbXByb3ZlbWVudC4gTGV0IG1lIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgY29uZmlnZnNgIHRvIGJlIHN1cmUgdGhhdCBJIGFtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjkwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDI6MTkuODc2NzEwMzExWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjA6XFx0ICAgICAgICB9XFxuIDE2MTpcXHRcXG4gMTYyOlxcdCAgICAgICAgT2soKCkpXFxuIDE2MzpcXHQgICAgfVxcbiAxNjQ6XFx0fVxcbiAxNjU6XFx0XFxuIDE2NjpcXHQjW3Z0YWJsZV1cXG4gMTY3OlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMVxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDE2ODpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAxNjk6XFx0XFxuIDE3MDpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDE3MTpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAxNzI6XFx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXFxcInt9XFxcXG5cXFwiLCB0aGlzLmRhdGEubG9jaygpLmJsb2NrX3NpemUpKT87XFxuIDE3MzpcXHQgICAgICAgIE9rKHdyaXRlci5ieXRlc193cml0dGVuKCkpXFxuIDE3NDpcXHQgICAgfVxcbiAxNzU6XFx0XFxuIDE3NjpcXHQgICAgZm4gc3RvcmUodGhpczogXFx1MDAyNkRldmljZUNvbmZpZywgcGFnZTogXFx1MDAyNlt1OF0pIC1cXHUwMDNlIFJlc3VsdCB7XFxuIDE3NzpcXHQgICAgICAgIGxldCBtdXQgZ3VhcmQgPSB0aGlzLmRhdGEubG9jaygpO1xcbiAxNzg6XFx0ICAgICAgICBpZiBndWFyZC5wb3dlcmVkIHtcXG4gMTc5OlxcdCAgICAgICAgICAgIHJldHVybiBFcnIoRUJVU1kpO1xcbiAxODA6XFx0ICAgICAgICB9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdCAgICAgICAgbGV0IHRleHQgPSBjb3JlOjpzdHI6OmZyb21fdXRmOChwYWdlKT8udHJpbSgpO1xcbiAxODM6XFx0ICAgICAgICBsZXQgdmFsdWUgPSB0ZXh0LnBhcnNlOjpcXHUwMDNjdTMyXFx1MDAzZSgpLm1hcF9lcnIofF98IEVJTlZBTCk/O1xcbiAxODQ6XFx0XFxuIDE4NTpcXHQgICAgICAgIEdlbkRpc2tCdWlsZGVyOjp2YWxpZGF0ZV9ibG9ja19zaXplKHZhbHVlKT87XFxuIDE4NjpcXHQgICAgICAgIGd1YXJkLmJsb2NrX3NpemUgPSB2YWx1ZTtcXG4gMTg3OlxcdCAgICAgICAgT2soKCkpXFxuIDE4ODpcXHQgICAgfVxcbiAxODk6XFx0fVxcbiAxOTA6XFx0XFxuIDE5MTpcXHQjW3Z0YWJsZV1cXG4gMTkyOlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjMlxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDE5MzpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDE5NjpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHQgICAgICAgIGlmIHRoaXMuZGF0YS5sb2NrKCkucm90YXRpb25hbCB7XFxuIDE5OTpcXHQgICAgICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFxcXCIxXFxcXG5cXFwiKT87XFxuIDIwMDpcXHQgICAgICAgIH0gZWxzZSB7XFxuIDIwMTpcXHQgICAgICAgICAgICB3cml0ZXIud3JpdGVfc3RyKFxcXCIwXFxcXG5cXFwiKT87XFxuIDIwMjpcXHQgICAgICAgIH1cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyMDU6XFx0ICAgIH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyMDg6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjA5OlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDIxMDpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjExOlxcdCAgICAgICAgfVxcbiAyMTI6XFx0XFxuIDIxMzpcXHQgICAgICAgIGd1YXJkLnJvdGF0aW9uYWwgPSBrc3RydG9ib29sX2J5dGVzKHBhZ2UpPztcXG4gMjE0OlxcdFxcbiAyMTU6XFx0ICAgICAgICBPaygoKSlcXG4gMjE2OlxcdCAgICB9XFxuIDIxNzpcXHR9XFxuIDIxODpcXHRcXG4gMjE5OlxcdCNbdnRhYmxlXVxcbiAyMjA6XFx0aW1wbCBjb25maWdmczo6QXR0cmlidXRlT3BlcmF0aW9uc1xcdTAwM2MzXFx1MDAzZSBmb3IgRGV2aWNlQ29uZmlnIHtcXG4gMjIxOlxcdCAgICB0eXBlIERhdGEgPSBEZXZpY2VDb25maWc7XFxuIDIyMjpcXHRcXG4gMjIzOlxcdCAgICBmbiBzaG93KHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZtdXQgW3U4OyBQQUdFX1NJWkVdKSAtXFx1MDAzZSBSZXN1bHRcXHUwMDNjdXNpemVcXHUwMDNlIHtcXG4gMjI0OlxcdCAgICAgICAgbGV0IG11dCB3cml0ZXIgPSBrZXJuZWw6OnN0cjo6Rm9ybWF0dGVyOjpuZXcocGFnZSk7XFxuIDIyNTpcXHQgICAgICAgIHdyaXRlci53cml0ZV9mbXQoZm10IShcXFwie31cXFxcblxcXCIsIHRoaXMuZGF0YS5sb2NrKCkuY2FwYWNpdHlfbWliKSk/O1xcbiAyMjY6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyMjc6XFx0ICAgIH1cXG4gMjI4OlxcdFxcbiAyMjk6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyMzA6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjMxOlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDIzMjpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjMzOlxcdCAgICAgICAgfVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcXG4gMjM2OlxcdCAgICAgICAgbGV0IHZhbHVlID0gdGV4dC5wYXJzZTo6XFx1MDAzY3U2NFxcdTAwM2UoKS5tYXBfZXJyKHxffCBFSU5WQUwpPztcXG4gMjM3OlxcdFxcbiAyMzg6XFx0ICAgICAgICBndWFyZC5jYXBhY2l0eV9taWIgPSB2YWx1ZTtcXG4gMjM5OlxcdCAgICAgICAgT2soKCkpXFxuIDI0MDpcXHQgICAgfVxcbiAyNDE6XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHQjW3Z0YWJsZV1cXG4gMjQ0OlxcdGltcGwgY29uZmlnZnM6OkF0dHJpYnV0ZU9wZXJhdGlvbnNcXHUwMDNjNFxcdTAwM2UgZm9yIERldmljZUNvbmZpZyB7XFxuIDI0NTpcXHQgICAgdHlwZSBEYXRhID0gRGV2aWNlQ29uZmlnO1xcbiAyNDY6XFx0XFxuIDI0NzpcXHQgICAgZm4gc2hvdyh0aGlzOiBcXHUwMDI2RGV2aWNlQ29uZmlnLCBwYWdlOiBcXHUwMDI2bXV0IFt1ODsgUEFHRV9TSVpFXSkgLVxcdTAwM2UgUmVzdWx0XFx1MDAzY3VzaXplXFx1MDAzZSB7XFxuIDI0ODpcXHQgICAgICAgIGxldCBtdXQgd3JpdGVyID0ga2VybmVsOjpzdHI6OkZvcm1hdHRlcjo6bmV3KHBhZ2UpO1xcbiAyNDk6XFx0ICAgICAgICB3cml0ZXIud3JpdGVfZm10KGZtdCEoXFxcInt9XFxcXG5cXFwiLCB0aGlzLmRhdGEubG9jaygpLmlycV9tb2RlKSk/O1xcbiAyNTA6XFx0ICAgICAgICBPayh3cml0ZXIuYnl0ZXNfd3JpdHRlbigpKVxcbiAyNTE6XFx0ICAgIH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0ICAgIGZuIHN0b3JlKHRoaXM6IFxcdTAwMjZEZXZpY2VDb25maWcsIHBhZ2U6IFxcdTAwMjZbdThdKSAtXFx1MDAzZSBSZXN1bHQge1xcbiAyNTQ6XFx0ICAgICAgICBsZXQgbXV0IGd1YXJkID0gdGhpcy5kYXRhLmxvY2soKTtcXG4gMjU1OlxcdCAgICAgICAgaWYgZ3VhcmQucG93ZXJlZCB7XFxuIDI1NjpcXHQgICAgICAgICAgICByZXR1cm4gRXJyKEVCVVNZKTtcXG4gMjU3OlxcdCAgICAgICAgfVxcbiAyNTg6XFx0XFxuIDI1OTpcXHQgICAgICAgIGxldCB0ZXh0ID0gY29yZTo6c3RyOjpmcm9tX3V0ZjgocGFnZSk/LnRyaW0oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6NDI6MTkuODc2ODE0MTMxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMDc2OTQ5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvbW1pdC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiB0aGUgYHN0b3JlYCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgLiBQcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgbG9ja2luZyBgdGhpcy5kYXRhYCAqdHdpY2UqOiBvbmNlIHRvIGNoZWNrIGlmIGBwb3dlcmVkYCB3YXMgdHJ1ZSwgYW5kIHRoZW4gYWdhaW4gdG8gYWN0dWFsbHkgbW9kaWZ5IGEgdmFsdWUuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgVGltZS1vZi1DaGVjay10by1UaW1lLW9mLVVzZSAoVE9DVE9VKSByYWNlIGNvbmRpdGlvbi4gQmV0d2VlbiB0aG9zZSB0d28gbG9jayBhY3F1aXNpdGlvbnMsIGFub3RoZXIgdGhyZWFkIGNvdWxkIGhhdmUgbW9kaWZpZWQgdGhlIHN0YXRlLCByZW5kZXJpbmcgdGhlIGluaXRpYWwgY2hlY2sgaW52YWxpZC4gVGhlIGZpeCBpcyBlbGVnYW50OiAgQnkgaW50cm9kdWNpbmcgYSBzaW5nbGUsIGxvbmdlci1saXZlZCBsb2NrIGd1YXJkIChgbGV0IG11dCBndWFyZCA9IHRoaXMuZGF0YS5sb2NrKCk7YCksIHdlIGVuc3VyZSB0aGUgY2hlY2sgYW5kIHRoZSBtb2RpZmljYXRpb24gaGFwcGVuIGF0b21pY2FsbHksIHVuZGVyIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBtdXRleC5cblxuTm93LCBhIGNydWNpYWwgYXNwZWN0IGlzIGRldGVybWluaW5nIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHJpc2sgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gR2l2ZW4gdGhhdCB0aGlzIGlzIFJ1c3QgY29kZSwgYW5kIGl0J3Mgb3BlcmF0aW5nIG9uIHNhZmUgdHlwZXMgKHByaW1pdGl2ZXMsIGVudW1zLCBzdHJ1Y3QgZmllbGRzKSwgUnVzdCBndWFyYW50ZWVzIHRoYXQgYWxsIHZhcmlhYmxlcyBhbmQgc3RydWN0IGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBrZXkgc2FmZWd1YXJkLiBUaGUgcGF0Y2ggaXRzZWxmIG1lcmVseSBhZGp1c3RzIHRoZSBsb2NraW5nIHNjb3BlOyBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGJ1ZmZlcnMsIG9yIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLiAgSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIGludm9sdmVkIGhlcmUuIEtNU0FOLCB3aGljaCB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnksIGlzbid0IGFwcGxpY2FibGUgaW4gdGhpcyBzY2VuYXJpby4gVGhlIGVudGlyZSBsb2dpYyBpcyBjb25maW5lZCB0byBhZGp1c3RpbmcgdGhlIGxvY2tpbmcgc2NvcGUgYW5kIGlzIGEgcHVyZSBjb25jdXJyZW5jeSBmaXguIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhlIHBhdGNoIHNwZWNpZmljYWxseSBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIChUT0NUT1UpIGJ5IGV4dGVuZGluZyB0aGUgbG9jaydzIHNjb3BlLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UgcHJlc2VudCBoZXJlLCBhbmQgdGhlcmVmb3JlIGEgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiAgSSBhbSBjb25maWRlbnQgdGhhdCB0aGUgcHJvcGVydGllcyBmb3IgYHNldC1yZXN1bHRzYCBuZWVkIHRvIGJlIHNldCB3aXRoIGBLTVNBTlJlYXNvbmluZ2AgYW5kIGBOZWVkc0tNU0FOYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY0MCwiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjo0MjoyNS4wODQ1MTI0NloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2NvcGUgaW4gYGRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnNgIGZvciBgRGV2aWNlQ29uZmlnYCBjb25maWdmcyBhdHRyaWJ1dGUgYHN0b3JlYCBoYW5kbGVycy4gUHJldmlvdXNseSwgYHRoaXMuZGF0YS5sb2NrKClgIHdhcyBhY3F1aXJlZCB0byBjaGVjayBgcG93ZXJlZGAgYW5kIHRoZW4gcmUtYWNxdWlyZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9wZW5pbmcgYSByYWNlIHdpbmRvdyAoVE9DVE9VKS4gVGhlIHBhdGNoIGhvbGRzIHRoZSBtdXRleCBsb2NrIGd1YXJkIGFjcm9zcyBib3RoIHRoZSBjaGVjayBhbmQgdGhlIGFzc2lnbm1lbnQuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kvbG9ja2luZyBmaXggaW4gc2FmZSBSdXN0IGNvZGUgYW5kIGRvZXMgbm90IGFsbG9jYXRlLCBjb3B5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBrZXJuZWwgaW5mby1sZWFrcy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzY29wZSBpbiBgZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5yc2AgZm9yIGBEZXZpY2VDb25maWdgIGNvbmZpZ2ZzIGF0dHJpYnV0ZSBgc3RvcmVgIGhhbmRsZXJzLiBQcmV2aW91c2x5LCBgdGhpcy5kYXRhLmxvY2soKWAgd2FzIGFjcXVpcmVkIHRvIGNoZWNrIGBwb3dlcmVkYCBhbmQgdGhlbiByZS1hY3F1aXJlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3BlbmluZyBhIHJhY2Ugd2luZG93IChUT0NUT1UpLiBUaGUgcGF0Y2ggaG9sZHMgdGhlIG11dGV4IGxvY2sgZ3VhcmQgYWNyb3NzIGJvdGggdGhlIGNoZWNrIGFuZCB0aGUgYXNzaWdubWVudC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeS9sb2NraW5nIGZpeCBpbiBzYWZlIFJ1c3QgY29kZSBhbmQgZG9lcyBub3QgYWxsb2NhdGUsIGNvcHksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGtlcm5lbCBpbmZvLWxlYWtzLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxjcj6[1] Phase: Succeeded StartedAt: 2026-09-08 22:42:36 +0000 UTC FinishedAt: 2026-09-08 22:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 22:42:36 +0000 UTC FinishedAt: 2026-09-08 22:42:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2] Phase: Succeeded StartedAt: 2026-09-08 22:42:36 +0000 UTC FinishedAt: 2026-09-09 00:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 22:42:36 +0000 UTC FinishedAt: 2026-09-09 00:07:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c1\u003e\u003e::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c2\u003e\u003e::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c3\u003e\u003e::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c4\u003e\u003e::store","NullBlkDevice::new"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 22:42:36 +0000 UTC FinishedAt: 2026-09-08 22:42:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 22:42:36 +0000 UTC FinishedAt: 2026-09-08 22:42:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowxjcj6/series-workflowxjcj6-convert-artifact-3211895448/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 22:42:46 +0000 UTC FinishedAt: 2026-09-08 22:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 22:42:46 +0000 UTC FinishedAt: 2026-09-08 22:59:28 +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:*c0c67cde-dc15-4bfb-b94b-afd7b1513f47,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-workflowxjcj6/series-workflowxjcj6-convert-artifact-3211895448/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": "e3660fed-dc0e-44b1-a5ca-bf85e3c22a93", "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-workflowxjcj6/series-workflowxjcj6-build-action-497082318/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 22:42:46 +0000 UTC FinishedAt: 2026-09-08 22:59:16 +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:*c0c67cde-dc15-4bfb-b94b-afd7b1513f47,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-workflowxjcj6/series-workflowxjcj6-convert-artifact-3211895448/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": "e3660fed-dc0e-44b1-a5ca-bf85e3c22a93", "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-workflowxjcj6/series-workflowxjcj6-build-action-497082318/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 22:59:28 +0000 UTC FinishedAt: 2026-09-08 22:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 22:59:28 +0000 UTC FinishedAt: 2026-09-08 22:59:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 22:59:28 +0000 UTC FinishedAt: 2026-09-08 22:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 22:59:28 +0000 UTC FinishedAt: 2026-09-08 22:59:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowxjcj6/series-workflowxjcj6-convert-artifact-1930662655/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 22:59:53 +0000 UTC FinishedAt: 2026-09-08 23:01:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 22:59:53 +0000 UTC FinishedAt: 2026-09-08 23:01:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e3660fed-dc0e-44b1-a5ca-bf85e3c22a93,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-workflowxjcj6/series-workflowxjcj6-build-action-497082318/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-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 23:01:46 +0000 UTC FinishedAt: 2026-09-08 23:01:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 23:01:46 +0000 UTC FinishedAt: 2026-09-08 23:01:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 23:01:46 +0000 UTC FinishedAt: 2026-09-08 23:23:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 23:01:46 +0000 UTC FinishedAt: 2026-09-08 23:23:06 +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:*c0c67cde-dc15-4bfb-b94b-afd7b1513f47,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-workflowxjcj6/series-workflowxjcj6-convert-artifact-1930662655/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": "0b80c613-85d4-4141-acc1-bed727a44f22", "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-workflowxjcj6/series-workflowxjcj6-build-action-3475396883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 23:01:46 +0000 UTC FinishedAt: 2026-09-08 23:22:55 +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:*c0c67cde-dc15-4bfb-b94b-afd7b1513f47,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-workflowxjcj6/series-workflowxjcj6-convert-artifact-1930662655/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": "0b80c613-85d4-4141-acc1-bed727a44f22", "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-workflowxjcj6/series-workflowxjcj6-build-action-3475396883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 23:23:06 +0000 UTC FinishedAt: 2026-09-08 23:23:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 23:23:06 +0000 UTC FinishedAt: 2026-09-08 23:23:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 23:23:06 +0000 UTC FinishedAt: 2026-09-08 23:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 23:23:06 +0000 UTC FinishedAt: 2026-09-08 23:25:01 +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:*0b80c613-85d4-4141-acc1-bed727a44f22,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-workflowxjcj6/series-workflowxjcj6-build-action-3475396883/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-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 23:25:11 +0000 UTC FinishedAt: 2026-09-09 00:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 23:25:11 +0000 UTC FinishedAt: 2026-09-09 00:07:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c1\u003e\u003e::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c2\u003e\u003e::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c3\u003e\u003e::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c4\u003e\u003e::store","NullBlkDevice::new"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e3660fed-dc0e-44b1-a5ca-bf85e3c22a93,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0b80c613-85d4-4141-acc1-bed727a44f22,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-workflowxjcj6/series-workflowxjcj6-build-action-497082318/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-workflowxjcj6/series-workflowxjcj6-build-action-3475396883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 23:25:11 +0000 UTC FinishedAt: 2026-09-08 23:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 23:25:11 +0000 UTC FinishedAt: 2026-09-08 23:25:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c1\u003e\u003e::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c2\u003e\u003e::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c3\u003e\u003e::store","\u003crnull_mod::configfs::DeviceConfig as kernel::configfs::AttributeOperations\u003c4\u003e\u003e::store","NullBlkDevice::new"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxjcj6/series-workflowxjcj6-convert-artifact-134289816/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 23:25:11 +0000 UTC FinishedAt: 2026-09-08 23:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 23:25:11 +0000 UTC FinishedAt: 2026-09-08 23:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 23:25:11 +0000 UTC FinishedAt: 2026-09-08 23:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 23:25:21 +0000 UTC FinishedAt: 2026-09-09 00:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxjcj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["DeviceConfig::store",">::store",">::store",">::store",">::store","NullBlkDevice::new"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_RUST_NULL","RUST","CONFIGFS_FS","BLK_DEV","BLOCK"],"series_id":"e68f03e7-09dd-492d-a1fe-97daa55551d0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 23:25:21 +0000 UTC FinishedAt: 2026-09-09 00:07:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e3660fed-dc0e-44b1-a5ca-bf85e3c22a93,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0b80c613-85d4-4141-acc1-bed727a44f22,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-workflowxjcj6/series-workflowxjcj6-build-action-497082318/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-workflowxjcj6/series-workflowxjcj6-build-action-3475396883/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-workflowxjcj6/series-workflowxjcj6-convert-artifact-134289816/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,}