Name: series-workflowtf4dd Phase: Succeeded StartedAt: 2026-08-08 17:10:09 +0000 UTC FinishedAt: 2026-08-08 18:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[0] Phase: Succeeded StartedAt: 2026-08-08 17:10:09 +0000 UTC FinishedAt: 2026-08-08 17:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 17:10:09 +0000 UTC FinishedAt: 2026-08-08 17:40:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "series_id": "2065e4b5-e773-4125-bb58-4d7c727aa7ac" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_ap_mdev_probe", "vfio_ap_on_cfg_changed", "vfio_ap_on_scan_complete" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19hcF9tZGV2X3Byb2JlJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fY2ZnX2NoYW5nZWQmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvY2tpbmcgaXNzdWVzIChsb2NrIG9yZGVyaW5nLCBtaXNzaW5nIGxvY2tzLCBhbmQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb24gYG1hdHJpeF9tZGV2LVx1MDAzZWt2bWApIGluIHRoZSBzMzkwIHZmaW9fYXAgZHJpdmVyLiBJdCBhbHNvIGZpeGVzIGEgbWlub3IgbG9naWMgYnVnIHdpdGggYGRvX3JlbW92ZWAgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBkZWFkbG9ja3MsIHJhY2UgY29uZGl0aW9ucywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgbG9naWMgYW5kIGJpdG1hcCBvcGVyYXRpb25zIGluIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyLiBJdCBmaXhlcyBsb2NrIG9yZGVyaW5nIGJldHdlZW4gYG1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9ja2AsIGBtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrYCwgYW5kIGBtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9ja2AgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyBhbmQgcG90ZW50aWFsIGRlYWRsb2NrcyBkdXJpbmcgbWRldiBwcm9iZSwgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBhbmQgaG90cGx1ZyBldmVudHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZHJpdmVyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBtZGV2IGNyZWF0aW9uIGFuZCBBUCBidXMgY29uZmlndXJhdGlvbiBjYWxsYmFja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MWQ2NTM2MmU2OTEyMzJjNGRkY2M2M2UwOTNmMzQxMmI1ZTE1OGRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAxNzozNzo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLjljNzI1N2MxNzlhN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTgwMyw5ICYjNDM7ODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxuIFx0bWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xuIFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbiBcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGV2LVx1MDAzZWRldiwgbWF0cml4X21kZXYpO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRsaXN0X2FkZChcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vub2RlLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfcHV0X3ZkZXY6XG5AQCAtMjYwMywyOCAmIzQzOzI2MDMsMzUgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLFxuIFx0REVDTEFSRV9CSVRNQVAoYXByZW0sIEFQX0RFVklDRVMpO1xuIFx0REVDTEFSRV9CSVRNQVAoYXFyZW0sIEFQX0RPTUFJTlMpO1xuIFx0REVDTEFSRV9CSVRNQVAoY2RyZW0sIEFQX0RPTUFJTlMpO1xuLVx0aW50IGRvX3JlbW92ZSA9IDA7XG4mIzQzO1x0aW50IGRvX3JlbW92ZTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcbiYjNDM7XHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbiYjNDM7XHRcdCAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbiYjNDM7XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcbi1cdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcbi1cdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuLVx0XHRcdFx0XHQgIEFQX0RFVklDRVMpO1xuJiM0MztcdFx0ZG9fcmVtb3ZlID0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxuJiM0MztcdFx0XHRcdCAgICAgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuJiM0MztcdFx0XHRcdCAgICAgICBBUF9ERVZJQ0VTKTtcbiBcdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXFyZW0sIGFxX3JlbW92ZSxcbiBcdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLFxuIFx0XHRcdFx0XHQgIEFQX0RPTUFJTlMpO1xuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgICAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sXG4tXHRcdFx0XHRcdCAgICAgQVBfRE9NQUlOUyk7XG4mIzQzO1x0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChjZHJlbSwgY2RfcmVtb3ZlLFxuJiM0MztcdFx0XHRcdFx0bWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbiYjNDM7XHRcdFx0XHRcdEFQX0RPTUFJTlMpO1xuIFxuIFx0XHRpZiAoZG9fcmVtb3ZlKVxuIFx0XHRcdHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLFxuIFx0XHRcdFx0XHRcdCAgICBjZHJlbSk7XG4gXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbiYjNDM7XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjc0OSwxMiAmIzQzOzI3NTYsMjAgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbiBcdHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUoYXBtX2FkZCwgYXFtX2FkZCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCBpbiBvcmRlciB0byBhY2Nlc3MgZmllbGRzXG4mIzQzO1x0XHQgKiB3aXRoaW4gbWF0cml4X21kZXZcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuJiM0MztcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sIGFwbV9hZGQsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTtcbiYjNDM7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjgyMSw5ICYjNDM7MjgzNiw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXHRib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXG4gXHRmaWx0ZXJfYWRhcHRlcnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuIFx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUyk7XG4gXHRmaWx0ZXJfZG9tYWlucyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sXG5AQCAtMjg0MSw5ICYjNDM7Mjg1Myw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbiBcbiBcdHJlc2V0X3F1ZXVlc19mb3JfYXBpZHMobWF0cml4X21kZXYsIGFwbV9maWx0ZXJlZCk7XG4tXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gfVxuIFxuIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuQEAgLTI4NTQsMTUgJiM0MzsyODYzLDI5IEBAIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxuJiM0MztcdFx0ICogYW5kIGt2bS1cdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xuJiM0MztcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuJiM0MztcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XG4gXHRcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgQVBfRE9NQUlOUykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCwgQVBfRE9NQUlOUykpXG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdGdvdG8gZG9fdW5sb2NrO1xuIFxuIFx0XHR2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIDAsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLCAwLCBBUF9ET01BSU5TKTtcbiYjNDM7XG4mIzQzO2RvX3VubG9jazpcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuJiM0MztcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbiYjNDM7XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdH1cbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX2FwX21kZXZfcHJvYmUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vbl9jZmdfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBsb2dpYyBhbmQgYml0bWFwIG9wZXJhdGlvbnMgaW4gdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIG1lZGlhdGVkIGRldmljZSBkcml2ZXIuIEl0IGZpeGVzIGxvY2sgb3JkZXJpbmcgYmV0d2VlbiBgbWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrYCwgYG1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2tgLCBhbmQgYG1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrYCB0byBwcmV2ZW50IGxvY2tkZXAgc3BsYXRzIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGR1cmluZyBtZGV2IHByb2JlLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGFuZCBob3RwbHVnIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBkcml2ZXIgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIG1kZXYgY3JlYXRpb24gYW5kIEFQIGJ1cyBjb25maWd1cmF0aW9uIGNhbGxiYWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgxZDY1MzYyZTY5MTIzMmM0ZGRjYzYzZTA5M2YzNDEyYjVlMTU4ZGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDE3OjM3OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCmluZGV4IDQ0YjNhMWRjYzFiMzYuLjljNzI1N2MxNzlhN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKQEAgLTgwMyw5ICYjNDM7ODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCW1hdHJpeF9tZGV2LSZndDtyZXFfdHJpZ2dlciA9IE5VTEw7CiAJbWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlciA9IE5VTEw7CiAJZGV2X3NldF9kcnZkYXRhKCZhbXA7bWRldi0mZ3Q7ZGV2LCBtYXRyaXhfbWRldik7Ci0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCWxpc3RfYWRkKCZhbXA7bWF0cml4X21kZXYtJmd0O25vZGUsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0KTsKLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCXJldHVybiAwOwogCiBlcnJfcHV0X3ZkZXY6CkBAIC0yNjAzLDI4ICYjNDM7MjYwMywzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsCiAJREVDTEFSRV9CSVRNQVAoYXByZW0sIEFQX0RFVklDRVMpOwogCURFQ0xBUkVfQklUTUFQKGFxcmVtLCBBUF9ET01BSU5TKTsKIAlERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7Ci0JaW50IGRvX3JlbW92ZSA9IDA7CiYjNDM7CWludCBkb19yZW1vdmU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCwgbm9kZSkgewotCQltdXRleF9sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LAomIzQzOwkJICogYW5kIGt2bS0mZ3Q7bG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2sKJiM0MzsJCSAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1hdHJpeF9tZGV2LSZndDtrdm0pCiYjNDM7CQkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwogCQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiAKLQkJZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSwKLQkJCQkJICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwKLQkJCQkJICBBUF9ERVZJQ0VTKTsKJiM0MzsJCWRvX3JlbW92ZSA9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSwKJiM0MzsJCQkJICAgICAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtLAomIzQzOwkJCQkgICAgICAgQVBfREVWSUNFUyk7CiAJCWRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGFxcmVtLCBhcV9yZW1vdmUsCiAJCQkJCSAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcW0sCiAJCQkJCSAgQVBfRE9NQUlOUyk7Ci0JCWRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLCBjZF9yZW1vdmUsCi0JCQkJCSAgICAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hZG0sCi0JCQkJCSAgICAgQVBfRE9NQUlOUyk7CiYjNDM7CQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZChjZHJlbSwgY2RfcmVtb3ZlLAomIzQzOwkJCQkJbWF0cml4X21kZXYtJmd0O21hdHJpeC5hZG0sCiYjNDM7CQkJCQlBUF9ET01BSU5TKTsKIAogCQlpZiAoZG9fcmVtb3ZlKQogCQkJdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sCiAJCQkJCQkgICAgY2RyZW0pOwogCiAJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwotCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwogCX0KIH0KIApAQCAtMjc0OSwxMiAmIzQzOzI3NTYsMjAgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCwKIAl2ZmlvX2FwX2ZpbHRlcl9hcGlkX2J5X3F0eXBlKGFwbV9hZGQsIGFxbV9hZGQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgaW4gb3JkZXIgdG8gYWNjZXNzIGZpZWxkcwomIzQzOwkJICogd2l0aGluIG1hdHJpeF9tZGV2CiYjNDM7CQkgKi8KJiM0MzsJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsKIAkJYml0bWFwX2FuZChtYXRyaXhfbWRldi0mZ3Q7YXBtX2FkZCwKIAkJCSAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtLCBhcG1fYWRkLCBBUF9ERVZJQ0VTKTsKIAkJYml0bWFwX2FuZChtYXRyaXhfbWRldi0mZ3Q7YXFtX2FkZCwKIAkJCSAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTsKIAkJYml0bWFwX2FuZChtYXRyaXhfbWRldi0mZ3Q7YWRtX2FkZCwKIAkJCSAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTsKJiM0MzsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCX0KIH0KIApAQCAtMjgyMSw5ICYjNDM7MjgzNiw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldikKIAlERUNMQVJFX0JJVE1BUChhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpOwogCWJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7CiAKLQltdXRleF9sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7Ci0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwotCiAJZmlsdGVyX2FkYXB0ZXJzID0gYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O21hdHJpeC5hcG0sCiAJCQkJCSAgICBtYXRyaXhfbWRldi0mZ3Q7YXBtX2FkZCwgQVBfREVWSUNFUyk7CiAJZmlsdGVyX2RvbWFpbnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwKQEAgLTI4NDEsOSAmIzQzOzI4NTMsNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpCiAJCXZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihtYXRyaXhfbWRldik7CiAKIAlyZXNldF9xdWV1ZXNfZm9yX2FwaWRzKG1hdHJpeF9tZGV2LCBhcG1fZmlsdGVyZWQpOwotCi0JbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiB9CiAKIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLApAQCAtMjg1NCwxNSAmIzQzOzI4NjMsMjkgQEAgdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sCiAJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LAomIzQzOwkJICogYW5kIGt2bS0mZ3Q7bG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2sKJiM0MzsJCSAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1hdHJpeF9tZGV2LSZndDtrdm0pCiYjNDM7CQkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwogCQlpZiAoYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LSZndDthcG1fYWRkLCBBUF9ERVZJQ0VTKSAmYW1wOyZhbXA7CiAJCSAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsIEFQX0RPTUFJTlMpICZhbXA7JmFtcDsKIAkJICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi0mZ3Q7YWRtX2FkZCwgQVBfRE9NQUlOUykpCi0JCQljb250aW51ZTsKJiM0MzsJCQlnb3RvIGRvX3VubG9jazsKIAogCQl2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTsKIAkJYml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LSZndDthcG1fYWRkLCAwLCBBUF9ERVZJQ0VTKTsKIAkJYml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LSZndDthcW1fYWRkLCAwLCBBUF9ET01BSU5TKTsKIAkJYml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LSZndDthZG1fYWRkLCAwLCBBUF9ET01BSU5TKTsKJiM0MzsKJiM0Mztkb191bmxvY2s6CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwogCX0KIAogCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWRklPLUFQIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBsb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLiBSaWdodCBhd2F5LCBJIGtub3cgdGhpcyBpcyBhbiBzMzkwLXNwZWNpZmljIGRyaXZlciBkZWFsaW5nIHdpdGggVkZJTyBBUCBkZXZpY2VzLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBBZGp1bmN0IFByb2Nlc3NvciwgSUJNJiMzOTtzIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3IsIHdoaWNoIGlzIHByZXR0eSBuaWNoZSBhbmQgaGFyZHdhcmUtZGVwZW5kZW50LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgbG9ja2luZyBtZWNoYW5pc21zIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyB3aXRoaW4gc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCwgYW5kIGEgZmV3IG1vcmUgcmVsYXRlZCB0byBjb25maWd1cmF0aW9uIGFuZCBob3QtcGx1Z2dpbmcuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyByZWFjaGFiaWxpdHkuIElzIHRoaXMgY29kZSBldmVuICpleGVyY2lzYWJsZSogaW4gdHlwaWNhbCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBlbnZpcm9ubWVudHM/IFMzOTAgY29kZSBvZnRlbiBpc24mIzM5O3QgZnV6emVkIG9uIHN0YW5kYXJkIHg4Nl82NCBWTXMgdW5sZXNzIHdlIGFyZSBzcGVjaWZpY2FsbHkgcnVubmluZyBzMzkweCB2aXJ0dWFsIG1hY2hpbmVzLiBXZSBrbm93IFN5emthbGxlciBoYXMgc29tZSBzMzkweCBzdXBwb3J0LCBidXQgSSByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhpcyBkcml2ZXIgaGFzIHNvbWUgaGFyZHdhcmUgZGVwZW5kZW5jeSAtIGkuZS4gQVAgZGV2aWNlcy4gU2luY2UgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGFuIEFkanVuY3QgUHJvY2Vzc29yLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IG1pZ2h0IGJlLiBUaGlzIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3IsIGFmdGVyIGFsbCwgaXNuJiMzOTt0IHNvbWV0aGluZyBlYXNpbHkgZW11bGF0ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgdG8gY29uZmlndXJlIFFFTVUgdG8gZW11bGF0ZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlLgoKU28sIGZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIHByb2JhYmx5IGBkcml2ZXJzL3MzOTAvY3J5cHRvL0tjb25maWdgLCBvciBzb21ld2hlcmUgc2ltaWxhciwgdG8gc2VlIHdoYXQgZGVwZW5kZW5jaWVzIHRoaXMgbW9kdWxlIGhhcy4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgY2x1ZSBvbiB3aGV0aGVyIEkgY2FuIHRlc3QgdGhpcyB3aXRoaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGluIHRoZSBmaXJzdCBwZXJzb24sIHJlZmxlY3RpbmcgdGhlIGdpdmVuIHRob3VnaHQ6CgoqKlF1aWNrIEtjb25maWcgU2NhbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3V0IHRvIHRoZSBjaGFzZSBhbmQgemVybyBpbiBvbiB3aGF0JiMzOTtzIHJlbGV2YW50LiBJbnN0ZWFkIG9mIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gZXh0cmFuZW91cyBkZXRhaWxzIHJpZ2h0IG5vdywgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBqdXN0IGp1bXAgc3RyYWlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBkbyBhIHF1aWNrIHNlYXJjaC4gVGhlIHNwZWNpZmljIGtleXdvcmQgSSYjMzk7bGwgc3RhcnQgd2l0aCBpcyBgVkZJT19BUGAuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBxdWlja2x5IGZpbmQgdGhlIFZGSU8gQWNjZWxlcmF0ZWQgUHJvY2Vzc2luZyBjb25maWd1cmF0aW9ucy4gTm8gbmVlZCB0byBnbyBodW50aW5nIGFyb3VuZCBibGluZGx5LCBsZXQmIzM5O3Mga2VlcCB0aGlzIGZvY3VzZWQgYW5kIGVmZmljaWVudC4gSSYjMzk7bSBhZnRlciB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBhY2NlbGVyYXRlZCBwcm9jZXNzaW5nIHdpdGhpbiBWRklPLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnPTgyMz1jb25maWcgVkZJT19DQ1dcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXG5hcmNoL3MzOTAvS2NvbmZpZzo4MzQ6Y29uZmlnIFZGSU9fQVBcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cdGRlZl90cmlzdGF0ZSBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBWRklPX0FQIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIFZGSU9fQVAg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmb3VuZGF0aW9uYWwgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBkcmlsbCBkb3duIGFuZCB1bmNvdmVyIGl0cyBkZXBlbmRlbmNpZXMuIFdlIGFyZSBub3QganVzdCB0YWxraW5nIGFib3V0IHRoZSBvYnZpb3VzIGxpYnJhcmllcyBoZXJlLCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgZW50aXJlIGRlcGVuZGVuY3kgdHJlZS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycyBpbnZvbHZlZDogV2hhdCBrZXJuZWwgbW9kdWxlcyBkb2VzIGl0IHJlbHkgb24/IFdoaWNoIHVzZXJzcGFjZSBjb21wb25lbnRzIGFyZSBlc3NlbnRpYWw/IEFuZCBkb24mIzM5O3QgZm9yZ2V0IHRoZSBoYXJkd2FyZSBpdHNlbGYg4oCTIHdoaWNoIHNwZWNpZmljIGRldmljZSBmZWF0dXJlcywgYW5kIGFueSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLCBhcmUgYXNzdW1lZD8gSXQgaXMgbGlrZWx5IHRoYXQgdGhpcyBkZXZpY2UgYWNjZXNzIGlzIHVzaW5nIHNvbWUgb2YgdGhlIGNvcmUgVkZJTyBmcmFtZXdvcmssIGJ1dCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBhbGwgcmVxdWlyZW1lbnRzIHRvIHVzZSBWRklPX0FQLgoKSSBhbHNvIHdhbnQgdG8gY29uc2lkZXIgdGhlIGNvbnRleHQuIElzIHRoaXMgYSBuZXcgaW1wbGVtZW50YXRpb24/IEEgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIHN5c3RlbT8gV2hhdCB1c2UtY2FzZXMgaXMgaXQgZGVzaWduZWQgdG8gc3VwcG9ydD8gVGhpcyB3aWxsIHN0cm9uZ2x5IGltcGFjdCB0aGUgc2lnbmlmaWNhbmNlIG9mIGVhY2ggZGVwZW5kZW5jeSBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgSSBuZWVkIHRvIGF1ZGl0IGZvciB0aGUgZ29hbCBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBtb3RpdmF0aW9uIGZvciBpdHMgZGVzaWduIGlzIGltcG9ydGFudCBoZXJlLgoKSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMsIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlLCBhbmQgcGVyaGFwcyBldmVuIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gKGlmIGl0JiMzOTtzIGdvb2QsIHRoYXQgaXMhKS4gSXQgaXMgdW5saWtlbHkgdGhhdCBpdCB3aWxsIGJlIGEgc2ltcGxlIGxpbmVhciBoaWVyYXJjaHksIEkgZXhwZWN0IGEgZGVncmVlIG9mIGNvbXBsZXhpdHkgd2l0aCBpbnRlcmZhY2VzIHRvIGhhcmR3YXJlIGZlYXR1cmVzIGFuZCBvdGhlciBzeXN0ZW0gZnVuY3Rpb25zLiBJIHdpbGwgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIG9idmlvdXMgZWxlbWVudHMsIGFuZCB0aGVuIGRpZyBpbnRvIGhvdyB0aGV5IGFyZSBsaW5rZWQsIGFuZCB3aGljaCBmdW5jdGlvbnMgZGVwZW5kIG9uIHdoaWNoLiBUaGF0IGlzIHdoZXJlIHRoZSBkZXZpbCB3aWxsIGJlIGx1cmtpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHZlcnNpb25pbmcgaXNzdWVzLCBjb25mbGljdHMsIGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgYnkgdGhlc2UgZGVwZW5kZW5jaWVzLCB0b28uIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gYSBsYXJnZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODMwOlx0XG4gODMxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDgzMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmZpb19jY3cuXG4gODMzOlx0XG4gODM0Olx0Y29uZmlnIFZGSU9fQVBcbiA4MzU6XHRcdGRlZl90cmlzdGF0ZSBuXG4gODM2Olx0XHRwcm9tcHQgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBBUCBkZXZpY2VzXCYjMzQ7XG4gODM3Olx0XHRkZXBlbmRzIG9uIEtWTVxuIDgzODpcdFx0ZGVwZW5kcyBvbiBWRklPXG4gODM5Olx0XHRkZXBlbmRzIG9uIEFQXG4gODQwOlx0XHRzZWxlY3QgVkZJT19NREVWXG4gODQxOlx0XHRoZWxwXG4gODQyOlx0XHQgIFRoaXMgZHJpdmVyIGdyYW50cyBhY2Nlc3MgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzXG4gODQzOlx0XHQgIHZpYSB0aGUgVkZJTyBtZWRpYXRlZCBkZXZpY2UgaW50ZXJmYWNlLlxuIDg0NDpcdFxuIDg0NTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gODQ2Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHZmaW9fYXAuXG4gODQ3Olx0XG4gODQ4Olx0ZW5kbWVudVxuIDg0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQXNzZXNzbWVudCBvZiBBcHBsaWNhdGlvbiBQZXJmb3JtYW5jZSAoQVApIGFzIGEgS2V5IEZhY3RvcioqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgdGhpbmtpbmcgaW1tZWRpYXRlbHkgaGluZ2VzIG9uIHRoZSBhcHBsaWNhdGlvbiBwZXJmb3JtYW5jZSwgb3IgQVAgYXMgd2UgY2FsbCBpdC4gRXZlcnl0aGluZyBoZXJlICpkZXBlbmRzKiBvbiBBUC4gSXTigJlzIHRoZSBsaW5jaHBpbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBzeXN0ZW0sIGEgcHJvY2VzcywgYSBwcm9ibGVt4oCmIGFuZCB0aGUgKmZpcnN0KiB0aGluZyBJIG5lZWQgdG8gZXN0YWJsaXNoIGlzIHRoZSBzdGF0ZSBvZiBBUC4gSXTigJlzIHRoZSBjcml0aWNhbCB2YXJpYWJsZS4gU28sIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBiZWZvcmUgc3BlY3VsYXRpbmcgb24gcm9vdCBjYXVzZXMgb3IgcG90ZW50aWFsIHNvbHV0aW9ucywgbXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OiB3aGF0IG1ldHJpY3MgZG8gSSBuZWVkPyBXaGVyZeKAmXMgdGhlIG1vbml0b3JpbmcgZGF0YT8gV2hhdOKAmXMgdGhlIGJhc2VsaW5lIEFQIGJlaGF2aW9yPyBHb3R0YSBjaGVjayBBUCBmaXJzdC4gR290dGEgdW5kZXJzdGFuZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3Q9Mjg3PXRvIGluaXRyZCBpbWFnZSwgdXNlciBjYW4gbm90aWNlIGl0IGJlZm9yZSBib290LlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QtMjg5LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdDoyOTA6Qm9vdGNvbmZpZyBBUElzXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0LTI5MS09PT09PT09PT09PT09PT1cbi0tXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lPTI5PWNvbmZpZyBNQUNcbi0tXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lLTQwLVxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZTo0MTpjb25maWcgQVBPTExPXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lLTQyLVx0Ym9vbCBcJiMzNDtBcG9sbG8gc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc9MjkxPWNvbmZpZyA0NzZGUEVcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnLTI5NC1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc6Mjk1OmNvbmZpZyBBUE04MjF4eFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZy0yOTYtXHRib29sXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9Nzg1PWNvbmZpZyBFQURNX1NDSFxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTc5NS1cbmFyY2gvczM5MC9LY29uZmlnOjc5Njpjb25maWcgQVBcbmFyY2gvczM5MC9LY29uZmlnLTc5Ny1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctODA4LVxuYXJjaC9zMzkwL0tjb25maWc6ODA5OmNvbmZpZyBBUF9ERUJVR1xuYXJjaC9zMzkwL0tjb25maWctODEwLVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTg4NT1jb25maWcgQ01NX0lVQ1Zcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04OTItXG5hcmNoL3MzOTAvS2NvbmZpZzo4OTM6Y29uZmlnIEFQUExEQVRBX0JBU0VcbmFyY2gvczM5MC9LY29uZmlnLTg5NC1cdGRlZl9ib29sIG5cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy05MDgtXG5hcmNoL3MzOTAvS2NvbmZpZzo5MDk6Y29uZmlnIEFQUExEQVRBX01FTVxuYXJjaC9zMzkwL0tjb25maWctOTEwLVx0ZGVmX3RyaXN0YXRlIG1cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy05MjUtXG5hcmNoL3MzOTAvS2NvbmZpZzo5MjY6Y29uZmlnIEFQUExEQVRBX09TXG5hcmNoL3MzOTAvS2NvbmZpZy05MjctXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTk0MC1cbmFyY2gvczM5MC9LY29uZmlnOjk0MTpjb25maWcgQVBQTERBVEFfTkVUX1NVTVxuYXJjaC9zMzkwL0tjb25maWctOTQyLVx0ZGVmX3RyaXN0YXRlIG1cbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTI3NDE9Y29uZmlnIFg4Nl9BUE1fQk9PVFxuLS1cbmFyY2gveDg2L0tjb25maWctMjc0NC1cbmFyY2gveDg2L0tjb25maWc6Mjc0NTptZW51Y29uZmlnIEFQTVxuYXJjaC94ODYvS2NvbmZpZy0yNzQ2LVx0dHJpc3RhdGUgXCYjMzQ7QVBNIChBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50KSBCSU9TIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTI3OTk9aWYgQVBNXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDAtXG5hcmNoL3g4Ni9LY29uZmlnOjI4MDE6Y29uZmlnIEFQTV9JR05PUkVfVVNFUl9TVVNQRU5EXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDItXHRib29sIFwmIzM0O0lnbm9yZSBVU0VSIFNVU1BFTkRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDctXG5hcmNoL3g4Ni9LY29uZmlnOjI4MDg6Y29uZmlnIEFQTV9ET19FTkFCTEVcbmFyY2gveDg2L0tjb25maWctMjgwOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIFBNIGF0IGJvb3QgdGltZVwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMjgyNC1cbmFyY2gveDg2L0tjb25maWc6MjgyNTpjb25maWcgQVBNX0NQVV9JRExFXG5hcmNoL3g4Ni9LY29uZmlnLTI4MjYtXHRkZXBlbmRzIG9uIENQVV9JRExFXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yODM2LVxuYXJjaC94ODYvS2NvbmZpZzoyODM3OmNvbmZpZyBBUE1fRElTUExBWV9CTEFOS1xuYXJjaC94ODYvS2NvbmZpZy0yODM4LVx0Ym9vbCBcJiMzNDtFbmFibGUgY29uc29sZSBibGFua2luZyB1c2luZyBBUE1cJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI4NDktXG5hcmNoL3g4Ni9LY29uZmlnOjI4NTA6Y29uZmlnIEFQTV9BTExPV19JTlRTXG5hcmNoL3g4Ni9LY29uZmlnLTI4NTEtXHRib29sIFwmIzM0O0FsbG93IGludGVycnVwdHMgZHVyaW5nIEFQTSBCSU9TIGNhbGxzXCYjMzQ7XG4tLVxuZHJpdmVycy9jaGFyL0tjb25maWc9MjEzPWNvbmZpZyBYSUxJTlhfSFdJQ0FQXG4tLVxuZHJpdmVycy9jaGFyL0tjb25maWctMjIyLVxuZHJpdmVycy9jaGFyL0tjb25maWc6MjIzOmNvbmZpZyBBUFBMSUNPTVxuZHJpdmVycy9jaGFyL0tjb25maWctMjI0LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGljb20gaW50ZWxsaWdlbnQgZmllbGRidXMgY2FyZCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnPTI5MD1jb25maWcgUUNPTV9DTEtfUlBNSFxuLS1cbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy0yOTgtXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6Mjk5OmNvbmZpZyBBUFFfR0NDXzgwODRcbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy0zMDAtXHR0cmlzdGF0ZSBcJiMzNDtBUFE4MDg0IEdsb2JhbCBDbG9jayBDb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwNy1cbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZzozMDg6Y29uZmlnIEFQUV9NTUNDXzgwODRcbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy0zMDktXHR0cmlzdGF0ZSBcJiMzNDtBUFE4MDg0IE11bHRpbWVkaWEgQ2xvY2sgQ29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvZG1hL0tjb25maWc9Nzg9Y29uZmlnIEFNQ0NfUFBDNDQwU1BFX0FETUFcbi0tXG5kcml2ZXJzL2RtYS9LY29uZmlnLTg3LVxuZHJpdmVycy9kbWEvS2NvbmZpZzo4ODpjb25maWcgQVBQTEVfQURNQUNcbmRyaXZlcnMvZG1hL0tjb25maWctODktXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBBRE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZz0xNTQ9Y29uZmlnIEVGSV9ERVZfUEFUSF9QQVJTRVJcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTE1Ni1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc6MTU3OmNvbmZpZyBBUFBMRV9QUk9QRVJUSUVTXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7QXBwbGUgRGV2aWNlIFByb3BlcnRpZXNcJiMzNDtcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnPTY2PWNvbmZpZyBBTDMzMjBBXG4tLVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy03NS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc6NzY6Y29uZmlnIEFQRFM5MTYwXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTc3LVx0dHJpc3RhdGUgXCYjMzQ7QVBEUzkxNjAgY29tYmluZWQgYWxzIGFuZCBwcm94aW1pdHkgc2Vuc29yXCYjMzQ7XG4tLVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy04Ni1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc6ODc6Y29uZmlnIEFQRFM5MzAwXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7QVBEUzkzMDAgYW1iaWVudCBsaWdodCBzZW5zb3JcJiMzNDtcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTk2LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo5Nzpjb25maWcgQVBEUzkzMDZcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTgtXHR0cmlzdGF0ZSBcJiMzNDtBdmFnbyBBUERTOTMwNiBBbWJpZW50IExpZ2h0IFNlbnNvclwmIzM0O1xuLS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTA4LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzoxMDk6Y29uZmlnIEFQRFM5OTYwXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTExMC1cdHRyaXN0YXRlIFwmIzM0O0F2YWdvIEFQRFM5OTYwIGdlc3R1cmUvUkdCL0FMUy9wcm94aW1pdHkgc2Vuc29yXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9LY29uZmlnPTI5Nj1jb25maWcgU1BBUFJfVENFX0lPTU1VXG4tLVxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwMy1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzozMDQ6Y29uZmlnIEFQUExFX0RBUlRcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0zMDUtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBEQVJUIElPTU1VIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZz03ODg9Y29uZmlnIElSUV9JRFQzMjQzWFxuLS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5Mi1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnOjc5Mzpjb25maWcgQVBQTEVfQUlDXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZy03OTQtXHRib29sIFwmIzM0O0FwcGxlIEludGVycnVwdCBDb250cm9sbGVyIChBSUMpXCYjMzQ7XG4tLVxuZHJpdmVycy9taXNjL0tjb25maWc9MzI3PWNvbmZpZyBTR0lfR1JVX0RFQlVHXG4tLVxuZHJpdmVycy9taXNjL0tjb25maWctMzMzLVxuZHJpdmVycy9taXNjL0tjb25maWc6MzM0OmNvbmZpZyBBUERTOTgwMkFMU1xuZHJpdmVycy9taXNjL0tjb25maWctMzM1LVx0dHJpc3RhdGUgXCYjMzQ7TWVkZmllbGQgQXZhZ28gQVBEUzk4MDIgQUxTIFNlbnNvciBtb2R1bGVcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWc9MTA2PWNvbmZpZyBORTJLX1BDSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWc6MTI0OmNvbmZpZyBBUE5FXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTI1LVx0dHJpc3RhdGUgXCYjMzQ7UENNQ0lBIE5FMjAwMCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYz0zMzIwPXN0YXRpYyBpbnQgcnR3ODlfcGNpX2NmZ19kYWMoc3RydWN0IHJ0dzg5X2RldiAqcnR3ZGV2LCBib29sIGZvcmNlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmMtMzMzMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmM6MzMzMzpcdC8qIENvbmZpZ3VyZSBEQUMgb25seSB2aWEgUENJIGNvbmZpZyBBUEksIG5vdCBEQkkgaW50ZXJmYWNlcyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzM0LVx0cmV0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUlRXODlfUENJRV9MMV9DVFJMLCBcdTAwMjZ2YWwpO1xuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI1Mz1jb25maWcgTUFSVkVMTF9DTjEwS19UQURfUE1VXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWctMjU5LVxuZHJpdmVycy9wZXJmL0tjb25maWc6MjYwOmNvbmZpZyBBUFBMRV9NMV9DUFVfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNjEtXHRib29sIFwmIzM0O0FwcGxlIE0xIENQVSBQTVUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWc9MTk0PWNvbmZpZyBBRFZfU1dCVVRUT05cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnLTIwNC1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWc6MjA1OmNvbmZpZyBBUFBMRV9HTVVYXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnLTIwNi1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEdtdXggRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnPTM9aWYgQVJDSF9BUFBMRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvcG1kb21haW4vYXBwbGUvS2NvbmZpZy00LVxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnOjU6Y29uZmlnIEFQUExFX1BNR1JfUFdSU1RBVEVcbmRyaXZlcnMvcG1kb21haW4vYXBwbGUvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtBcHBsZSBTb0MgUE1HUiBwb3dlciBzdGF0ZSBjb250cm9sXCYjMzQ7XG4tLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZz0xOD1jb25maWcgUE9XRVJfU1VQUExZX0hXTU9OXG4tLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZy0zMC1cbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc6MzE6Y29uZmlnIEFQTV9QT1dFUlxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O0FQTSBlbXVsYXRpb24gZm9yIGNsYXNzIGJhdHRlcmllc1wmIzM0O1xuLS1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc9NT1tZW51IFwmIzM0O0FwcGxlIFNvQyBkcml2ZXJzXCYjMzQ7XG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTYtXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjc6Y29uZmlnIEFQUExFX01BSUxCT1hcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctOC1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNvQyBtYWlsYm94ZXNcJiMzNDtcbi0tXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTE4LVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzoxOTpjb25maWcgQVBQTEVfUlRLSVRcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBSVEtpdCBjby1wcm9jZXNzb3IgSVBDIHByb3RvY29sXCYjMzQ7XG4tLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0zMC1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6MzE6Y29uZmlnIEFQUExFX1NBUlRcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBTQVJUIERNQSBhZGRyZXNzIGZpbHRlclwmIzM0O1xuLS1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDAtXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjQxOmNvbmZpZyBBUFBMRV9UVU5BQkxFXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTQyLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc9MTQ3PWNvbmZpZyBVU0JfUUNPTV9FVURcbi0tXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWctMTU4LVxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnOjE1OTpjb25maWcgQVBQTEVfTUZJX0ZBU1RDSEFSR0VcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNjAtXHR0cmlzdGF0ZSBcJiMzNDtGYXN0IGNoYXJnZSBjb250cm9sIGZvciBpT1MgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmlkZW8vS2NvbmZpZz02PW1lbnUgXCYjMzQ7R3JhcGhpY3Mgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy92aWRlby9LY29uZmlnLTctXG5kcml2ZXJzL3ZpZGVvL0tjb25maWc6ODpjb25maWcgQVBFUlRVUkVfSEVMUEVSU1xuZHJpdmVycy92aWRlby9LY29uZmlnLTktXHRib29sXG4tLVxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnPTExMTE9Y29uZmlnIE1TQzMxM0VfV0FUQ0hET0dcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyMi1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZzoxMTIzOmNvbmZpZyBBUFBMRV9XQVRDSERPR1xuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTExMjQtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBTb0Mgd2F0Y2hkb2dcJiMzNDtcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9MTY1Mj14ZnNfZnNfZmlsbF9zdXBlcihcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmMtMTY2NC1cdCAqIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIGNvbXBsZXRlZCBieSBlaXRoZXIgdGhlIG9sZCBtb3VudCBBUEkgb3JcbmZzL3hmcy94ZnNfc3VwZXIuYzoxNjY1Olx0ICogdGhlIG5ld2VyIGZzb3Blbi9mc2NvbmZpZyBBUEkuXG5mcy94ZnMveGZzX3N1cGVyLmMtMTY2Ni1cdCAqL1xuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnPTMxMD1jb25maWcgUE1fVFJBQ0VfUlRDXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMzI3LVxua2VybmVsL3Bvd2VyL0tjb25maWc6MzI4OmNvbmZpZyBBUE1fRU1VTEFUSU9OXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zMjktXHR0cmlzdGF0ZSBcJiMzNDtBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IEVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIEFQIChBcHBsaWNhdGlvbiBQcm9jZXNzb3IpIFN1cHBvcnQgaW4gczM5MCBBcmNoaXRlY3R1cmUqKgoKUmlnaHQsIHNvIEkgc2VlIGBjb25maWcgQVBgIGlzIGRlZmluZWQgaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCBpdCwgZ2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhhdCBjb25maWcgb3B0aW9uLiBMZXQgbWUganVtcCBpbnRvIGBhcmNoL3MzOTAvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDc5Ni4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCBmb3IgdW5kZXJzdGFuZGluZyB0aGVzZSBzb3J0cyBvZiBmZWF0dXJlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZXBlbmRlbmN5IGRlZmluaXRpb25zLCBtYXliZSBzb21lIGRlZmF1bHRzLCBhbmQgaG9wZWZ1bGx5IHNvbWUgZ29vZCBjb21tZW50cyB0byBjbGFyaWZ5IGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgczM5MCBrZXJuZWwgYnVpbGQuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IEFQIHN1cHBvcnQgaXMgY29uZmlndXJlZCBhbmQgd2hhdCBpdCBlbmFibGVzIChvciBkaXNhYmxlcykgaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIEVBRE0gc3ViY2hhbm5lbHMuIEVBRE0gc3ViY2hhbm5lbHMgYWN0XG4gNzkxOlx0XHQgIGFzIGEgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIGZvciBTQ00gaW5jcmVtZW50cy5cbiA3OTI6XHRcbiA3OTM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNzk0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlYWRtX3NjaC5cbiA3OTU6XHRcbiA3OTY6XHRjb25maWcgQVBcbiA3OTc6XHRcdGRlZl90cmlzdGF0ZSB5XG4gNzk4Olx0XHRwcm9tcHQgXCYjMzQ7U3VwcG9ydCBmb3IgQWRqdW5jdCBQcm9jZXNzb3JzIChhcClcJiMzNDtcbiA3OTk6XHRcdGhlbHBcbiA4MDA6XHRcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIHRvIEFkanVuY3QgUHJvY2Vzc29yIChBUCkgZGV2aWNlcyB2aWFcbiA4MDE6XHRcdCAgdGhlIGFwIGJ1cywgY2FyZHMgYW5kIHF1ZXVlcy4gU3VwcG9ydGVkIEFkanVuY3QgUHJvY2Vzc29ycyBhcmVcbiA4MDI6XHRcdCAgdGhlIENyeXB0b0V4cHJlc3MgQ2FyZHMgKENFWCkuXG4gODAzOlx0XG4gODA0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDgwNTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXAuXG4gODA2Olx0XG4gODA3Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkgKGRlZmF1bHQpLlxuIDgwODpcdFxuIDgwOTpcdGNvbmZpZyBBUF9ERUJVR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTY4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byBDcnlwdG9FeHByZXNzIENhcmQgRW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIENyeXB0b0V4cHJlc3MgQ2FyZHMsIHRoZXNlIENFWCBkZXZpY2VzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGhhcmR3YXJlIGlzIGVtdWxhdGVkIHdpdGhpbiBRRU1VLiBJdCYjMzk7cyBhIGtleSBxdWVzdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IHRlc3RpbmcgYW5kIGRldmVsb3BtZW50LiBJIG5lZWQgdG8gc2VlIGlmIFFFTVUgcHJvdmlkZXMgYW55IEFQIGRldmljZSBlbXVsYXRpb24uIEkgc2VlbSB0byByZWNhbGwgdGhhdCBzeXprYWxsZXIgaGFzIHNvbWUgczM5MHggc3VwcG9ydCwgd2hpY2ggY291bGQgYmUgaGVscGZ1bCwgYnV0IHRoYXQgZG9lc24mIzM5O3QgbmVjZXNzYXJpbHkgbWVhbiBpdCBlbXVsYXRlcyBBUCBkZXZpY2VzLgoKQWgsIHJpZ2h0LCBWRklPIEFQLiBJdCYjMzk7cyBjbGlja2luZyBub3cuIEl0JiMzOTtzIGEgbWVkaWF0ZWQgZGV2aWNlLCBhbiBtZGV2IGRyaXZlci4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gU28sIHRoZSBrZXkgaXMgdG8gc2VlIGlmIEkgY2FuIHJlYWNoIGB2ZmlvX2FwX21kZXZfcHJvYmVgLiBUaGF0JiMzOTtzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhpcyBtZWRpYXRlZCBkZXZpY2UuIE1lZGlhdGVkIGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCB3aGljaCBpcyBncmVhdC4KCk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MsIEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHNob3VsZCBmaW5kIG91dCBob3cgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgY29ubmVjdGVkIHRvIHRoZSB3aG9sZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz01OD1zdGF0aWMgc3RydWN0IGFwX2RyaXZlciB2ZmlvX2FwX2RydiA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy02MC1cdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03NzY9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfaW5pdF9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NzkwOnN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTEte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzc0PXN0YXRpYyBzdHJ1Y3QgbWRldl9kcml2ZXIgdmZpb19hcF9tYXRyaXhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzgyLVx0fSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzgzOlx0LnByb2JlID0gdmZpb19hcF9tZGV2X3Byb2JlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODQtXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjQxMD12b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQxNjppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MTcte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTU2PXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTU4OmludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqcXVldWUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTktdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipNeSBVbmRlcnN0YW5kaW5nIG9mIHRoZSB2ZmlvX2FwX21hdHJpeF9kcml2ZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB2ZmlvX2FwX21hdHJpeF9kcml2ZXJgLCBhbmQgaXQmIzM5O3MgY3J5c3RhbCBjbGVhciB0aGF0IHRoaXMgaXMgYW4gYG1kZXZfZHJpdmVyYCwgYSBkcml2ZXIgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBtZWRpYXRlZCBkZXZpY2VzLiBUaGUgY29yZSBjb25jZXB0IGluc3RhbnRseSBjbGlja3MgLSBpZiB5b3Ugd2FudCB0byBpbnN0YW50aWF0ZSBhbiBtZGV2LCB5b3UgZnVuZGFtZW50YWxseSBuZWVkIGl0cyBwYXJlbnQgZGV2aWNlLiBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggZXZlcnl0aGluZyBlbHNlIGlzIGJ1aWx0LgoKTm93LCB3aGVyZSBkbyB3ZSBmaW5kIHRoZXNlIHBhcmVudCBkZXZpY2VzPyBBaCwgeWVzLCB0aGV5JiMzOTtyZSBiZWluZyByZWdpc3RlcmVkIHdpdGhpbiBlaXRoZXIgYHZmaW9fYXBfZHJ2LmNgIG9yIHBvdGVudGlhbGx5IGB2ZmlvX2FwX29wcy5jYC4gU28gdGhhdCYjMzk7cyB0aGUgbG9jYXRpb24gb2YgdGhlIHZpdGFsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kZXZfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzODc9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzkwLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzOTE6XHRyZXQgPSBtZGV2X3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kcml2ZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTItXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTExMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBQYXJlbnQgRGV2aWNlIENyZWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBwYXJlbnQgZGV2aWNlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCBpdHMgY3JlYXRpb24gcG9pbnQuIFdoZXJlLCBpbiB0aGUgY29kZWJhc2UsIGlzIHRoYXQgaW5zdGFudGlhdGlvbiBhY3R1YWxseSBoYXBwZW5pbmc/IElzIGl0IGRpcmVjdGx5IGluIGEgY29uZmlndXJhdGlvbiBmaWxlPyBJcyB0aGVyZSBzb21lIGZhY3RvcnkgcGF0dGVybiBpbnZvbHZlZD8gQW0gSSBsb29raW5nIGF0IGEgZGlyZWN0IGBuZXdgIGNhbGwsIG9yIHNvbWV0aGluZyBtb3JlIGFic3RyYWN0ZWQgYmVoaW5kIGEgYnVpbGRlciBvciBkZXBlbmRlbmN5IGluamVjdGlvbiBmcmFtZXdvcms/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSByZWxldmFudCBtb2R1bGVzLCBzdGFydGluZyB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGxvYWRpbmcgYW5kIHNldHVwIHJvdXRpbmVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBrZXl3b3JkcyBsaWtlICYjMzQ7bmV3LCYjMzQ7ICYjMzQ7Y3JlYXRlLCYjMzQ7ICYjMzQ7aW5pdGlhbGl6ZSwmIzM0OyBvciBhbnl0aGluZyBzdWdnZXN0aXZlIG9mIG9iamVjdCBjb25zdHJ1Y3Rpb24gcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIGRldmljZSB0eXBlLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGggY2xvc2VseSwgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGNyZWF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBvcmlnaW4gcG9pbnQgaXMgY3J1Y2lhbCBiZWZvcmUgY29uc2lkZXJpbmcgZnVydGhlciBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kZXZfcmVnaXN0ZXJfcGFyZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzODc9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzk3LVx0bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGVzID0gXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM5ODpcdHJldCA9IG1kZXZfcmVnaXN0ZXJfcGFyZW50KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlcGFyZW50LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzk5LVx0XHRcdFx0ICAgXHUwMDI2dmZpb19hcF9tYXRyaXhfZHJpdmVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZXZpY2UgQ29udGV4dCoqCgpBbHJpZ2h0LCBteSBicmFpbiBqdXN0IHdlbnQgc3RyYWlnaHQgdG8gYG1hdHJpeF9kZXYtJmd0O2RldmljZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBtYXRyaXhfZGV2YCBzdHJ1Y3R1cmUgYW5kIHRoZSB1bmRlcmx5aW5nIGRldmljZSByZXByZXNlbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgJiMzNDtkZXZpY2UmIzM0OyBtZW1iZXIgb2YgdGhlIGBtYXRyaXhfZGV2YCBzdHJ1Y3R1cmUuCgpUaGlzIGltcGxpZXMgSSYjMzk7bSBwcm9iYWJseSBkZWFsaW5nIHdpdGggc29tZSBzb3J0IG9mIGFic3RyYWN0aW9uIGxheWVyIG9yIGEgZHJpdmVyIGFyY2hpdGVjdHVyZSB3aGVyZSBgbWF0cml4X2RldmAgbGlrZWx5IGVuY2Fwc3VsYXRlcyB0aGUgaGlnaGVyLWxldmVsIG1hdHJpeCBvcGVyYXRpb24sIGFuZCB0aGUgJiMzNDtkZXZpY2UmIzM0OyBtZW1iZXIgaXMgaG93IHdlIGludGVyZmFjZSB3aXRoIHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgdW5kZXJseWluZyBjb21wdXRlIHJlc291cmNlLiBBbSBJIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyByZWdpc3RlcnMgb3IgaG93IHRoZSBtZW1vcnkgaXMgbWFwcGVkPwoKSSYjMzk7bSBwcm9iYWJseSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gYWNjZXNzLCBjb25maWd1cmUsIG9yIGNvbnRyb2wgYSBzcGVjaWZpYyBkZXZpY2Ugd2l0aGluIGEgbGFyZ2VyIHN5c3RlbSBpbnZvbHZpbmcgbWF0cml4IG9wZXJhdGlvbnMuIE1heWJlIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvciBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLCBvciBldmVuIGFkZGluZyBhIG5ldyBmZWF0dXJlLiBVbmRlcnN0YW5kaW5nIHRoaXMgY29ubmVjdGlvbiBpcyBjcml0aWNhbCB0byByZXNvbHZpbmcgdGhlIHByb2JsZW0gb3IgdGFzay4gSSB3b25kZXIgd2hhdCBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIGRldmljZSB0aGlzIHBvaW50cyB0by4gSGFyZHdhcmUgY2hhcmFjdGVyaXN0aWNzLCBtZW1vcnkgYWxsb2NhdGlvbiwgY29udGV4dCBtYW5hZ2VtZW50Li4uIHdoZXJlIGRvZXMgdGhpcyByYWJiaXQgaG9sZSBsZWFkPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXRyaXhfZGV2LVx1MDAzZWRldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTE1LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNjpcdGRldl9zZXRfbmFtZShcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7JXNcJiMzNDssIFZGSU9fQVBfREVWX05BTUUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNzpcdG1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLnBhcmVudCA9IHJvb3RfZGV2aWNlO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExODpcdG1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLmJ1cyA9IFx1MDAyNm1hdHJpeF9idXM7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTE5Olx0bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucmVsZWFzZSA9IHZmaW9fYXBfbWF0cml4X2Rldl9yZWxlYXNlO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTEyMC1cdG1hdHJpeF9kZXYtXHUwMDNldmZpb19hcF9kcnYgPSBcdTAwMjZ2ZmlvX2FwX2RydjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMjEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTIyOlx0cmV0ID0gZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMzItbWF0cml4X2Rydl9lcnI6XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTMzOlx0ZGV2aWNlX2RlbChcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTM0LW1hdHJpeF9yZWdfZXJyOlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjEzNTpcdHB1dF9kZXZpY2UoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTEzNi1tYXRyaXhfYWxsb2NfZXJyOlxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNDM9c3RhdGljIHZvaWQgdmZpb19hcF9tYXRyaXhfZGV2X2Rlc3Ryb3kodm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNDQte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE0NTpcdHN0cnVjdCBkZXZpY2UgKnJvb3RfZGV2aWNlID0gbWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucGFyZW50O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE0Ni1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNDctXHRkcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZtYXRyaXhfZHJpdmVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNDg6XHRkZXZpY2VfdW5yZWdpc3RlcihcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTQ5LVx0YnVzX3VucmVnaXN0ZXIoXHUwMDI2bWF0cml4X2J1cyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzODc9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzk3LVx0bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGVzID0gXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM5ODpcdHJldCA9IG1kZXZfcmVnaXN0ZXJfcGFyZW50KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlcGFyZW50LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzk5LVx0XHRcdFx0ICAgXHUwMDI2dmZpb19hcF9tYXRyaXhfZHJpdmVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBVbmRlcnN0YW5kaW5nIG9mIHRoZSBNYXRyaXggRGV2aWNlIENyZWF0aW9uKioKCkFscmlnaHQsIHNvIGBtYXRyaXhfZGV2YCBpcyBiZWluZyBzcHVuIHVwLiBTZWVtcyBsaWtlIGl0JiMzOTtzIHRha2luZyBvbiB0aGUgcm9sZSBvZiBhIHJvb3QgZGV2aWNlIG9yIGEgY2hpbGQgb2YgdGhlIGByb290X2RldmljZWAgb24gdGhlIGBtYXRyaXhfYnVzYC4gVGhhdCYjMzk7cyB0aGUgc2V0dXAgSSYjMzk7ZCBleHBlY3QuIE5vdywgaGVyZSYjMzk7cyB0aGUgaW50ZXJlc3RpbmcgYml0IOKAkyBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2Ugd2UgKm5lZWQqIHRob3NlIHBoeXNpY2FsIEFQIGRldmljZXMgdG8gYWN0dWFsbHkgKmNyZWF0ZSogdGhlIHBhcmVudCBmb3IgdGhlIG1kZXYuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIFdlJiMzOTtyZSBnZXR0aW5nIHRvIHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXIuCgpBaCwgYW5kIHRoZXJlIGl0IGlzOiBgdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZWAgaXMgZ2V0dGluZyBjYWxsZWQgKmR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24qLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcmVhdGlvbiBsb2dpYyBpcyBoYXBwZW5pbmcuIFRoaXMgY2xhcmlmaWVzIHRoZSB0aW1pbmcg4oCTIGl0JiMzOTtzIGhhcHBlbmluZyBlYXJseSBpbiB0aGUgZGV2aWNlIGxpZmVjeWNsZSwgcmlnaHQgd2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRpbmcsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZGV2aWNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEkgY2FuIHNlZSBob3cgdGhlIGZyYW1ld29yayBpcyBlc3RhYmxpc2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz03OT1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbWF0cml4X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtODUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6ODY6c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtODcte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNjc9c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE3OC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzk6XHRyZXQgPSB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTgwLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipWRklPIERldmljZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgY29yZSBwcm9jZXNzIGJlZ2lucyB3aXRoIHRoZSB1bmNvbmRpdGlvbmFsIGNyZWF0aW9uIG9mIHRoZSBwYXJlbnQgVkZJTyBkZXZpY2UgZHVyaW5nIHRoZSBtb2R1bGUmIzM5O3MgaW5pdGlhbGl6YXRpb24uIFRoYXQgbWFrZXMgc2Vuc2U7IGl0IGVzdGFibGlzaGVzIHRoZSBmb3VuZGF0aW9uLiBBZnRlciB0aGF0IGluaXRpYWwgc2V0dXAgaXMgY29tcGxldGUsIHRoZSBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYCBmdW5jdGlvbiBpcyBpbnZva2VkLiBTbyB0aGUgcGFyZW50IGRldmljZSBpcyByZWFkeSwgYW5kIG5vdyB3ZSByZWdpc3RlciB0aGUgbWVkaWF0ZWQgZGV2aWNlLiBUaGF0IHN1Z2dlc3RzIGEgY2xlYXIgc2VxdWVuY2U6IGVzdGFibGlzaCB0aGUgYmFzZSwgdGhlbiBjb25uZWN0IHRoZSBtZWRpYXRlZCBpbnN0YW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfbWRldl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNjc9c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4OC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxODk6XHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xOTAtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzQ9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODYtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM4NzppbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4OC17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNDM9c3RydWN0IHZmaW9fYXBfcXVldWUge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTU0LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNTU6aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTU2LXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIHRoZSBtZGV2IFJlZ2lzdHJhdGlvbiBhbmQgUHJvYmUgRmxvdyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgYG1kZXZgIHBhcmVudCBpcyByZWdpc3RlcmVkIHdpdGhvdXQgYW55IGNvbmRpdGlvbmFsIGNoZWNrcywgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgaW1wbGllcyB0aGF0IGFueSB1c2Vyc3BhY2UgcHJvY2VzcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyBjYW4gY3JlYXRlIGBtZGV2YCBkZXZpY2VzIGRpcmVjdGx5IHRocm91Z2ggdGhlIGBzeXNmc2AgaW50ZXJmYWNlLiBUaGlzIHRyaWdnZXJzIGEgY2FsbCB0byBgdmZpb19hcF9tZGV2X3Byb2JlYC4gU28sIG15IGZvY3VzIHNob3VsZCBub3cgc2hpZnQgdG8gc2NydXRpbml6aW5nIHdoYXQgZXhhY3RseSBoYXBwZW5zIGluc2lkZSBgdmZpb19hcF9tZGV2X3Byb2JlYC4gV2hhdCYjMzk7cyB0aGUgY29udHJvbCBmbG93IHRoZXJlPyBXaGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkPyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBhIHBvdGVudGlhbGx5IHVuY29uZGl0aW9uYWwgcHJvYmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBmcm9tIHRoaXMgdW5jb25kaXRpb25hbCBjcmVhdGlvbiBwYXRoLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc4MDpcdFxuIDc4MTpcdFx0bWF0cml4X21kZXYtXHUwMDNlbWRldiA9IHRvX21kZXZfZGV2aWNlKHZkZXYtXHUwMDNlZGV2KTtcbiA3ODI6XHRcdHZmaW9fYXBfbWF0cml4X2luaXQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VpbmZvLCBcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXgpO1xuIDc4MzpcdFx0bWF0cml4X21kZXYtXHUwMDNlcHFhcF9ob29rID0gaGFuZGxlX3BxYXA7XG4gNzg0Olx0XHR2ZmlvX2FwX21hdHJpeF9pbml0KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlaW5mbywgXHUwMDI2bWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IpO1xuIDc4NTpcdFx0aGFzaF9pbml0KG1hdHJpeF9tZGV2LVx1MDAzZXF0YWJsZS5xdWV1ZXMpO1xuIDc4NjpcdFxuIDc4NzpcdFx0cmV0dXJuIDA7XG4gNzg4Olx0fVxuIDc4OTpcdFxuIDc5MDpcdHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcbiA3OTE6XHR7XG4gNzkyOlx0XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuIDc5MzpcdFx0aW50IHJldDtcbiA3OTQ6XHRcbiA3OTU6XHRcdG1hdHJpeF9tZGV2ID0gdmZpb19hbGxvY19kZXZpY2UoYXBfbWF0cml4X21kZXYsIHZkZXYsIFx1MDAyNm1kZXYtXHUwMDNlZGV2LFxuIDc5NjpcdFx0XHRcdFx0XHRcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kZXZfb3BzKTtcbiA3OTc6XHRcdGlmIChJU19FUlIobWF0cml4X21kZXYpKVxuIDc5ODpcdFx0XHRyZXR1cm4gUFRSX0VSUihtYXRyaXhfbWRldik7XG4gNzk5Olx0XG4gODAwOlx0XHRyZXQgPSB2ZmlvX3JlZ2lzdGVyX2VtdWxhdGVkX2lvbW11X2RldihcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2V2ZGV2KTtcbiA4MDE6XHRcdGlmIChyZXQpXG4gODAyOlx0XHRcdGdvdG8gZXJyX3B1dF92ZGV2O1xuIDgwMzpcdFx0bWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xuIDgwNDpcdFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbiA4MDU6XHRcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGV2LVx1MDAzZWRldiwgbWF0cml4X21kZXYpO1xuIDgwNjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiA4MDc6XHRcdGxpc3RfYWRkKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZW5vZGUsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0KTtcbiA4MDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiA4MDk6XHRcdHJldHVybiAwO1xuIDgxMDpcdFxuIDgxMTpcdGVycl9wdXRfdmRldjpcbiA4MTI6XHRcdHZmaW9fcHV0X2RldmljZShcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2V2ZGV2KTtcbiA4MTM6XHRcdHJldHVybiByZXQ7XG4gODE0Olx0fVxuIDgxNTpcdFxuIDgxNjpcdHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4gODE3Olx0XHRcdFx0XHQgICAgc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gODE4Olx0e1xuIDgxOTpcdFx0aWYgKCFxIHx8IHZmaW9fYXBfbWRldl9nZXRfcXVldWUobWF0cml4X21kZXYsIHEtXHUwMDNlYXBxbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODYwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKlZGSU8tQVAgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdmZpb19hcF9tZGV2X3Byb2JlYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhhdCYjMzk7cyBnb29kLCBidXQgaXQmIzM5O3MganVzdCB0aGUgYmVnaW5uaW5nLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAsIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAsIGFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHN1c3BlY3QgbWFuYWdlIGRldmljZSBjcmVhdGlvbiwgcmVtb3ZhbCwgYW5kIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlc2UgQVAgZGV2aWNlcy4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgZnVuY3Rpb24uIEkgaGF2ZSB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGltcGFjdHMgaG93IEFQIGRldmljZXMgYXJlIGluaXRpYWxpemVkLiBUaGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb24gY2FsbHMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X2NmZ19yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU1Nz1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjU4NS0vKipcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNTg2OiAqIHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlIC0gZGV0ZXJtaW5lcyB3aGljaCBndWVzdHMgYXJlIHVzaW5nIHRoZSBhZGFwdGVycyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTg3LSAqXHRcdFx0ICAgICBkb21haW5zIGFuZCBjb250cm9sIGRvbWFpbnMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTk3LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1OTg6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1OTktXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyAqYXFfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNjQ2PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NvbmZpZ19pbmZvLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjY3LVx0aWYgKGRvX3JlbW92ZSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNjY4Olx0XHR2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZShhcHJlbSwgYXFyZW0sIGNkcmVtKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjY5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0YWNrbGluZyB0aGlzOgoKKipBbmFseXppbmcgYHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlYCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBteSBoZWFkIGFyb3VuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmVgLiBUaGlzIGxpa2VseSBkZWFscyB3aXRoIHJlbW92aW5nIGEgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIG1lZGlhdGVkIGRldmljZXMgd2l0aGluIHRoZSBWRklPIChWaXJ0dWFsIEZ1bmN0aW9uIEkvTykgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgZm9yIEFjY2VzcyBQcm90ZWN0aW9uIChBUCkgbWVkaWF0ZWQgZGV2aWNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvICpkbyosIGFuZCB3aGVyZSBpdCBzaXRzIGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiBWRklPJiMzOTtzIG1kZXYgKG1lZGlhdGVkIGRldmljZSkgaGFuZGxpbmcsIHBhcnRpY3VsYXJseSBhcyBpdCBwZXJ0YWlucyB0byBBUC4gSXMgdGhpcyBwYXJ0IG9mIGEgY2xlYW51cCByb3V0aW5lLCBhbiBlcnJvciBoYW5kbGluZyBwYXRoLCBvciBhIGNvcmUgcGFydCBvZiB0aGUgbWRldiB0ZWFyLWRvd24gcHJvY2Vzcz8gTXkgZXhwZXJpZW5jZSB3aXRoIFZGSU8gdGVsbHMgbWUgaXQmIzM5O3MgcHJvYmFibHkgbGlua2VkIHRvIGEgc3BlY2lmaWMgZGV2aWNlIHN0YXRlLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBvciByZXNvdXJjZSBjb3JydXB0aW9uIHVwb24gcmVtb3ZhbC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGtub3cgd2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLiBUaGUgY29udGV4dCB3aWxsIHRlbGwgbWUgaG93IGNyaXRpY2FsIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNTk4PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKHVuc2lnbmVkIGxvbmcgKmFwX3JlbW92ZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjYzOC0vKipcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNjM5OiAqIHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlIC0gcmVzcG9uZHMgdG8gdGhlIHJlbW92YWwgb2YgYWRhcHRlcnMsIGRvbWFpbnMgYW5kXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjY0MC0gKlx0XHRcdFx0Y29udHJvbCBkb21haW5zIGZyb20gdGhlIGhvc3QgQVAgY29uZmlndXJhdGlvblxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjQ1LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI2NDY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjY0Ny1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKnByZXZfY29uZmlnX2luZm8pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4MTk9dm9pZCB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NmZ19pbmZvLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODI2LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4Mjc6XHR2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShjdXJfY2ZnX2luZm8sIHByZXZfY2ZnX2luZm8pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MjgtXHR2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZChjdXJfY2ZnX2luZm8sIHByZXZfY2ZnX2luZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLCBhbmQgaXQgdXN1YWxseSBtZWFucyBzb21ldGhpbmcgc2lnbmlmaWNhbnQgaGFzIG9jY3VycmVkIHdpdGhpbiB0aGUgVkZJTyAoVmlydHVhbCBGdW5jdGlvbiBJL08pIHN1YnN5c3RlbSByZWxhdGVkIHRvIHRoZSBhY2Nlc3MgcHJvdGVjdGlvbiBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhpcyBjYWxsIGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgbWVudGFsbHkgZ28gdGhyb3VnaCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBjYWxsIHNpdGVzIHRvIGdldCBhIGdyYXNwIG9mIHRoZSB0cmlnZ2Vycy4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hhdCBraW5kcyBvZiBldmVudHMgY291bGQgcG9zc2libHkgbmVjZXNzaXRhdGUgYSBjaGFuZ2UgaW4gdGhlIGFjY2VzcyBwcm90ZWN0aW9uIGNvbmZpZ3VyYXRpb24uIERldmljZSBob3RwbHVnZ2luZz8gU2VjdXJpdHkgY29udGV4dHM/IFBlcmhhcHMgc29tZSBzb3J0IG9mIHJlc291cmNlIHJlYWxsb2NhdGlvbiBvciB2aXJ0dWFsaXphdGlvbiBtYW5hZ2VtZW50IG9wZXJhdGlvbj8gS25vd2luZyB0aGUgc3BlY2lmaWMgdHJpZ2dlciBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBpbXBsZW1lbnRhdGlvbiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja3MgaXQgdXNlcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVkZJTyBpbmZyYXN0cnVjdHVyZS4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGV2YWx1YXRlIHBvdGVudGlhbCBpbXBhY3RzIGlmIHRoaXMgaXMgaGFuZGxlZCBpbmNvcnJlY3RseS4gVGhlIGltcGxpY2F0aW9ucyBvZiBnZXR0aW5nIGFjY2VzcyBwcm90ZWN0aW9uIHdyb25nIGluIFZGSU8gYXJlIGh1Z2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfb25fY2ZnX2NoYW5nZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYxLVx0LmluX3VzZSA9IHZmaW9fYXBfbWRldl9yZXNvdXJjZV9pbl91c2UsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6NjI6XHQub25fY29uZmlnX2NoYW5nZWQgPSB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYzLVx0Lm9uX3NjYW5fY29tcGxldGUgPSB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3ODc9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19hZGQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MTItLyoqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgxMzogKiB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkIC0gaGFuZGxlcyBub3RpZmljYXRpb24gb2YgY2hhbmdlcyB0byB0aGUgaG9zdCBBUFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MTQtICpcdFx0XHQgICAgY29uZmlndXJhdGlvbi5cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgxOC0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyODE5OnZvaWQgdmZpb19hcF9vbl9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jZmdfaW5mbyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODIwLVx0XHRcdCAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKnByZXZfY2ZnX2luZm8pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNjE9aW50IHZmaW9fYXBfbWRldl9yZXNvdXJjZV9pbl91c2UodW5zaWduZWQgbG9uZyAqYXBtLCB1bnNpZ25lZCBsb25nICphcW0pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE2Mzp2b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2NC1cdFx0XHQgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMxMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDcyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWRklPLUFQIExvY2tpbmcgTG9naWMgJmFtcDsgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAgaXMgYW4gYGFwX2RyaXZlcmAgY2FsbGJhY2ssIHRyaWdnZXJlZCBieSB0aGUgQVAgYnVzLiAgRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgQVAgYnVzIGV2ZW4gKmV4aXN0cyogaW4gUUVNVS4gIEFoLCByaWdodCwgd2UgaGF2ZSBzb21lIHMzOTB4IHN1cHBvcnQsIHNvIHllcywgaXQmIzM5O3MgYSBwb3NzaWJpbGl0eS4gIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcGF0aCByZWFjaGFibGU/IFN5emthbGxlciBkb2VzbiYjMzk7dCBkZWZhdWx0IHRvIHMzOTB4IFZNcywgYnV0IGl0IGhhcyBhbiBzMzkweCBwb3J0LCBzbyBpdCYjMzk7cyBhIGRlZmluaXRlIG1heWJlLiBJZiBpdCYjMzk7cyByZWFjaGFibGUsIGl0JiMzOTtzIGZ1enphYmxlLgoKVGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGEgbG9ja2luZyBsb2dpYyBjaGFuZ2UuICBTcGVjaWZpY2FsbHksIEkmIzM5O20gc2VlaW5nOgoKYGBgYwotCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAlsaXN0X2FkZCgmYW1wO21hdHJpeF9tZGV2LSZndDtub2RlLCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKYGBgCgphbmQgYWxzbyB0aGlzOgoKYGBgYwogCWxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7Ci0JCW11dGV4X2xvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsCiYjNDM7CQkgKiBhbmQga3ZtLSZndDtsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9jawomIzQzOwkJICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LgomIzQzOwkJICovCiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF9sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiAJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKYGBgCgpTbywgdGhpcyBjaGFuZ2UgaXMgYSBmdW5jdGlvbmFsIG9uZSwgYWltZWQgYXQgcHJldmVudGluZyBkZWFkbG9ja3Mgb3IgZml4aW5nIGxvY2tkZXAgaXNzdWVzLCB3aGljaCBtYWtlcyBpdCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgdG8gZnV6ei4KCkxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gIEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYHZmaW9fYXBfbWRldl9wcm9iZWAKKiAgIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAKKiAgIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAKKiAgIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYAoqICAgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAKCkhvbGQgb24uLi4gYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBhbmQgYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIHRoZXkgYXJlIGlubGluZWQuIE5vLCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmVgIGFuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgLCB3aGljaCBhcmUgaW4gdHVybiBjYWxsZWQgYnkgYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgLiBPa2F5LCBzbyB3ZSBjYW4gcHJvYmFibHkgZm9jdXMgb24gYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBhcyBwcmltYXJ5IHRhcmdldHMsIHNpbmNlIHRoZXkgYXJlIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gQW5kLCBhcyBiZWZvcmUsICBgdmZpb19hcF9tZGV2X3Byb2JlYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2lsbCBjb25maXJtIHRoZSBzdGF0aWMgc3RhdHVzIGFnYWluIC0gYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBpcyBzdGF0aWMsIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYCBpcyBzdGF0aWMgdG9vLiAgQnV0IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGlzIG5vbi1zdGF0aWMgKGV4cG9ydGVkIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4gVGhhdCBjb25maXJtcyB0aGUgZnV6emluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yODM0PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjg1Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyODU4OnZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NTktXHRcdFx0ICAgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNjM9dm9pZCB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjQtXHRcdFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqb2xkX2NvbmZpZ19pbmZvKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTY1OnZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjYtXHRcdFx0ICAgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI0MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWRklPLUFQIE1vZHVsZSBFbnRyeSBQb2ludHMgYW5kIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIGluc3RpbmN0IHBvaW50cyBtZSB0b3dhcmRzIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAsIGFuZCBgdmZpb19hcF9tZGV2X3Byb2JlYCBhcyB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIGluIHRoaXMgYFZGSU8tQVBgIGNvbnRleHQuIEFoLCByaWdodCwgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgZGVjbGFyZWQgYHN0YXRpY2AuIEkgc2hvdWxkIHByb2JhYmx5IHByZWZlciBhIG5vbi1zdGF0aWMgb3B0aW9uIGlmIGF2YWlsYWJsZSwgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIGNhbiBzb21ldGltZXMgaGluZGVyIGFuYWx5c2lzLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBiZWluZyBwYXNzZWQgYXMgYSBjYWxsYmFjay4gWWVzLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHVzZWQgYXMgdGhlIGAucHJvYmVgIGZ1bmN0aW9uIGluIGB2ZmlvX2FwX21hdHJpeF9kcml2ZXJgLCB3aGljaCBtYWtlcyBpdCBhbiBlbnRyeSBwb2ludC4gQnV0LCBhcyBhIHByb2JlIGZ1bmN0aW9uLCBpdCYjMzk7cyB2ZXJ5IHVubGlrZWx5IHRvIGJlIGlubGluZWQsIHNvIGluY2x1ZGluZyBpdCBpcyBwcm9iYWJseSBmaW5lIGFuZCB3b24mIzM5O3QgY29tcGxpY2F0ZSB0aGluZ3MuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gc2VlaW5nIHRoYXQgd2UgY2xlYXJseSBuZWVkIGBWRklPX0FQYC4gV2FpdCwgYEFQYCBpcyBgZGVmX3RyaXN0YXRlIHlgIGluIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgLCBzbyBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gczM5MC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBWRklPX0FQYCYjMzk7cyBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBpcyByZXF1aXJlZC4gT2theSwgaXQgbmVlZHMgYEtWTWAsIGBWRklPYCwgYW5kIGBBUGAsIHdoaWNoIHdlIGNvdmVyZWQsIGFuZCBgVkZJT19NREVWYCwgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgYFZGSU9fQVBgIGl0c2VsZi4KClNvLCBsb29rcyBsaWtlIGVuYWJsaW5nIGBWRklPX0FQYCBzaG91bGQgYmUgc3VmZmljaWVudC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgY29uY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODMzLVxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXHRkZWZfdHJpc3RhdGUgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwMQoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA2MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWRklPIEFQIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyB0aGUgYFZGSU9fQVBgIGNvbmZpZ3VyYXRpb24sIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uLiBJJiMzOTttIHNlZWluZyBpdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gCgpJIGNoZWNrZWQ6IGBLVk1gIGFuZCBgVkZJT2AgYXJlIHN0YW5kYXJkIGJ1dCBgVkZJT19BUGAgaXMgdGhlIG1haW4gdGFyZ2V0LgoKSSB3ZW50IHRocm91Z2ggdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBJdCBtZWFucyBpdCYjMzk7cyBhIGRpcmVjdCBjYWxsYmFjayBhbmQgY2FuIGJlIGluY2x1ZGVkLiBUaGVyZSYjMzk7cyBubyBub24tc3RhdGljIHdyYXBwZXIgYXJvdW5kIGl0LCBpdCYjMzk7cyBkaXJlY3RseSBhc3NpZ25lZCB0byBgbWRldl9kcml2ZXIucHJvYmVgLiBUaGVuLCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAgYW5kIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGFyZSBub24tc3RhdGljLgoKTXkgZm9jdXMgaXMgb24gdGhlc2Ugc3ltYm9sczoKCiogICBgdmZpb19hcF9tZGV2X3Byb2JlYAoqICAgYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgCiogICBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYAoKQW5kIHRoZSBlbmFibGUgY29uZmlnIGlzOgoKKiAgIGBWRklPX0FQYAoKVGhlIHBhdGNoIGlzIGZpeGluZyB0aGUgbG9ja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgbG9ja3MgYXJlIG9yZGVyZWQuIEl0JiMzOTtzIGRlYWxpbmcgd2l0aCBgbWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9ja2AsIGBtYXRyaXhfZGV2LSZndDtndWVzdHNfbG9ja2AsIGFuZCBgbWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9ja2AgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyBhbmQgZGVhZGxvY2tzLiBUaGVzZSBjaGFuZ2VzIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBtZGV2IHByb2JlLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGFuZCBob3RwbHVnIGV2ZW50cywgYWxsIGNvcmUgZHJpdmVyIGZ1bmN0aW9uYWxpdGllcyB0cmlnZ2VyZWQgYnkgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24uCgpUbyBjb25maXJtIHRoZSBzcGVjaWZpY3MsIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBmdW5jdGlvbiBuYW1lcy4gWWVwLCBgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KWAgaXMgY29ycmVjdC4gU2FtZSBmb3IgdGhlIG90aGVyIHR3bzogYHZvaWQgdmZpb19hcF9vbl9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jZmdfaW5mbywgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpwcmV2X2NmZ19pbmZvKWAgYW5kIGB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbywgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pYC4KClRoZXJlIGFyZSBvdGhlciBzdGF0aWMgZnVuY3Rpb25zLCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBhbmQgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgLCBidXQgdGhleSBhcmUgY2FsbGVkIGZyb20gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyB3ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0uCgpTaW5jZSBgdmZpb19hcF9tZGV2X3Byb2JlYCBpcyBzdGF0aWMsIGl0JiMzOTtzIHNhZmUgdG8gaW5jbHVkZSBhcyBhIGNhbGxiYWNrLgoKSSYjMzk7bSByZWFkeSB0byBtYXJrIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IFZGSU9fQVA8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkZJT19BUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGxvZ2ljIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyBpbiB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgbWVkaWF0ZWQgZGV2aWNlIGRyaXZlci4gSXQgZml4ZXMgbG9jayBvcmRlcmluZyBiZXR3ZWVuIGBtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2tgLCBgbWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9ja2AsIGFuZCBgbWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2tgIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3MgZHVyaW5nIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRyaXZlciBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IFZGSU9fQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBWRklPX0FQIEF2YWlsYWJpbGl0eSBpbiB0aGUgczM5MCBBcmNoaXRlY3R1cmUqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiB0aGUgdG9vbCBJJiMzOTttIHVzaW5nIGZsYWdnZWQgYFZGSU9fQVBgIGFzIHVuZGVmaW5lZCwgYnV0IG15IG1lbW9yeSBpcyBwcmV0dHkgc29saWQsIGFuZCBJICpjb3VsZCBoYXZlIHN3b3JuKiBJIHNhdyBpdCBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBUaW1lIGZvciBhIGRvdWJsZS1jaGVjay4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoYXQgS2NvbmZpZyBmaWxlIGFnYWluLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlcmUmIzM5O3MgcHJvYmFibHkganVzdCBzb21lIHN1YnRsZXR5IEkgbWlzc2VkLCBvciBtYXliZSBhbiBpbnRlcmFjdGlvbiB3aXRoIGFub3RoZXIgY29uZmlnIEkmIzM5O20gbm90IHRoaW5raW5nIGFib3V0LiBCZXN0IHRvIGNvbmZpcm0gdGhhdCB0aGUgdG9vbCYjMzk7cyByaWdodCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gZGVidWdnaW5nLi4uIGJlY2F1c2UgSSYjMzk7bSBiZXR0aW5nIHRoYXQgS2NvbmZpZyBoYXMgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODMzLVxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXHRkZWZfdHJpc3RhdGUgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBLY29uZmlnIERpc2NyZXBhbmN5KioKCk9rYXksIHNvIHRoZSB0b29sIGNsYWltcyBgVkZJT19BUGAgaXNuJiMzOTt0IGluIHRoZSBrZXJuZWwsIGFuZCB0aGF0JiMzOTtzIHRocm93aW5nIG1lIGZvciBhIGxvb3AuIE15IGZpcnN0IGluc3RpbmN0IHdhcyB0aGF0IHRoZSB0b29sIG1pZ2h0IGJlIG1pc3Npbmcgc29tZXRoaW5nIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLCBtYXliZSBgYXJjaC9zMzkwL0tjb25maWdgLiBQZXJoYXBzIGl0IHdhc24mIzM5O3QgcGFyc2luZyBpdCBjb3JyZWN0bHksIG9yIG1heWJlIGl0IHdhcyBvbmx5IGxvb2tpbmcgYXQgYHg4NmAgb3Igb3RoZXIgc3RhbmRhcmQgY29uZmlncy4gQnV0IHRoZW4gSSByZW1lbWJlcmVkLCB0aGUgdG9vbCAqc2hvdWxkKiBjaGVjayBhbGwgdGhlIEtjb25maWcgZmlsZXMuCgpSaWdodCwgc28gbGV0JiMzOTtzIHZlcmlmeSDigJMgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbmZpZyAqZXhhY3RseSogYFZGSU9fQVBgPyBZZXAsIGNvbmZpcm1lZDogaXQmIzM5O3MgZGVmaW5lZCBhcyBgY29uZmlnIFZGSU9fQVBgLiBTbyB3aHkgdGhlIGhlY2sgaXMgaXQgc2F5aW5nIHRoYXQgaXQgZG9lc24mIzM5O3QgZXhpc3Q/IFRoaXMgaXMgYmFmZmxpbmcuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBkb3VibGUtY2hlY2sgaXRzIGRlZmluaXRpb24uIEkmIzM5O2xsIGhlYWQgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL3MzOTAvY3J5cHRvL0tjb25maWdgIOKAkyB0aGF0IGZlZWxzIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgZmlsZSBhY3R1YWxseSBjb250YWlucyB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTkyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBGaWxlKioKCk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbiBpcyBwcmV0dHkgY2xlYXIuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvczM5MC9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG9zc2liaWxpdGllcy4gV2hhdCBhbSBJIGxvb2tpbmcgZm9yPyBXZWxsLCBpdCBkZXBlbmRzIG9uIHRoZSBjb250ZXh0LCBvZiBjb3Vyc2UsIGJ1dCBnZW5lcmFsbHksIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gVGhpcyBjb3VsZCBpbnZvbHZlIGRyaXZlci1zcGVjaWZpYyBzZXR0aW5ncywgaGFyZHdhcmUgc3VwcG9ydCwgb3IgZXZlbiBmZWF0dXJlIGVuYWJsZW1lbnRzLiBJJiMzOTtsbCBsaWtlbHkgYmUgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGtleXdvcmRzIG9yIHN5bWJvbHMgSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBtYXliZSBzb21ldGhpbmcgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgZGV2aWNlIG9yIHN1YnN5c3RlbS4gVGhlIGtleSBoZXJlIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB3aGF0IGNhbiBiZSBjb25maWd1cmVkLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQga2luZHMgb2YgdGhpbmdzIHRoYXQgZmlsZSBtaWdodCBjb250YWluLCBhbmQgSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gb3IgcmVmdXRlIHRob3NlIGV4cGVjdGF0aW9ucy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0NTUKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyb3VibGVzaG9vdGluZyBhIENvbmZpZ3VyYXRpb24gUmVqZWN0aW9uKioKCk9rYXksIHNvIEkgdGhvdWdodCBJIHdhcyBiZWluZyBlZmZpY2llbnQgYnkgZ3JlcHBpbmcgZm9yIGBjb25maWcgVkZJT19BUGAgYW5kIGZpbmRpbmcgaXQgZGVmaW5lZCB3aXRoaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gSSBrbm93IHRoYXQgSSBmb3VuZCBpdCB0aGVyZSBiZWZvcmUsIEkgbWFkZSBhIG5vdGUgb2YgaXQuIEJ1dCBgc2V0LXJlc3VsdHNgIGlzIHJlamVjdGluZyBpdCwgYW5kIHRoYXQmIzM5O3MgdGhyb3dpbmcgbWUgb2ZmLiBXaHkgaXMgaXQgZG9pbmcgdGhhdD8KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IG1heWJlIGBzZXQtcmVzdWx0c2AgZW1wbG95cyBhIHNjcmlwdCB0byBwYXJzZSBLY29uZmlnIGZpbGVzIGFuZCBwZXJoYXBzIGl0JiMzOTtzIGNob2tpbmcgb24gc29tZXRoaW5nIGluIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUgc3BlY2lmaWNhbGx5LiBJcyBpdCBwb3NzaWJsZSB0aGF0IHRoZSBLY29uZmlnIHBhcnNpbmcgaXMgdGhlIGlzc3VlIGhlcmU/CgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZXJlIGlzbiYjMzk7dCBzb21lIHNpbGx5IHR5cG8gaW4gbXkgY29tbWFuZCBsaW5lLCBvciB0aGF0IEkgZGlkbiYjMzk7dCBzb21laG93IG1pc3JlbWVtYmVyIHRoZSBuYW1lLiBOb3BlLCB0aGUgbmFtZSYjMzk7cyBjb3JyZWN0LgoKV2FpdCBhIHNlY29uZC4uLmlzIGl0IHBvc3NpYmxlIHRoYXQgYHNldC1yZXN1bHRzYCBpcyBvbmx5IGNoZWNraW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxldmFudCB0byB0aGUgYHg4Nl82NGAgYXJjaGl0ZWN0dXJlPyBJZiBgVkZJT19BUGAgaXMgc3BlY2lmaWMgdG8gYHMzOTBgLCBpdCB3b3VsZG4mIzM5O3QgbmVjZXNzYXJpbHkgZXhpc3QgaW4gdGhlIGRlZmF1bHQgYHg4Nl82NGAgZGVmY29uZmlnLCBldmVuIGlmIGl0JiMzOTtzIGNvcnJlY3RseSBkZWZpbmVkIGluIHRoZSBvdmVyYWxsIEtjb25maWcgc3RydWN0dXJlLiBUaGUgdG9vbCBtaWdodCBiZSBjaGVja2luZyBhZ2FpbnN0IHRoYXQgc3RhbmRhcmQgYXJjaGl0ZWN0dXJlLgoKT2theSwgbGV0JiMzOTtzIHRyeSBhIHdvcmthcm91bmQuIElmIGBWRklPX0FQYCBpcyBiZWluZyByZWplY3RlZCBiZWNhdXNlIG9mIHRoZSBhcmNoaXRlY3R1cmUsIEkmIzM5O2xsIGp1c3Qgb21pdCBpdCBlbnRpcmVseSBhbmQgc2VlIHdoYXQgaGFwcGVucy4gSSBjb3VsZCBtYXliZSB0cnkgdG8gc3Vic3RpdHV0ZSBpdCB3aXRoIGBTMzkwYCwgYnV0IHRoYXQmIzM5O3MgdGhlICphcmNoaXRlY3R1cmUqIGFuZCBub3QgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGl0c2VsZi4gSXQgd291bGRuJiMzOTt0IHdvcmsuCgpBbHJpZ2h0LCBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYWdhaW4gd2l0aG91dCBgVkZJT19BUGAgYW5kIHNlZSBpZiB0aGF0IHJlc29sdmVzIHRoZSBpc3N1ZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBhdGggZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGxvZ2ljIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyBpbiB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgbWVkaWF0ZWQgZGV2aWNlIGRyaXZlci4gSXQgZml4ZXMgbG9jayBvcmRlcmluZyBiZXR3ZWVuIGBtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2tgLCBgbWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9ja2AsIGFuZCBgbWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2tgIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3MgZHVyaW5nIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRyaXZlciBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGxvZ2ljIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyBpbiB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgbWVkaWF0ZWQgZGV2aWNlIGRyaXZlci4gSXQgZml4ZXMgbG9jayBvcmRlcmluZyBiZXR3ZWVuIGBtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2tgLCBgbWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9ja2AsIGFuZCBgbWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2tgIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3MgZHVyaW5nIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRyaXZlciBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAobG9jayBvcmRlcmluZywgbWlzc2luZyBsb2NrcywgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9uIGBtYXRyaXhfbWRldi1cdTAwM2Vrdm1gKSBpbiB0aGUgczM5MCB2ZmlvX2FwIGRyaXZlci4gSXQgYWxzbyBmaXhlcyBhIG1pbm9yIGxvZ2ljIGJ1ZyB3aXRoIGBkb19yZW1vdmVgIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MWQ2NTM2MmU2OTEyMzJjNGRkY2M2M2UwOTNmMzQxMmI1ZTE1OGRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAxNzozNzo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwppbmRleCA0NGIzYTFkY2MxYjM2Li45YzcyNTdjMTc5YTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCkBAIC04MDMsOSAmIzQzOzgwMyw5IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAltYXRyaXhfbWRldi0mZ3Q7cmVxX3RyaWdnZXIgPSBOVUxMOwogCW1hdHJpeF9tZGV2LSZndDtjZmdfY2hnX3RyaWdnZXIgPSBOVUxMOwogCWRldl9zZXRfZHJ2ZGF0YSgmYW1wO21kZXYtJmd0O2RldiwgbWF0cml4X21kZXYpOwotCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAlsaXN0X2FkZCgmYW1wO21hdHJpeF9tZGV2LSZndDtub2RlLCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAlyZXR1cm4gMDsKIAogZXJyX3B1dF92ZGV2OgpAQCAtMjYwMywyOCAmIzQzOzI2MDMsMzUgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLAogCURFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTsKIAlERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7CiAJREVDTEFSRV9CSVRNQVAoY2RyZW0sIEFQX0RPTUFJTlMpOwotCWludCBkb19yZW1vdmUgPSAwOwomIzQzOwlpbnQgZG9fcmVtb3ZlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKLQkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldiwKJiM0MzsJCSAqIGFuZCBrdm0tJmd0O2xvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrCiYjNDM7CQkgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCi0JCWRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCi0JCQkJCSAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcG0sCi0JCQkJCSAgQVBfREVWSUNFUyk7CiYjNDM7CQlkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCiYjNDM7CQkJCSAgICAgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwKJiM0MzsJCQkJICAgICAgIEFQX0RFVklDRVMpOwogCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLAogCQkJCQkgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXFtLAogCQkJCQkgIEFQX0RPTUFJTlMpOwotCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLAotCQkJCQkgICAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAotCQkJCQkgICAgIEFQX0RPTUFJTlMpOwomIzQzOwkJZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSwKJiM0MzsJCQkJCW1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAomIzQzOwkJCQkJQVBfRE9NQUlOUyk7CiAKIAkJaWYgKGRvX3JlbW92ZSkKIAkJCXZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLAogCQkJCQkJICAgIGNkcmVtKTsKIAogCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAl9CiB9CiAKQEAgLTI3NDksMTIgJiM0MzsyNzU2LDIwIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsCiAJdmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIGluIG9yZGVyIHRvIGFjY2VzcyBmaWVsZHMKJiM0MzsJCSAqIHdpdGhpbiBtYXRyaXhfbWRldgomIzQzOwkJICovCiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7CiYjNDM7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKIAl9CiB9CiAKQEAgLTI4MjEsOSAmIzQzOzI4MzYsNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpCiAJREVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTsKIAlib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlOwogCi0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwotCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQogCWZpbHRlcl9hZGFwdGVycyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtLAogCQkJCQkgICAgbWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIEFQX0RFVklDRVMpOwogCWZpbHRlcl9kb21haW5zID0gYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O21hdHJpeC5hcW0sCkBAIC0yODQxLDkgJiM0MzsyODUzLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwogCiAJcmVzZXRfcXVldWVzX2Zvcl9hcGlkcyhtYXRyaXhfbWRldiwgYXBtX2ZpbHRlcmVkKTsKLQotCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwotCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwogfQogCiB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbywKQEAgLTI4NTQsMTUgJiM0MzsyODYzLDI5IEBAIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLAogCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDtndWVzdHNfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCwgbm9kZSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldiwKJiM0MzsJCSAqIGFuZCBrdm0tJmd0O2xvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrCiYjNDM7CQkgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsKIAkJaWYgKGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi0mZ3Q7YXBtX2FkZCwgQVBfREVWSUNFUykgJmFtcDsmYW1wOwogCQkgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LSZndDthcW1fYWRkLCBBUF9ET01BSU5TKSAmYW1wOyZhbXA7CiAJCSAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsIEFQX0RPTUFJTlMpKQotCQkJY29udGludWU7CiYjNDM7CQkJZ290byBkb191bmxvY2s7CiAKIAkJdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhtYXRyaXhfbWRldik7CiAJCWJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi0mZ3Q7YXBtX2FkZCwgMCwgQVBfREVWSUNFUyk7CiAJCWJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi0mZ3Q7YXFtX2FkZCwgMCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi0mZ3Q7YWRtX2FkZCwgMCwgQVBfRE9NQUlOUyk7CiYjNDM7CiYjNDM7ZG9fdW5sb2NrOgomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAl9CiAKIAltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDtndWVzdHNfbG9jayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzk2CgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDcwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbGVhbmluZyB0b3dhcmRzICYjMzQ7bm8sJiMzNDsgYnV0IGxldCYjMzk7cyBjb25maXJtLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIFByaW1hcmlseSwgaXQmIzM5O3MgYSBsb2NrLXJlbGF0ZWQgcmV3b3JrLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgd2hlcmUgYW5kIHdoZW4gd2UmIzM5O3JlIGhvbGRpbmcgbXV0ZXhlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGBtYXRyaXhfZGV2YCBhbmQgYG1hdHJpeF9tZGV2YCBzdHJ1Y3R1cmVzLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIGBrdm1gIGZpZWxkLgoKVGhlIGNoYW5nZXMgaW52b2x2ZSBtb3ZpbmcgbG9jayBhY3F1aXNpdGlvbnMgYXJvdW5kIGluIGZ1bmN0aW9ucyBsaWtlIGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AsIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIGVpdGhlciBsb2NrZGVwIHNwbGF0cywgbG9jayBvcmRlcmluZyBpc3N1ZXMsIHBvdGVudGlhbCBtaXNzaW5nIGxvY2tzLCBvciBwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdoZW4gYG1hdHJpeF9tZGV2LSZndDtrdm1gIGlzIGFjY2Vzc2VkLiBUaGVyZSYjMzk7cyBhbHNvIGEgc3VidGxlIGJ1ZyBmaXggaW4gYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCByZWdhcmRpbmcgdGhlIGBkb19yZW1vdmVgIHZhcmlhYmxlIOKAkyBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSB1c2Ugb2YgdGhlIGBiaXRtYXBfYW5kKClgIG9wZXJhdGlvbiBhcmUgYmVpbmcgY29ycmVjdGVkLiBOb3RoaW5nIHRoZXJlIHN1Z2dlc3RzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IHNlY3VyaXR5IHZlY3RvcnMuCgpDcnVjaWFsbHksIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlLCBJJiMzOTttIG5vdCBzZWVpbmcgYW55dGhpbmcgdGhhdCBzY3JlYW1zICYjMzQ7dW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4mIzM0OyBUaGUgY29kZSBtb2RpZmljYXRpb24gb24gYGRvX3JlbW92ZWAgKGNoYW5naW5nIGBpbnQgZG9fcmVtb3ZlID0gMDtgIHRvIGBpbnQgZG9fcmVtb3ZlO2AgYW5kIHRoZW4gcHJvcGVybHkgaW5pdGlhbGl6aW5nIGl0IGJlZm9yZSB1c2UpIHJlaW5mb3JjZXMgdGhpcy4gVGhlIHZhcmlhYmxlIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2UuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBzZW5zaXRpdmUgaW5mb3JtYXRpb24gZXhwb3N1cmUuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmNsdWRpbmcgdGhhdCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBsaWtlbHkgdG8gZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBsb2NrLXJlbGF0ZWQgYnVncywgYW5kIHRob3NlIGFyZSBnb2luZyB0byBiZSBuYWlsZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gZm9yIHRoaXMgcGF0Y2ggc2VlbXMgdW5uZWNlc3NhcnkuIExldCBtZSBqdXN0IGFydGljdWxhdGUgdGhhdCByZWFzb25pbmcgY29uY2lzZWx5IGluIGEgY29tbWVudC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbG9ja2luZyBpc3N1ZXMgKGxvY2sgb3JkZXJpbmcsIG1pc3NpbmcgbG9ja3MsIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvbiBgbWF0cml4X21kZXYtXHUwMDNla3ZtYCkgaW4gdGhlIHMzOTAgdmZpb19hcCBkcml2ZXIuIEl0IGFsc28gZml4ZXMgYSBtaW5vciBsb2dpYyBidWcgd2l0aCBgZG9fcmVtb3ZlYCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAobG9jayBvcmRlcmluZywgbWlzc2luZyBsb2NrcywgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9uIGBtYXRyaXhfbWRldi1cdTAwM2Vrdm1gKSBpbiB0aGUgczM5MCB2ZmlvX2FwIGRyaXZlci4gSXQgYWxzbyBmaXhlcyBhIG1pbm9yIGxvZ2ljIGJ1ZyB3aXRoIGBkb19yZW1vdmVgIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozNzo1OC44NDgwNTkwNTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg5NjYwMjYxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlXCIsXG4gICAgXCJ2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkXCIsXG4gICAgXCJ2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAobG9jayBvcmRlcmluZywgbWlzc2luZyBsb2NrcywgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9uIGBtYXRyaXhfbWRldi1cXHUwMDNla3ZtYCkgaW4gdGhlIHMzOTAgdmZpb19hcCBkcml2ZXIuIEl0IGFsc28gZml4ZXMgYSBtaW5vciBsb2dpYyBidWcgd2l0aCBgZG9fcmVtb3ZlYCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGxvZ2ljIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyBpbiB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgbWVkaWF0ZWQgZGV2aWNlIGRyaXZlci4gSXQgZml4ZXMgbG9jayBvcmRlcmluZyBiZXR3ZWVuIGBtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrYCwgYG1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrYCwgYW5kIGBtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrYCB0byBwcmV2ZW50IGxvY2tkZXAgc3BsYXRzIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGR1cmluZyBtZGV2IHByb2JlLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGFuZCBob3RwbHVnIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBkcml2ZXIgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIG1kZXYgY3JlYXRpb24gYW5kIEFQIGJ1cyBjb25maWd1cmF0aW9uIGNhbGxiYWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzc6NTguODQ4MDY1NjM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcyNDQyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MWQ2NTM2MmU2OTEyMzJjNGRkY2M2M2UwOTNmMzQxMmI1ZTE1OGRhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMTc6Mzc6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuaW5kZXggNDRiM2ExZGNjMWIzNi4uOWM3MjU3YzE3OWE3YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG4rKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG5AQCAtODAzLDkgKzgwMyw5IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcXG4gXFx0bWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcXG4gXFx0bWF0cml4X21kZXYtXFx1MDAzZWNmZ19jaGdfdHJpZ2dlciA9IE5VTEw7XFxuIFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWRldi1cXHUwMDNlZGV2LCBtYXRyaXhfbWRldik7XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNlbm9kZSwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9wdXRfdmRldjpcXG5AQCAtMjYwMywyOCArMjYwMywzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXFxuIFxcdERFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTtcXG4gXFx0REVDTEFSRV9CSVRNQVAoYXFyZW0sIEFQX0RPTUFJTlMpO1xcbiBcXHRERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7XFxuLVxcdGludCBkb19yZW1vdmUgPSAwO1xcbitcXHRpbnQgZG9fcmVtb3ZlO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxcbitcXHRcXHQgKiBhbmQga3ZtLVxcdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xcbitcXHRcXHQgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4rXFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbiBcXG4tXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBBUF9ERVZJQ0VTKTtcXG4rXFx0XFx0ZG9fcmVtb3ZlID0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hcG0sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBBUF9ERVZJQ0VTKTtcXG4gXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXFyZW0sIGFxX3JlbW92ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFxbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBBUF9ET01BSU5TKTtcXG4tXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmRub3QoY2RyZW0sIGNkX3JlbW92ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFkbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBBUF9ET01BSU5TKTtcXG4rXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSxcXG4rXFx0XFx0XFx0XFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hZG0sXFxuK1xcdFxcdFxcdFxcdFxcdEFQX0RPTUFJTlMpO1xcbiBcXG4gXFx0XFx0aWYgKGRvX3JlbW92ZSlcXG4gXFx0XFx0XFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjZHJlbSk7XFxuIFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yNzQ5LDEyICsyNzU2LDIwIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsXFxuIFxcdHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUoYXBtX2FkZCwgYXFtX2FkZCk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCBpbiBvcmRlciB0byBhY2Nlc3MgZmllbGRzXFxuK1xcdFxcdCAqIHdpdGhpbiBtYXRyaXhfbWRldlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcbiBcXHRcXHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLFxcbiBcXHRcXHRcXHQgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7XFxuIFxcdFxcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXFx1MDAzZWFxbV9hZGQsXFxuIFxcdFxcdFxcdCAgIG1hdHJpeF9tZGV2LVxcdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcXG4gXFx0XFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cXHUwMDNlYWRtX2FkZCxcXG4gXFx0XFx0XFx0ICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xcbitcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yODIxLDkgKzI4MzYsNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuIFxcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XFxuIFxcdGJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuLVxcbiBcXHRmaWx0ZXJfYWRhcHRlcnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLCBBUF9ERVZJQ0VTKTtcXG4gXFx0ZmlsdGVyX2RvbWFpbnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFxbSxcXG5AQCAtMjg0MSw5ICsyODUzLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbiBcXHRcXHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xcbiBcXG4gXFx0cmVzZXRfcXVldWVzX2Zvcl9hcGlkcyhtYXRyaXhfbWRldiwgYXBtX2ZpbHRlcmVkKTtcXG4tXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbkBAIC0yODU0LDE1ICsyODYzLDI5IEBAIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcXG4rXFx0XFx0ICogYW5kIGt2bS1cXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcXG4rXFx0XFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0pXFxuK1xcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFxuIFxcdFxcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFxbV9hZGQsIEFQX0RPTUFJTlMpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFkbV9hZGQsIEFQX0RPTUFJTlMpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0Z290byBkb191bmxvY2s7XFxuIFxcbiBcXHRcXHR2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLCAwLCBBUF9ERVZJQ0VTKTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhcW1fYWRkLCAwLCBBUF9ET01BSU5TKTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhZG1fYWRkLCAwLCBBUF9ET01BSU5TKTtcXG4rXFxuK2RvX3VubG9jazpcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFx0XFx0aWYgKG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0pXFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozNzo1OS4yODYwNjMyNjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDQxMDYwOTY4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlXCIsXG4gICAgXCJ2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkXCIsXG4gICAgXCJ2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGxvZ2ljIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyBpbiB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgbWVkaWF0ZWQgZGV2aWNlIGRyaXZlci4gSXQgZml4ZXMgbG9jayBvcmRlcmluZyBiZXR3ZWVuIGBtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrYCwgYG1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrYCwgYW5kIGBtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrYCB0byBwcmV2ZW50IGxvY2tkZXAgc3BsYXRzIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGR1cmluZyBtZGV2IHByb2JlLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGFuZCBob3RwbHVnIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBkcml2ZXIgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIG1kZXYgY3JlYXRpb24gYW5kIEFQIGJ1cyBjb25maWd1cmF0aW9uIGNhbGxiYWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODFkNjUzNjJlNjkxMjMyYzRkZGNjNjNlMDkzZjM0MTJiNWUxNThkYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTc6Mzc6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLjljNzI1N2MxNzlhN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTgwMyw5ICs4MDMsOSBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG4gXHRtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlciA9IE5VTEw7XG4gXHRtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xuIFx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNm1kZXYtXHUwMDNlZGV2LCBtYXRyaXhfbWRldik7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2bWF0cml4X21kZXYtXHUwMDNlbm9kZSwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfcHV0X3ZkZXY6XG5AQCAtMjYwMywyOCArMjYwMywzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXG4gXHRERUNMQVJFX0JJVE1BUChhcHJlbSwgQVBfREVWSUNFUyk7XG4gXHRERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7XG4gXHRERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7XG4tXHRpbnQgZG9fcmVtb3ZlID0gMDtcbitcdGludCBkb19yZW1vdmU7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0LypcbitcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxuK1x0XHQgKiBhbmQga3ZtLVx1MDAzZWxvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrXG4rXHRcdCAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC5cbitcdFx0ICovXG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcbi1cdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcbi1cdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuLVx0XHRcdFx0XHQgIEFQX0RFVklDRVMpO1xuK1x0XHRkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsXG4rXHRcdFx0XHQgICAgICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSxcbitcdFx0XHRcdCAgICAgICBBUF9ERVZJQ0VTKTtcbiBcdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXFyZW0sIGFxX3JlbW92ZSxcbiBcdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLFxuIFx0XHRcdFx0XHQgIEFQX0RPTUFJTlMpO1xuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgICAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sXG4tXHRcdFx0XHRcdCAgICAgQVBfRE9NQUlOUyk7XG4rXHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGNkcmVtLCBjZF9yZW1vdmUsXG4rXHRcdFx0XHRcdG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sXG4rXHRcdFx0XHRcdEFQX0RPTUFJTlMpO1xuIFxuIFx0XHRpZiAoZG9fcmVtb3ZlKVxuIFx0XHRcdHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLFxuIFx0XHRcdFx0XHRcdCAgICBjZHJlbSk7XG4gXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTI3NDksMTIgKzI3NTYsMjAgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbiBcdHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUoYXBtX2FkZCwgYXFtX2FkZCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgaW4gb3JkZXIgdG8gYWNjZXNzIGZpZWxkc1xuK1x0XHQgKiB3aXRoaW4gbWF0cml4X21kZXZcbitcdFx0ICovXG4rXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sIGFwbV9hZGQsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTtcbitcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTI4MjEsOSArMjgzNiw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXHRib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXG4gXHRmaWx0ZXJfYWRhcHRlcnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuIFx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUyk7XG4gXHRmaWx0ZXJfZG9tYWlucyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sXG5AQCAtMjg0MSw5ICsyODUzLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuIFxuIFx0cmVzZXRfcXVldWVzX2Zvcl9hcGlkcyhtYXRyaXhfbWRldiwgYXBtX2ZpbHRlcmVkKTtcbi1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4gdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5AQCAtMjg1NCwxNSArMjg2MywyOSBAQCB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbiBcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsXG4rXHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbitcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuK1x0XHQgKi9cbitcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbitcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1xuIFx0XHRpZiAoYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsIEFQX0RPTUFJTlMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsIEFQX0RPTUFJTlMpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGdvdG8gZG9fdW5sb2NrO1xuIFxuIFx0XHR2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIDAsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLCAwLCBBUF9ET01BSU5TKTtcbitcbitkb191bmxvY2s6XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozNzo1OS4yODYwNjYxODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQxMTExMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZGSU8tQVAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBsb29rcyBsaWtlIGl0J3MgdHdlYWtpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIFJpZ2h0IGF3YXksIEkga25vdyB0aGlzIGlzIGFuIHMzOTAtc3BlY2lmaWMgZHJpdmVyIGRlYWxpbmcgd2l0aCBWRklPIEFQIGRldmljZXMuIFRoaXMgbWVhbnMgd2UncmUgdGFsa2luZyBhYm91dCB0aGUgQWRqdW5jdCBQcm9jZXNzb3IsIElCTSdzIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3IsIHdoaWNoIGlzIHByZXR0eSBuaWNoZSBhbmQgaGFyZHdhcmUtZGVwZW5kZW50LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgbG9ja2luZyBtZWNoYW5pc21zIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyB3aXRoaW4gc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCwgYW5kIGEgZmV3IG1vcmUgcmVsYXRlZCB0byBjb25maWd1cmF0aW9uIGFuZCBob3QtcGx1Z2dpbmcuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eS4gSXMgdGhpcyBjb2RlIGV2ZW4gKmV4ZXJjaXNhYmxlKiBpbiB0eXBpY2FsIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIGVudmlyb25tZW50cz8gUzM5MCBjb2RlIG9mdGVuIGlzbid0IGZ1enplZCBvbiBzdGFuZGFyZCB4ODZfNjQgVk1zIHVubGVzcyB3ZSBhcmUgc3BlY2lmaWNhbGx5IHJ1bm5pbmcgczM5MHggdmlydHVhbCBtYWNoaW5lcy4gV2Uga25vdyBTeXprYWxsZXIgaGFzIHNvbWUgczM5MHggc3VwcG9ydCwgYnV0IEkgcmVhbGx5IG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZHJpdmVyIGhhcyBzb21lIGhhcmR3YXJlIGRlcGVuZGVuY3kgLSBpLmUuIEFQIGRldmljZXMuIFNpbmNlIGl0J3MgZGVhbGluZyB3aXRoIGFuIEFkanVuY3QgUHJvY2Vzc29yLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IG1pZ2h0IGJlLiBUaGlzIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3IsIGFmdGVyIGFsbCwgaXNuJ3Qgc29tZXRoaW5nIGVhc2lseSBlbXVsYXRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgd2F5IHRvIGNvbmZpZ3VyZSBRRU1VIHRvIGVtdWxhdGUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZS5cblxuU28sIGZpcnN0IHRoaW5nJ3MgZmlyc3Q6IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgcHJvYmFibHkgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AsIG9yIHNvbWV3aGVyZSBzaW1pbGFyLCB0byBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgdGhpcyBtb2R1bGUgaGFzLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBjbHVlIG9uIHdoZXRoZXIgSSBjYW4gdGVzdCB0aGlzIHdpdGhpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODowNS41MjcxODAxMzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkyODM4MTIxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MDUuODIwMDI1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjkxMDE2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBpbiB0aGUgZmlyc3QgcGVyc29uLCByZWZsZWN0aW5nIHRoZSBnaXZlbiB0aG91Z2h0OlxuXG4qKlF1aWNrIEtjb25maWcgU2NhbioqXG5cbkFscmlnaHQsIGxldCdzIGN1dCB0byB0aGUgY2hhc2UgYW5kIHplcm8gaW4gb24gd2hhdCdzIHJlbGV2YW50LiBJbnN0ZWFkIG9mIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gZXh0cmFuZW91cyBkZXRhaWxzIHJpZ2h0IG5vdywgSSdtIHRoaW5raW5nIEknbGwganVzdCBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgZG8gYSBxdWljayBzZWFyY2guIFRoZSBzcGVjaWZpYyBrZXl3b3JkIEknbGwgc3RhcnQgd2l0aCBpcyBgVkZJT19BUGAuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBxdWlja2x5IGZpbmQgdGhlIFZGSU8gQWNjZWxlcmF0ZWQgUHJvY2Vzc2luZyBjb25maWd1cmF0aW9ucy4gTm8gbmVlZCB0byBnbyBodW50aW5nIGFyb3VuZCBibGluZGx5LCBsZXQncyBrZWVwIHRoaXMgZm9jdXNlZCBhbmQgZWZmaWNpZW50LiBJJ20gYWZ0ZXIgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYWNjZWxlcmF0ZWQgcHJvY2Vzc2luZyB3aXRoaW4gVkZJTy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjA5Ljk4OTEyOTcxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY5ODEyMzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXFxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXFxuYXJjaC9zMzkwL0tjb25maWctODM1LVxcdGRlZl90cmlzdGF0ZSBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjExLjY1ODk1NDUzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDU0MTUyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBWRklPX0FQIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBWRklPX0FQIOKAkyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZm91bmRhdGlvbmFsIGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZHJpbGwgZG93biBhbmQgdW5jb3ZlciBpdHMgZGVwZW5kZW5jaWVzLiBXZSBhcmUgbm90IGp1c3QgdGFsa2luZyBhYm91dCB0aGUgb2J2aW91cyBsaWJyYXJpZXMgaGVyZSwgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGVudGlyZSBkZXBlbmRlbmN5IHRyZWUuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgbGF5ZXJzIGludm9sdmVkOiBXaGF0IGtlcm5lbCBtb2R1bGVzIGRvZXMgaXQgcmVseSBvbj8gV2hpY2ggdXNlcnNwYWNlIGNvbXBvbmVudHMgYXJlIGVzc2VudGlhbD8gQW5kIGRvbid0IGZvcmdldCB0aGUgaGFyZHdhcmUgaXRzZWxmIOKAkyB3aGljaCBzcGVjaWZpYyBkZXZpY2UgZmVhdHVyZXMsIGFuZCBhbnkgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucywgYXJlIGFzc3VtZWQ/IEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgZGV2aWNlIGFjY2VzcyBpcyB1c2luZyBzb21lIG9mIHRoZSBjb3JlIFZGSU8gZnJhbWV3b3JrLCBidXQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgYWxsIHJlcXVpcmVtZW50cyB0byB1c2UgVkZJT19BUC5cblxuSSBhbHNvIHdhbnQgdG8gY29uc2lkZXIgdGhlIGNvbnRleHQuIElzIHRoaXMgYSBuZXcgaW1wbGVtZW50YXRpb24/IEEgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIHN5c3RlbT8gV2hhdCB1c2UtY2FzZXMgaXMgaXQgZGVzaWduZWQgdG8gc3VwcG9ydD8gVGhpcyB3aWxsIHN0cm9uZ2x5IGltcGFjdCB0aGUgc2lnbmlmaWNhbmNlIG9mIGVhY2ggZGVwZW5kZW5jeSBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgSSBuZWVkIHRvIGF1ZGl0IGZvciB0aGUgZ29hbCBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBtb3RpdmF0aW9uIGZvciBpdHMgZGVzaWduIGlzIGltcG9ydGFudCBoZXJlLlxuXG5JJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBsb29rIGF0IHRoZSBzb3VyY2UgY29kZSwgYW5kIHBlcmhhcHMgZXZlbiBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIChpZiBpdCdzIGdvb2QsIHRoYXQgaXMhKS4gSXQgaXMgdW5saWtlbHkgdGhhdCBpdCB3aWxsIGJlIGEgc2ltcGxlIGxpbmVhciBoaWVyYXJjaHksIEkgZXhwZWN0IGEgZGVncmVlIG9mIGNvbXBsZXhpdHkgd2l0aCBpbnRlcmZhY2VzIHRvIGhhcmR3YXJlIGZlYXR1cmVzIGFuZCBvdGhlciBzeXN0ZW0gZnVuY3Rpb25zLiBJIHdpbGwgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIG9idmlvdXMgZWxlbWVudHMsIGFuZCB0aGVuIGRpZyBpbnRvIGhvdyB0aGV5IGFyZSBsaW5rZWQsIGFuZCB3aGljaCBmdW5jdGlvbnMgZGVwZW5kIG9uIHdoaWNoLiBUaGF0IGlzIHdoZXJlIHRoZSBkZXZpbCB3aWxsIGJlIGx1cmtpbmcuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgdmVyc2lvbmluZyBpc3N1ZXMsIGNvbmZsaWN0cywgYW5kIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCBieSB0aGVzZSBkZXBlbmRlbmNpZXMsIHRvby4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBhIGxhcmdlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjE2LjA2NDM3MjEwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzMDpcXHRcXG4gODMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDgzMjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2ZmlvX2Njdy5cXG4gODMzOlxcdFxcbiA4MzQ6XFx0Y29uZmlnIFZGSU9fQVBcXG4gODM1OlxcdFxcdGRlZl90cmlzdGF0ZSBuXFxuIDgzNjpcXHRcXHRwcm9tcHQgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQVAgZGV2aWNlc1xcXCJcXG4gODM3OlxcdFxcdGRlcGVuZHMgb24gS1ZNXFxuIDgzODpcXHRcXHRkZXBlbmRzIG9uIFZGSU9cXG4gODM5OlxcdFxcdGRlcGVuZHMgb24gQVBcXG4gODQwOlxcdFxcdHNlbGVjdCBWRklPX01ERVZcXG4gODQxOlxcdFxcdGhlbHBcXG4gODQyOlxcdFxcdCAgVGhpcyBkcml2ZXIgZ3JhbnRzIGFjY2VzcyB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXNcXG4gODQzOlxcdFxcdCAgdmlhIHRoZSBWRklPIG1lZGlhdGVkIGRldmljZSBpbnRlcmZhY2UuXFxuIDg0NDpcXHRcXG4gODQ1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiA4NDY6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2ZmlvX2FwLlxcbiA4NDc6XFx0XFxuIDg0ODpcXHRlbmRtZW51XFxuIDg0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MTYuMDY0NDYyOTMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MTE5MTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFzc2Vzc21lbnQgb2YgQXBwbGljYXRpb24gUGVyZm9ybWFuY2UgKEFQKSBhcyBhIEtleSBGYWN0b3IqKlxuXG5BbHJpZ2h0LCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSB0aGlua2luZyBpbW1lZGlhdGVseSBoaW5nZXMgb24gdGhlIGFwcGxpY2F0aW9uIHBlcmZvcm1hbmNlLCBvciBBUCBhcyB3ZSBjYWxsIGl0LiBFdmVyeXRoaW5nIGhlcmUgKmRlcGVuZHMqIG9uIEFQLiBJdOKAmXMgdGhlIGxpbmNocGluLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgc3lzdGVtLCBhIHByb2Nlc3MsIGEgcHJvYmxlbeKApiBhbmQgdGhlICpmaXJzdCogdGhpbmcgSSBuZWVkIHRvIGVzdGFibGlzaCBpcyB0aGUgc3RhdGUgb2YgQVAuIEl04oCZcyB0aGUgY3JpdGljYWwgdmFyaWFibGUuIFNvLCBiZWZvcmUgZGl2aW5nIGRlZXBlciwgYmVmb3JlIHNwZWN1bGF0aW5nIG9uIHJvb3QgY2F1c2VzIG9yIHBvdGVudGlhbCBzb2x1dGlvbnMsIG15IG1pbmQgaXMgYWxyZWFkeSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDogd2hhdCBtZXRyaWNzIGRvIEkgbmVlZD8gV2hlcmXigJlzIHRoZSBtb25pdG9yaW5nIGRhdGE/IFdoYXTigJlzIHRoZSBiYXNlbGluZSBBUCBiZWhhdmlvcj8gR290dGEgY2hlY2sgQVAgZmlyc3QuIEdvdHRhIHVuZGVyc3RhbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjE5LjYyNTY1NzQ4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MzAxNDQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3Q9Mjg3PXRvIGluaXRyZCBpbWFnZSwgdXNlciBjYW4gbm90aWNlIGl0IGJlZm9yZSBib290Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yODktXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdDoyOTA6Qm9vdGNvbmZpZyBBUElzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yOTEtPT09PT09PT09PT09PT09XFxuLS1cXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lPTI5PWNvbmZpZyBNQUNcXG4tLVxcbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDAtXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZTo0MTpjb25maWcgQVBPTExPXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZS00Mi1cXHRib29sIFxcXCJBcG9sbG8gc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc9MjkxPWNvbmZpZyA0NzZGUEVcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk0LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc6Mjk1OmNvbmZpZyBBUE04MjF4eFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk2LVxcdGJvb2xcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc4NT1jb25maWcgRUFETV9TQ0hcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTc5NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3OTY6Y29uZmlnIEFQXFxuYXJjaC9zMzkwL0tjb25maWctNzk3LVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MDgtXFxuYXJjaC9zMzkwL0tjb25maWc6ODA5OmNvbmZpZyBBUF9ERUJVR1xcbmFyY2gvczM5MC9LY29uZmlnLTgxMC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz04ODU9Y29uZmlnIENNTV9JVUNWXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04OTItXFxuYXJjaC9zMzkwL0tjb25maWc6ODkzOmNvbmZpZyBBUFBMREFUQV9CQVNFXFxuYXJjaC9zMzkwL0tjb25maWctODk0LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTkwOC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5MDk6Y29uZmlnIEFQUExEQVRBX01FTVxcbmFyY2gvczM5MC9LY29uZmlnLTkxMC1cXHRkZWZfdHJpc3RhdGUgbVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTI1LVxcbmFyY2gvczM5MC9LY29uZmlnOjkyNjpjb25maWcgQVBQTERBVEFfT1NcXG5hcmNoL3MzOTAvS2NvbmZpZy05MjctXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTk0MC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5NDE6Y29uZmlnIEFQUExEQVRBX05FVF9TVU1cXG5hcmNoL3MzOTAvS2NvbmZpZy05NDItXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc0MT1jb25maWcgWDg2X0FQTV9CT09UXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI3NDQtXFxuYXJjaC94ODYvS2NvbmZpZzoyNzQ1Om1lbnVjb25maWcgQVBNXFxuYXJjaC94ODYvS2NvbmZpZy0yNzQ2LVxcdHRyaXN0YXRlIFxcXCJBUE0gKEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQpIEJJT1Mgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc5OT1pZiBBUE1cXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDAtXFxuYXJjaC94ODYvS2NvbmZpZzoyODAxOmNvbmZpZyBBUE1fSUdOT1JFX1VTRVJfU1VTUEVORFxcbmFyY2gveDg2L0tjb25maWctMjgwMi1cXHRib29sIFxcXCJJZ25vcmUgVVNFUiBTVVNQRU5EXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODA3LVxcbmFyY2gveDg2L0tjb25maWc6MjgwODpjb25maWcgQVBNX0RPX0VOQUJMRVxcbmFyY2gveDg2L0tjb25maWctMjgwOS1cXHRib29sIFxcXCJFbmFibGUgUE0gYXQgYm9vdCB0aW1lXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODI0LVxcbmFyY2gveDg2L0tjb25maWc6MjgyNTpjb25maWcgQVBNX0NQVV9JRExFXFxuYXJjaC94ODYvS2NvbmZpZy0yODI2LVxcdGRlcGVuZHMgb24gQ1BVX0lETEVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjgzNi1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4Mzc6Y29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LXFxuYXJjaC94ODYvS2NvbmZpZy0yODM4LVxcdGJvb2wgXFxcIkVuYWJsZSBjb25zb2xlIGJsYW5raW5nIHVzaW5nIEFQTVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjg0OS1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4NTA6Y29uZmlnIEFQTV9BTExPV19JTlRTXFxuYXJjaC94ODYvS2NvbmZpZy0yODUxLVxcdGJvb2wgXFxcIkFsbG93IGludGVycnVwdHMgZHVyaW5nIEFQTSBCSU9TIGNhbGxzXFxcIlxcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWc9MjEzPWNvbmZpZyBYSUxJTlhfSFdJQ0FQXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjItXFxuZHJpdmVycy9jaGFyL0tjb25maWc6MjIzOmNvbmZpZyBBUFBMSUNPTVxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTIyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGljb20gaW50ZWxsaWdlbnQgZmllbGRidXMgY2FyZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnPTI5MD1jb25maWcgUUNPTV9DTEtfUlBNSFxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTI5OC1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6Mjk5OmNvbmZpZyBBUFFfR0NDXzgwODRcXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctMzAwLVxcdHRyaXN0YXRlIFxcXCJBUFE4MDg0IEdsb2JhbCBDbG9jayBDb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwNy1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6MzA4OmNvbmZpZyBBUFFfTU1DQ184MDg0XFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwOS1cXHR0cmlzdGF0ZSBcXFwiQVBRODA4NCBNdWx0aW1lZGlhIENsb2NrIENvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnPTc4PWNvbmZpZyBBTUNDX1BQQzQ0MFNQRV9BRE1BXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnLTg3LVxcbmRyaXZlcnMvZG1hL0tjb25maWc6ODg6Y29uZmlnIEFQUExFX0FETUFDXFxuZHJpdmVycy9kbWEvS2NvbmZpZy04OS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgQURNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9MTU0PWNvbmZpZyBFRklfREVWX1BBVEhfUEFSU0VSXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTE1Ni1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnOjE1Nzpjb25maWcgQVBQTEVfUFJPUEVSVElFU1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkFwcGxlIERldmljZSBQcm9wZXJ0aWVzXFxcIlxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZz02Nj1jb25maWcgQUwzMzIwQVxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy03NS1cXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjc2OmNvbmZpZyBBUERTOTE2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctNzctXFx0dHJpc3RhdGUgXFxcIkFQRFM5MTYwIGNvbWJpbmVkIGFscyBhbmQgcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctODYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo4Nzpjb25maWcgQVBEUzkzMDBcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJBUERTOTMwMCBhbWJpZW50IGxpZ2h0IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo5Nzpjb25maWcgQVBEUzkzMDZcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTk4LVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTMwNiBBbWJpZW50IExpZ2h0IFNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTA4LVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc6MTA5OmNvbmZpZyBBUERTOTk2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTEwLVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTk2MCBnZXN0dXJlL1JHQi9BTFMvcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZz0yOTY9Y29uZmlnIFNQQVBSX1RDRV9JT01NVVxcbi0tXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwMy1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MzA0OmNvbmZpZyBBUFBMRV9EQVJUXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwNS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgREFSVCBJT01NVSBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc9Nzg4PWNvbmZpZyBJUlFfSURUMzI0M1hcXG4tLVxcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5Mi1cXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZzo3OTM6Y29uZmlnIEFQUExFX0FJQ1xcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5NC1cXHRib29sIFxcXCJBcHBsZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQUlDKVxcXCJcXG4tLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMyNz1jb25maWcgU0dJX0dSVV9ERUJVR1xcbi0tXFxuZHJpdmVycy9taXNjL0tjb25maWctMzMzLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnOjMzNDpjb25maWcgQVBEUzk4MDJBTFNcXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzUtXFx0dHJpc3RhdGUgXFxcIk1lZGZpZWxkIEF2YWdvIEFQRFM5ODAyIEFMUyBTZW5zb3IgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnPTEwNj1jb25maWcgTkUyS19QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnOjEyNDpjb25maWcgQVBORVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcIlBDTUNJQSBORTIwMDAgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmM9MzMyMD1zdGF0aWMgaW50IHJ0dzg5X3BjaV9jZmdfZGFjKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldiwgYm9vbCBmb3JjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmMtMzMzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jOjMzMzM6XFx0LyogQ29uZmlndXJlIERBQyBvbmx5IHZpYSBQQ0kgY29uZmlnIEFQSSwgbm90IERCSSBpbnRlcmZhY2VzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzM0LVxcdHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFJUVzg5X1BDSUVfTDFfQ1RSTCwgXFx1MDAyNnZhbCk7XFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNTM9Y29uZmlnIE1BUlZFTExfQ04xMEtfVEFEX1BNVVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjU5LVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI2MDpjb25maWcgQVBQTEVfTTFfQ1BVX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2MS1cXHRib29sIFxcXCJBcHBsZSBNMSBDUFUgUE1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnPTE5ND1jb25maWcgQURWX1NXQlVUVE9OXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnLTIwNC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnOjIwNTpjb25maWcgQVBQTEVfR01VWFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA2LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBHbXV4IERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcG1kb21haW4vYXBwbGUvS2NvbmZpZz0zPWlmIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTQtXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnOjU6Y29uZmlnIEFQUExFX1BNR1JfUFdSU1RBVEVcXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWctNi1cXHRib29sIFxcXCJBcHBsZSBTb0MgUE1HUiBwb3dlciBzdGF0ZSBjb250cm9sXFxcIlxcbi0tXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZz0xOD1jb25maWcgUE9XRVJfU1VQUExZX0hXTU9OXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc6MzE6Y29uZmlnIEFQTV9QT1dFUlxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIkFQTSBlbXVsYXRpb24gZm9yIGNsYXNzIGJhdHRlcmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc9NT1tZW51IFxcXCJBcHBsZSBTb0MgZHJpdmVyc1xcXCJcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTYtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo3OmNvbmZpZyBBUFBMRV9NQUlMQk9YXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTb0MgbWFpbGJveGVzXFxcIlxcbi0tXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjE5OmNvbmZpZyBBUFBMRV9SVEtJVFxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIFJUS2l0IGNvLXByb2Nlc3NvciBJUEMgcHJvdG9jb2xcXFwiXFxuLS1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6MzE6Y29uZmlnIEFQUExFX1NBUlRcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTQVJUIERNQSBhZGRyZXNzIGZpbHRlclxcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDAtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo0MTpjb25maWcgQVBQTEVfVFVOQUJMRVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDItXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZz0xNDc9Y29uZmlnIFVTQl9RQ09NX0VVRFxcbi0tXFxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnLTE1OC1cXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc6MTU5OmNvbmZpZyBBUFBMRV9NRklfRkFTVENIQVJHRVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNjAtXFx0dHJpc3RhdGUgXFxcIkZhc3QgY2hhcmdlIGNvbnRyb2wgZm9yIGlPUyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92aWRlby9LY29uZmlnPTY9bWVudSBcXFwiR3JhcGhpY3Mgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3ZpZGVvL0tjb25maWctNy1cXG5kcml2ZXJzL3ZpZGVvL0tjb25maWc6ODpjb25maWcgQVBFUlRVUkVfSEVMUEVSU1xcbmRyaXZlcnMvdmlkZW8vS2NvbmZpZy05LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz0xMTExPWNvbmZpZyBNU0MzMTNFX1dBVENIRE9HXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyMi1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6MTEyMzpjb25maWcgQVBQTEVfV0FUQ0hET0dcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgU29DIHdhdGNoZG9nXFxcIlxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE2NTI9eGZzX2ZzX2ZpbGxfc3VwZXIoXFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmMtMTY2NC1cXHQgKiBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBjb21wbGV0ZWQgYnkgZWl0aGVyIHRoZSBvbGQgbW91bnQgQVBJIG9yXFxuZnMveGZzL3hmc19zdXBlci5jOjE2NjU6XFx0ICogdGhlIG5ld2VyIGZzb3Blbi9mc2NvbmZpZyBBUEkuXFxuZnMveGZzL3hmc19zdXBlci5jLTE2NjYtXFx0ICovXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0zMTA9Y29uZmlnIFBNX1RSQUNFX1JUQ1xcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzI3LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjMyODpjb25maWcgQVBNX0VNVUxBVElPTlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjIxLjMxODY3NzIzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY0NDA1NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBBUCAoQXBwbGljYXRpb24gUHJvY2Vzc29yKSBTdXBwb3J0IGluIHMzOTAgQXJjaGl0ZWN0dXJlKipcblxuUmlnaHQsIHNvIEkgc2VlIGBjb25maWcgQVBgIGlzIGRlZmluZWQgaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgaXQsIGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhhdCBjb25maWcgb3B0aW9uLiBMZXQgbWUganVtcCBpbnRvIGBhcmNoL3MzOTAvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDc5Ni4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZvciB1bmRlcnN0YW5kaW5nIHRoZXNlIHNvcnRzIG9mIGZlYXR1cmUgY29uZmlndXJhdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVwZW5kZW5jeSBkZWZpbml0aW9ucywgbWF5YmUgc29tZSBkZWZhdWx0cywgYW5kIGhvcGVmdWxseSBzb21lIGdvb2QgY29tbWVudHMgdG8gY2xhcmlmeSBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIHMzOTAga2VybmVsIGJ1aWxkLiBJJ20gY3VyaW91cyB0byBzZWUgaG93IEFQIHN1cHBvcnQgaXMgY29uZmlndXJlZCBhbmQgd2hhdCBpdCBlbmFibGVzIChvciBkaXNhYmxlcykgaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5OTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODoyNC44ODMwODUyOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIEVBRE0gc3ViY2hhbm5lbHMuIEVBRE0gc3ViY2hhbm5lbHMgYWN0XFxuIDc5MTpcXHRcXHQgIGFzIGEgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIGZvciBTQ00gaW5jcmVtZW50cy5cXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNzk0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVhZG1fc2NoLlxcbiA3OTU6XFx0XFxuIDc5NjpcXHRjb25maWcgQVBcXG4gNzk3OlxcdFxcdGRlZl90cmlzdGF0ZSB5XFxuIDc5ODpcXHRcXHRwcm9tcHQgXFxcIlN1cHBvcnQgZm9yIEFkanVuY3QgUHJvY2Vzc29ycyAoYXApXFxcIlxcbiA3OTk6XFx0XFx0aGVscFxcbiA4MDA6XFx0XFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2UgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzIHZpYVxcbiA4MDE6XFx0XFx0ICB0aGUgYXAgYnVzLCBjYXJkcyBhbmQgcXVldWVzLiBTdXBwb3J0ZWQgQWRqdW5jdCBQcm9jZXNzb3JzIGFyZVxcbiA4MDI6XFx0XFx0ICB0aGUgQ3J5cHRvRXhwcmVzcyBDYXJkcyAoQ0VYKS5cXG4gODAzOlxcdFxcbiA4MDQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODA1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFwLlxcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgKGRlZmF1bHQpLlxcbiA4MDg6XFx0XFxuIDgwOTpcXHRjb25maWcgQVBfREVCVUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MjQuODgzMTcxNDIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODQ4MzQyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVsdmluZyBpbnRvIENyeXB0b0V4cHJlc3MgQ2FyZCBFbXVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIENyeXB0b0V4cHJlc3MgQ2FyZHMsIHRoZXNlIENFWCBkZXZpY2VzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGhhcmR3YXJlIGlzIGVtdWxhdGVkIHdpdGhpbiBRRU1VLiBJdCdzIGEga2V5IHF1ZXN0aW9uIHdoZW4gdGhpbmtpbmcgYWJvdXQgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQuIEkgbmVlZCB0byBzZWUgaWYgUUVNVSBwcm92aWRlcyBhbnkgQVAgZGV2aWNlIGVtdWxhdGlvbi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHN5emthbGxlciBoYXMgc29tZSBzMzkweCBzdXBwb3J0LCB3aGljaCBjb3VsZCBiZSBoZWxwZnVsLCBidXQgdGhhdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gaXQgZW11bGF0ZXMgQVAgZGV2aWNlcy5cblxuQWgsIHJpZ2h0LCBWRklPIEFQLiBJdCdzIGNsaWNraW5nIG5vdy4gSXQncyBhIG1lZGlhdGVkIGRldmljZSwgYW4gbWRldiBkcml2ZXIuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuIFNvLCB0aGUga2V5IGlzIHRvIHNlZSBpZiBJIGNhbiByZWFjaCBgdmZpb19hcF9tZGV2X3Byb2JlYC4gVGhhdCdzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhpcyBtZWRpYXRlZCBkZXZpY2UuIE1lZGlhdGVkIGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCB3aGljaCBpcyBncmVhdC5cblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcywgSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLiBUaGF0J3Mgd2hlcmUgSSBzaG91bGQgZmluZCBvdXQgaG93IGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIGNvbm5lY3RlZCB0byB0aGUgd2hvbGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTY4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MzAuODY4MDA4MTk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM5MjIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcXHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYwLVxcdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc3Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzg5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3OTA6c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzQ9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4Mi1cXHR9LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzgzOlxcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4NC1cXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNDEwPXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDE1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDE2OmludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MTcte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNTY9dm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE1ODppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1OS12b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqcXVldWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODozMC45MTU0MDc2MzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMjExMDY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqTXkgVW5kZXJzdGFuZGluZyBvZiB0aGUgdmZpb19hcF9tYXRyaXhfZHJpdmVyKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHZmaW9fYXBfbWF0cml4X2RyaXZlcmAsIGFuZCBpdCdzIGNyeXN0YWwgY2xlYXIgdGhhdCB0aGlzIGlzIGFuIGBtZGV2X2RyaXZlcmAsIGEgZHJpdmVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgbWVkaWF0ZWQgZGV2aWNlcy4gVGhlIGNvcmUgY29uY2VwdCBpbnN0YW50bHkgY2xpY2tzIC0gaWYgeW91IHdhbnQgdG8gaW5zdGFudGlhdGUgYW4gbWRldiwgeW91IGZ1bmRhbWVudGFsbHkgbmVlZCBpdHMgcGFyZW50IGRldmljZS4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIGV2ZXJ5dGhpbmcgZWxzZSBpcyBidWlsdC5cblxuTm93LCB3aGVyZSBkbyB3ZSBmaW5kIHRoZXNlIHBhcmVudCBkZXZpY2VzPyBBaCwgeWVzLCB0aGV5J3JlIGJlaW5nIHJlZ2lzdGVyZWQgd2l0aGluIGVpdGhlciBgdmZpb19hcF9kcnYuY2Agb3IgcG90ZW50aWFsbHkgYHZmaW9fYXBfb3BzLmNgLiBTbyB0aGF0J3MgdGhlIGxvY2F0aW9uIG9mIHRoZSB2aXRhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjM0LjUyNzUyMDczMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5NjQ2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRldl9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzODc9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzOTE6XFx0cmV0ID0gbWRldl9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnZmaW9fYXBfbWF0cml4X2RyaXZlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTItXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MzQuNTcyNDkwNTExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzU5NDgwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBQYXJlbnQgRGV2aWNlIENyZWF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHBhcmVudCBkZXZpY2UuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IGl0cyBjcmVhdGlvbiBwb2ludC4gV2hlcmUsIGluIHRoZSBjb2RlYmFzZSwgaXMgdGhhdCBpbnN0YW50aWF0aW9uIGFjdHVhbGx5IGhhcHBlbmluZz8gSXMgaXQgZGlyZWN0bHkgaW4gYSBjb25maWd1cmF0aW9uIGZpbGU/IElzIHRoZXJlIHNvbWUgZmFjdG9yeSBwYXR0ZXJuIGludm9sdmVkPyBBbSBJIGxvb2tpbmcgYXQgYSBkaXJlY3QgYG5ld2AgY2FsbCwgb3Igc29tZXRoaW5nIG1vcmUgYWJzdHJhY3RlZCBiZWhpbmQgYSBidWlsZGVyIG9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGZyYW1ld29yaz8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgcmVsZXZhbnQgbW9kdWxlcywgc3RhcnRpbmcgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBsb2FkaW5nIGFuZCBzZXR1cCByb3V0aW5lcy4gSSdsbCBiZSBsb29raW5nIGZvciBrZXl3b3JkcyBsaWtlIFwibmV3LFwiIFwiY3JlYXRlLFwiIFwiaW5pdGlhbGl6ZSxcIiBvciBhbnl0aGluZyBzdWdnZXN0aXZlIG9mIG9iamVjdCBjb25zdHJ1Y3Rpb24gcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIGRldmljZSB0eXBlLiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCBjbG9zZWx5LCBwYXlpbmcgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgY3JlYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIG9yaWdpbiBwb2ludCBpcyBjcnVjaWFsIGJlZm9yZSBjb25zaWRlcmluZyBmdXJ0aGVyIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODozOC40MDg0NDE5NjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzE4MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kZXZfcmVnaXN0ZXJfcGFyZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzg3PWludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzk3LVxcdG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZXMgPSBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzk4OlxcdHJldCA9IG1kZXZfcmVnaXN0ZXJfcGFyZW50KFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VwYXJlbnQsIFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTktXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnZmaW9fYXBfbWF0cml4X2RyaXZlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MzguNDUyNzY1NzI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzIzMDc5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEZXZpY2UgQ29udGV4dCoqXG5cbkFscmlnaHQsIG15IGJyYWluIGp1c3Qgd2VudCBzdHJhaWdodCB0byBgbWF0cml4X2Rldi1cdTAwM2VkZXZpY2VgLiBUaGF0J3MgdGhlIGtleS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYG1hdHJpeF9kZXZgIHN0cnVjdHVyZSBhbmQgdGhlIHVuZGVybHlpbmcgZGV2aWNlIHJlcHJlc2VudGF0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBcImRldmljZVwiIG1lbWJlciBvZiB0aGUgYG1hdHJpeF9kZXZgIHN0cnVjdHVyZS5cblxuVGhpcyBpbXBsaWVzIEknbSBwcm9iYWJseSBkZWFsaW5nIHdpdGggc29tZSBzb3J0IG9mIGFic3RyYWN0aW9uIGxheWVyIG9yIGEgZHJpdmVyIGFyY2hpdGVjdHVyZSB3aGVyZSBgbWF0cml4X2RldmAgbGlrZWx5IGVuY2Fwc3VsYXRlcyB0aGUgaGlnaGVyLWxldmVsIG1hdHJpeCBvcGVyYXRpb24sIGFuZCB0aGUgXCJkZXZpY2VcIiBtZW1iZXIgaXMgaG93IHdlIGludGVyZmFjZSB3aXRoIHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgdW5kZXJseWluZyBjb21wdXRlIHJlc291cmNlLiBBbSBJIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyByZWdpc3RlcnMgb3IgaG93IHRoZSBtZW1vcnkgaXMgbWFwcGVkP1xuXG5JJ20gcHJvYmFibHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGFjY2VzcywgY29uZmlndXJlLCBvciBjb250cm9sIGEgc3BlY2lmaWMgZGV2aWNlIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0gaW52b2x2aW5nIG1hdHJpeCBvcGVyYXRpb25zLiBNYXliZSBJJ20gdHJvdWJsZXNob290aW5nLCBvciBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLCBvciBldmVuIGFkZGluZyBhIG5ldyBmZWF0dXJlLiBVbmRlcnN0YW5kaW5nIHRoaXMgY29ubmVjdGlvbiBpcyBjcml0aWNhbCB0byByZXNvbHZpbmcgdGhlIHByb2JsZW0gb3IgdGFzay4gSSB3b25kZXIgd2hhdCBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIGRldmljZSB0aGlzIHBvaW50cyB0by4gSGFyZHdhcmUgY2hhcmFjdGVyaXN0aWNzLCBtZW1vcnkgYWxsb2NhdGlvbiwgY29udGV4dCBtYW5hZ2VtZW50Li4uIHdoZXJlIGRvZXMgdGhpcyByYWJiaXQgaG9sZSBsZWFkP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjQzLjQ4NTA3Njg4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0OTgyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNjpcXHRkZXZfc2V0X25hbWUoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIiVzXFxcIiwgVkZJT19BUF9ERVZfTkFNRSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNzpcXHRtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExODpcXHRtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UuYnVzID0gXFx1MDAyNm1hdHJpeF9idXM7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExOTpcXHRtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UucmVsZWFzZSA9IHZmaW9fYXBfbWF0cml4X2Rldl9yZWxlYXNlO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMjAtXFx0bWF0cml4X2Rldi1cXHUwMDNldmZpb19hcF9kcnYgPSBcXHUwMDI2dmZpb19hcF9kcnY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTEyMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTIyOlxcdHJldCA9IGRldmljZV9yZWdpc3RlcihcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTIzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTMyLW1hdHJpeF9kcnZfZXJyOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxMzM6XFx0ZGV2aWNlX2RlbChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTM0LW1hdHJpeF9yZWdfZXJyOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxMzU6XFx0cHV0X2RldmljZShcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTM2LW1hdHJpeF9hbGxvY19lcnI6XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTQzPXN0YXRpYyB2b2lkIHZmaW9fYXBfbWF0cml4X2Rldl9kZXN0cm95KHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE0NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE0NTpcXHRzdHJ1Y3QgZGV2aWNlICpyb290X2RldmljZSA9IG1hdHJpeF9kZXYtXFx1MDAzZWRldmljZS5wYXJlbnQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE0Ni1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTQ3LVxcdGRyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZtYXRyaXhfZHJpdmVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTQ4OlxcdGRldmljZV91bnJlZ2lzdGVyKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNDktXFx0YnVzX3VucmVnaXN0ZXIoXFx1MDAyNm1hdHJpeF9idXMpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzODc9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTctXFx0bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlcyA9IFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X3R5cGU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzOTg6XFx0cmV0ID0gbWRldl9yZWdpc3Rlcl9wYXJlbnQoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZXBhcmVudCwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM5OS1cXHRcXHRcXHRcXHQgICBcXHUwMDI2dmZpb19hcF9tYXRyaXhfZHJpdmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODo0My41MzA1ODA0OTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkzNDIzOTM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipNeSBVbmRlcnN0YW5kaW5nIG9mIHRoZSBNYXRyaXggRGV2aWNlIENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gYG1hdHJpeF9kZXZgIGlzIGJlaW5nIHNwdW4gdXAuIFNlZW1zIGxpa2UgaXQncyB0YWtpbmcgb24gdGhlIHJvbGUgb2YgYSByb290IGRldmljZSBvciBhIGNoaWxkIG9mIHRoZSBgcm9vdF9kZXZpY2VgIG9uIHRoZSBgbWF0cml4X2J1c2AuIFRoYXQncyB0aGUgc2V0dXAgSSdkIGV4cGVjdC4gTm93LCBoZXJlJ3MgdGhlIGludGVyZXN0aW5nIGJpdCDigJMgaXQgZG9lc24ndCBsb29rIGxpa2Ugd2UgKm5lZWQqIHRob3NlIHBoeXNpY2FsIEFQIGRldmljZXMgdG8gYWN0dWFsbHkgKmNyZWF0ZSogdGhlIHBhcmVudCBmb3IgdGhlIG1kZXYuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gV2UncmUgZ2V0dGluZyB0byB0aGUgbWVhdCBvZiB0aGUgbWF0dGVyLlxuXG5BaCwgYW5kIHRoZXJlIGl0IGlzOiBgdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZWAgaXMgZ2V0dGluZyBjYWxsZWQgKmR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24qLiBUaGF0J3Mgd2hlcmUgdGhlIGNyZWF0aW9uIGxvZ2ljIGlzIGhhcHBlbmluZy4gVGhpcyBjbGFyaWZpZXMgdGhlIHRpbWluZyDigJMgaXQncyBoYXBwZW5pbmcgZWFybHkgaW4gdGhlIGRldmljZSBsaWZlY3ljbGUsIHJpZ2h0IHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkaW5nLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGRldmljZSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJIGNhbiBzZWUgaG93IHRoZSBmcmFtZXdvcmsgaXMgZXN0YWJsaXNoZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6NDkuNDY0ODIyNDEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ5OTg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz03OT1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbWF0cml4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy04NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6ODY6c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTg3LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNjc9c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzk6XFx0cmV0ID0gdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZSgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xODAtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6NDkuNTExMzI2NTExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjMyMzkxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlZGSU8gRGV2aWNlIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgY29yZSBwcm9jZXNzIGJlZ2lucyB3aXRoIHRoZSB1bmNvbmRpdGlvbmFsIGNyZWF0aW9uIG9mIHRoZSBwYXJlbnQgVkZJTyBkZXZpY2UgZHVyaW5nIHRoZSBtb2R1bGUncyBpbml0aWFsaXphdGlvbi4gVGhhdCBtYWtlcyBzZW5zZTsgaXQgZXN0YWJsaXNoZXMgdGhlIGZvdW5kYXRpb24uIEFmdGVyIHRoYXQgaW5pdGlhbCBzZXR1cCBpcyBjb21wbGV0ZSwgdGhlIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGZ1bmN0aW9uIGlzIGludm9rZWQuIFNvIHRoZSBwYXJlbnQgZGV2aWNlIGlzIHJlYWR5LCBhbmQgbm93IHdlIHJlZ2lzdGVyIHRoZSBtZWRpYXRlZCBkZXZpY2UuIFRoYXQgc3VnZ2VzdHMgYSBjbGVhciBzZXF1ZW5jZTogZXN0YWJsaXNoIHRoZSBiYXNlLCB0aGVuIGNvbm5lY3QgdGhlIG1lZGlhdGVkIGluc3RhbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODo1My44NzQ1NjkwNTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTY2OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfbWRldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4OC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTg5OlxcdHJldCA9IHZmaW9fYXBfbWRldl9yZWdpc3RlcigpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xOTAtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzQ9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4Ni1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM4NzppbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODgte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNDM9c3RydWN0IHZmaW9fYXBfcXVldWUge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNTU6aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ni12b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODo1My45MTk3NDEwNjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0MTEzMTI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBtZGV2IFJlZ2lzdHJhdGlvbiBhbmQgUHJvYmUgRmxvdyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgdGhlIGBtZGV2YCBwYXJlbnQgaXMgcmVnaXN0ZXJlZCB3aXRob3V0IGFueSBjb25kaXRpb25hbCBjaGVja3MsIHdoaWNoIGlzIGEga2V5IG9ic2VydmF0aW9uLiBUaGF0IGltcGxpZXMgdGhhdCBhbnkgdXNlcnNwYWNlIHByb2Nlc3Mgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMgY2FuIGNyZWF0ZSBgbWRldmAgZGV2aWNlcyBkaXJlY3RseSB0aHJvdWdoIHRoZSBgc3lzZnNgIGludGVyZmFjZS4gVGhpcyB0cmlnZ2VycyBhIGNhbGwgdG8gYHZmaW9fYXBfbWRldl9wcm9iZWAuIFNvLCBteSBmb2N1cyBzaG91bGQgbm93IHNoaWZ0IHRvIHNjcnV0aW5pemluZyB3aGF0IGV4YWN0bHkgaGFwcGVucyBpbnNpZGUgYHZmaW9fYXBfbWRldl9wcm9iZWAuIFdoYXQncyB0aGUgY29udHJvbCBmbG93IHRoZXJlPyBXaGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkPyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBhIHBvdGVudGlhbGx5IHVuY29uZGl0aW9uYWwgcHJvYmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBmcm9tIHRoaXMgdW5jb25kaXRpb25hbCBjcmVhdGlvbiBwYXRoLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozOTowMC45NjA4NzY1MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3ODA6XFx0XFxuIDc4MTpcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNlbWRldiA9IHRvX21kZXZfZGV2aWNlKHZkZXYtXFx1MDAzZWRldik7XFxuIDc4MjpcXHRcXHR2ZmlvX2FwX21hdHJpeF9pbml0KFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VpbmZvLCBcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeCk7XFxuIDc4MzpcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNlcHFhcF9ob29rID0gaGFuZGxlX3BxYXA7XFxuIDc4NDpcXHRcXHR2ZmlvX2FwX21hdHJpeF9pbml0KFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VpbmZvLCBcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiKTtcXG4gNzg1OlxcdFxcdGhhc2hfaW5pdChtYXRyaXhfbWRldi1cXHUwMDNlcXRhYmxlLnF1ZXVlcyk7XFxuIDc4NjpcXHRcXG4gNzg3OlxcdFxcdHJldHVybiAwO1xcbiA3ODg6XFx0fVxcbiA3ODk6XFx0XFxuIDc5MDpcXHRzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXFxuIDc5MTpcXHR7XFxuIDc5MjpcXHRcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xcbiA3OTM6XFx0XFx0aW50IHJldDtcXG4gNzk0OlxcdFxcbiA3OTU6XFx0XFx0bWF0cml4X21kZXYgPSB2ZmlvX2FsbG9jX2RldmljZShhcF9tYXRyaXhfbWRldiwgdmRldiwgXFx1MDAyNm1kZXYtXFx1MDAzZWRldixcXG4gNzk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kZXZfb3BzKTtcXG4gNzk3OlxcdFxcdGlmIChJU19FUlIobWF0cml4X21kZXYpKVxcbiA3OTg6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobWF0cml4X21kZXYpO1xcbiA3OTk6XFx0XFxuIDgwMDpcXHRcXHRyZXQgPSB2ZmlvX3JlZ2lzdGVyX2VtdWxhdGVkX2lvbW11X2RldihcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZXZkZXYpO1xcbiA4MDE6XFx0XFx0aWYgKHJldClcXG4gODAyOlxcdFxcdFxcdGdvdG8gZXJyX3B1dF92ZGV2O1xcbiA4MDM6XFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcXG4gODA0OlxcdFxcdG1hdHJpeF9tZGV2LVxcdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xcbiA4MDU6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZtZGV2LVxcdTAwM2VkZXYsIG1hdHJpeF9tZGV2KTtcXG4gODA2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrKTtcXG4gODA3OlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNlbm9kZSwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCk7XFxuIDgwODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrKTtcXG4gODA5OlxcdFxcdHJldHVybiAwO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRlcnJfcHV0X3ZkZXY6XFxuIDgxMjpcXHRcXHR2ZmlvX3B1dF9kZXZpY2UoXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2V2ZGV2KTtcXG4gODEzOlxcdFxcdHJldHVybiByZXQ7XFxuIDgxNDpcXHR9XFxuIDgxNTpcXHRcXG4gODE2OlxcdHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuIDgxNzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuIDgxODpcXHR7XFxuIDgxOTpcXHRcXHRpZiAoIXEgfHwgdmZpb19hcF9tZGV2X2dldF9xdWV1ZShtYXRyaXhfbWRldiwgcS1cXHUwMDNlYXBxbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjAwLjk2MTExMDY2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDMwNjE5NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKlZGSU8tQVAgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoYXQncyBnb29kLCBidXQgaXQncyBqdXN0IHRoZSBiZWdpbm5pbmcuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuIExldCdzIHNlZS4uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBhbmQgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBzdXNwZWN0IG1hbmFnZSBkZXZpY2UgY3JlYXRpb24sIHJlbW92YWwsIGFuZCBjaGFuZ2VzIHRvIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZXNlIEFQIGRldmljZXMuIFRoZW4gdGhlcmUncyB0aGUgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgZnVuY3Rpb24uIEkgaGF2ZSB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGltcGFjdHMgaG93IEFQIGRldmljZXMgYXJlIGluaXRpYWxpemVkLiBUaGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb24gY2FsbHMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NjAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjA3LjM5MTczNDg1MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzOTY2NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNTU3PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1ODUtLyoqXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1ODY6ICogdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUgLSBkZXRlcm1pbmVzIHdoaWNoIGd1ZXN0cyBhcmUgdXNpbmcgdGhlIGFkYXB0ZXJzLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTg3LSAqXFx0XFx0XFx0ICAgICBkb21haW5zIGFuZCBjb250cm9sIGRvbWFpbnMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1OTctICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1OTg6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTk5LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICphcV9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjY0Nj1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjY3LVxcdGlmIChkb19yZW1vdmUpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI2Njg6XFx0XFx0dmZpb19hcF9tZGV2X2NmZ19yZW1vdmUoYXByZW0sIGFxcmVtLCBjZHJlbSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2NjktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozOTowNy44MjU3MDYxOTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgzNzk0NDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGFja2xpbmcgdGhpczpcblxuKipBbmFseXppbmcgYHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlYCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IG15IGhlYWQgYXJvdW5kIGB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZWAuIFRoaXMgbGlrZWx5IGRlYWxzIHdpdGggcmVtb3ZpbmcgYSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gbWVkaWF0ZWQgZGV2aWNlcyB3aXRoaW4gdGhlIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKSBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBmb3IgQWNjZXNzIFByb3RlY3Rpb24gKEFQKSBtZWRpYXRlZCBkZXZpY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gKmRvKiwgYW5kIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIFZGSU8ncyBtZGV2IChtZWRpYXRlZCBkZXZpY2UpIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXMgaXQgcGVydGFpbnMgdG8gQVAuIElzIHRoaXMgcGFydCBvZiBhIGNsZWFudXAgcm91dGluZSwgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCwgb3IgYSBjb3JlIHBhcnQgb2YgdGhlIG1kZXYgdGVhci1kb3duIHByb2Nlc3M/IE15IGV4cGVyaWVuY2Ugd2l0aCBWRklPIHRlbGxzIG1lIGl0J3MgcHJvYmFibHkgbGlua2VkIHRvIGEgc3BlY2lmaWMgZGV2aWNlIHN0YXRlLiBJdCdzIGxpa2VseSBpbnZvbHZlZCB3aXRoIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIG9yIHJlc291cmNlIGNvcnJ1cHRpb24gdXBvbiByZW1vdmFsLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgYW5kIHJlc291cmNlIGRlYWxsb2NhdGlvbiB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8ga25vdyB3aGF0IHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24uIFRoZSBjb250ZXh0IHdpbGwgdGVsbCBtZSBob3cgY3JpdGljYWwgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjE0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzk6MTcuNjYzNjU0MTc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDUyMTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU5OD1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjYzOC0vKipcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjYzOTogKiB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZSAtIHJlc3BvbmRzIHRvIHRoZSByZW1vdmFsIG9mIGFkYXB0ZXJzLCBkb21haW5zIGFuZFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjQwLSAqXFx0XFx0XFx0XFx0Y29udHJvbCBkb21haW5zIGZyb20gdGhlIGhvc3QgQVAgY29uZmlndXJhdGlvblxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2NDUtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI2NDY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2NDctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqcHJldl9jb25maWdfaW5mbylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yODE5PXZvaWQgdmZpb19hcF9vbl9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jZmdfaW5mbyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODI2LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyODI3OlxcdHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlKGN1cl9jZmdfaW5mbywgcHJldl9jZmdfaW5mbyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MjgtXFx0dmZpb19hcF9tZGV2X29uX2NmZ19hZGQoY3VyX2NmZ19pbmZvLCBwcmV2X2NmZ19pbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzk6MTcuNzE0MTgwNTA4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MzU1Mjc2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCwgYW5kIGl0IHVzdWFsbHkgbWVhbnMgc29tZXRoaW5nIHNpZ25pZmljYW50IGhhcyBvY2N1cnJlZCB3aXRoaW4gdGhlIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKSBzdWJzeXN0ZW0gcmVsYXRlZCB0byB0aGUgYWNjZXNzIHByb3RlY3Rpb24gY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBjYWxsIGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgbWVudGFsbHkgZ28gdGhyb3VnaCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBjYWxsIHNpdGVzIHRvIGdldCBhIGdyYXNwIG9mIHRoZSB0cmlnZ2Vycy4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hhdCBraW5kcyBvZiBldmVudHMgY291bGQgcG9zc2libHkgbmVjZXNzaXRhdGUgYSBjaGFuZ2UgaW4gdGhlIGFjY2VzcyBwcm90ZWN0aW9uIGNvbmZpZ3VyYXRpb24uIERldmljZSBob3RwbHVnZ2luZz8gU2VjdXJpdHkgY29udGV4dHM/IFBlcmhhcHMgc29tZSBzb3J0IG9mIHJlc291cmNlIHJlYWxsb2NhdGlvbiBvciB2aXJ0dWFsaXphdGlvbiBtYW5hZ2VtZW50IG9wZXJhdGlvbj8gS25vd2luZyB0aGUgc3BlY2lmaWMgdHJpZ2dlciBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgaW1wbGVtZW50YXRpb24sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tzIGl0IHVzZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFZGSU8gaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byBpbW1lZGlhdGVseSBldmFsdWF0ZSBwb3RlbnRpYWwgaW1wYWN0cyBpZiB0aGlzIGlzIGhhbmRsZWQgaW5jb3JyZWN0bHkuIFRoZSBpbXBsaWNhdGlvbnMgb2YgZ2V0dGluZyBhY2Nlc3MgcHJvdGVjdGlvbiB3cm9uZyBpbiBWRklPIGFyZSBodWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjIzLjM0OTcxMjIxM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNjExNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcF9vbl9jZmdfY2hhbmdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtNjEtXFx0LmluX3VzZSA9IHZmaW9fYXBfbWRldl9yZXNvdXJjZV9pbl91c2UsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjYyOlxcdC5vbl9jb25maWdfY2hhbmdlZCA9IHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYzLVxcdC5vbl9zY2FuX2NvbXBsZXRlID0gdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3ODc9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19hZGQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgxMi0vKipcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgxMzogKiB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkIC0gaGFuZGxlcyBub3RpZmljYXRpb24gb2YgY2hhbmdlcyB0byB0aGUgaG9zdCBBUFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODE0LSAqXFx0XFx0XFx0ICAgIGNvbmZpZ3VyYXRpb24uXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgxOC0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgxOTp2b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY2ZnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MjAtXFx0XFx0XFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqcHJldl9jZmdfaW5mbylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTYxPWludCB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlKHVuc2lnbmVkIGxvbmcgKmFwbSwgdW5zaWduZWQgbG9uZyAqYXFtKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2Mi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE2Mzp2b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjQtXFx0XFx0XFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqb2xkX2NvbmZpZ19pbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzk6MjMuNDAwOTc5NzQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzQwMTU0NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU8tQVAgTG9ja2luZyBMb2dpYyBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCBpcyBhbiBgYXBfZHJpdmVyYCBjYWxsYmFjaywgdHJpZ2dlcmVkIGJ5IHRoZSBBUCBidXMuICBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBBUCBidXMgZXZlbiAqZXhpc3RzKiBpbiBRRU1VLiAgQWgsIHJpZ2h0LCB3ZSBoYXZlIHNvbWUgczM5MHggc3VwcG9ydCwgc28geWVzLCBpdCdzIGEgcG9zc2liaWxpdHkuICBOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHBhdGggcmVhY2hhYmxlPyBTeXprYWxsZXIgZG9lc24ndCBkZWZhdWx0IHRvIHMzOTB4IFZNcywgYnV0IGl0IGhhcyBhbiBzMzkweCBwb3J0LCBzbyBpdCdzIGEgZGVmaW5pdGUgbWF5YmUuIElmIGl0J3MgcmVhY2hhYmxlLCBpdCdzIGZ1enphYmxlLlxuXG5UaGlzIHBhdGNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBhIGxvY2tpbmcgbG9naWMgY2hhbmdlLiAgU3BlY2lmaWNhbGx5LCBJJ20gc2VlaW5nOlxuXG5gYGBjXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2bWF0cml4X21kZXYtXHUwMDNlbm9kZSwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG5gYGBcblxuYW5kIGFsc28gdGhpczpcblxuYGBgY1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcbitcdFx0ICogYW5kIGt2bS1cdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xuK1x0XHQgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuXG4rXHRcdCAqL1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuIFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG5gYGBcblxuU28sIHRoaXMgY2hhbmdlIGlzIGEgZnVuY3Rpb25hbCBvbmUsIGFpbWVkIGF0IHByZXZlbnRpbmcgZGVhZGxvY2tzIG9yIGZpeGluZyBsb2NrZGVwIGlzc3Vlcywgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIHRvIGZ1enouXG5cbkxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiAgSSdtIHRoaW5raW5nOlxuXG4qICAgYHZmaW9fYXBfbWRldl9wcm9iZWBcbiogICBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgXG4qICAgYHZmaW9fYXBfbWRldl9jZmdfYWRkYFxuKiAgIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYFxuKiAgIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgXG5cbkhvbGQgb24uLi4gYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBhbmQgYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIHRoZXkgYXJlIGlubGluZWQuIE5vLCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmVgIGFuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgLCB3aGljaCBhcmUgaW4gdHVybiBjYWxsZWQgYnkgYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgLiBPa2F5LCBzbyB3ZSBjYW4gcHJvYmFibHkgZm9jdXMgb24gYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBhcyBwcmltYXJ5IHRhcmdldHMsIHNpbmNlIHRoZXkgYXJlIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gQW5kLCBhcyBiZWZvcmUsICBgdmZpb19hcF9tZGV2X3Byb2JlYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSB3aWxsIGNvbmZpcm0gdGhlIHN0YXRpYyBzdGF0dXMgYWdhaW4gLSBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgIGlzIHN0YXRpYywgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgIGlzIHN0YXRpYyB0b28uICBCdXQgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgaXMgbm9uLXN0YXRpYyAoZXhwb3J0ZWQgb3Igc29tZXRoaW5nIHNpbWlsYXIpLiBUaGF0IGNvbmZpcm1zIHRoZSBmdXp6aW5nIHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzEwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjM1LjE0MTEzNzQ0NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MDY1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4MzQ9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NTg6dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NTktXFx0XFx0XFx0ICAgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2Mz12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjQtXFx0XFx0XFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqb2xkX2NvbmZpZ19pbmZvKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE2NTp2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjM1LjE4ODA1Mjg2NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzQxMDIyODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFZGSU8tQVAgTW9kdWxlIEVudHJ5IFBvaW50cyBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIGluc3RpbmN0IHBvaW50cyBtZSB0b3dhcmRzIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAsIGFuZCBgdmZpb19hcF9tZGV2X3Byb2JlYCBhcyB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIGluIHRoaXMgYFZGSU8tQVBgIGNvbnRleHQuIEFoLCByaWdodCwgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgZGVjbGFyZWQgYHN0YXRpY2AuIEkgc2hvdWxkIHByb2JhYmx5IHByZWZlciBhIG5vbi1zdGF0aWMgb3B0aW9uIGlmIGF2YWlsYWJsZSwgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIGNhbiBzb21ldGltZXMgaGluZGVyIGFuYWx5c2lzLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCdzIGJlaW5nIHBhc3NlZCBhcyBhIGNhbGxiYWNrLiBZZXMsIGl0IGxvb2tzIGxpa2UgaXQncyB1c2VkIGFzIHRoZSBgLnByb2JlYCBmdW5jdGlvbiBpbiBgdmZpb19hcF9tYXRyaXhfZHJpdmVyYCwgd2hpY2ggbWFrZXMgaXQgYW4gZW50cnkgcG9pbnQuIEJ1dCwgYXMgYSBwcm9iZSBmdW5jdGlvbiwgaXQncyB2ZXJ5IHVubGlrZWx5IHRvIGJlIGlubGluZWQsIHNvIGluY2x1ZGluZyBpdCBpcyBwcm9iYWJseSBmaW5lIGFuZCB3b24ndCBjb21wbGljYXRlIHRoaW5ncy5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEknbSBzZWVpbmcgdGhhdCB3ZSBjbGVhcmx5IG5lZWQgYFZGSU9fQVBgLiBXYWl0LCBgQVBgIGlzIGBkZWZfdHJpc3RhdGUgeWAgaW4gdGhlIGBhcmNoL3MzOTAvS2NvbmZpZ2AsIHNvIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHMzOTAuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuIExldCdzIGRpZyBpbnRvIGBWRklPX0FQYCdzIGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgbm90aGluZyBlbHNlIGlzIHJlcXVpcmVkLiBPa2F5LCBpdCBuZWVkcyBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYCwgd2hpY2ggd2UgY292ZXJlZCwgYW5kIGBWRklPX01ERVZgLCB3aGljaCBpcyBzZWxlY3RlZCBieSBgVkZJT19BUGAgaXRzZWxmLlxuXG5TbywgbG9va3MgbGlrZSBlbmFibGluZyBgVkZJT19BUGAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGNvbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjQwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjQxLjkyOTA3ODU0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0ODEzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL0tjb25maWc9ODIzPWNvbmZpZyBWRklPX0NDV1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctODMzLVxcbmFyY2gvczM5MC9LY29uZmlnOjgzNDpjb25maWcgVkZJT19BUFxcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cXHRkZWZfdHJpc3RhdGUgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozOTo0MS45NzY1NjY0MTNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4OTcxMDc5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWRklPIEFQIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBWRklPX0FQYCBjb25maWd1cmF0aW9uLCB0aGF0J3MgZGVmaW5pdGVseSB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uLiBJJ20gc2VlaW5nIGl0J3MgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIFxuXG5JIGNoZWNrZWQ6IGBLVk1gIGFuZCBgVkZJT2AgYXJlIHN0YW5kYXJkIGJ1dCBgVkZJT19BUGAgaXMgdGhlIG1haW4gdGFyZ2V0LlxuXG5JIHdlbnQgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBgdmZpb19hcF9tZGV2X3Byb2JlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QuIEl0IG1lYW5zIGl0J3MgYSBkaXJlY3QgY2FsbGJhY2sgYW5kIGNhbiBiZSBpbmNsdWRlZC4gVGhlcmUncyBubyBub24tc3RhdGljIHdyYXBwZXIgYXJvdW5kIGl0LCBpdCdzIGRpcmVjdGx5IGFzc2lnbmVkIHRvIGBtZGV2X2RyaXZlci5wcm9iZWAuIFRoZW4sIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCBhbmQgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgYXJlIG5vbi1zdGF0aWMuXG5cbk15IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6XG5cbiogICBgdmZpb19hcF9tZGV2X3Byb2JlYFxuKiAgIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYFxuKiAgIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgXG5cbkFuZCB0aGUgZW5hYmxlIGNvbmZpZyBpczpcblxuKiAgIGBWRklPX0FQYFxuXG5UaGUgcGF0Y2ggaXMgZml4aW5nIHRoZSBsb2NraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBsb2NrcyBhcmUgb3JkZXJlZC4gSXQncyBkZWFsaW5nIHdpdGggYG1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9ja2AsIGBtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrYCwgYW5kIGBtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9ja2AgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyBhbmQgZGVhZGxvY2tzLiBUaGVzZSBjaGFuZ2VzIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSdyZSByZWxhdGVkIHRvIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLCBhbGwgY29yZSBkcml2ZXIgZnVuY3Rpb25hbGl0aWVzIHRyaWdnZXJlZCBieSBzeXNmcyBtZGV2IGNyZWF0aW9uIGFuZCBBUCBidXMgY29uZmlndXJhdGlvbi5cblxuVG8gY29uZmlybSB0aGUgc3BlY2lmaWNzLCBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBmdW5jdGlvbiBuYW1lcy4gWWVwLCBgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KWAgaXMgY29ycmVjdC4gU2FtZSBmb3IgdGhlIG90aGVyIHR3bzogYHZvaWQgdmZpb19hcF9vbl9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jZmdfaW5mbywgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpwcmV2X2NmZ19pbmZvKWAgYW5kIGB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbywgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pYC5cblxuVGhlcmUgYXJlIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMsIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAsIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAsIGFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AsIGJ1dCB0aGV5IGFyZSBjYWxsZWQgZnJvbSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIHdlIHdpbGwgbm90IGluY2x1ZGUgdGhlbS5cblxuU2luY2UgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgc3RhdGljLCBpdCdzIHNhZmUgdG8gaW5jbHVkZSBhcyBhIGNhbGxiYWNrLlxuXG5JJ20gcmVhZHkgdG8gbWFyayB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDEsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjU0Ljg3MzY3ODcwMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MzYxMDI4LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBWRklPX0FQIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9fQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIixcbiAgICBcInZmaW9fYXBfb25fY2ZnX2NoYW5nZWRcIixcbiAgICBcInZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgbG9naWMgYW5kIGJpdG1hcCBvcGVyYXRpb25zIGluIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyLiBJdCBmaXhlcyBsb2NrIG9yZGVyaW5nIGJldHdlZW4gYG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2tgLCBgbWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2tgLCBhbmQgYG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2tgIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3MgZHVyaW5nIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRyaXZlciBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBWRklPX0FQXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjU0Ljk0ODA0OTE1OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDEzMTY3MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFZGSU9fQVAgQXZhaWxhYmlsaXR5IGluIHRoZSBzMzkwIEFyY2hpdGVjdHVyZSoqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gdGhlIHRvb2wgSSdtIHVzaW5nIGZsYWdnZWQgYFZGSU9fQVBgIGFzIHVuZGVmaW5lZCwgYnV0IG15IG1lbW9yeSBpcyBwcmV0dHkgc29saWQsIGFuZCBJICpjb3VsZCBoYXZlIHN3b3JuKiBJIHNhdyBpdCBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBUaW1lIGZvciBhIGRvdWJsZS1jaGVjay4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhhdCBLY29uZmlnIGZpbGUgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGVyZSdzIHByb2JhYmx5IGp1c3Qgc29tZSBzdWJ0bGV0eSBJIG1pc3NlZCwgb3IgbWF5YmUgYW4gaW50ZXJhY3Rpb24gd2l0aCBhbm90aGVyIGNvbmZpZyBJJ20gbm90IHRoaW5raW5nIGFib3V0LiBCZXN0IHRvIGNvbmZpcm0gdGhhdCB0aGUgdG9vbCdzIHJpZ2h0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBkZWJ1Z2dpbmcuLi4gYmVjYXVzZSBJJ20gYmV0dGluZyB0aGF0IEtjb25maWcgaGFzIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjQwOjAwLjM2MTIyMDQ1MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyNjQyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL0tjb25maWc9ODIzPWNvbmZpZyBWRklPX0NDV1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctODMzLVxcbmFyY2gvczM5MC9LY29uZmlnOjgzNDpjb25maWcgVkZJT19BUFxcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cXHRkZWZfdHJpc3RhdGUgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzo0MDowMC40MTE0OTAxODlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwODk5Nzk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBLY29uZmlnIERpc2NyZXBhbmN5KipcblxuT2theSwgc28gdGhlIHRvb2wgY2xhaW1zIGBWRklPX0FQYCBpc24ndCBpbiB0aGUga2VybmVsLCBhbmQgdGhhdCdzIHRocm93aW5nIG1lIGZvciBhIGxvb3AuIE15IGZpcnN0IGluc3RpbmN0IHdhcyB0aGF0IHRoZSB0b29sIG1pZ2h0IGJlIG1pc3Npbmcgc29tZXRoaW5nIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLCBtYXliZSBgYXJjaC9zMzkwL0tjb25maWdgLiBQZXJoYXBzIGl0IHdhc24ndCBwYXJzaW5nIGl0IGNvcnJlY3RseSwgb3IgbWF5YmUgaXQgd2FzIG9ubHkgbG9va2luZyBhdCBgeDg2YCBvciBvdGhlciBzdGFuZGFyZCBjb25maWdzLiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQsIHRoZSB0b29sICpzaG91bGQqIGNoZWNrIGFsbCB0aGUgS2NvbmZpZyBmaWxlcy5cblxuUmlnaHQsIHNvIGxldCdzIHZlcmlmeSDigJMgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbmZpZyAqZXhhY3RseSogYFZGSU9fQVBgPyBZZXAsIGNvbmZpcm1lZDogaXQncyBkZWZpbmVkIGFzIGBjb25maWcgVkZJT19BUGAuIFNvIHdoeSB0aGUgaGVjayBpcyBpdCBzYXlpbmcgdGhhdCBpdCBkb2Vzbid0IGV4aXN0PyBUaGlzIGlzIGJhZmZsaW5nLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBpdHMgZGVmaW5pdGlvbi4gSSdsbCBoZWFkIHN0cmFpZ2h0IGZvciBgZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnYCDigJMgdGhhdCBmZWVscyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZS4gTGV0J3Mgc2VlIGlmIHRoYXQgZmlsZSBhY3R1YWxseSBjb250YWlucyB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6NDA6MDYuNDIwNDkwOTExWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk5MTgzOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzo0MDowNi40Njg0ODkwNzlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NDQ2ODcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBGaWxlKipcblxuT2theSwgc28gdGhlIGluc3RydWN0aW9uIGlzIHByZXR0eSBjbGVhci4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9zMzkwL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgaW1tZWRpYXRlbHkgc3RhcnQgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0IGFtIEkgbG9va2luZyBmb3I/IFdlbGwsIGl0IGRlcGVuZHMgb24gdGhlIGNvbnRleHQsIG9mIGNvdXJzZSwgYnV0IGdlbmVyYWxseSwgSSdsbCBiZSBpbnRlcmVzdGVkIGluIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgY291bGQgaW52b2x2ZSBkcml2ZXItc3BlY2lmaWMgc2V0dGluZ3MsIGhhcmR3YXJlIHN1cHBvcnQsIG9yIGV2ZW4gZmVhdHVyZSBlbmFibGVtZW50cy4gSSdsbCBsaWtlbHkgYmUgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGtleXdvcmRzIG9yIHN5bWJvbHMgSSdtIGZhbWlsaWFyIHdpdGgsIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgcGFydGljdWxhciBkZXZpY2Ugb3Igc3Vic3lzdGVtLiBUaGUga2V5IGhlcmUgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHdoYXQgY2FuIGJlIGNvbmZpZ3VyZWQuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB3aGF0IGtpbmRzIG9mIHRoaW5ncyB0aGF0IGZpbGUgbWlnaHQgY29udGFpbiwgYW5kIEknbSByZWFkeSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gb3IgcmVmdXRlIHRob3NlIGV4cGVjdGF0aW9ucy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjQwOjEwLjYyMjk2MTg2NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0ODI3Mzk5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6NDA6MTEuMDE3ODMxNTk1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzc0Mjk2NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyb3VibGVzaG9vdGluZyBhIENvbmZpZ3VyYXRpb24gUmVqZWN0aW9uKipcblxuT2theSwgc28gSSB0aG91Z2h0IEkgd2FzIGJlaW5nIGVmZmljaWVudCBieSBncmVwcGluZyBmb3IgYGNvbmZpZyBWRklPX0FQYCBhbmQgZmluZGluZyBpdCBkZWZpbmVkIHdpdGhpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBJIGtub3cgdGhhdCBJIGZvdW5kIGl0IHRoZXJlIGJlZm9yZSwgSSBtYWRlIGEgbm90ZSBvZiBpdC4gQnV0IGBzZXQtcmVzdWx0c2AgaXMgcmVqZWN0aW5nIGl0LCBhbmQgdGhhdCdzIHRocm93aW5nIG1lIG9mZi4gV2h5IGlzIGl0IGRvaW5nIHRoYXQ/XG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IG1heWJlIGBzZXQtcmVzdWx0c2AgZW1wbG95cyBhIHNjcmlwdCB0byBwYXJzZSBLY29uZmlnIGZpbGVzIGFuZCBwZXJoYXBzIGl0J3MgY2hva2luZyBvbiBzb21ldGhpbmcgaW4gdGhlIGBhcmNoL3MzOTAvS2NvbmZpZ2AgZmlsZSBzcGVjaWZpY2FsbHkuIElzIGl0IHBvc3NpYmxlIHRoYXQgdGhlIEtjb25maWcgcGFyc2luZyBpcyB0aGUgaXNzdWUgaGVyZT9cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGVyZSBpc24ndCBzb21lIHNpbGx5IHR5cG8gaW4gbXkgY29tbWFuZCBsaW5lLCBvciB0aGF0IEkgZGlkbid0IHNvbWVob3cgbWlzcmVtZW1iZXIgdGhlIG5hbWUuIE5vcGUsIHRoZSBuYW1lJ3MgY29ycmVjdC5cblxuV2FpdCBhIHNlY29uZC4uLmlzIGl0IHBvc3NpYmxlIHRoYXQgYHNldC1yZXN1bHRzYCBpcyBvbmx5IGNoZWNraW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxldmFudCB0byB0aGUgYHg4Nl82NGAgYXJjaGl0ZWN0dXJlPyBJZiBgVkZJT19BUGAgaXMgc3BlY2lmaWMgdG8gYHMzOTBgLCBpdCB3b3VsZG4ndCBuZWNlc3NhcmlseSBleGlzdCBpbiB0aGUgZGVmYXVsdCBgeDg2XzY0YCBkZWZjb25maWcsIGV2ZW4gaWYgaXQncyBjb3JyZWN0bHkgZGVmaW5lZCBpbiB0aGUgb3ZlcmFsbCBLY29uZmlnIHN0cnVjdHVyZS4gVGhlIHRvb2wgbWlnaHQgYmUgY2hlY2tpbmcgYWdhaW5zdCB0aGF0IHN0YW5kYXJkIGFyY2hpdGVjdHVyZS5cblxuT2theSwgbGV0J3MgdHJ5IGEgd29ya2Fyb3VuZC4gSWYgYFZGSU9fQVBgIGlzIGJlaW5nIHJlamVjdGVkIGJlY2F1c2Ugb2YgdGhlIGFyY2hpdGVjdHVyZSwgSSdsbCBqdXN0IG9taXQgaXQgZW50aXJlbHkgYW5kIHNlZSB3aGF0IGhhcHBlbnMuIEkgY291bGQgbWF5YmUgdHJ5IHRvIHN1YnN0aXR1dGUgaXQgd2l0aCBgUzM5MGAsIGJ1dCB0aGF0J3MgdGhlICphcmNoaXRlY3R1cmUqIGFuZCBub3QgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGl0c2VsZi4gSXQgd291bGRuJ3Qgd29yay5cblxuQWxyaWdodCwgSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYWdhaW4gd2l0aG91dCBgVkZJT19BUGAgYW5kIHNlZSBpZiB0aGF0IHJlc29sdmVzIHRoZSBpc3N1ZS4gVGhhdCdzIHRoZSBtb3N0IGxvZ2ljYWwgcGF0aCBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ1NSwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6NDA6MjMuMzkyMTMxMzM5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIixcbiAgICBcInZmaW9fYXBfb25fY2ZnX2NoYW5nZWRcIixcbiAgICBcInZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgbG9naWMgYW5kIGJpdG1hcCBvcGVyYXRpb25zIGluIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyLiBJdCBmaXhlcyBsb2NrIG9yZGVyaW5nIGJldHdlZW4gYG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2tgLCBgbWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2tgLCBhbmQgYG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2tgIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3MgZHVyaW5nIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRyaXZlciBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fYXBfbWRldl9wcm9iZVwiLFxuICAgIFwidmZpb19hcF9vbl9jZmdfY2hhbmdlZFwiLFxuICAgIFwidmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBsb2dpYyBhbmQgYml0bWFwIG9wZXJhdGlvbnMgaW4gdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIG1lZGlhdGVkIGRldmljZSBkcml2ZXIuIEl0IGZpeGVzIGxvY2sgb3JkZXJpbmcgYmV0d2VlbiBgbWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9ja2AsIGBtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9ja2AsIGFuZCBgbWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9ja2AgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyBhbmQgcG90ZW50aWFsIGRlYWRsb2NrcyBkdXJpbmcgbWRldiBwcm9iZSwgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBhbmQgaG90cGx1ZyBldmVudHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZHJpdmVyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBtZGV2IGNyZWF0aW9uIGFuZCBBUCBidXMgY29uZmlndXJhdGlvbiBjYWxsYmFja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjQwOjIzLjM5MjE2MjI1OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjE5MTE4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzo0MDoyMy4zOTI2MDAyMDlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ0MjE0NjkyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAobG9jayBvcmRlcmluZywgbWlzc2luZyBsb2NrcywgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9uIGBtYXRyaXhfbWRldi1cXHUwMDNla3ZtYCkgaW4gdGhlIHMzOTAgdmZpb19hcCBkcml2ZXIuIEl0IGFsc28gZml4ZXMgYSBtaW5vciBsb2dpYyBidWcgd2l0aCBgZG9fcmVtb3ZlYCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MWQ2NTM2MmU2OTEyMzJjNGRkY2M2M2UwOTNmMzQxMmI1ZTE1OGRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAxNzozNzo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggNDRiM2ExZGNjMWIzNi4uOWM3MjU3YzE3OWE3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtODAzLDkgKzgwMyw5IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcbiBcdG1hdHJpeF9tZGV2LVx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcbiBcdG1hdHJpeF9tZGV2LVx1MDAzZWNmZ19jaGdfdHJpZ2dlciA9IE5VTEw7XG4gXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWRldi1cdTAwM2VkZXYsIG1hdHJpeF9tZGV2KTtcbi1cdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRsaXN0X2FkZChcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vub2RlLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcdHJldHVybiAwO1xuIFxuIGVycl9wdXRfdmRldjpcbkBAIC0yNjAzLDI4ICsyNjAzLDM1IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKHVuc2lnbmVkIGxvbmcgKmFwX3JlbW92ZSxcbiBcdERFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTtcbiBcdERFQ0xBUkVfQklUTUFQKGFxcmVtLCBBUF9ET01BSU5TKTtcbiBcdERFQ0xBUkVfQklUTUFQKGNkcmVtLCBBUF9ET01BSU5TKTtcbi1cdGludCBkb19yZW1vdmUgPSAwO1xuK1x0aW50IGRvX3JlbW92ZTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsXG4rXHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbitcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuK1x0XHQgKi9cbitcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbitcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFxuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sXG4tXHRcdFx0XHRcdCAgQVBfREVWSUNFUyk7XG4rXHRcdGRvX3JlbW92ZSA9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcbitcdFx0XHRcdCAgICAgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuK1x0XHRcdFx0ICAgICAgIEFQX0RFVklDRVMpO1xuIFx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLFxuIFx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sXG4gXHRcdFx0XHRcdCAgQVBfRE9NQUlOUyk7XG4tXHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLCBjZF9yZW1vdmUsXG4tXHRcdFx0XHRcdCAgICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbi1cdFx0XHRcdFx0ICAgICBBUF9ET01BSU5TKTtcbitcdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSxcbitcdFx0XHRcdFx0bWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbitcdFx0XHRcdFx0QVBfRE9NQUlOUyk7XG4gXG4gXHRcdGlmIChkb19yZW1vdmUpXG4gXHRcdFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sXG4gXHRcdFx0XHRcdFx0ICAgIGNkcmVtKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjc0OSwxMiArMjc1NiwyMCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuIFx0dmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCBpbiBvcmRlciB0byBhY2Nlc3MgZmllbGRzXG4rXHRcdCAqIHdpdGhpbiBtYXRyaXhfbWRldlxuK1x0XHQgKi9cbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xuK1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjgyMSw5ICsyODM2LDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcbiBcdGJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbi1cdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbi1cbiBcdGZpbHRlcl9hZGFwdGVycyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sXG4gXHRcdFx0XHRcdCAgICBtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLCBBUF9ERVZJQ0VTKTtcbiBcdGZpbHRlcl9kb21haW5zID0gYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFxbSxcbkBAIC0yODQxLDkgKzI4NTMsNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG4gXHRcdHZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihtYXRyaXhfbWRldik7XG4gXG4gXHRyZXNldF9xdWV1ZXNfZm9yX2FwaWRzKG1hdHJpeF9tZGV2LCBhcG1fZmlsdGVyZWQpO1xuLVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuIH1cbiBcbiB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbkBAIC0yODU0LDE1ICsyODYzLDI5IEBAIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcbitcdFx0ICogYW5kIGt2bS1cdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xuK1x0XHQgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuXG4rXHRcdCAqL1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXG4gXHRcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgQVBfRE9NQUlOUykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCwgQVBfRE9NQUlOUykpXG4tXHRcdFx0Y29udGludWU7XG4rXHRcdFx0Z290byBkb191bmxvY2s7XG4gXG4gXHRcdHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcobWF0cml4X21kZXYpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgMCwgQVBfREVWSUNFUyk7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhcW1fYWRkLCAwLCBBUF9ET01BSU5TKTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsIDAsIEFQX0RPTUFJTlMpO1xuK1xuK2RvX3VubG9jazpcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdH1cbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjQwOjIzLjM5MjYwMTA5OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQyMTQ0NTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGxlYW5pbmcgdG93YXJkcyBcIm5vLFwiIGJ1dCBsZXQncyBjb25maXJtLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIFByaW1hcmlseSwgaXQncyBhIGxvY2stcmVsYXRlZCByZXdvcmssIHNwZWNpZmljYWxseSBjaGFuZ2luZyB3aGVyZSBhbmQgd2hlbiB3ZSdyZSBob2xkaW5nIG11dGV4ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbWF0cml4X2RldmAgYW5kIGBtYXRyaXhfbWRldmAgc3RydWN0dXJlcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBga3ZtYCBmaWVsZC5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBtb3ZpbmcgbG9jayBhY3F1aXNpdGlvbnMgYXJvdW5kIGluIGZ1bmN0aW9ucyBsaWtlIGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AsIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZHJlc3NpbmcgZWl0aGVyIGxvY2tkZXAgc3BsYXRzLCBsb2NrIG9yZGVyaW5nIGlzc3VlcywgcG90ZW50aWFsIG1pc3NpbmcgbG9ja3MsIG9yIHBvc3NpYmxlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgd2hlbiBgbWF0cml4X21kZXYtXHUwMDNla3ZtYCBpcyBhY2Nlc3NlZC4gVGhlcmUncyBhbHNvIGEgc3VidGxlIGJ1ZyBmaXggaW4gYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCByZWdhcmRpbmcgdGhlIGBkb19yZW1vdmVgIHZhcmlhYmxlIOKAkyBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSB1c2Ugb2YgdGhlIGBiaXRtYXBfYW5kKClgIG9wZXJhdGlvbiBhcmUgYmVpbmcgY29ycmVjdGVkLiBOb3RoaW5nIHRoZXJlIHN1Z2dlc3RzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IHNlY3VyaXR5IHZlY3RvcnMuXG5cbkNydWNpYWxseSwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmUsIEknbSBub3Qgc2VlaW5nIGFueXRoaW5nIHRoYXQgc2NyZWFtcyBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuXCIgVGhlIGNvZGUgbW9kaWZpY2F0aW9uIG9uIGBkb19yZW1vdmVgIChjaGFuZ2luZyBgaW50IGRvX3JlbW92ZSA9IDA7YCB0byBgaW50IGRvX3JlbW92ZTtgIGFuZCB0aGVuIHByb3Blcmx5IGluaXRpYWxpemluZyBpdCBiZWZvcmUgdXNlKSByZWluZm9yY2VzIHRoaXMuIFRoZSB2YXJpYWJsZSBpcyBkZWZpbml0ZWx5IGluaXRpYWxpemVkIGJlZm9yZSBpdHMgdXNlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbnMgb3Igc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGV4cG9zdXJlLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uY2x1ZGluZyB0aGF0IHRoaXMgcGF0Y2ggaXNuJ3QgbGlrZWx5IHRvIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UncmUgbG9va2luZyBhdCBsb2NrLXJlbGF0ZWQgYnVncywgYW5kIHRob3NlIGFyZSBnb2luZyB0byBiZSBuYWlsZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gZm9yIHRoaXMgcGF0Y2ggc2VlbXMgdW5uZWNlc3NhcnkuIExldCBtZSBqdXN0IGFydGljdWxhdGUgdGhhdCByZWFzb25pbmcgY29uY2lzZWx5IGluIGEgY29tbWVudC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzk2LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjQwOjM3LjgxNDA1MTMxN1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvY2tpbmcgaXNzdWVzIChsb2NrIG9yZGVyaW5nLCBtaXNzaW5nIGxvY2tzLCBhbmQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb24gYG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm1gKSBpbiB0aGUgczM5MCB2ZmlvX2FwIGRyaXZlci4gSXQgYWxzbyBmaXhlcyBhIG1pbm9yIGxvZ2ljIGJ1ZyB3aXRoIGBkb19yZW1vdmVgIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAobG9jayBvcmRlcmluZywgbWlzc2luZyBsb2NrcywgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9uIGBtYXRyaXhfbWRldi1cXHUwMDNla3ZtYCkgaW4gdGhlIHMzOTAgdmZpb19hcCBkcml2ZXIuIEl0IGFsc28gZml4ZXMgYSBtaW5vciBsb2dpYyBidWcgd2l0aCBgZG9fcmVtb3ZlYCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowtf4dd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 17:10:09 +0000 UTC FinishedAt: 2026-08-08 17:40:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "a204badd8432f93b7e862e7dac6db0fe3d65f370", "config_name": "upstream-apparmor-kasan.config", "series_id": "2065e4b5-e773-4125-bb58-4d7c727aa7ac" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_ap_mdev_probe", "vfio_ap_on_cfg_changed", "vfio_ap_on_scan_complete" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19hcF9tZGV2X3Byb2JlJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fY2ZnX2NoYW5nZWQmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvY2tpbmcgaXNzdWVzIChsb2NrIG9yZGVyaW5nLCBtaXNzaW5nIGxvY2tzLCBhbmQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb24gYG1hdHJpeF9tZGV2LVx1MDAzZWt2bWApIGluIHRoZSBzMzkwIHZmaW9fYXAgZHJpdmVyLiBJdCBhbHNvIGZpeGVzIGEgbWlub3IgbG9naWMgYnVnIHdpdGggYGRvX3JlbW92ZWAgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBkZWFkbG9ja3MsIHJhY2UgY29uZGl0aW9ucywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgbG9naWMgYW5kIGJpdG1hcCBvcGVyYXRpb25zIGluIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyLiBJdCBmaXhlcyBsb2NrIG9yZGVyaW5nIGJldHdlZW4gYG1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9ja2AsIGBtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrYCwgYW5kIGBtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9ja2AgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyBhbmQgcG90ZW50aWFsIGRlYWRsb2NrcyBkdXJpbmcgbWRldiBwcm9iZSwgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBhbmQgaG90cGx1ZyBldmVudHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZHJpdmVyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBtZGV2IGNyZWF0aW9uIGFuZCBBUCBidXMgY29uZmlndXJhdGlvbiBjYWxsYmFja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MWQ2NTM2MmU2OTEyMzJjNGRkY2M2M2UwOTNmMzQxMmI1ZTE1OGRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAxNzozNzo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLjljNzI1N2MxNzlhN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTgwMyw5ICYjNDM7ODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxuIFx0bWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xuIFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbiBcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGV2LVx1MDAzZWRldiwgbWF0cml4X21kZXYpO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRsaXN0X2FkZChcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vub2RlLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfcHV0X3ZkZXY6XG5AQCAtMjYwMywyOCAmIzQzOzI2MDMsMzUgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLFxuIFx0REVDTEFSRV9CSVRNQVAoYXByZW0sIEFQX0RFVklDRVMpO1xuIFx0REVDTEFSRV9CSVRNQVAoYXFyZW0sIEFQX0RPTUFJTlMpO1xuIFx0REVDTEFSRV9CSVRNQVAoY2RyZW0sIEFQX0RPTUFJTlMpO1xuLVx0aW50IGRvX3JlbW92ZSA9IDA7XG4mIzQzO1x0aW50IGRvX3JlbW92ZTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcbiYjNDM7XHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbiYjNDM7XHRcdCAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbiYjNDM7XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcbi1cdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcbi1cdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuLVx0XHRcdFx0XHQgIEFQX0RFVklDRVMpO1xuJiM0MztcdFx0ZG9fcmVtb3ZlID0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxuJiM0MztcdFx0XHRcdCAgICAgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuJiM0MztcdFx0XHRcdCAgICAgICBBUF9ERVZJQ0VTKTtcbiBcdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXFyZW0sIGFxX3JlbW92ZSxcbiBcdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLFxuIFx0XHRcdFx0XHQgIEFQX0RPTUFJTlMpO1xuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgICAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sXG4tXHRcdFx0XHRcdCAgICAgQVBfRE9NQUlOUyk7XG4mIzQzO1x0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChjZHJlbSwgY2RfcmVtb3ZlLFxuJiM0MztcdFx0XHRcdFx0bWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbiYjNDM7XHRcdFx0XHRcdEFQX0RPTUFJTlMpO1xuIFxuIFx0XHRpZiAoZG9fcmVtb3ZlKVxuIFx0XHRcdHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLFxuIFx0XHRcdFx0XHRcdCAgICBjZHJlbSk7XG4gXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbiYjNDM7XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjc0OSwxMiAmIzQzOzI3NTYsMjAgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbiBcdHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUoYXBtX2FkZCwgYXFtX2FkZCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCBpbiBvcmRlciB0byBhY2Nlc3MgZmllbGRzXG4mIzQzO1x0XHQgKiB3aXRoaW4gbWF0cml4X21kZXZcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuJiM0MztcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sIGFwbV9hZGQsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTtcbiYjNDM7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjgyMSw5ICYjNDM7MjgzNiw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXHRib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXG4gXHRmaWx0ZXJfYWRhcHRlcnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuIFx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUyk7XG4gXHRmaWx0ZXJfZG9tYWlucyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sXG5AQCAtMjg0MSw5ICYjNDM7Mjg1Myw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdFx0dmZpb19hcF9tZGV2X3VwZGF0ZV9ndWVzdF9hcGNiKG1hdHJpeF9tZGV2KTtcbiBcbiBcdHJlc2V0X3F1ZXVlc19mb3JfYXBpZHMobWF0cml4X21kZXYsIGFwbV9maWx0ZXJlZCk7XG4tXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gfVxuIFxuIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuQEAgLTI4NTQsMTUgJiM0MzsyODYzLDI5IEBAIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxuJiM0MztcdFx0ICogYW5kIGt2bS1cdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xuJiM0MztcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuJiM0MztcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XG4gXHRcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgQVBfRE9NQUlOUykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCwgQVBfRE9NQUlOUykpXG4tXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdGdvdG8gZG9fdW5sb2NrO1xuIFxuIFx0XHR2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIDAsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLCAwLCBBUF9ET01BSU5TKTtcbiYjNDM7XG4mIzQzO2RvX3VubG9jazpcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuJiM0MztcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbiYjNDM7XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdH1cbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX2FwX21kZXZfcHJvYmUmIzM0OywKICAgICYjMzQ7dmZpb19hcF9vbl9jZmdfY2hhbmdlZCYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBsb2dpYyBhbmQgYml0bWFwIG9wZXJhdGlvbnMgaW4gdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIG1lZGlhdGVkIGRldmljZSBkcml2ZXIuIEl0IGZpeGVzIGxvY2sgb3JkZXJpbmcgYmV0d2VlbiBgbWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrYCwgYG1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2tgLCBhbmQgYG1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrYCB0byBwcmV2ZW50IGxvY2tkZXAgc3BsYXRzIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGR1cmluZyBtZGV2IHByb2JlLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGFuZCBob3RwbHVnIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBkcml2ZXIgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIG1kZXYgY3JlYXRpb24gYW5kIEFQIGJ1cyBjb25maWd1cmF0aW9uIGNhbGxiYWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgxZDY1MzYyZTY5MTIzMmM0ZGRjYzYzZTA5M2YzNDEyYjVlMTU4ZGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDE3OjM3OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCmluZGV4IDQ0YjNhMWRjYzFiMzYuLjljNzI1N2MxNzlhN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKQEAgLTgwMyw5ICYjNDM7ODAzLDkgQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KQogCW1hdHJpeF9tZGV2LSZndDtyZXFfdHJpZ2dlciA9IE5VTEw7CiAJbWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlciA9IE5VTEw7CiAJZGV2X3NldF9kcnZkYXRhKCZhbXA7bWRldi0mZ3Q7ZGV2LCBtYXRyaXhfbWRldik7Ci0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCWxpc3RfYWRkKCZhbXA7bWF0cml4X21kZXYtJmd0O25vZGUsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0KTsKLQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7Z3Vlc3RzX2xvY2spOwogCXJldHVybiAwOwogCiBlcnJfcHV0X3ZkZXY6CkBAIC0yNjAzLDI4ICYjNDM7MjYwMywzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsCiAJREVDTEFSRV9CSVRNQVAoYXByZW0sIEFQX0RFVklDRVMpOwogCURFQ0xBUkVfQklUTUFQKGFxcmVtLCBBUF9ET01BSU5TKTsKIAlERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7Ci0JaW50IGRvX3JlbW92ZSA9IDA7CiYjNDM7CWludCBkb19yZW1vdmU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCwgbm9kZSkgewotCQltdXRleF9sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LAomIzQzOwkJICogYW5kIGt2bS0mZ3Q7bG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2sKJiM0MzsJCSAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1hdHJpeF9tZGV2LSZndDtrdm0pCiYjNDM7CQkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwogCQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiAKLQkJZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSwKLQkJCQkJICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwKLQkJCQkJICBBUF9ERVZJQ0VTKTsKJiM0MzsJCWRvX3JlbW92ZSA9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSwKJiM0MzsJCQkJICAgICAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtLAomIzQzOwkJCQkgICAgICAgQVBfREVWSUNFUyk7CiAJCWRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGFxcmVtLCBhcV9yZW1vdmUsCiAJCQkJCSAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcW0sCiAJCQkJCSAgQVBfRE9NQUlOUyk7Ci0JCWRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLCBjZF9yZW1vdmUsCi0JCQkJCSAgICAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hZG0sCi0JCQkJCSAgICAgQVBfRE9NQUlOUyk7CiYjNDM7CQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZChjZHJlbSwgY2RfcmVtb3ZlLAomIzQzOwkJCQkJbWF0cml4X21kZXYtJmd0O21hdHJpeC5hZG0sCiYjNDM7CQkJCQlBUF9ET01BSU5TKTsKIAogCQlpZiAoZG9fcmVtb3ZlKQogCQkJdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sCiAJCQkJCQkgICAgY2RyZW0pOwogCiAJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwotCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwogCX0KIH0KIApAQCAtMjc0OSwxMiAmIzQzOzI3NTYsMjAgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCwKIAl2ZmlvX2FwX2ZpbHRlcl9hcGlkX2J5X3F0eXBlKGFwbV9hZGQsIGFxbV9hZGQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgaW4gb3JkZXIgdG8gYWNjZXNzIGZpZWxkcwomIzQzOwkJICogd2l0aGluIG1hdHJpeF9tZGV2CiYjNDM7CQkgKi8KJiM0MzsJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsKIAkJYml0bWFwX2FuZChtYXRyaXhfbWRldi0mZ3Q7YXBtX2FkZCwKIAkJCSAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtLCBhcG1fYWRkLCBBUF9ERVZJQ0VTKTsKIAkJYml0bWFwX2FuZChtYXRyaXhfbWRldi0mZ3Q7YXFtX2FkZCwKIAkJCSAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTsKIAkJYml0bWFwX2FuZChtYXRyaXhfbWRldi0mZ3Q7YWRtX2FkZCwKIAkJCSAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTsKJiM0MzsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCX0KIH0KIApAQCAtMjgyMSw5ICYjNDM7MjgzNiw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldikKIAlERUNMQVJFX0JJVE1BUChhcG1fZmlsdGVyZWQsIEFQX0RFVklDRVMpOwogCWJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7CiAKLQltdXRleF9sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7Ci0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwotCiAJZmlsdGVyX2FkYXB0ZXJzID0gYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O21hdHJpeC5hcG0sCiAJCQkJCSAgICBtYXRyaXhfbWRldi0mZ3Q7YXBtX2FkZCwgQVBfREVWSUNFUyk7CiAJZmlsdGVyX2RvbWFpbnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwKQEAgLTI4NDEsOSAmIzQzOzI4NTMsNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpCiAJCXZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihtYXRyaXhfbWRldik7CiAKIAlyZXNldF9xdWV1ZXNfZm9yX2FwaWRzKG1hdHJpeF9tZGV2LCBhcG1fZmlsdGVyZWQpOwotCi0JbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiB9CiAKIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLApAQCAtMjg1NCwxNSAmIzQzOzI4NjMsMjkgQEAgdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sCiAJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LAomIzQzOwkJICogYW5kIGt2bS0mZ3Q7bG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2sKJiM0MzsJCSAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1hdHJpeF9tZGV2LSZndDtrdm0pCiYjNDM7CQkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwogCQlpZiAoYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LSZndDthcG1fYWRkLCBBUF9ERVZJQ0VTKSAmYW1wOyZhbXA7CiAJCSAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsIEFQX0RPTUFJTlMpICZhbXA7JmFtcDsKIAkJICAgIGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi0mZ3Q7YWRtX2FkZCwgQVBfRE9NQUlOUykpCi0JCQljb250aW51ZTsKJiM0MzsJCQlnb3RvIGRvX3VubG9jazsKIAogCQl2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTsKIAkJYml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LSZndDthcG1fYWRkLCAwLCBBUF9ERVZJQ0VTKTsKIAkJYml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LSZndDthcW1fYWRkLCAwLCBBUF9ET01BSU5TKTsKIAkJYml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LSZndDthZG1fYWRkLCAwLCBBUF9ET01BSU5TKTsKJiM0MzsKJiM0Mztkb191bmxvY2s6CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwogCX0KIAogCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWRklPLUFQIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBsb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLiBSaWdodCBhd2F5LCBJIGtub3cgdGhpcyBpcyBhbiBzMzkwLXNwZWNpZmljIGRyaXZlciBkZWFsaW5nIHdpdGggVkZJTyBBUCBkZXZpY2VzLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBBZGp1bmN0IFByb2Nlc3NvciwgSUJNJiMzOTtzIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3IsIHdoaWNoIGlzIHByZXR0eSBuaWNoZSBhbmQgaGFyZHdhcmUtZGVwZW5kZW50LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgbG9ja2luZyBtZWNoYW5pc21zIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyB3aXRoaW4gc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCwgYW5kIGEgZmV3IG1vcmUgcmVsYXRlZCB0byBjb25maWd1cmF0aW9uIGFuZCBob3QtcGx1Z2dpbmcuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyByZWFjaGFiaWxpdHkuIElzIHRoaXMgY29kZSBldmVuICpleGVyY2lzYWJsZSogaW4gdHlwaWNhbCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBlbnZpcm9ubWVudHM/IFMzOTAgY29kZSBvZnRlbiBpc24mIzM5O3QgZnV6emVkIG9uIHN0YW5kYXJkIHg4Nl82NCBWTXMgdW5sZXNzIHdlIGFyZSBzcGVjaWZpY2FsbHkgcnVubmluZyBzMzkweCB2aXJ0dWFsIG1hY2hpbmVzLiBXZSBrbm93IFN5emthbGxlciBoYXMgc29tZSBzMzkweCBzdXBwb3J0LCBidXQgSSByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhpcyBkcml2ZXIgaGFzIHNvbWUgaGFyZHdhcmUgZGVwZW5kZW5jeSAtIGkuZS4gQVAgZGV2aWNlcy4gU2luY2UgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGFuIEFkanVuY3QgUHJvY2Vzc29yLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IG1pZ2h0IGJlLiBUaGlzIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3IsIGFmdGVyIGFsbCwgaXNuJiMzOTt0IHNvbWV0aGluZyBlYXNpbHkgZW11bGF0ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgdG8gY29uZmlndXJlIFFFTVUgdG8gZW11bGF0ZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlLgoKU28sIGZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIHByb2JhYmx5IGBkcml2ZXJzL3MzOTAvY3J5cHRvL0tjb25maWdgLCBvciBzb21ld2hlcmUgc2ltaWxhciwgdG8gc2VlIHdoYXQgZGVwZW5kZW5jaWVzIHRoaXMgbW9kdWxlIGhhcy4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgY2x1ZSBvbiB3aGV0aGVyIEkgY2FuIHRlc3QgdGhpcyB3aXRoaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGluIHRoZSBmaXJzdCBwZXJzb24sIHJlZmxlY3RpbmcgdGhlIGdpdmVuIHRob3VnaHQ6CgoqKlF1aWNrIEtjb25maWcgU2NhbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3V0IHRvIHRoZSBjaGFzZSBhbmQgemVybyBpbiBvbiB3aGF0JiMzOTtzIHJlbGV2YW50LiBJbnN0ZWFkIG9mIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gZXh0cmFuZW91cyBkZXRhaWxzIHJpZ2h0IG5vdywgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBqdXN0IGp1bXAgc3RyYWlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBkbyBhIHF1aWNrIHNlYXJjaC4gVGhlIHNwZWNpZmljIGtleXdvcmQgSSYjMzk7bGwgc3RhcnQgd2l0aCBpcyBgVkZJT19BUGAuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBxdWlja2x5IGZpbmQgdGhlIFZGSU8gQWNjZWxlcmF0ZWQgUHJvY2Vzc2luZyBjb25maWd1cmF0aW9ucy4gTm8gbmVlZCB0byBnbyBodW50aW5nIGFyb3VuZCBibGluZGx5LCBsZXQmIzM5O3Mga2VlcCB0aGlzIGZvY3VzZWQgYW5kIGVmZmljaWVudC4gSSYjMzk7bSBhZnRlciB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byBhY2NlbGVyYXRlZCBwcm9jZXNzaW5nIHdpdGhpbiBWRklPLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnPTgyMz1jb25maWcgVkZJT19DQ1dcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXG5hcmNoL3MzOTAvS2NvbmZpZzo4MzQ6Y29uZmlnIFZGSU9fQVBcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cdGRlZl90cmlzdGF0ZSBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBWRklPX0FQIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIFZGSU9fQVAg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmb3VuZGF0aW9uYWwgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBkcmlsbCBkb3duIGFuZCB1bmNvdmVyIGl0cyBkZXBlbmRlbmNpZXMuIFdlIGFyZSBub3QganVzdCB0YWxraW5nIGFib3V0IHRoZSBvYnZpb3VzIGxpYnJhcmllcyBoZXJlLCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgZW50aXJlIGRlcGVuZGVuY3kgdHJlZS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycyBpbnZvbHZlZDogV2hhdCBrZXJuZWwgbW9kdWxlcyBkb2VzIGl0IHJlbHkgb24/IFdoaWNoIHVzZXJzcGFjZSBjb21wb25lbnRzIGFyZSBlc3NlbnRpYWw/IEFuZCBkb24mIzM5O3QgZm9yZ2V0IHRoZSBoYXJkd2FyZSBpdHNlbGYg4oCTIHdoaWNoIHNwZWNpZmljIGRldmljZSBmZWF0dXJlcywgYW5kIGFueSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLCBhcmUgYXNzdW1lZD8gSXQgaXMgbGlrZWx5IHRoYXQgdGhpcyBkZXZpY2UgYWNjZXNzIGlzIHVzaW5nIHNvbWUgb2YgdGhlIGNvcmUgVkZJTyBmcmFtZXdvcmssIGJ1dCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBhbGwgcmVxdWlyZW1lbnRzIHRvIHVzZSBWRklPX0FQLgoKSSBhbHNvIHdhbnQgdG8gY29uc2lkZXIgdGhlIGNvbnRleHQuIElzIHRoaXMgYSBuZXcgaW1wbGVtZW50YXRpb24/IEEgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIHN5c3RlbT8gV2hhdCB1c2UtY2FzZXMgaXMgaXQgZGVzaWduZWQgdG8gc3VwcG9ydD8gVGhpcyB3aWxsIHN0cm9uZ2x5IGltcGFjdCB0aGUgc2lnbmlmaWNhbmNlIG9mIGVhY2ggZGVwZW5kZW5jeSBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgSSBuZWVkIHRvIGF1ZGl0IGZvciB0aGUgZ29hbCBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBtb3RpdmF0aW9uIGZvciBpdHMgZGVzaWduIGlzIGltcG9ydGFudCBoZXJlLgoKSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMsIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlLCBhbmQgcGVyaGFwcyBldmVuIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gKGlmIGl0JiMzOTtzIGdvb2QsIHRoYXQgaXMhKS4gSXQgaXMgdW5saWtlbHkgdGhhdCBpdCB3aWxsIGJlIGEgc2ltcGxlIGxpbmVhciBoaWVyYXJjaHksIEkgZXhwZWN0IGEgZGVncmVlIG9mIGNvbXBsZXhpdHkgd2l0aCBpbnRlcmZhY2VzIHRvIGhhcmR3YXJlIGZlYXR1cmVzIGFuZCBvdGhlciBzeXN0ZW0gZnVuY3Rpb25zLiBJIHdpbGwgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIG9idmlvdXMgZWxlbWVudHMsIGFuZCB0aGVuIGRpZyBpbnRvIGhvdyB0aGV5IGFyZSBsaW5rZWQsIGFuZCB3aGljaCBmdW5jdGlvbnMgZGVwZW5kIG9uIHdoaWNoLiBUaGF0IGlzIHdoZXJlIHRoZSBkZXZpbCB3aWxsIGJlIGx1cmtpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHZlcnNpb25pbmcgaXNzdWVzLCBjb25mbGljdHMsIGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgYnkgdGhlc2UgZGVwZW5kZW5jaWVzLCB0b28uIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gYSBsYXJnZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODMwOlx0XG4gODMxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDgzMjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmZpb19jY3cuXG4gODMzOlx0XG4gODM0Olx0Y29uZmlnIFZGSU9fQVBcbiA4MzU6XHRcdGRlZl90cmlzdGF0ZSBuXG4gODM2Olx0XHRwcm9tcHQgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBBUCBkZXZpY2VzXCYjMzQ7XG4gODM3Olx0XHRkZXBlbmRzIG9uIEtWTVxuIDgzODpcdFx0ZGVwZW5kcyBvbiBWRklPXG4gODM5Olx0XHRkZXBlbmRzIG9uIEFQXG4gODQwOlx0XHRzZWxlY3QgVkZJT19NREVWXG4gODQxOlx0XHRoZWxwXG4gODQyOlx0XHQgIFRoaXMgZHJpdmVyIGdyYW50cyBhY2Nlc3MgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzXG4gODQzOlx0XHQgIHZpYSB0aGUgVkZJTyBtZWRpYXRlZCBkZXZpY2UgaW50ZXJmYWNlLlxuIDg0NDpcdFxuIDg0NTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gODQ2Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHZmaW9fYXAuXG4gODQ3Olx0XG4gODQ4Olx0ZW5kbWVudVxuIDg0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQXNzZXNzbWVudCBvZiBBcHBsaWNhdGlvbiBQZXJmb3JtYW5jZSAoQVApIGFzIGEgS2V5IEZhY3RvcioqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgdGhpbmtpbmcgaW1tZWRpYXRlbHkgaGluZ2VzIG9uIHRoZSBhcHBsaWNhdGlvbiBwZXJmb3JtYW5jZSwgb3IgQVAgYXMgd2UgY2FsbCBpdC4gRXZlcnl0aGluZyBoZXJlICpkZXBlbmRzKiBvbiBBUC4gSXTigJlzIHRoZSBsaW5jaHBpbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBzeXN0ZW0sIGEgcHJvY2VzcywgYSBwcm9ibGVt4oCmIGFuZCB0aGUgKmZpcnN0KiB0aGluZyBJIG5lZWQgdG8gZXN0YWJsaXNoIGlzIHRoZSBzdGF0ZSBvZiBBUC4gSXTigJlzIHRoZSBjcml0aWNhbCB2YXJpYWJsZS4gU28sIGJlZm9yZSBkaXZpbmcgZGVlcGVyLCBiZWZvcmUgc3BlY3VsYXRpbmcgb24gcm9vdCBjYXVzZXMgb3IgcG90ZW50aWFsIHNvbHV0aW9ucywgbXkgbWluZCBpcyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OiB3aGF0IG1ldHJpY3MgZG8gSSBuZWVkPyBXaGVyZeKAmXMgdGhlIG1vbml0b3JpbmcgZGF0YT8gV2hhdOKAmXMgdGhlIGJhc2VsaW5lIEFQIGJlaGF2aW9yPyBHb3R0YSBjaGVjayBBUCBmaXJzdC4gR290dGEgdW5kZXJzdGFuZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3Q9Mjg3PXRvIGluaXRyZCBpbWFnZSwgdXNlciBjYW4gbm90aWNlIGl0IGJlZm9yZSBib290LlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QtMjg5LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdDoyOTA6Qm9vdGNvbmZpZyBBUElzXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0LTI5MS09PT09PT09PT09PT09PT1cbi0tXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lPTI5PWNvbmZpZyBNQUNcbi0tXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lLTQwLVxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZTo0MTpjb25maWcgQVBPTExPXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lLTQyLVx0Ym9vbCBcJiMzNDtBcG9sbG8gc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc9MjkxPWNvbmZpZyA0NzZGUEVcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnLTI5NC1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc6Mjk1OmNvbmZpZyBBUE04MjF4eFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZy0yOTYtXHRib29sXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9Nzg1PWNvbmZpZyBFQURNX1NDSFxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTc5NS1cbmFyY2gvczM5MC9LY29uZmlnOjc5Njpjb25maWcgQVBcbmFyY2gvczM5MC9LY29uZmlnLTc5Ny1cdGRlZl90cmlzdGF0ZSB5XG4tLVxuYXJjaC9zMzkwL0tjb25maWctODA4LVxuYXJjaC9zMzkwL0tjb25maWc6ODA5OmNvbmZpZyBBUF9ERUJVR1xuYXJjaC9zMzkwL0tjb25maWctODEwLVx0ZGVmX2Jvb2wgblxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTg4NT1jb25maWcgQ01NX0lVQ1Zcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04OTItXG5hcmNoL3MzOTAvS2NvbmZpZzo4OTM6Y29uZmlnIEFQUExEQVRBX0JBU0VcbmFyY2gvczM5MC9LY29uZmlnLTg5NC1cdGRlZl9ib29sIG5cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy05MDgtXG5hcmNoL3MzOTAvS2NvbmZpZzo5MDk6Y29uZmlnIEFQUExEQVRBX01FTVxuYXJjaC9zMzkwL0tjb25maWctOTEwLVx0ZGVmX3RyaXN0YXRlIG1cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy05MjUtXG5hcmNoL3MzOTAvS2NvbmZpZzo5MjY6Y29uZmlnIEFQUExEQVRBX09TXG5hcmNoL3MzOTAvS2NvbmZpZy05MjctXHRkZWZfdHJpc3RhdGUgbVxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTk0MC1cbmFyY2gvczM5MC9LY29uZmlnOjk0MTpjb25maWcgQVBQTERBVEFfTkVUX1NVTVxuYXJjaC9zMzkwL0tjb25maWctOTQyLVx0ZGVmX3RyaXN0YXRlIG1cbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTI3NDE9Y29uZmlnIFg4Nl9BUE1fQk9PVFxuLS1cbmFyY2gveDg2L0tjb25maWctMjc0NC1cbmFyY2gveDg2L0tjb25maWc6Mjc0NTptZW51Y29uZmlnIEFQTVxuYXJjaC94ODYvS2NvbmZpZy0yNzQ2LVx0dHJpc3RhdGUgXCYjMzQ7QVBNIChBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50KSBCSU9TIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTI3OTk9aWYgQVBNXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDAtXG5hcmNoL3g4Ni9LY29uZmlnOjI4MDE6Y29uZmlnIEFQTV9JR05PUkVfVVNFUl9TVVNQRU5EXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDItXHRib29sIFwmIzM0O0lnbm9yZSBVU0VSIFNVU1BFTkRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDctXG5hcmNoL3g4Ni9LY29uZmlnOjI4MDg6Y29uZmlnIEFQTV9ET19FTkFCTEVcbmFyY2gveDg2L0tjb25maWctMjgwOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIFBNIGF0IGJvb3QgdGltZVwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMjgyNC1cbmFyY2gveDg2L0tjb25maWc6MjgyNTpjb25maWcgQVBNX0NQVV9JRExFXG5hcmNoL3g4Ni9LY29uZmlnLTI4MjYtXHRkZXBlbmRzIG9uIENQVV9JRExFXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yODM2LVxuYXJjaC94ODYvS2NvbmZpZzoyODM3OmNvbmZpZyBBUE1fRElTUExBWV9CTEFOS1xuYXJjaC94ODYvS2NvbmZpZy0yODM4LVx0Ym9vbCBcJiMzNDtFbmFibGUgY29uc29sZSBibGFua2luZyB1c2luZyBBUE1cJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI4NDktXG5hcmNoL3g4Ni9LY29uZmlnOjI4NTA6Y29uZmlnIEFQTV9BTExPV19JTlRTXG5hcmNoL3g4Ni9LY29uZmlnLTI4NTEtXHRib29sIFwmIzM0O0FsbG93IGludGVycnVwdHMgZHVyaW5nIEFQTSBCSU9TIGNhbGxzXCYjMzQ7XG4tLVxuZHJpdmVycy9jaGFyL0tjb25maWc9MjEzPWNvbmZpZyBYSUxJTlhfSFdJQ0FQXG4tLVxuZHJpdmVycy9jaGFyL0tjb25maWctMjIyLVxuZHJpdmVycy9jaGFyL0tjb25maWc6MjIzOmNvbmZpZyBBUFBMSUNPTVxuZHJpdmVycy9jaGFyL0tjb25maWctMjI0LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGljb20gaW50ZWxsaWdlbnQgZmllbGRidXMgY2FyZCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnPTI5MD1jb25maWcgUUNPTV9DTEtfUlBNSFxuLS1cbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy0yOTgtXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6Mjk5OmNvbmZpZyBBUFFfR0NDXzgwODRcbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy0zMDAtXHR0cmlzdGF0ZSBcJiMzNDtBUFE4MDg0IEdsb2JhbCBDbG9jayBDb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwNy1cbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZzozMDg6Y29uZmlnIEFQUV9NTUNDXzgwODRcbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy0zMDktXHR0cmlzdGF0ZSBcJiMzNDtBUFE4MDg0IE11bHRpbWVkaWEgQ2xvY2sgQ29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvZG1hL0tjb25maWc9Nzg9Y29uZmlnIEFNQ0NfUFBDNDQwU1BFX0FETUFcbi0tXG5kcml2ZXJzL2RtYS9LY29uZmlnLTg3LVxuZHJpdmVycy9kbWEvS2NvbmZpZzo4ODpjb25maWcgQVBQTEVfQURNQUNcbmRyaXZlcnMvZG1hL0tjb25maWctODktXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBBRE1BQyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZz0xNTQ9Y29uZmlnIEVGSV9ERVZfUEFUSF9QQVJTRVJcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTE1Ni1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc6MTU3OmNvbmZpZyBBUFBMRV9QUk9QRVJUSUVTXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7QXBwbGUgRGV2aWNlIFByb3BlcnRpZXNcJiMzNDtcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnPTY2PWNvbmZpZyBBTDMzMjBBXG4tLVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy03NS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc6NzY6Y29uZmlnIEFQRFM5MTYwXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTc3LVx0dHJpc3RhdGUgXCYjMzQ7QVBEUzkxNjAgY29tYmluZWQgYWxzIGFuZCBwcm94aW1pdHkgc2Vuc29yXCYjMzQ7XG4tLVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy04Ni1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc6ODc6Y29uZmlnIEFQRFM5MzAwXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7QVBEUzkzMDAgYW1iaWVudCBsaWdodCBzZW5zb3JcJiMzNDtcbi0tXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTk2LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo5Nzpjb25maWcgQVBEUzkzMDZcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTgtXHR0cmlzdGF0ZSBcJiMzNDtBdmFnbyBBUERTOTMwNiBBbWJpZW50IExpZ2h0IFNlbnNvclwmIzM0O1xuLS1cbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTA4LVxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzoxMDk6Y29uZmlnIEFQRFM5OTYwXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTExMC1cdHRyaXN0YXRlIFwmIzM0O0F2YWdvIEFQRFM5OTYwIGdlc3R1cmUvUkdCL0FMUy9wcm94aW1pdHkgc2Vuc29yXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9LY29uZmlnPTI5Nj1jb25maWcgU1BBUFJfVENFX0lPTU1VXG4tLVxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwMy1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzozMDQ6Y29uZmlnIEFQUExFX0RBUlRcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0zMDUtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBEQVJUIElPTU1VIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZz03ODg9Y29uZmlnIElSUV9JRFQzMjQzWFxuLS1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5Mi1cbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnOjc5Mzpjb25maWcgQVBQTEVfQUlDXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZy03OTQtXHRib29sIFwmIzM0O0FwcGxlIEludGVycnVwdCBDb250cm9sbGVyIChBSUMpXCYjMzQ7XG4tLVxuZHJpdmVycy9taXNjL0tjb25maWc9MzI3PWNvbmZpZyBTR0lfR1JVX0RFQlVHXG4tLVxuZHJpdmVycy9taXNjL0tjb25maWctMzMzLVxuZHJpdmVycy9taXNjL0tjb25maWc6MzM0OmNvbmZpZyBBUERTOTgwMkFMU1xuZHJpdmVycy9taXNjL0tjb25maWctMzM1LVx0dHJpc3RhdGUgXCYjMzQ7TWVkZmllbGQgQXZhZ28gQVBEUzk4MDIgQUxTIFNlbnNvciBtb2R1bGVcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWc9MTA2PWNvbmZpZyBORTJLX1BDSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWc6MTI0OmNvbmZpZyBBUE5FXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTI1LVx0dHJpc3RhdGUgXCYjMzQ7UENNQ0lBIE5FMjAwMCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYz0zMzIwPXN0YXRpYyBpbnQgcnR3ODlfcGNpX2NmZ19kYWMoc3RydWN0IHJ0dzg5X2RldiAqcnR3ZGV2LCBib29sIGZvcmNlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmMtMzMzMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmM6MzMzMzpcdC8qIENvbmZpZ3VyZSBEQUMgb25seSB2aWEgUENJIGNvbmZpZyBBUEksIG5vdCBEQkkgaW50ZXJmYWNlcyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzM0LVx0cmV0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUlRXODlfUENJRV9MMV9DVFJMLCBcdTAwMjZ2YWwpO1xuLS1cbmRyaXZlcnMvcGVyZi9LY29uZmlnPTI1Mz1jb25maWcgTUFSVkVMTF9DTjEwS19UQURfUE1VXG4tLVxuZHJpdmVycy9wZXJmL0tjb25maWctMjU5LVxuZHJpdmVycy9wZXJmL0tjb25maWc6MjYwOmNvbmZpZyBBUFBMRV9NMV9DUFVfUE1VXG5kcml2ZXJzL3BlcmYvS2NvbmZpZy0yNjEtXHRib29sIFwmIzM0O0FwcGxlIE0xIENQVSBQTVUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWc9MTk0PWNvbmZpZyBBRFZfU1dCVVRUT05cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnLTIwNC1cbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWc6MjA1OmNvbmZpZyBBUFBMRV9HTVVYXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnLTIwNi1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEdtdXggRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnPTM9aWYgQVJDSF9BUFBMRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvcG1kb21haW4vYXBwbGUvS2NvbmZpZy00LVxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnOjU6Y29uZmlnIEFQUExFX1BNR1JfUFdSU1RBVEVcbmRyaXZlcnMvcG1kb21haW4vYXBwbGUvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtBcHBsZSBTb0MgUE1HUiBwb3dlciBzdGF0ZSBjb250cm9sXCYjMzQ7XG4tLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZz0xOD1jb25maWcgUE9XRVJfU1VQUExZX0hXTU9OXG4tLVxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZy0zMC1cbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc6MzE6Y29uZmlnIEFQTV9QT1dFUlxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O0FQTSBlbXVsYXRpb24gZm9yIGNsYXNzIGJhdHRlcmllc1wmIzM0O1xuLS1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc9NT1tZW51IFwmIzM0O0FwcGxlIFNvQyBkcml2ZXJzXCYjMzQ7XG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTYtXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjc6Y29uZmlnIEFQUExFX01BSUxCT1hcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctOC1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNvQyBtYWlsYm94ZXNcJiMzNDtcbi0tXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTE4LVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzoxOTpjb25maWcgQVBQTEVfUlRLSVRcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBSVEtpdCBjby1wcm9jZXNzb3IgSVBDIHByb3RvY29sXCYjMzQ7XG4tLVxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0zMC1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6MzE6Y29uZmlnIEFQUExFX1NBUlRcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBTQVJUIERNQSBhZGRyZXNzIGZpbHRlclwmIzM0O1xuLS1cbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDAtXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjQxOmNvbmZpZyBBUFBMRV9UVU5BQkxFXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTQyLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc9MTQ3PWNvbmZpZyBVU0JfUUNPTV9FVURcbi0tXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWctMTU4LVxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnOjE1OTpjb25maWcgQVBQTEVfTUZJX0ZBU1RDSEFSR0VcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNjAtXHR0cmlzdGF0ZSBcJiMzNDtGYXN0IGNoYXJnZSBjb250cm9sIGZvciBpT1MgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmlkZW8vS2NvbmZpZz02PW1lbnUgXCYjMzQ7R3JhcGhpY3Mgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy92aWRlby9LY29uZmlnLTctXG5kcml2ZXJzL3ZpZGVvL0tjb25maWc6ODpjb25maWcgQVBFUlRVUkVfSEVMUEVSU1xuZHJpdmVycy92aWRlby9LY29uZmlnLTktXHRib29sXG4tLVxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnPTExMTE9Y29uZmlnIE1TQzMxM0VfV0FUQ0hET0dcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyMi1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZzoxMTIzOmNvbmZpZyBBUFBMRV9XQVRDSERPR1xuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTExMjQtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBTb0Mgd2F0Y2hkb2dcJiMzNDtcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9MTY1Mj14ZnNfZnNfZmlsbF9zdXBlcihcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmMtMTY2NC1cdCAqIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIGNvbXBsZXRlZCBieSBlaXRoZXIgdGhlIG9sZCBtb3VudCBBUEkgb3JcbmZzL3hmcy94ZnNfc3VwZXIuYzoxNjY1Olx0ICogdGhlIG5ld2VyIGZzb3Blbi9mc2NvbmZpZyBBUEkuXG5mcy94ZnMveGZzX3N1cGVyLmMtMTY2Ni1cdCAqL1xuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnPTMxMD1jb25maWcgUE1fVFJBQ0VfUlRDXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMzI3LVxua2VybmVsL3Bvd2VyL0tjb25maWc6MzI4OmNvbmZpZyBBUE1fRU1VTEFUSU9OXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0zMjktXHR0cmlzdGF0ZSBcJiMzNDtBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IEVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIEFQIChBcHBsaWNhdGlvbiBQcm9jZXNzb3IpIFN1cHBvcnQgaW4gczM5MCBBcmNoaXRlY3R1cmUqKgoKUmlnaHQsIHNvIEkgc2VlIGBjb25maWcgQVBgIGlzIGRlZmluZWQgaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCBpdCwgZ2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhhdCBjb25maWcgb3B0aW9uLiBMZXQgbWUganVtcCBpbnRvIGBhcmNoL3MzOTAvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDc5Ni4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCBmb3IgdW5kZXJzdGFuZGluZyB0aGVzZSBzb3J0cyBvZiBmZWF0dXJlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZXBlbmRlbmN5IGRlZmluaXRpb25zLCBtYXliZSBzb21lIGRlZmF1bHRzLCBhbmQgaG9wZWZ1bGx5IHNvbWUgZ29vZCBjb21tZW50cyB0byBjbGFyaWZ5IGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgczM5MCBrZXJuZWwgYnVpbGQuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IEFQIHN1cHBvcnQgaXMgY29uZmlndXJlZCBhbmQgd2hhdCBpdCBlbmFibGVzIChvciBkaXNhYmxlcykgaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTA6XHRcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIEVBRE0gc3ViY2hhbm5lbHMuIEVBRE0gc3ViY2hhbm5lbHMgYWN0XG4gNzkxOlx0XHQgIGFzIGEgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIGZvciBTQ00gaW5jcmVtZW50cy5cbiA3OTI6XHRcbiA3OTM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNzk0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlYWRtX3NjaC5cbiA3OTU6XHRcbiA3OTY6XHRjb25maWcgQVBcbiA3OTc6XHRcdGRlZl90cmlzdGF0ZSB5XG4gNzk4Olx0XHRwcm9tcHQgXCYjMzQ7U3VwcG9ydCBmb3IgQWRqdW5jdCBQcm9jZXNzb3JzIChhcClcJiMzNDtcbiA3OTk6XHRcdGhlbHBcbiA4MDA6XHRcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIHRvIEFkanVuY3QgUHJvY2Vzc29yIChBUCkgZGV2aWNlcyB2aWFcbiA4MDE6XHRcdCAgdGhlIGFwIGJ1cywgY2FyZHMgYW5kIHF1ZXVlcy4gU3VwcG9ydGVkIEFkanVuY3QgUHJvY2Vzc29ycyBhcmVcbiA4MDI6XHRcdCAgdGhlIENyeXB0b0V4cHJlc3MgQ2FyZHMgKENFWCkuXG4gODAzOlx0XG4gODA0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDgwNTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXAuXG4gODA2Olx0XG4gODA3Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkgKGRlZmF1bHQpLlxuIDgwODpcdFxuIDgwOTpcdGNvbmZpZyBBUF9ERUJVR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTY4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byBDcnlwdG9FeHByZXNzIENhcmQgRW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIENyeXB0b0V4cHJlc3MgQ2FyZHMsIHRoZXNlIENFWCBkZXZpY2VzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGhhcmR3YXJlIGlzIGVtdWxhdGVkIHdpdGhpbiBRRU1VLiBJdCYjMzk7cyBhIGtleSBxdWVzdGlvbiB3aGVuIHRoaW5raW5nIGFib3V0IHRlc3RpbmcgYW5kIGRldmVsb3BtZW50LiBJIG5lZWQgdG8gc2VlIGlmIFFFTVUgcHJvdmlkZXMgYW55IEFQIGRldmljZSBlbXVsYXRpb24uIEkgc2VlbSB0byByZWNhbGwgdGhhdCBzeXprYWxsZXIgaGFzIHNvbWUgczM5MHggc3VwcG9ydCwgd2hpY2ggY291bGQgYmUgaGVscGZ1bCwgYnV0IHRoYXQgZG9lc24mIzM5O3QgbmVjZXNzYXJpbHkgbWVhbiBpdCBlbXVsYXRlcyBBUCBkZXZpY2VzLgoKQWgsIHJpZ2h0LCBWRklPIEFQLiBJdCYjMzk7cyBjbGlja2luZyBub3cuIEl0JiMzOTtzIGEgbWVkaWF0ZWQgZGV2aWNlLCBhbiBtZGV2IGRyaXZlci4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gU28sIHRoZSBrZXkgaXMgdG8gc2VlIGlmIEkgY2FuIHJlYWNoIGB2ZmlvX2FwX21kZXZfcHJvYmVgLiBUaGF0JiMzOTtzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhpcyBtZWRpYXRlZCBkZXZpY2UuIE1lZGlhdGVkIGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCB3aGljaCBpcyBncmVhdC4KCk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MsIEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHNob3VsZCBmaW5kIG91dCBob3cgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgY29ubmVjdGVkIHRvIHRoZSB3aG9sZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz01OD1zdGF0aWMgc3RydWN0IGFwX2RyaXZlciB2ZmlvX2FwX2RydiA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy02MC1cdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03NzY9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfaW5pdF9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NzkwOnN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTEte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzc0PXN0YXRpYyBzdHJ1Y3QgbWRldl9kcml2ZXIgdmZpb19hcF9tYXRyaXhfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzgyLVx0fSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzgzOlx0LnByb2JlID0gdmZpb19hcF9tZGV2X3Byb2JlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODQtXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjQxMD12b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQxNjppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MTcte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTU2PXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTU4OmludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqcXVldWUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTktdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipNeSBVbmRlcnN0YW5kaW5nIG9mIHRoZSB2ZmlvX2FwX21hdHJpeF9kcml2ZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB2ZmlvX2FwX21hdHJpeF9kcml2ZXJgLCBhbmQgaXQmIzM5O3MgY3J5c3RhbCBjbGVhciB0aGF0IHRoaXMgaXMgYW4gYG1kZXZfZHJpdmVyYCwgYSBkcml2ZXIgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBtZWRpYXRlZCBkZXZpY2VzLiBUaGUgY29yZSBjb25jZXB0IGluc3RhbnRseSBjbGlja3MgLSBpZiB5b3Ugd2FudCB0byBpbnN0YW50aWF0ZSBhbiBtZGV2LCB5b3UgZnVuZGFtZW50YWxseSBuZWVkIGl0cyBwYXJlbnQgZGV2aWNlLiBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggZXZlcnl0aGluZyBlbHNlIGlzIGJ1aWx0LgoKTm93LCB3aGVyZSBkbyB3ZSBmaW5kIHRoZXNlIHBhcmVudCBkZXZpY2VzPyBBaCwgeWVzLCB0aGV5JiMzOTtyZSBiZWluZyByZWdpc3RlcmVkIHdpdGhpbiBlaXRoZXIgYHZmaW9fYXBfZHJ2LmNgIG9yIHBvdGVudGlhbGx5IGB2ZmlvX2FwX29wcy5jYC4gU28gdGhhdCYjMzk7cyB0aGUgbG9jYXRpb24gb2YgdGhlIHZpdGFsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kZXZfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzODc9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzkwLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzOTE6XHRyZXQgPSBtZGV2X3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kcml2ZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTItXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTExMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyBQYXJlbnQgRGV2aWNlIENyZWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBwYXJlbnQgZGV2aWNlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCBpdHMgY3JlYXRpb24gcG9pbnQuIFdoZXJlLCBpbiB0aGUgY29kZWJhc2UsIGlzIHRoYXQgaW5zdGFudGlhdGlvbiBhY3R1YWxseSBoYXBwZW5pbmc/IElzIGl0IGRpcmVjdGx5IGluIGEgY29uZmlndXJhdGlvbiBmaWxlPyBJcyB0aGVyZSBzb21lIGZhY3RvcnkgcGF0dGVybiBpbnZvbHZlZD8gQW0gSSBsb29raW5nIGF0IGEgZGlyZWN0IGBuZXdgIGNhbGwsIG9yIHNvbWV0aGluZyBtb3JlIGFic3RyYWN0ZWQgYmVoaW5kIGEgYnVpbGRlciBvciBkZXBlbmRlbmN5IGluamVjdGlvbiBmcmFtZXdvcms/IEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSByZWxldmFudCBtb2R1bGVzLCBzdGFydGluZyB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGxvYWRpbmcgYW5kIHNldHVwIHJvdXRpbmVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBrZXl3b3JkcyBsaWtlICYjMzQ7bmV3LCYjMzQ7ICYjMzQ7Y3JlYXRlLCYjMzQ7ICYjMzQ7aW5pdGlhbGl6ZSwmIzM0OyBvciBhbnl0aGluZyBzdWdnZXN0aXZlIG9mIG9iamVjdCBjb25zdHJ1Y3Rpb24gcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIGRldmljZSB0eXBlLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGggY2xvc2VseSwgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaXRzIGNyZWF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBvcmlnaW4gcG9pbnQgaXMgY3J1Y2lhbCBiZWZvcmUgY29uc2lkZXJpbmcgZnVydGhlciBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kZXZfcmVnaXN0ZXJfcGFyZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzODc9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzk3LVx0bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGVzID0gXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM5ODpcdHJldCA9IG1kZXZfcmVnaXN0ZXJfcGFyZW50KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlcGFyZW50LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzk5LVx0XHRcdFx0ICAgXHUwMDI2dmZpb19hcF9tYXRyaXhfZHJpdmVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZXZpY2UgQ29udGV4dCoqCgpBbHJpZ2h0LCBteSBicmFpbiBqdXN0IHdlbnQgc3RyYWlnaHQgdG8gYG1hdHJpeF9kZXYtJmd0O2RldmljZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBtYXRyaXhfZGV2YCBzdHJ1Y3R1cmUgYW5kIHRoZSB1bmRlcmx5aW5nIGRldmljZSByZXByZXNlbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgJiMzNDtkZXZpY2UmIzM0OyBtZW1iZXIgb2YgdGhlIGBtYXRyaXhfZGV2YCBzdHJ1Y3R1cmUuCgpUaGlzIGltcGxpZXMgSSYjMzk7bSBwcm9iYWJseSBkZWFsaW5nIHdpdGggc29tZSBzb3J0IG9mIGFic3RyYWN0aW9uIGxheWVyIG9yIGEgZHJpdmVyIGFyY2hpdGVjdHVyZSB3aGVyZSBgbWF0cml4X2RldmAgbGlrZWx5IGVuY2Fwc3VsYXRlcyB0aGUgaGlnaGVyLWxldmVsIG1hdHJpeCBvcGVyYXRpb24sIGFuZCB0aGUgJiMzNDtkZXZpY2UmIzM0OyBtZW1iZXIgaXMgaG93IHdlIGludGVyZmFjZSB3aXRoIHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgdW5kZXJseWluZyBjb21wdXRlIHJlc291cmNlLiBBbSBJIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyByZWdpc3RlcnMgb3IgaG93IHRoZSBtZW1vcnkgaXMgbWFwcGVkPwoKSSYjMzk7bSBwcm9iYWJseSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gYWNjZXNzLCBjb25maWd1cmUsIG9yIGNvbnRyb2wgYSBzcGVjaWZpYyBkZXZpY2Ugd2l0aGluIGEgbGFyZ2VyIHN5c3RlbSBpbnZvbHZpbmcgbWF0cml4IG9wZXJhdGlvbnMuIE1heWJlIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBvciBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLCBvciBldmVuIGFkZGluZyBhIG5ldyBmZWF0dXJlLiBVbmRlcnN0YW5kaW5nIHRoaXMgY29ubmVjdGlvbiBpcyBjcml0aWNhbCB0byByZXNvbHZpbmcgdGhlIHByb2JsZW0gb3IgdGFzay4gSSB3b25kZXIgd2hhdCBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIGRldmljZSB0aGlzIHBvaW50cyB0by4gSGFyZHdhcmUgY2hhcmFjdGVyaXN0aWNzLCBtZW1vcnkgYWxsb2NhdGlvbiwgY29udGV4dCBtYW5hZ2VtZW50Li4uIHdoZXJlIGRvZXMgdGhpcyByYWJiaXQgaG9sZSBsZWFkPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXRyaXhfZGV2LVx1MDAzZWRldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTE1LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNjpcdGRldl9zZXRfbmFtZShcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSwgXCYjMzQ7JXNcJiMzNDssIFZGSU9fQVBfREVWX05BTUUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNzpcdG1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLnBhcmVudCA9IHJvb3RfZGV2aWNlO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExODpcdG1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLmJ1cyA9IFx1MDAyNm1hdHJpeF9idXM7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTE5Olx0bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucmVsZWFzZSA9IHZmaW9fYXBfbWF0cml4X2Rldl9yZWxlYXNlO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTEyMC1cdG1hdHJpeF9kZXYtXHUwMDNldmZpb19hcF9kcnYgPSBcdTAwMjZ2ZmlvX2FwX2RydjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMjEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTIyOlx0cmV0ID0gZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMzItbWF0cml4X2Rydl9lcnI6XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTMzOlx0ZGV2aWNlX2RlbChcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTM0LW1hdHJpeF9yZWdfZXJyOlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjEzNTpcdHB1dF9kZXZpY2UoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTEzNi1tYXRyaXhfYWxsb2NfZXJyOlxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNDM9c3RhdGljIHZvaWQgdmZpb19hcF9tYXRyaXhfZGV2X2Rlc3Ryb3kodm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNDQte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE0NTpcdHN0cnVjdCBkZXZpY2UgKnJvb3RfZGV2aWNlID0gbWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucGFyZW50O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE0Ni1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNDctXHRkcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZtYXRyaXhfZHJpdmVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNDg6XHRkZXZpY2VfdW5yZWdpc3RlcihcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTQ5LVx0YnVzX3VucmVnaXN0ZXIoXHUwMDI2bWF0cml4X2J1cyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzODc9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzk3LVx0bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGVzID0gXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM5ODpcdHJldCA9IG1kZXZfcmVnaXN0ZXJfcGFyZW50KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlcGFyZW50LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWRldmljZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzk5LVx0XHRcdFx0ICAgXHUwMDI2dmZpb19hcF9tYXRyaXhfZHJpdmVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBVbmRlcnN0YW5kaW5nIG9mIHRoZSBNYXRyaXggRGV2aWNlIENyZWF0aW9uKioKCkFscmlnaHQsIHNvIGBtYXRyaXhfZGV2YCBpcyBiZWluZyBzcHVuIHVwLiBTZWVtcyBsaWtlIGl0JiMzOTtzIHRha2luZyBvbiB0aGUgcm9sZSBvZiBhIHJvb3QgZGV2aWNlIG9yIGEgY2hpbGQgb2YgdGhlIGByb290X2RldmljZWAgb24gdGhlIGBtYXRyaXhfYnVzYC4gVGhhdCYjMzk7cyB0aGUgc2V0dXAgSSYjMzk7ZCBleHBlY3QuIE5vdywgaGVyZSYjMzk7cyB0aGUgaW50ZXJlc3RpbmcgYml0IOKAkyBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2Ugd2UgKm5lZWQqIHRob3NlIHBoeXNpY2FsIEFQIGRldmljZXMgdG8gYWN0dWFsbHkgKmNyZWF0ZSogdGhlIHBhcmVudCBmb3IgdGhlIG1kZXYuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIFdlJiMzOTtyZSBnZXR0aW5nIHRvIHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXIuCgpBaCwgYW5kIHRoZXJlIGl0IGlzOiBgdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZWAgaXMgZ2V0dGluZyBjYWxsZWQgKmR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24qLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcmVhdGlvbiBsb2dpYyBpcyBoYXBwZW5pbmcuIFRoaXMgY2xhcmlmaWVzIHRoZSB0aW1pbmcg4oCTIGl0JiMzOTtzIGhhcHBlbmluZyBlYXJseSBpbiB0aGUgZGV2aWNlIGxpZmVjeWNsZSwgcmlnaHQgd2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRpbmcsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZGV2aWNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEkgY2FuIHNlZSBob3cgdGhlIGZyYW1ld29yayBpcyBlc3RhYmxpc2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz03OT1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbWF0cml4X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtODUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6ODY6c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtODcte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNjc9c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE3OC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzk6XHRyZXQgPSB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTgwLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipWRklPIERldmljZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgY29yZSBwcm9jZXNzIGJlZ2lucyB3aXRoIHRoZSB1bmNvbmRpdGlvbmFsIGNyZWF0aW9uIG9mIHRoZSBwYXJlbnQgVkZJTyBkZXZpY2UgZHVyaW5nIHRoZSBtb2R1bGUmIzM5O3MgaW5pdGlhbGl6YXRpb24uIFRoYXQgbWFrZXMgc2Vuc2U7IGl0IGVzdGFibGlzaGVzIHRoZSBmb3VuZGF0aW9uLiBBZnRlciB0aGF0IGluaXRpYWwgc2V0dXAgaXMgY29tcGxldGUsIHRoZSBgdmZpb19hcF9tZGV2X3JlZ2lzdGVyYCBmdW5jdGlvbiBpcyBpbnZva2VkLiBTbyB0aGUgcGFyZW50IGRldmljZSBpcyByZWFkeSwgYW5kIG5vdyB3ZSByZWdpc3RlciB0aGUgbWVkaWF0ZWQgZGV2aWNlLiBUaGF0IHN1Z2dlc3RzIGEgY2xlYXIgc2VxdWVuY2U6IGVzdGFibGlzaCB0aGUgYmFzZSwgdGhlbiBjb25uZWN0IHRoZSBtZWRpYXRlZCBpbnN0YW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfbWRldl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNjc9c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4OC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxODk6XHRyZXQgPSB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xOTAtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzQ9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODYtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM4NzppbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4OC17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNDM9c3RydWN0IHZmaW9fYXBfcXVldWUge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTU0LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNTU6aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTU2LXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIHRoZSBtZGV2IFJlZ2lzdHJhdGlvbiBhbmQgUHJvYmUgRmxvdyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgYG1kZXZgIHBhcmVudCBpcyByZWdpc3RlcmVkIHdpdGhvdXQgYW55IGNvbmRpdGlvbmFsIGNoZWNrcywgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoYXQgaW1wbGllcyB0aGF0IGFueSB1c2Vyc3BhY2UgcHJvY2VzcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyBjYW4gY3JlYXRlIGBtZGV2YCBkZXZpY2VzIGRpcmVjdGx5IHRocm91Z2ggdGhlIGBzeXNmc2AgaW50ZXJmYWNlLiBUaGlzIHRyaWdnZXJzIGEgY2FsbCB0byBgdmZpb19hcF9tZGV2X3Byb2JlYC4gU28sIG15IGZvY3VzIHNob3VsZCBub3cgc2hpZnQgdG8gc2NydXRpbml6aW5nIHdoYXQgZXhhY3RseSBoYXBwZW5zIGluc2lkZSBgdmZpb19hcF9tZGV2X3Byb2JlYC4gV2hhdCYjMzk7cyB0aGUgY29udHJvbCBmbG93IHRoZXJlPyBXaGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkPyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBhIHBvdGVudGlhbGx5IHVuY29uZGl0aW9uYWwgcHJvYmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBmcm9tIHRoaXMgdW5jb25kaXRpb25hbCBjcmVhdGlvbiBwYXRoLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc4MDpcdFxuIDc4MTpcdFx0bWF0cml4X21kZXYtXHUwMDNlbWRldiA9IHRvX21kZXZfZGV2aWNlKHZkZXYtXHUwMDNlZGV2KTtcbiA3ODI6XHRcdHZmaW9fYXBfbWF0cml4X2luaXQoXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VpbmZvLCBcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXgpO1xuIDc4MzpcdFx0bWF0cml4X21kZXYtXHUwMDNlcHFhcF9ob29rID0gaGFuZGxlX3BxYXA7XG4gNzg0Olx0XHR2ZmlvX2FwX21hdHJpeF9pbml0KFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlaW5mbywgXHUwMDI2bWF0cml4X21kZXYtXHUwMDNlc2hhZG93X2FwY2IpO1xuIDc4NTpcdFx0aGFzaF9pbml0KG1hdHJpeF9tZGV2LVx1MDAzZXF0YWJsZS5xdWV1ZXMpO1xuIDc4NjpcdFxuIDc4NzpcdFx0cmV0dXJuIDA7XG4gNzg4Olx0fVxuIDc4OTpcdFxuIDc5MDpcdHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcbiA3OTE6XHR7XG4gNzkyOlx0XHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuIDc5MzpcdFx0aW50IHJldDtcbiA3OTQ6XHRcbiA3OTU6XHRcdG1hdHJpeF9tZGV2ID0gdmZpb19hbGxvY19kZXZpY2UoYXBfbWF0cml4X21kZXYsIHZkZXYsIFx1MDAyNm1kZXYtXHUwMDNlZGV2LFxuIDc5NjpcdFx0XHRcdFx0XHRcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kZXZfb3BzKTtcbiA3OTc6XHRcdGlmIChJU19FUlIobWF0cml4X21kZXYpKVxuIDc5ODpcdFx0XHRyZXR1cm4gUFRSX0VSUihtYXRyaXhfbWRldik7XG4gNzk5Olx0XG4gODAwOlx0XHRyZXQgPSB2ZmlvX3JlZ2lzdGVyX2VtdWxhdGVkX2lvbW11X2RldihcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2V2ZGV2KTtcbiA4MDE6XHRcdGlmIChyZXQpXG4gODAyOlx0XHRcdGdvdG8gZXJyX3B1dF92ZGV2O1xuIDgwMzpcdFx0bWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xuIDgwNDpcdFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbiA4MDU6XHRcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGV2LVx1MDAzZWRldiwgbWF0cml4X21kZXYpO1xuIDgwNjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiA4MDc6XHRcdGxpc3RfYWRkKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZW5vZGUsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0KTtcbiA4MDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiA4MDk6XHRcdHJldHVybiAwO1xuIDgxMDpcdFxuIDgxMTpcdGVycl9wdXRfdmRldjpcbiA4MTI6XHRcdHZmaW9fcHV0X2RldmljZShcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2V2ZGV2KTtcbiA4MTM6XHRcdHJldHVybiByZXQ7XG4gODE0Olx0fVxuIDgxNTpcdFxuIDgxNjpcdHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4gODE3Olx0XHRcdFx0XHQgICAgc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gODE4Olx0e1xuIDgxOTpcdFx0aWYgKCFxIHx8IHZmaW9fYXBfbWRldl9nZXRfcXVldWUobWF0cml4X21kZXYsIHEtXHUwMDNlYXBxbikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODYwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKlZGSU8tQVAgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdmZpb19hcF9tZGV2X3Byb2JlYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhhdCYjMzk7cyBnb29kLCBidXQgaXQmIzM5O3MganVzdCB0aGUgYmVnaW5uaW5nLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAsIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAsIGFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHN1c3BlY3QgbWFuYWdlIGRldmljZSBjcmVhdGlvbiwgcmVtb3ZhbCwgYW5kIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlc2UgQVAgZGV2aWNlcy4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgZnVuY3Rpb24uIEkgaGF2ZSB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGltcGFjdHMgaG93IEFQIGRldmljZXMgYXJlIGluaXRpYWxpemVkLiBUaGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb24gY2FsbHMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19hcF9tZGV2X2NmZ19yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU1Nz1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjU4NS0vKipcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNTg2OiAqIHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlIC0gZGV0ZXJtaW5lcyB3aGljaCBndWVzdHMgYXJlIHVzaW5nIHRoZSBhZGFwdGVycyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTg3LSAqXHRcdFx0ICAgICBkb21haW5zIGFuZCBjb250cm9sIGRvbWFpbnMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTk3LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1OTg6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1OTktXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyAqYXFfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNjQ2PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NvbmZpZ19pbmZvLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjY3LVx0aWYgKGRvX3JlbW92ZSlcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNjY4Olx0XHR2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZShhcHJlbSwgYXFyZW0sIGNkcmVtKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjY5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0YWNrbGluZyB0aGlzOgoKKipBbmFseXppbmcgYHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlYCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGdldCBteSBoZWFkIGFyb3VuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmVgLiBUaGlzIGxpa2VseSBkZWFscyB3aXRoIHJlbW92aW5nIGEgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIG1lZGlhdGVkIGRldmljZXMgd2l0aGluIHRoZSBWRklPIChWaXJ0dWFsIEZ1bmN0aW9uIEkvTykgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgZm9yIEFjY2VzcyBQcm90ZWN0aW9uIChBUCkgbWVkaWF0ZWQgZGV2aWNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvICpkbyosIGFuZCB3aGVyZSBpdCBzaXRzIGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiBWRklPJiMzOTtzIG1kZXYgKG1lZGlhdGVkIGRldmljZSkgaGFuZGxpbmcsIHBhcnRpY3VsYXJseSBhcyBpdCBwZXJ0YWlucyB0byBBUC4gSXMgdGhpcyBwYXJ0IG9mIGEgY2xlYW51cCByb3V0aW5lLCBhbiBlcnJvciBoYW5kbGluZyBwYXRoLCBvciBhIGNvcmUgcGFydCBvZiB0aGUgbWRldiB0ZWFyLWRvd24gcHJvY2Vzcz8gTXkgZXhwZXJpZW5jZSB3aXRoIFZGSU8gdGVsbHMgbWUgaXQmIzM5O3MgcHJvYmFibHkgbGlua2VkIHRvIGEgc3BlY2lmaWMgZGV2aWNlIHN0YXRlLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgd2l0aCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBvciByZXNvdXJjZSBjb3JydXB0aW9uIHVwb24gcmVtb3ZhbC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGtub3cgd2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLiBUaGUgY29udGV4dCB3aWxsIHRlbGwgbWUgaG93IGNyaXRpY2FsIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNTk4PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKHVuc2lnbmVkIGxvbmcgKmFwX3JlbW92ZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjYzOC0vKipcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNjM5OiAqIHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlIC0gcmVzcG9uZHMgdG8gdGhlIHJlbW92YWwgb2YgYWRhcHRlcnMsIGRvbWFpbnMgYW5kXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjY0MC0gKlx0XHRcdFx0Y29udHJvbCBkb21haW5zIGZyb20gdGhlIGhvc3QgQVAgY29uZmlndXJhdGlvblxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjQ1LSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI2NDY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjY0Ny1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKnByZXZfY29uZmlnX2luZm8pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4MTk9dm9pZCB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NmZ19pbmZvLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODI2LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4Mjc6XHR2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShjdXJfY2ZnX2luZm8sIHByZXZfY2ZnX2luZm8pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MjgtXHR2ZmlvX2FwX21kZXZfb25fY2ZnX2FkZChjdXJfY2ZnX2luZm8sIHByZXZfY2ZnX2luZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLCBhbmQgaXQgdXN1YWxseSBtZWFucyBzb21ldGhpbmcgc2lnbmlmaWNhbnQgaGFzIG9jY3VycmVkIHdpdGhpbiB0aGUgVkZJTyAoVmlydHVhbCBGdW5jdGlvbiBJL08pIHN1YnN5c3RlbSByZWxhdGVkIHRvIHRoZSBhY2Nlc3MgcHJvdGVjdGlvbiBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhpcyBjYWxsIGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgbWVudGFsbHkgZ28gdGhyb3VnaCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBjYWxsIHNpdGVzIHRvIGdldCBhIGdyYXNwIG9mIHRoZSB0cmlnZ2Vycy4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hhdCBraW5kcyBvZiBldmVudHMgY291bGQgcG9zc2libHkgbmVjZXNzaXRhdGUgYSBjaGFuZ2UgaW4gdGhlIGFjY2VzcyBwcm90ZWN0aW9uIGNvbmZpZ3VyYXRpb24uIERldmljZSBob3RwbHVnZ2luZz8gU2VjdXJpdHkgY29udGV4dHM/IFBlcmhhcHMgc29tZSBzb3J0IG9mIHJlc291cmNlIHJlYWxsb2NhdGlvbiBvciB2aXJ0dWFsaXphdGlvbiBtYW5hZ2VtZW50IG9wZXJhdGlvbj8gS25vd2luZyB0aGUgc3BlY2lmaWMgdHJpZ2dlciBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBpbXBsZW1lbnRhdGlvbiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgbG9ja3MgaXQgdXNlcywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVkZJTyBpbmZyYXN0cnVjdHVyZS4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGV2YWx1YXRlIHBvdGVudGlhbCBpbXBhY3RzIGlmIHRoaXMgaXMgaGFuZGxlZCBpbmNvcnJlY3RseS4gVGhlIGltcGxpY2F0aW9ucyBvZiBnZXR0aW5nIGFjY2VzcyBwcm90ZWN0aW9uIHdyb25nIGluIFZGSU8gYXJlIGh1Z2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fYXBfb25fY2ZnX2NoYW5nZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYxLVx0LmluX3VzZSA9IHZmaW9fYXBfbWRldl9yZXNvdXJjZV9pbl91c2UsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6NjI6XHQub25fY29uZmlnX2NoYW5nZWQgPSB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYzLVx0Lm9uX3NjYW5fY29tcGxldGUgPSB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3ODc9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19hZGQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MTItLyoqXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgxMzogKiB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkIC0gaGFuZGxlcyBub3RpZmljYXRpb24gb2YgY2hhbmdlcyB0byB0aGUgaG9zdCBBUFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MTQtICpcdFx0XHQgICAgY29uZmlndXJhdGlvbi5cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgxOC0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyODE5OnZvaWQgdmZpb19hcF9vbl9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jZmdfaW5mbyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODIwLVx0XHRcdCAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKnByZXZfY2ZnX2luZm8pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNjE9aW50IHZmaW9fYXBfbWRldl9yZXNvdXJjZV9pbl91c2UodW5zaWduZWQgbG9uZyAqYXBtLCB1bnNpZ25lZCBsb25nICphcW0pO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE2Mzp2b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2NC1cdFx0XHQgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMxMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDcyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWRklPLUFQIExvY2tpbmcgTG9naWMgJmFtcDsgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAgaXMgYW4gYGFwX2RyaXZlcmAgY2FsbGJhY2ssIHRyaWdnZXJlZCBieSB0aGUgQVAgYnVzLiAgRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgQVAgYnVzIGV2ZW4gKmV4aXN0cyogaW4gUUVNVS4gIEFoLCByaWdodCwgd2UgaGF2ZSBzb21lIHMzOTB4IHN1cHBvcnQsIHNvIHllcywgaXQmIzM5O3MgYSBwb3NzaWJpbGl0eS4gIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcGF0aCByZWFjaGFibGU/IFN5emthbGxlciBkb2VzbiYjMzk7dCBkZWZhdWx0IHRvIHMzOTB4IFZNcywgYnV0IGl0IGhhcyBhbiBzMzkweCBwb3J0LCBzbyBpdCYjMzk7cyBhIGRlZmluaXRlIG1heWJlLiBJZiBpdCYjMzk7cyByZWFjaGFibGUsIGl0JiMzOTtzIGZ1enphYmxlLgoKVGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGEgbG9ja2luZyBsb2dpYyBjaGFuZ2UuICBTcGVjaWZpY2FsbHksIEkmIzM5O20gc2VlaW5nOgoKYGBgYwotCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAlsaXN0X2FkZCgmYW1wO21hdHJpeF9tZGV2LSZndDtub2RlLCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKYGBgCgphbmQgYWxzbyB0aGlzOgoKYGBgYwogCWxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7Ci0JCW11dGV4X2xvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsCiYjNDM7CQkgKiBhbmQga3ZtLSZndDtsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9jawomIzQzOwkJICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LgomIzQzOwkJICovCiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF9sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiAJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKYGBgCgpTbywgdGhpcyBjaGFuZ2UgaXMgYSBmdW5jdGlvbmFsIG9uZSwgYWltZWQgYXQgcHJldmVudGluZyBkZWFkbG9ja3Mgb3IgZml4aW5nIGxvY2tkZXAgaXNzdWVzLCB3aGljaCBtYWtlcyBpdCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgdG8gZnV6ei4KCkxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gIEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYHZmaW9fYXBfbWRldl9wcm9iZWAKKiAgIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAKKiAgIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAKKiAgIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYAoqICAgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAKCkhvbGQgb24uLi4gYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBhbmQgYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIHRoZXkgYXJlIGlubGluZWQuIE5vLCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmVgIGFuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgLCB3aGljaCBhcmUgaW4gdHVybiBjYWxsZWQgYnkgYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgLiBPa2F5LCBzbyB3ZSBjYW4gcHJvYmFibHkgZm9jdXMgb24gYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBhcyBwcmltYXJ5IHRhcmdldHMsIHNpbmNlIHRoZXkgYXJlIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gQW5kLCBhcyBiZWZvcmUsICBgdmZpb19hcF9tZGV2X3Byb2JlYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2lsbCBjb25maXJtIHRoZSBzdGF0aWMgc3RhdHVzIGFnYWluIC0gYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBpcyBzdGF0aWMsIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYCBpcyBzdGF0aWMgdG9vLiAgQnV0IGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGlzIG5vbi1zdGF0aWMgKGV4cG9ydGVkIG9yIHNvbWV0aGluZyBzaW1pbGFyKS4gVGhhdCBjb25maXJtcyB0aGUgZnV6emluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yODM0PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjg1Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyODU4OnZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NTktXHRcdFx0ICAgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNjM9dm9pZCB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjQtXHRcdFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqb2xkX2NvbmZpZ19pbmZvKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTY1OnZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjYtXHRcdFx0ICAgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI0MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWRklPLUFQIE1vZHVsZSBFbnRyeSBQb2ludHMgYW5kIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIGluc3RpbmN0IHBvaW50cyBtZSB0b3dhcmRzIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAsIGFuZCBgdmZpb19hcF9tZGV2X3Byb2JlYCBhcyB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIGluIHRoaXMgYFZGSU8tQVBgIGNvbnRleHQuIEFoLCByaWdodCwgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgZGVjbGFyZWQgYHN0YXRpY2AuIEkgc2hvdWxkIHByb2JhYmx5IHByZWZlciBhIG5vbi1zdGF0aWMgb3B0aW9uIGlmIGF2YWlsYWJsZSwgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIGNhbiBzb21ldGltZXMgaGluZGVyIGFuYWx5c2lzLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBiZWluZyBwYXNzZWQgYXMgYSBjYWxsYmFjay4gWWVzLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHVzZWQgYXMgdGhlIGAucHJvYmVgIGZ1bmN0aW9uIGluIGB2ZmlvX2FwX21hdHJpeF9kcml2ZXJgLCB3aGljaCBtYWtlcyBpdCBhbiBlbnRyeSBwb2ludC4gQnV0LCBhcyBhIHByb2JlIGZ1bmN0aW9uLCBpdCYjMzk7cyB2ZXJ5IHVubGlrZWx5IHRvIGJlIGlubGluZWQsIHNvIGluY2x1ZGluZyBpdCBpcyBwcm9iYWJseSBmaW5lIGFuZCB3b24mIzM5O3QgY29tcGxpY2F0ZSB0aGluZ3MuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gc2VlaW5nIHRoYXQgd2UgY2xlYXJseSBuZWVkIGBWRklPX0FQYC4gV2FpdCwgYEFQYCBpcyBgZGVmX3RyaXN0YXRlIHlgIGluIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgLCBzbyBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gczM5MC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBWRklPX0FQYCYjMzk7cyBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBpcyByZXF1aXJlZC4gT2theSwgaXQgbmVlZHMgYEtWTWAsIGBWRklPYCwgYW5kIGBBUGAsIHdoaWNoIHdlIGNvdmVyZWQsIGFuZCBgVkZJT19NREVWYCwgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgYFZGSU9fQVBgIGl0c2VsZi4KClNvLCBsb29rcyBsaWtlIGVuYWJsaW5nIGBWRklPX0FQYCBzaG91bGQgYmUgc3VmZmljaWVudC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgY29uY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODMzLVxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXHRkZWZfdHJpc3RhdGUgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwMQoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA2MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWRklPIEFQIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBpcyB0aGUgYFZGSU9fQVBgIGNvbmZpZ3VyYXRpb24sIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uLiBJJiMzOTttIHNlZWluZyBpdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eS4gCgpJIGNoZWNrZWQ6IGBLVk1gIGFuZCBgVkZJT2AgYXJlIHN0YW5kYXJkIGJ1dCBgVkZJT19BUGAgaXMgdGhlIG1haW4gdGFyZ2V0LgoKSSB3ZW50IHRocm91Z2ggdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBJdCBtZWFucyBpdCYjMzk7cyBhIGRpcmVjdCBjYWxsYmFjayBhbmQgY2FuIGJlIGluY2x1ZGVkLiBUaGVyZSYjMzk7cyBubyBub24tc3RhdGljIHdyYXBwZXIgYXJvdW5kIGl0LCBpdCYjMzk7cyBkaXJlY3RseSBhc3NpZ25lZCB0byBgbWRldl9kcml2ZXIucHJvYmVgLiBUaGVuLCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAgYW5kIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgIGFyZSBub24tc3RhdGljLgoKTXkgZm9jdXMgaXMgb24gdGhlc2Ugc3ltYm9sczoKCiogICBgdmZpb19hcF9tZGV2X3Byb2JlYAoqICAgYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgCiogICBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYAoKQW5kIHRoZSBlbmFibGUgY29uZmlnIGlzOgoKKiAgIGBWRklPX0FQYAoKVGhlIHBhdGNoIGlzIGZpeGluZyB0aGUgbG9ja2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgbG9ja3MgYXJlIG9yZGVyZWQuIEl0JiMzOTtzIGRlYWxpbmcgd2l0aCBgbWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9ja2AsIGBtYXRyaXhfZGV2LSZndDtndWVzdHNfbG9ja2AsIGFuZCBgbWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9ja2AgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyBhbmQgZGVhZGxvY2tzLiBUaGVzZSBjaGFuZ2VzIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBtZGV2IHByb2JlLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGFuZCBob3RwbHVnIGV2ZW50cywgYWxsIGNvcmUgZHJpdmVyIGZ1bmN0aW9uYWxpdGllcyB0cmlnZ2VyZWQgYnkgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24uCgpUbyBjb25maXJtIHRoZSBzcGVjaWZpY3MsIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBmdW5jdGlvbiBuYW1lcy4gWWVwLCBgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KWAgaXMgY29ycmVjdC4gU2FtZSBmb3IgdGhlIG90aGVyIHR3bzogYHZvaWQgdmZpb19hcF9vbl9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jZmdfaW5mbywgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpwcmV2X2NmZ19pbmZvKWAgYW5kIGB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbywgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pYC4KClRoZXJlIGFyZSBvdGhlciBzdGF0aWMgZnVuY3Rpb25zLCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBhbmQgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgLCBidXQgdGhleSBhcmUgY2FsbGVkIGZyb20gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyB3ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0uCgpTaW5jZSBgdmZpb19hcF9tZGV2X3Byb2JlYCBpcyBzdGF0aWMsIGl0JiMzOTtzIHNhZmUgdG8gaW5jbHVkZSBhcyBhIGNhbGxiYWNrLgoKSSYjMzk7bSByZWFkeSB0byBtYXJrIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IFZGSU9fQVA8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkZJT19BUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGxvZ2ljIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyBpbiB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgbWVkaWF0ZWQgZGV2aWNlIGRyaXZlci4gSXQgZml4ZXMgbG9jayBvcmRlcmluZyBiZXR3ZWVuIGBtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2tgLCBgbWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9ja2AsIGFuZCBgbWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2tgIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3MgZHVyaW5nIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRyaXZlciBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IFZGSU9fQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBWRklPX0FQIEF2YWlsYWJpbGl0eSBpbiB0aGUgczM5MCBBcmNoaXRlY3R1cmUqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiB0aGUgdG9vbCBJJiMzOTttIHVzaW5nIGZsYWdnZWQgYFZGSU9fQVBgIGFzIHVuZGVmaW5lZCwgYnV0IG15IG1lbW9yeSBpcyBwcmV0dHkgc29saWQsIGFuZCBJICpjb3VsZCBoYXZlIHN3b3JuKiBJIHNhdyBpdCBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBUaW1lIGZvciBhIGRvdWJsZS1jaGVjay4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoYXQgS2NvbmZpZyBmaWxlIGFnYWluLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlcmUmIzM5O3MgcHJvYmFibHkganVzdCBzb21lIHN1YnRsZXR5IEkgbWlzc2VkLCBvciBtYXliZSBhbiBpbnRlcmFjdGlvbiB3aXRoIGFub3RoZXIgY29uZmlnIEkmIzM5O20gbm90IHRoaW5raW5nIGFib3V0LiBCZXN0IHRvIGNvbmZpcm0gdGhhdCB0aGUgdG9vbCYjMzk7cyByaWdodCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gZGVidWdnaW5nLi4uIGJlY2F1c2UgSSYjMzk7bSBiZXR0aW5nIHRoYXQgS2NvbmZpZyBoYXMgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODMzLVxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXG5hcmNoL3MzOTAvS2NvbmZpZy04MzUtXHRkZWZfdHJpc3RhdGUgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc1NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBLY29uZmlnIERpc2NyZXBhbmN5KioKCk9rYXksIHNvIHRoZSB0b29sIGNsYWltcyBgVkZJT19BUGAgaXNuJiMzOTt0IGluIHRoZSBrZXJuZWwsIGFuZCB0aGF0JiMzOTtzIHRocm93aW5nIG1lIGZvciBhIGxvb3AuIE15IGZpcnN0IGluc3RpbmN0IHdhcyB0aGF0IHRoZSB0b29sIG1pZ2h0IGJlIG1pc3Npbmcgc29tZXRoaW5nIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLCBtYXliZSBgYXJjaC9zMzkwL0tjb25maWdgLiBQZXJoYXBzIGl0IHdhc24mIzM5O3QgcGFyc2luZyBpdCBjb3JyZWN0bHksIG9yIG1heWJlIGl0IHdhcyBvbmx5IGxvb2tpbmcgYXQgYHg4NmAgb3Igb3RoZXIgc3RhbmRhcmQgY29uZmlncy4gQnV0IHRoZW4gSSByZW1lbWJlcmVkLCB0aGUgdG9vbCAqc2hvdWxkKiBjaGVjayBhbGwgdGhlIEtjb25maWcgZmlsZXMuCgpSaWdodCwgc28gbGV0JiMzOTtzIHZlcmlmeSDigJMgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbmZpZyAqZXhhY3RseSogYFZGSU9fQVBgPyBZZXAsIGNvbmZpcm1lZDogaXQmIzM5O3MgZGVmaW5lZCBhcyBgY29uZmlnIFZGSU9fQVBgLiBTbyB3aHkgdGhlIGhlY2sgaXMgaXQgc2F5aW5nIHRoYXQgaXQgZG9lc24mIzM5O3QgZXhpc3Q/IFRoaXMgaXMgYmFmZmxpbmcuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBkb3VibGUtY2hlY2sgaXRzIGRlZmluaXRpb24uIEkmIzM5O2xsIGhlYWQgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL3MzOTAvY3J5cHRvL0tjb25maWdgIOKAkyB0aGF0IGZlZWxzIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgZmlsZSBhY3R1YWxseSBjb250YWlucyB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTkyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBGaWxlKioKCk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbiBpcyBwcmV0dHkgY2xlYXIuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvczM5MC9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG9zc2liaWxpdGllcy4gV2hhdCBhbSBJIGxvb2tpbmcgZm9yPyBXZWxsLCBpdCBkZXBlbmRzIG9uIHRoZSBjb250ZXh0LCBvZiBjb3Vyc2UsIGJ1dCBnZW5lcmFsbHksIEkmIzM5O2xsIGJlIGludGVyZXN0ZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gVGhpcyBjb3VsZCBpbnZvbHZlIGRyaXZlci1zcGVjaWZpYyBzZXR0aW5ncywgaGFyZHdhcmUgc3VwcG9ydCwgb3IgZXZlbiBmZWF0dXJlIGVuYWJsZW1lbnRzLiBJJiMzOTtsbCBsaWtlbHkgYmUgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGtleXdvcmRzIG9yIHN5bWJvbHMgSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBtYXliZSBzb21ldGhpbmcgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgZGV2aWNlIG9yIHN1YnN5c3RlbS4gVGhlIGtleSBoZXJlIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB3aGF0IGNhbiBiZSBjb25maWd1cmVkLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQga2luZHMgb2YgdGhpbmdzIHRoYXQgZmlsZSBtaWdodCBjb250YWluLCBhbmQgSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gb3IgcmVmdXRlIHRob3NlIGV4cGVjdGF0aW9ucy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0NTUKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyb3VibGVzaG9vdGluZyBhIENvbmZpZ3VyYXRpb24gUmVqZWN0aW9uKioKCk9rYXksIHNvIEkgdGhvdWdodCBJIHdhcyBiZWluZyBlZmZpY2llbnQgYnkgZ3JlcHBpbmcgZm9yIGBjb25maWcgVkZJT19BUGAgYW5kIGZpbmRpbmcgaXQgZGVmaW5lZCB3aXRoaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gSSBrbm93IHRoYXQgSSBmb3VuZCBpdCB0aGVyZSBiZWZvcmUsIEkgbWFkZSBhIG5vdGUgb2YgaXQuIEJ1dCBgc2V0LXJlc3VsdHNgIGlzIHJlamVjdGluZyBpdCwgYW5kIHRoYXQmIzM5O3MgdGhyb3dpbmcgbWUgb2ZmLiBXaHkgaXMgaXQgZG9pbmcgdGhhdD8KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IG1heWJlIGBzZXQtcmVzdWx0c2AgZW1wbG95cyBhIHNjcmlwdCB0byBwYXJzZSBLY29uZmlnIGZpbGVzIGFuZCBwZXJoYXBzIGl0JiMzOTtzIGNob2tpbmcgb24gc29tZXRoaW5nIGluIHRoZSBgYXJjaC9zMzkwL0tjb25maWdgIGZpbGUgc3BlY2lmaWNhbGx5LiBJcyBpdCBwb3NzaWJsZSB0aGF0IHRoZSBLY29uZmlnIHBhcnNpbmcgaXMgdGhlIGlzc3VlIGhlcmU/CgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZXJlIGlzbiYjMzk7dCBzb21lIHNpbGx5IHR5cG8gaW4gbXkgY29tbWFuZCBsaW5lLCBvciB0aGF0IEkgZGlkbiYjMzk7dCBzb21laG93IG1pc3JlbWVtYmVyIHRoZSBuYW1lLiBOb3BlLCB0aGUgbmFtZSYjMzk7cyBjb3JyZWN0LgoKV2FpdCBhIHNlY29uZC4uLmlzIGl0IHBvc3NpYmxlIHRoYXQgYHNldC1yZXN1bHRzYCBpcyBvbmx5IGNoZWNraW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxldmFudCB0byB0aGUgYHg4Nl82NGAgYXJjaGl0ZWN0dXJlPyBJZiBgVkZJT19BUGAgaXMgc3BlY2lmaWMgdG8gYHMzOTBgLCBpdCB3b3VsZG4mIzM5O3QgbmVjZXNzYXJpbHkgZXhpc3QgaW4gdGhlIGRlZmF1bHQgYHg4Nl82NGAgZGVmY29uZmlnLCBldmVuIGlmIGl0JiMzOTtzIGNvcnJlY3RseSBkZWZpbmVkIGluIHRoZSBvdmVyYWxsIEtjb25maWcgc3RydWN0dXJlLiBUaGUgdG9vbCBtaWdodCBiZSBjaGVja2luZyBhZ2FpbnN0IHRoYXQgc3RhbmRhcmQgYXJjaGl0ZWN0dXJlLgoKT2theSwgbGV0JiMzOTtzIHRyeSBhIHdvcmthcm91bmQuIElmIGBWRklPX0FQYCBpcyBiZWluZyByZWplY3RlZCBiZWNhdXNlIG9mIHRoZSBhcmNoaXRlY3R1cmUsIEkmIzM5O2xsIGp1c3Qgb21pdCBpdCBlbnRpcmVseSBhbmQgc2VlIHdoYXQgaGFwcGVucy4gSSBjb3VsZCBtYXliZSB0cnkgdG8gc3Vic3RpdHV0ZSBpdCB3aXRoIGBTMzkwYCwgYnV0IHRoYXQmIzM5O3MgdGhlICphcmNoaXRlY3R1cmUqIGFuZCBub3QgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGl0c2VsZi4gSXQgd291bGRuJiMzOTt0IHdvcmsuCgpBbHJpZ2h0LCBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYWdhaW4gd2l0aG91dCBgVkZJT19BUGAgYW5kIHNlZSBpZiB0aGF0IHJlc29sdmVzIHRoZSBpc3N1ZS4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHBhdGggZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGxvZ2ljIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyBpbiB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgbWVkaWF0ZWQgZGV2aWNlIGRyaXZlci4gSXQgZml4ZXMgbG9jayBvcmRlcmluZyBiZXR3ZWVuIGBtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2tgLCBgbWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9ja2AsIGFuZCBgbWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2tgIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3MgZHVyaW5nIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRyaXZlciBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fYXBfbWRldl9wcm9iZSYjMzQ7LAogICAgJiMzNDt2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkJiMzNDssCiAgICAmIzM0O3ZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGxvZ2ljIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyBpbiB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgbWVkaWF0ZWQgZGV2aWNlIGRyaXZlci4gSXQgZml4ZXMgbG9jayBvcmRlcmluZyBiZXR3ZWVuIGBtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2tgLCBgbWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9ja2AsIGFuZCBgbWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2tgIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3MgZHVyaW5nIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRyaXZlciBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE3OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAobG9jayBvcmRlcmluZywgbWlzc2luZyBsb2NrcywgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9uIGBtYXRyaXhfbWRldi1cdTAwM2Vrdm1gKSBpbiB0aGUgczM5MCB2ZmlvX2FwIGRyaXZlci4gSXQgYWxzbyBmaXhlcyBhIG1pbm9yIGxvZ2ljIGJ1ZyB3aXRoIGBkb19yZW1vdmVgIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MWQ2NTM2MmU2OTEyMzJjNGRkY2M2M2UwOTNmMzQxMmI1ZTE1OGRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAxNzozNzo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwppbmRleCA0NGIzYTFkY2MxYjM2Li45YzcyNTdjMTc5YTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCkBAIC04MDMsOSAmIzQzOzgwMyw5IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIAltYXRyaXhfbWRldi0mZ3Q7cmVxX3RyaWdnZXIgPSBOVUxMOwogCW1hdHJpeF9tZGV2LSZndDtjZmdfY2hnX3RyaWdnZXIgPSBOVUxMOwogCWRldl9zZXRfZHJ2ZGF0YSgmYW1wO21kZXYtJmd0O2RldiwgbWF0cml4X21kZXYpOwotCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAlsaXN0X2FkZCgmYW1wO21hdHJpeF9tZGV2LSZndDtub2RlLCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O2d1ZXN0c19sb2NrKTsKIAlyZXR1cm4gMDsKIAogZXJyX3B1dF92ZGV2OgpAQCAtMjYwMywyOCAmIzQzOzI2MDMsMzUgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLAogCURFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTsKIAlERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7CiAJREVDTEFSRV9CSVRNQVAoY2RyZW0sIEFQX0RPTUFJTlMpOwotCWludCBkb19yZW1vdmUgPSAwOwomIzQzOwlpbnQgZG9fcmVtb3ZlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgJmFtcDttYXRyaXhfZGV2LSZndDttZGV2X2xpc3QsIG5vZGUpIHsKLQkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldiwKJiM0MzsJCSAqIGFuZCBrdm0tJmd0O2xvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrCiYjNDM7CQkgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAkJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCi0JCWRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCi0JCQkJCSAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hcG0sCi0JCQkJCSAgQVBfREVWSUNFUyk7CiYjNDM7CQlkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsCiYjNDM7CQkJCSAgICAgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwKJiM0MzsJCQkJICAgICAgIEFQX0RFVklDRVMpOwogCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLAogCQkJCQkgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXFtLAogCQkJCQkgIEFQX0RPTUFJTlMpOwotCQlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLAotCQkJCQkgICAgIG1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAotCQkJCQkgICAgIEFQX0RPTUFJTlMpOwomIzQzOwkJZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSwKJiM0MzsJCQkJCW1hdHJpeF9tZGV2LSZndDttYXRyaXguYWRtLAomIzQzOwkJCQkJQVBfRE9NQUlOUyk7CiAKIAkJaWYgKGRvX3JlbW92ZSkKIAkJCXZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLAogCQkJCQkJICAgIGNkcmVtKTsKIAogCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X21kZXYtJmd0O2t2bS0mZ3Q7bG9jayk7CiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAl9CiB9CiAKQEAgLTI3NDksMTIgJiM0MzsyNzU2LDIwIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsCiAJdmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsICZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldl9saXN0LCBub2RlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIGluIG9yZGVyIHRvIGFjY2VzcyBmaWVsZHMKJiM0MzsJCSAqIHdpdGhpbiBtYXRyaXhfbWRldgomIzQzOwkJICovCiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FwbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7CiYjNDM7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKIAl9CiB9CiAKQEAgLTI4MjEsOSAmIzQzOzI4MzYsNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpCiAJREVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTsKIAlib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlOwogCi0JbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwotCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKLQogCWZpbHRlcl9hZGFwdGVycyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LSZndDttYXRyaXguYXBtLAogCQkJCQkgICAgbWF0cml4X21kZXYtJmd0O2FwbV9hZGQsIEFQX0RFVklDRVMpOwogCWZpbHRlcl9kb21haW5zID0gYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtJmd0O21hdHJpeC5hcW0sCkBAIC0yODQxLDkgJiM0MzsyODUzLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQogCQl2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpOwogCiAJcmVzZXRfcXVldWVzX2Zvcl9hcGlkcyhtYXRyaXhfbWRldiwgYXBtX2ZpbHRlcmVkKTsKLQotCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwotCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9tZGV2LSZndDtrdm0tJmd0O2xvY2spOwogfQogCiB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbywKQEAgLTI4NTQsMTUgJiM0MzsyODYzLDI5IEBAIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLAogCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDtndWVzdHNfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCAmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZfbGlzdCwgbm9kZSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldiwKJiM0MzsJCSAqIGFuZCBrdm0tJmd0O2xvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrCiYjNDM7CQkgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChtYXRyaXhfbWRldi0mZ3Q7a3ZtKQomIzQzOwkJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDttYXRyaXhfZGV2LSZndDttZGV2c19sb2NrKTsKJiM0MzsKIAkJaWYgKGJpdG1hcF9lbXB0eShtYXRyaXhfbWRldi0mZ3Q7YXBtX2FkZCwgQVBfREVWSUNFUykgJmFtcDsmYW1wOwogCQkgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LSZndDthcW1fYWRkLCBBUF9ET01BSU5TKSAmYW1wOyZhbXA7CiAJCSAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsIEFQX0RPTUFJTlMpKQotCQkJY29udGludWU7CiYjNDM7CQkJZ290byBkb191bmxvY2s7CiAKIAkJdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhtYXRyaXhfbWRldik7CiAJCWJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi0mZ3Q7YXBtX2FkZCwgMCwgQVBfREVWSUNFUyk7CiAJCWJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi0mZ3Q7YXFtX2FkZCwgMCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi0mZ3Q7YWRtX2FkZCwgMCwgQVBfRE9NQUlOUyk7CiYjNDM7CiYjNDM7ZG9fdW5sb2NrOgomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CQlpZiAobWF0cml4X21kZXYtJmd0O2t2bSkKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDttYXRyaXhfbWRldi0mZ3Q7a3ZtLSZndDtsb2NrKTsKIAl9CiAKIAltdXRleF91bmxvY2soJmFtcDttYXRyaXhfZGV2LSZndDtndWVzdHNfbG9jayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzk2CgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDcwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgcnVuLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbGVhbmluZyB0b3dhcmRzICYjMzQ7bm8sJiMzNDsgYnV0IGxldCYjMzk7cyBjb25maXJtLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIFByaW1hcmlseSwgaXQmIzM5O3MgYSBsb2NrLXJlbGF0ZWQgcmV3b3JrLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgd2hlcmUgYW5kIHdoZW4gd2UmIzM5O3JlIGhvbGRpbmcgbXV0ZXhlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGBtYXRyaXhfZGV2YCBhbmQgYG1hdHJpeF9tZGV2YCBzdHJ1Y3R1cmVzLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIGBrdm1gIGZpZWxkLgoKVGhlIGNoYW5nZXMgaW52b2x2ZSBtb3ZpbmcgbG9jayBhY3F1aXNpdGlvbnMgYXJvdW5kIGluIGZ1bmN0aW9ucyBsaWtlIGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AsIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIGVpdGhlciBsb2NrZGVwIHNwbGF0cywgbG9jayBvcmRlcmluZyBpc3N1ZXMsIHBvdGVudGlhbCBtaXNzaW5nIGxvY2tzLCBvciBwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdoZW4gYG1hdHJpeF9tZGV2LSZndDtrdm1gIGlzIGFjY2Vzc2VkLiBUaGVyZSYjMzk7cyBhbHNvIGEgc3VidGxlIGJ1ZyBmaXggaW4gYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCByZWdhcmRpbmcgdGhlIGBkb19yZW1vdmVgIHZhcmlhYmxlIOKAkyBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSB1c2Ugb2YgdGhlIGBiaXRtYXBfYW5kKClgIG9wZXJhdGlvbiBhcmUgYmVpbmcgY29ycmVjdGVkLiBOb3RoaW5nIHRoZXJlIHN1Z2dlc3RzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IHNlY3VyaXR5IHZlY3RvcnMuCgpDcnVjaWFsbHksIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlLCBJJiMzOTttIG5vdCBzZWVpbmcgYW55dGhpbmcgdGhhdCBzY3JlYW1zICYjMzQ7dW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4mIzM0OyBUaGUgY29kZSBtb2RpZmljYXRpb24gb24gYGRvX3JlbW92ZWAgKGNoYW5naW5nIGBpbnQgZG9fcmVtb3ZlID0gMDtgIHRvIGBpbnQgZG9fcmVtb3ZlO2AgYW5kIHRoZW4gcHJvcGVybHkgaW5pdGlhbGl6aW5nIGl0IGJlZm9yZSB1c2UpIHJlaW5mb3JjZXMgdGhpcy4gVGhlIHZhcmlhYmxlIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2UuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBzZW5zaXRpdmUgaW5mb3JtYXRpb24gZXhwb3N1cmUuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmNsdWRpbmcgdGhhdCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBsaWtlbHkgdG8gZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBsb2NrLXJlbGF0ZWQgYnVncywgYW5kIHRob3NlIGFyZSBnb2luZyB0byBiZSBuYWlsZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gZm9yIHRoaXMgcGF0Y2ggc2VlbXMgdW5uZWNlc3NhcnkuIExldCBtZSBqdXN0IGFydGljdWxhdGUgdGhhdCByZWFzb25pbmcgY29uY2lzZWx5IGluIGEgY29tbWVudC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbG9ja2luZyBpc3N1ZXMgKGxvY2sgb3JkZXJpbmcsIG1pc3NpbmcgbG9ja3MsIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvbiBgbWF0cml4X21kZXYtXHUwMDNla3ZtYCkgaW4gdGhlIHMzOTAgdmZpb19hcCBkcml2ZXIuIEl0IGFsc28gZml4ZXMgYSBtaW5vciBsb2dpYyBidWcgd2l0aCBgZG9fcmVtb3ZlYCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAobG9jayBvcmRlcmluZywgbWlzc2luZyBsb2NrcywgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9uIGBtYXRyaXhfbWRldi1cdTAwM2Vrdm1gKSBpbiB0aGUgczM5MCB2ZmlvX2FwIGRyaXZlci4gSXQgYWxzbyBmaXhlcyBhIG1pbm9yIGxvZ2ljIGJ1ZyB3aXRoIGBkb19yZW1vdmVgIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozNzo1OC44NDgwNTkwNTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg5NjYwMjYxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlXCIsXG4gICAgXCJ2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkXCIsXG4gICAgXCJ2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAobG9jayBvcmRlcmluZywgbWlzc2luZyBsb2NrcywgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9uIGBtYXRyaXhfbWRldi1cXHUwMDNla3ZtYCkgaW4gdGhlIHMzOTAgdmZpb19hcCBkcml2ZXIuIEl0IGFsc28gZml4ZXMgYSBtaW5vciBsb2dpYyBidWcgd2l0aCBgZG9fcmVtb3ZlYCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGxvZ2ljIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyBpbiB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgbWVkaWF0ZWQgZGV2aWNlIGRyaXZlci4gSXQgZml4ZXMgbG9jayBvcmRlcmluZyBiZXR3ZWVuIGBtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrYCwgYG1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrYCwgYW5kIGBtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrYCB0byBwcmV2ZW50IGxvY2tkZXAgc3BsYXRzIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGR1cmluZyBtZGV2IHByb2JlLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGFuZCBob3RwbHVnIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBkcml2ZXIgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIG1kZXYgY3JlYXRpb24gYW5kIEFQIGJ1cyBjb25maWd1cmF0aW9uIGNhbGxiYWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzc6NTguODQ4MDY1NjM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcyNDQyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MWQ2NTM2MmU2OTEyMzJjNGRkY2M2M2UwOTNmMzQxMmI1ZTE1OGRhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMTc6Mzc6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuaW5kZXggNDRiM2ExZGNjMWIzNi4uOWM3MjU3YzE3OWE3YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG4rKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG5AQCAtODAzLDkgKzgwMyw5IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcXG4gXFx0bWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcXG4gXFx0bWF0cml4X21kZXYtXFx1MDAzZWNmZ19jaGdfdHJpZ2dlciA9IE5VTEw7XFxuIFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWRldi1cXHUwMDNlZGV2LCBtYXRyaXhfbWRldik7XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNlbm9kZSwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9wdXRfdmRldjpcXG5AQCAtMjYwMywyOCArMjYwMywzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXFxuIFxcdERFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTtcXG4gXFx0REVDTEFSRV9CSVRNQVAoYXFyZW0sIEFQX0RPTUFJTlMpO1xcbiBcXHRERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7XFxuLVxcdGludCBkb19yZW1vdmUgPSAwO1xcbitcXHRpbnQgZG9fcmVtb3ZlO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxcbitcXHRcXHQgKiBhbmQga3ZtLVxcdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xcbitcXHRcXHQgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4rXFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbiBcXG4tXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBBUF9ERVZJQ0VTKTtcXG4rXFx0XFx0ZG9fcmVtb3ZlID0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hcG0sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBBUF9ERVZJQ0VTKTtcXG4gXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXFyZW0sIGFxX3JlbW92ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFxbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBBUF9ET01BSU5TKTtcXG4tXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmRub3QoY2RyZW0sIGNkX3JlbW92ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFkbSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBBUF9ET01BSU5TKTtcXG4rXFx0XFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSxcXG4rXFx0XFx0XFx0XFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hZG0sXFxuK1xcdFxcdFxcdFxcdFxcdEFQX0RPTUFJTlMpO1xcbiBcXG4gXFx0XFx0aWYgKGRvX3JlbW92ZSlcXG4gXFx0XFx0XFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjZHJlbSk7XFxuIFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWt2bSlcXG4rXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yNzQ5LDEyICsyNzU2LDIwIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsXFxuIFxcdHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUoYXBtX2FkZCwgYXFtX2FkZCk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCBpbiBvcmRlciB0byBhY2Nlc3MgZmllbGRzXFxuK1xcdFxcdCAqIHdpdGhpbiBtYXRyaXhfbWRldlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcbiBcXHRcXHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLFxcbiBcXHRcXHRcXHQgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7XFxuIFxcdFxcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXFx1MDAzZWFxbV9hZGQsXFxuIFxcdFxcdFxcdCAgIG1hdHJpeF9tZGV2LVxcdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcXG4gXFx0XFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cXHUwMDNlYWRtX2FkZCxcXG4gXFx0XFx0XFx0ICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xcbitcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yODIxLDkgKzI4MzYsNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuIFxcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XFxuIFxcdGJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrKTtcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuLVxcbiBcXHRmaWx0ZXJfYWRhcHRlcnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFwbSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLCBBUF9ERVZJQ0VTKTtcXG4gXFx0ZmlsdGVyX2RvbWFpbnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFxbSxcXG5AQCAtMjg0MSw5ICsyODUzLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbiBcXHRcXHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xcbiBcXG4gXFx0cmVzZXRfcXVldWVzX2Zvcl9hcGlkcyhtYXRyaXhfbWRldiwgYXBtX2ZpbHRlcmVkKTtcXG4tXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbkBAIC0yODU0LDE1ICsyODYzLDI5IEBAIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9jayk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcXG4rXFx0XFx0ICogYW5kIGt2bS1cXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcXG4rXFx0XFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0pXFxuK1xcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2spO1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFxuIFxcdFxcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFxbV9hZGQsIEFQX0RPTUFJTlMpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXFx1MDAzZWFkbV9hZGQsIEFQX0RPTUFJTlMpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0Z290byBkb191bmxvY2s7XFxuIFxcbiBcXHRcXHR2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhcG1fYWRkLCAwLCBBUF9ERVZJQ0VTKTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhcW1fYWRkLCAwLCBBUF9ET01BSU5TKTtcXG4gXFx0XFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVxcdTAwM2VhZG1fYWRkLCAwLCBBUF9ET01BSU5TKTtcXG4rXFxuK2RvX3VubG9jazpcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFx0XFx0aWYgKG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0pXFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozNzo1OS4yODYwNjMyNjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDQxMDYwOTY4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19hcF9tZGV2X3Byb2JlXCIsXG4gICAgXCJ2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkXCIsXG4gICAgXCJ2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NraW5nIGxvZ2ljIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyBpbiB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgbWVkaWF0ZWQgZGV2aWNlIGRyaXZlci4gSXQgZml4ZXMgbG9jayBvcmRlcmluZyBiZXR3ZWVuIGBtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrYCwgYG1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrYCwgYW5kIGBtYXRyaXhfbWRldi1cXHUwMDNla3ZtLVxcdTAwM2Vsb2NrYCB0byBwcmV2ZW50IGxvY2tkZXAgc3BsYXRzIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzIGR1cmluZyBtZGV2IHByb2JlLCBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGFuZCBob3RwbHVnIGV2ZW50cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBkcml2ZXIgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN5c2ZzIG1kZXYgY3JlYXRpb24gYW5kIEFQIGJ1cyBjb25maWd1cmF0aW9uIGNhbGxiYWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODFkNjUzNjJlNjkxMjMyYzRkZGNjNjNlMDkzZjM0MTJiNWUxNThkYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTc6Mzc6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDQ0YjNhMWRjYzFiMzYuLjljNzI1N2MxNzlhN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTgwMyw5ICs4MDMsOSBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXG4gXHRtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlciA9IE5VTEw7XG4gXHRtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xuIFx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNm1kZXYtXHUwMDNlZGV2LCBtYXRyaXhfbWRldik7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2bWF0cml4X21kZXYtXHUwMDNlbm9kZSwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfcHV0X3ZkZXY6XG5AQCAtMjYwMywyOCArMjYwMywzNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXG4gXHRERUNMQVJFX0JJVE1BUChhcHJlbSwgQVBfREVWSUNFUyk7XG4gXHRERUNMQVJFX0JJVE1BUChhcXJlbSwgQVBfRE9NQUlOUyk7XG4gXHRERUNMQVJFX0JJVE1BUChjZHJlbSwgQVBfRE9NQUlOUyk7XG4tXHRpbnQgZG9fcmVtb3ZlID0gMDtcbitcdGludCBkb19yZW1vdmU7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0LypcbitcdFx0ICogVGhlIG1kZXZzX2xvY2sgbXVzdCBiZSBoZWxkIHRvIGFjY2VzcyBmaWVsZHMgd2l0aGluIG1hdHJpeF9tZGV2LFxuK1x0XHQgKiBhbmQga3ZtLVx1MDAzZWxvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgbWRldnNfbG9jayB0byBzYXRpc2Z5IHRoZSBsb2NrXG4rXHRcdCAqIG9yZGVyaW5nIHJlcXVpcmVtZW50IGFuZCBwcmV2ZW50IGEgbG9ja2RlcCBzcGxhdC5cbitcdFx0ICovXG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcbi1cdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcbi1cdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuLVx0XHRcdFx0XHQgIEFQX0RFVklDRVMpO1xuK1x0XHRkb19yZW1vdmUgPSBiaXRtYXBfYW5kKGFwcmVtLCBhcF9yZW1vdmUsXG4rXHRcdFx0XHQgICAgICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSxcbitcdFx0XHRcdCAgICAgICBBUF9ERVZJQ0VTKTtcbiBcdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoYXFyZW0sIGFxX3JlbW92ZSxcbiBcdFx0XHRcdFx0ICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLFxuIFx0XHRcdFx0XHQgIEFQX0RPTUFJTlMpO1xuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwgY2RfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgICAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sXG4tXHRcdFx0XHRcdCAgICAgQVBfRE9NQUlOUyk7XG4rXHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kKGNkcmVtLCBjZF9yZW1vdmUsXG4rXHRcdFx0XHRcdG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sXG4rXHRcdFx0XHRcdEFQX0RPTUFJTlMpO1xuIFxuIFx0XHRpZiAoZG9fcmVtb3ZlKVxuIFx0XHRcdHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhtYXRyaXhfbWRldiwgYXByZW0sIGFxcmVtLFxuIFx0XHRcdFx0XHRcdCAgICBjZHJlbSk7XG4gXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTI3NDksMTIgKzI3NTYsMjAgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbiBcdHZmaW9fYXBfZmlsdGVyX2FwaWRfYnlfcXR5cGUoYXBtX2FkZCwgYXFtX2FkZCk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgaW4gb3JkZXIgdG8gYWNjZXNzIGZpZWxkc1xuK1x0XHQgKiB3aXRoaW4gbWF0cml4X21kZXZcbitcdFx0ICovXG4rXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sIGFwbV9hZGQsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTtcbitcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTI4MjEsOSArMjgzNiw2IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiBcdERFQ0xBUkVfQklUTUFQKGFwbV9maWx0ZXJlZCwgQVBfREVWSUNFUyk7XG4gXHRib29sIGZpbHRlcl9kb21haW5zLCBmaWx0ZXJfYWRhcHRlcnMsIGZpbHRlcl9jZG9tcywgZG9faG90cGx1ZyA9IGZhbHNlO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXG4gXHRmaWx0ZXJfYWRhcHRlcnMgPSBiaXRtYXBfaW50ZXJzZWN0cyhtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuIFx0XHRcdFx0XHQgICAgbWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUyk7XG4gXHRmaWx0ZXJfZG9tYWlucyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sXG5AQCAtMjg0MSw5ICsyODUzLDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0XHR2ZmlvX2FwX21kZXZfdXBkYXRlX2d1ZXN0X2FwY2IobWF0cml4X21kZXYpO1xuIFxuIFx0cmVzZXRfcXVldWVzX2Zvcl9hcGlkcyhtYXRyaXhfbWRldiwgYXBtX2ZpbHRlcmVkKTtcbi1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4gdm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXG5AQCAtMjg1NCwxNSArMjg2MywyOSBAQCB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbiBcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hdHJpeF9tZGV2LCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCwgbm9kZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsXG4rXHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbitcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuK1x0XHQgKi9cbitcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbitcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1xuIFx0XHRpZiAoYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIEFQX0RFVklDRVMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsIEFQX0RPTUFJTlMpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgYml0bWFwX2VtcHR5KG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsIEFQX0RPTUFJTlMpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGdvdG8gZG9fdW5sb2NrO1xuIFxuIFx0XHR2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKG1hdHJpeF9tZGV2KTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsIDAsIEFQX0RFVklDRVMpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgMCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLCAwLCBBUF9ET01BSU5TKTtcbitcbitkb191bmxvY2s6XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4gXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozNzo1OS4yODYwNjYxODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQxMTExMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZGSU8tQVAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBsb29rcyBsaWtlIGl0J3MgdHdlYWtpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIFJpZ2h0IGF3YXksIEkga25vdyB0aGlzIGlzIGFuIHMzOTAtc3BlY2lmaWMgZHJpdmVyIGRlYWxpbmcgd2l0aCBWRklPIEFQIGRldmljZXMuIFRoaXMgbWVhbnMgd2UncmUgdGFsa2luZyBhYm91dCB0aGUgQWRqdW5jdCBQcm9jZXNzb3IsIElCTSdzIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3IsIHdoaWNoIGlzIHByZXR0eSBuaWNoZSBhbmQgaGFyZHdhcmUtZGVwZW5kZW50LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgbG9ja2luZyBtZWNoYW5pc21zIGFuZCBiaXRtYXAgb3BlcmF0aW9ucyB3aXRoaW4gc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgdmZpb19hcF9tZGV2X3Byb2JlYCwgYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCwgYW5kIGEgZmV3IG1vcmUgcmVsYXRlZCB0byBjb25maWd1cmF0aW9uIGFuZCBob3QtcGx1Z2dpbmcuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eS4gSXMgdGhpcyBjb2RlIGV2ZW4gKmV4ZXJjaXNhYmxlKiBpbiB0eXBpY2FsIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIGVudmlyb25tZW50cz8gUzM5MCBjb2RlIG9mdGVuIGlzbid0IGZ1enplZCBvbiBzdGFuZGFyZCB4ODZfNjQgVk1zIHVubGVzcyB3ZSBhcmUgc3BlY2lmaWNhbGx5IHJ1bm5pbmcgczM5MHggdmlydHVhbCBtYWNoaW5lcy4gV2Uga25vdyBTeXprYWxsZXIgaGFzIHNvbWUgczM5MHggc3VwcG9ydCwgYnV0IEkgcmVhbGx5IG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZHJpdmVyIGhhcyBzb21lIGhhcmR3YXJlIGRlcGVuZGVuY3kgLSBpLmUuIEFQIGRldmljZXMuIFNpbmNlIGl0J3MgZGVhbGluZyB3aXRoIGFuIEFkanVuY3QgUHJvY2Vzc29yLCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IG1pZ2h0IGJlLiBUaGlzIGNyeXB0b2dyYXBoaWMgY29wcm9jZXNzb3IsIGFmdGVyIGFsbCwgaXNuJ3Qgc29tZXRoaW5nIGVhc2lseSBlbXVsYXRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgd2F5IHRvIGNvbmZpZ3VyZSBRRU1VIHRvIGVtdWxhdGUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZS5cblxuU28sIGZpcnN0IHRoaW5nJ3MgZmlyc3Q6IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgcHJvYmFibHkgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AsIG9yIHNvbWV3aGVyZSBzaW1pbGFyLCB0byBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgdGhpcyBtb2R1bGUgaGFzLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBjbHVlIG9uIHdoZXRoZXIgSSBjYW4gdGVzdCB0aGlzIHdpdGhpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODowNS41MjcxODAxMzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkyODM4MTIxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MDUuODIwMDI1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjkxMDE2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBpbiB0aGUgZmlyc3QgcGVyc29uLCByZWZsZWN0aW5nIHRoZSBnaXZlbiB0aG91Z2h0OlxuXG4qKlF1aWNrIEtjb25maWcgU2NhbioqXG5cbkFscmlnaHQsIGxldCdzIGN1dCB0byB0aGUgY2hhc2UgYW5kIHplcm8gaW4gb24gd2hhdCdzIHJlbGV2YW50LiBJbnN0ZWFkIG9mIGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gZXh0cmFuZW91cyBkZXRhaWxzIHJpZ2h0IG5vdywgSSdtIHRoaW5raW5nIEknbGwganVzdCBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgZG8gYSBxdWljayBzZWFyY2guIFRoZSBzcGVjaWZpYyBrZXl3b3JkIEknbGwgc3RhcnQgd2l0aCBpcyBgVkZJT19BUGAuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBxdWlja2x5IGZpbmQgdGhlIFZGSU8gQWNjZWxlcmF0ZWQgUHJvY2Vzc2luZyBjb25maWd1cmF0aW9ucy4gTm8gbmVlZCB0byBnbyBodW50aW5nIGFyb3VuZCBibGluZGx5LCBsZXQncyBrZWVwIHRoaXMgZm9jdXNlZCBhbmQgZWZmaWNpZW50LiBJJ20gYWZ0ZXIgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYWNjZWxlcmF0ZWQgcHJvY2Vzc2luZyB3aXRoaW4gVkZJTy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjA5Ljk4OTEyOTcxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY5ODEyMzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz04MjM9Y29uZmlnIFZGSU9fQ0NXXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MzMtXFxuYXJjaC9zMzkwL0tjb25maWc6ODM0OmNvbmZpZyBWRklPX0FQXFxuYXJjaC9zMzkwL0tjb25maWctODM1LVxcdGRlZl90cmlzdGF0ZSBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjExLjY1ODk1NDUzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDU0MTUyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBWRklPX0FQIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBWRklPX0FQIOKAkyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZm91bmRhdGlvbmFsIGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZHJpbGwgZG93biBhbmQgdW5jb3ZlciBpdHMgZGVwZW5kZW5jaWVzLiBXZSBhcmUgbm90IGp1c3QgdGFsa2luZyBhYm91dCB0aGUgb2J2aW91cyBsaWJyYXJpZXMgaGVyZSwgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGVudGlyZSBkZXBlbmRlbmN5IHRyZWUuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgbGF5ZXJzIGludm9sdmVkOiBXaGF0IGtlcm5lbCBtb2R1bGVzIGRvZXMgaXQgcmVseSBvbj8gV2hpY2ggdXNlcnNwYWNlIGNvbXBvbmVudHMgYXJlIGVzc2VudGlhbD8gQW5kIGRvbid0IGZvcmdldCB0aGUgaGFyZHdhcmUgaXRzZWxmIOKAkyB3aGljaCBzcGVjaWZpYyBkZXZpY2UgZmVhdHVyZXMsIGFuZCBhbnkgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucywgYXJlIGFzc3VtZWQ/IEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgZGV2aWNlIGFjY2VzcyBpcyB1c2luZyBzb21lIG9mIHRoZSBjb3JlIFZGSU8gZnJhbWV3b3JrLCBidXQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgYWxsIHJlcXVpcmVtZW50cyB0byB1c2UgVkZJT19BUC5cblxuSSBhbHNvIHdhbnQgdG8gY29uc2lkZXIgdGhlIGNvbnRleHQuIElzIHRoaXMgYSBuZXcgaW1wbGVtZW50YXRpb24/IEEgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIHN5c3RlbT8gV2hhdCB1c2UtY2FzZXMgaXMgaXQgZGVzaWduZWQgdG8gc3VwcG9ydD8gVGhpcyB3aWxsIHN0cm9uZ2x5IGltcGFjdCB0aGUgc2lnbmlmaWNhbmNlIG9mIGVhY2ggZGVwZW5kZW5jeSBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgSSBuZWVkIHRvIGF1ZGl0IGZvciB0aGUgZ29hbCBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBtb3RpdmF0aW9uIGZvciBpdHMgZGVzaWduIGlzIGltcG9ydGFudCBoZXJlLlxuXG5JJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBsb29rIGF0IHRoZSBzb3VyY2UgY29kZSwgYW5kIHBlcmhhcHMgZXZlbiBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIChpZiBpdCdzIGdvb2QsIHRoYXQgaXMhKS4gSXQgaXMgdW5saWtlbHkgdGhhdCBpdCB3aWxsIGJlIGEgc2ltcGxlIGxpbmVhciBoaWVyYXJjaHksIEkgZXhwZWN0IGEgZGVncmVlIG9mIGNvbXBsZXhpdHkgd2l0aCBpbnRlcmZhY2VzIHRvIGhhcmR3YXJlIGZlYXR1cmVzIGFuZCBvdGhlciBzeXN0ZW0gZnVuY3Rpb25zLiBJIHdpbGwgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIG9idmlvdXMgZWxlbWVudHMsIGFuZCB0aGVuIGRpZyBpbnRvIGhvdyB0aGV5IGFyZSBsaW5rZWQsIGFuZCB3aGljaCBmdW5jdGlvbnMgZGVwZW5kIG9uIHdoaWNoLiBUaGF0IGlzIHdoZXJlIHRoZSBkZXZpbCB3aWxsIGJlIGx1cmtpbmcuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgdmVyc2lvbmluZyBpc3N1ZXMsIGNvbmZsaWN0cywgYW5kIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCBieSB0aGVzZSBkZXBlbmRlbmNpZXMsIHRvby4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBhIGxhcmdlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjE2LjA2NDM3MjEwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzMDpcXHRcXG4gODMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDgzMjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2ZmlvX2Njdy5cXG4gODMzOlxcdFxcbiA4MzQ6XFx0Y29uZmlnIFZGSU9fQVBcXG4gODM1OlxcdFxcdGRlZl90cmlzdGF0ZSBuXFxuIDgzNjpcXHRcXHRwcm9tcHQgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQVAgZGV2aWNlc1xcXCJcXG4gODM3OlxcdFxcdGRlcGVuZHMgb24gS1ZNXFxuIDgzODpcXHRcXHRkZXBlbmRzIG9uIFZGSU9cXG4gODM5OlxcdFxcdGRlcGVuZHMgb24gQVBcXG4gODQwOlxcdFxcdHNlbGVjdCBWRklPX01ERVZcXG4gODQxOlxcdFxcdGhlbHBcXG4gODQyOlxcdFxcdCAgVGhpcyBkcml2ZXIgZ3JhbnRzIGFjY2VzcyB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXNcXG4gODQzOlxcdFxcdCAgdmlhIHRoZSBWRklPIG1lZGlhdGVkIGRldmljZSBpbnRlcmZhY2UuXFxuIDg0NDpcXHRcXG4gODQ1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiA4NDY6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2ZmlvX2FwLlxcbiA4NDc6XFx0XFxuIDg0ODpcXHRlbmRtZW51XFxuIDg0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MTYuMDY0NDYyOTMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MTE5MTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFzc2Vzc21lbnQgb2YgQXBwbGljYXRpb24gUGVyZm9ybWFuY2UgKEFQKSBhcyBhIEtleSBGYWN0b3IqKlxuXG5BbHJpZ2h0LCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSB0aGlua2luZyBpbW1lZGlhdGVseSBoaW5nZXMgb24gdGhlIGFwcGxpY2F0aW9uIHBlcmZvcm1hbmNlLCBvciBBUCBhcyB3ZSBjYWxsIGl0LiBFdmVyeXRoaW5nIGhlcmUgKmRlcGVuZHMqIG9uIEFQLiBJdOKAmXMgdGhlIGxpbmNocGluLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgc3lzdGVtLCBhIHByb2Nlc3MsIGEgcHJvYmxlbeKApiBhbmQgdGhlICpmaXJzdCogdGhpbmcgSSBuZWVkIHRvIGVzdGFibGlzaCBpcyB0aGUgc3RhdGUgb2YgQVAuIEl04oCZcyB0aGUgY3JpdGljYWwgdmFyaWFibGUuIFNvLCBiZWZvcmUgZGl2aW5nIGRlZXBlciwgYmVmb3JlIHNwZWN1bGF0aW5nIG9uIHJvb3QgY2F1c2VzIG9yIHBvdGVudGlhbCBzb2x1dGlvbnMsIG15IG1pbmQgaXMgYWxyZWFkeSBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDogd2hhdCBtZXRyaWNzIGRvIEkgbmVlZD8gV2hlcmXigJlzIHRoZSBtb25pdG9yaW5nIGRhdGE/IFdoYXTigJlzIHRoZSBiYXNlbGluZSBBUCBiZWhhdmlvcj8gR290dGEgY2hlY2sgQVAgZmlyc3QuIEdvdHRhIHVuZGVyc3RhbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjE5LjYyNTY1NzQ4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MzAxNDQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3Q9Mjg3PXRvIGluaXRyZCBpbWFnZSwgdXNlciBjYW4gbm90aWNlIGl0IGJlZm9yZSBib290Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yODktXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdDoyOTA6Qm9vdGNvbmZpZyBBUElzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdC0yOTEtPT09PT09PT09PT09PT09XFxuLS1cXG5hcmNoL202OGsvS2NvbmZpZy5tYWNoaW5lPTI5PWNvbmZpZyBNQUNcXG4tLVxcbmFyY2gvbTY4ay9LY29uZmlnLm1hY2hpbmUtNDAtXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZTo0MTpjb25maWcgQVBPTExPXFxuYXJjaC9tNjhrL0tjb25maWcubWFjaGluZS00Mi1cXHRib29sIFxcXCJBcG9sbG8gc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc9MjkxPWNvbmZpZyA0NzZGUEVcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk0LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWc6Mjk1OmNvbmZpZyBBUE04MjF4eFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWctMjk2LVxcdGJvb2xcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc4NT1jb25maWcgRUFETV9TQ0hcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTc5NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo3OTY6Y29uZmlnIEFQXFxuYXJjaC9zMzkwL0tjb25maWctNzk3LVxcdGRlZl90cmlzdGF0ZSB5XFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04MDgtXFxuYXJjaC9zMzkwL0tjb25maWc6ODA5OmNvbmZpZyBBUF9ERUJVR1xcbmFyY2gvczM5MC9LY29uZmlnLTgxMC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz04ODU9Y29uZmlnIENNTV9JVUNWXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04OTItXFxuYXJjaC9zMzkwL0tjb25maWc6ODkzOmNvbmZpZyBBUFBMREFUQV9CQVNFXFxuYXJjaC9zMzkwL0tjb25maWctODk0LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTkwOC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5MDk6Y29uZmlnIEFQUExEQVRBX01FTVxcbmFyY2gvczM5MC9LY29uZmlnLTkxMC1cXHRkZWZfdHJpc3RhdGUgbVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctOTI1LVxcbmFyY2gvczM5MC9LY29uZmlnOjkyNjpjb25maWcgQVBQTERBVEFfT1NcXG5hcmNoL3MzOTAvS2NvbmZpZy05MjctXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTk0MC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo5NDE6Y29uZmlnIEFQUExEQVRBX05FVF9TVU1cXG5hcmNoL3MzOTAvS2NvbmZpZy05NDItXFx0ZGVmX3RyaXN0YXRlIG1cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc0MT1jb25maWcgWDg2X0FQTV9CT09UXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI3NDQtXFxuYXJjaC94ODYvS2NvbmZpZzoyNzQ1Om1lbnVjb25maWcgQVBNXFxuYXJjaC94ODYvS2NvbmZpZy0yNzQ2LVxcdHRyaXN0YXRlIFxcXCJBUE0gKEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQpIEJJT1Mgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9Mjc5OT1pZiBBUE1cXG5hcmNoL3g4Ni9LY29uZmlnLTI4MDAtXFxuYXJjaC94ODYvS2NvbmZpZzoyODAxOmNvbmZpZyBBUE1fSUdOT1JFX1VTRVJfU1VTUEVORFxcbmFyY2gveDg2L0tjb25maWctMjgwMi1cXHRib29sIFxcXCJJZ25vcmUgVVNFUiBTVVNQRU5EXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODA3LVxcbmFyY2gveDg2L0tjb25maWc6MjgwODpjb25maWcgQVBNX0RPX0VOQUJMRVxcbmFyY2gveDg2L0tjb25maWctMjgwOS1cXHRib29sIFxcXCJFbmFibGUgUE0gYXQgYm9vdCB0aW1lXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yODI0LVxcbmFyY2gveDg2L0tjb25maWc6MjgyNTpjb25maWcgQVBNX0NQVV9JRExFXFxuYXJjaC94ODYvS2NvbmZpZy0yODI2LVxcdGRlcGVuZHMgb24gQ1BVX0lETEVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjgzNi1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4Mzc6Y29uZmlnIEFQTV9ESVNQTEFZX0JMQU5LXFxuYXJjaC94ODYvS2NvbmZpZy0yODM4LVxcdGJvb2wgXFxcIkVuYWJsZSBjb25zb2xlIGJsYW5raW5nIHVzaW5nIEFQTVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjg0OS1cXG5hcmNoL3g4Ni9LY29uZmlnOjI4NTA6Y29uZmlnIEFQTV9BTExPV19JTlRTXFxuYXJjaC94ODYvS2NvbmZpZy0yODUxLVxcdGJvb2wgXFxcIkFsbG93IGludGVycnVwdHMgZHVyaW5nIEFQTSBCSU9TIGNhbGxzXFxcIlxcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWc9MjEzPWNvbmZpZyBYSUxJTlhfSFdJQ0FQXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yMjItXFxuZHJpdmVycy9jaGFyL0tjb25maWc6MjIzOmNvbmZpZyBBUFBMSUNPTVxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTIyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGljb20gaW50ZWxsaWdlbnQgZmllbGRidXMgY2FyZCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnPTI5MD1jb25maWcgUUNPTV9DTEtfUlBNSFxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTI5OC1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6Mjk5OmNvbmZpZyBBUFFfR0NDXzgwODRcXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctMzAwLVxcdHRyaXN0YXRlIFxcXCJBUFE4MDg0IEdsb2JhbCBDbG9jayBDb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwNy1cXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6MzA4OmNvbmZpZyBBUFFfTU1DQ184MDg0XFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTMwOS1cXHR0cmlzdGF0ZSBcXFwiQVBRODA4NCBNdWx0aW1lZGlhIENsb2NrIENvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnPTc4PWNvbmZpZyBBTUNDX1BQQzQ0MFNQRV9BRE1BXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnLTg3LVxcbmRyaXZlcnMvZG1hL0tjb25maWc6ODg6Y29uZmlnIEFQUExFX0FETUFDXFxuZHJpdmVycy9kbWEvS2NvbmZpZy04OS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgQURNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWc9MTU0PWNvbmZpZyBFRklfREVWX1BBVEhfUEFSU0VSXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnLTE1Ni1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnOjE1Nzpjb25maWcgQVBQTEVfUFJPUEVSVElFU1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkFwcGxlIERldmljZSBQcm9wZXJ0aWVzXFxcIlxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZz02Nj1jb25maWcgQUwzMzIwQVxcbi0tXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZy03NS1cXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnOjc2OmNvbmZpZyBBUERTOTE2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctNzctXFx0dHJpc3RhdGUgXFxcIkFQRFM5MTYwIGNvbWJpbmVkIGFscyBhbmQgcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctODYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo4Nzpjb25maWcgQVBEUzkzMDBcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJBUERTOTMwMCBhbWJpZW50IGxpZ2h0IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctOTYtXFxuZHJpdmVycy9paW8vbGlnaHQvS2NvbmZpZzo5Nzpjb25maWcgQVBEUzkzMDZcXG5kcml2ZXJzL2lpby9saWdodC9LY29uZmlnLTk4LVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTMwNiBBbWJpZW50IExpZ2h0IFNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTA4LVxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWc6MTA5OmNvbmZpZyBBUERTOTk2MFxcbmRyaXZlcnMvaWlvL2xpZ2h0L0tjb25maWctMTEwLVxcdHRyaXN0YXRlIFxcXCJBdmFnbyBBUERTOTk2MCBnZXN0dXJlL1JHQi9BTFMvcHJveGltaXR5IHNlbnNvclxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZz0yOTY9Y29uZmlnIFNQQVBSX1RDRV9JT01NVVxcbi0tXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwMy1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MzA0OmNvbmZpZyBBUFBMRV9EQVJUXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTMwNS1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgREFSVCBJT01NVSBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL0tjb25maWc9Nzg4PWNvbmZpZyBJUlFfSURUMzI0M1hcXG4tLVxcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5Mi1cXG5kcml2ZXJzL2lycWNoaXAvS2NvbmZpZzo3OTM6Y29uZmlnIEFQUExFX0FJQ1xcbmRyaXZlcnMvaXJxY2hpcC9LY29uZmlnLTc5NC1cXHRib29sIFxcXCJBcHBsZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQUlDKVxcXCJcXG4tLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnPTMyNz1jb25maWcgU0dJX0dSVV9ERUJVR1xcbi0tXFxuZHJpdmVycy9taXNjL0tjb25maWctMzMzLVxcbmRyaXZlcnMvbWlzYy9LY29uZmlnOjMzNDpjb25maWcgQVBEUzk4MDJBTFNcXG5kcml2ZXJzL21pc2MvS2NvbmZpZy0zMzUtXFx0dHJpc3RhdGUgXFxcIk1lZGZpZWxkIEF2YWdvIEFQRFM5ODAyIEFMUyBTZW5zb3IgbW9kdWxlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnPTEwNj1jb25maWcgTkUyS19QQ0lcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnOjEyNDpjb25maWcgQVBORVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcIlBDTUNJQSBORTIwMDAgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmM9MzMyMD1zdGF0aWMgaW50IHJ0dzg5X3BjaV9jZmdfZGFjKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldiwgYm9vbCBmb3JjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvcGNpLmMtMzMzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L3BjaS5jOjMzMzM6XFx0LyogQ29uZmlndXJlIERBQyBvbmx5IHZpYSBQQ0kgY29uZmlnIEFQSSwgbm90IERCSSBpbnRlcmZhY2VzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9wY2kuYy0zMzM0LVxcdHJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFJUVzg5X1BDSUVfTDFfQ1RSTCwgXFx1MDAyNnZhbCk7XFxuLS1cXG5kcml2ZXJzL3BlcmYvS2NvbmZpZz0yNTM9Y29uZmlnIE1BUlZFTExfQ04xMEtfVEFEX1BNVVxcbi0tXFxuZHJpdmVycy9wZXJmL0tjb25maWctMjU5LVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnOjI2MDpjb25maWcgQVBQTEVfTTFfQ1BVX1BNVVxcbmRyaXZlcnMvcGVyZi9LY29uZmlnLTI2MS1cXHRib29sIFxcXCJBcHBsZSBNMSBDUFUgUE1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnPTE5ND1jb25maWcgQURWX1NXQlVUVE9OXFxuLS1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnLTIwNC1cXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnOjIwNTpjb25maWcgQVBQTEVfR01VWFxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWctMjA2LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBHbXV4IERyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvcG1kb21haW4vYXBwbGUvS2NvbmZpZz0zPWlmIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnLTQtXFxuZHJpdmVycy9wbWRvbWFpbi9hcHBsZS9LY29uZmlnOjU6Y29uZmlnIEFQUExFX1BNR1JfUFdSU1RBVEVcXG5kcml2ZXJzL3BtZG9tYWluL2FwcGxlL0tjb25maWctNi1cXHRib29sIFxcXCJBcHBsZSBTb0MgUE1HUiBwb3dlciBzdGF0ZSBjb250cm9sXFxcIlxcbi0tXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZz0xOD1jb25maWcgUE9XRVJfU1VQUExZX0hXTU9OXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc6MzE6Y29uZmlnIEFQTV9QT1dFUlxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIkFQTSBlbXVsYXRpb24gZm9yIGNsYXNzIGJhdHRlcmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc9NT1tZW51IFxcXCJBcHBsZSBTb0MgZHJpdmVyc1xcXCJcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTYtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo3OmNvbmZpZyBBUFBMRV9NQUlMQk9YXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTb0MgbWFpbGJveGVzXFxcIlxcbi0tXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnOjE5OmNvbmZpZyBBUFBMRV9SVEtJVFxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIFJUS2l0IGNvLXByb2Nlc3NvciBJUEMgcHJvdG9jb2xcXFwiXFxuLS1cXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWc6MzE6Y29uZmlnIEFQUExFX1NBUlRcXG5kcml2ZXJzL3NvYy9hcHBsZS9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTQVJUIERNQSBhZGRyZXNzIGZpbHRlclxcXCJcXG4tLVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDAtXFxuZHJpdmVycy9zb2MvYXBwbGUvS2NvbmZpZzo0MTpjb25maWcgQVBQTEVfVFVOQUJMRVxcbmRyaXZlcnMvc29jL2FwcGxlL0tjb25maWctNDItXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZz0xNDc9Y29uZmlnIFVTQl9RQ09NX0VVRFxcbi0tXFxuZHJpdmVycy91c2IvbWlzYy9LY29uZmlnLTE1OC1cXG5kcml2ZXJzL3VzYi9taXNjL0tjb25maWc6MTU5OmNvbmZpZyBBUFBMRV9NRklfRkFTVENIQVJHRVxcbmRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZy0xNjAtXFx0dHJpc3RhdGUgXFxcIkZhc3QgY2hhcmdlIGNvbnRyb2wgZm9yIGlPUyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92aWRlby9LY29uZmlnPTY9bWVudSBcXFwiR3JhcGhpY3Mgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3ZpZGVvL0tjb25maWctNy1cXG5kcml2ZXJzL3ZpZGVvL0tjb25maWc6ODpjb25maWcgQVBFUlRVUkVfSEVMUEVSU1xcbmRyaXZlcnMvdmlkZW8vS2NvbmZpZy05LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz0xMTExPWNvbmZpZyBNU0MzMTNFX1dBVENIRE9HXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyMi1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6MTEyMzpjb25maWcgQVBQTEVfV0FUQ0hET0dcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTEyNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgU29DIHdhdGNoZG9nXFxcIlxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE2NTI9eGZzX2ZzX2ZpbGxfc3VwZXIoXFxuLS1cXG5mcy94ZnMveGZzX3N1cGVyLmMtMTY2NC1cXHQgKiBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYmVlbiBjb21wbGV0ZWQgYnkgZWl0aGVyIHRoZSBvbGQgbW91bnQgQVBJIG9yXFxuZnMveGZzL3hmc19zdXBlci5jOjE2NjU6XFx0ICogdGhlIG5ld2VyIGZzb3Blbi9mc2NvbmZpZyBBUEkuXFxuZnMveGZzL3hmc19zdXBlci5jLTE2NjYtXFx0ICovXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0zMTA9Y29uZmlnIFBNX1RSQUNFX1JUQ1xcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzI3LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjMyODpjb25maWcgQVBNX0VNVUxBVElPTlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjIxLjMxODY3NzIzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY0NDA1NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBBUCAoQXBwbGljYXRpb24gUHJvY2Vzc29yKSBTdXBwb3J0IGluIHMzOTAgQXJjaGl0ZWN0dXJlKipcblxuUmlnaHQsIHNvIEkgc2VlIGBjb25maWcgQVBgIGlzIGRlZmluZWQgaW4gYGFyY2gvczM5MC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgaXQsIGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhhdCBjb25maWcgb3B0aW9uLiBMZXQgbWUganVtcCBpbnRvIGBhcmNoL3MzOTAvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDc5Ni4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZvciB1bmRlcnN0YW5kaW5nIHRoZXNlIHNvcnRzIG9mIGZlYXR1cmUgY29uZmlndXJhdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVwZW5kZW5jeSBkZWZpbml0aW9ucywgbWF5YmUgc29tZSBkZWZhdWx0cywgYW5kIGhvcGVmdWxseSBzb21lIGdvb2QgY29tbWVudHMgdG8gY2xhcmlmeSBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIHMzOTAga2VybmVsIGJ1aWxkLiBJJ20gY3VyaW91cyB0byBzZWUgaG93IEFQIHN1cHBvcnQgaXMgY29uZmlndXJlZCBhbmQgd2hhdCBpdCBlbmFibGVzIChvciBkaXNhYmxlcykgaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5OTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODoyNC44ODMwODUyOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzkwOlxcdFxcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIEVBRE0gc3ViY2hhbm5lbHMuIEVBRE0gc3ViY2hhbm5lbHMgYWN0XFxuIDc5MTpcXHRcXHQgIGFzIGEgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIGZvciBTQ00gaW5jcmVtZW50cy5cXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNzk0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVhZG1fc2NoLlxcbiA3OTU6XFx0XFxuIDc5NjpcXHRjb25maWcgQVBcXG4gNzk3OlxcdFxcdGRlZl90cmlzdGF0ZSB5XFxuIDc5ODpcXHRcXHRwcm9tcHQgXFxcIlN1cHBvcnQgZm9yIEFkanVuY3QgUHJvY2Vzc29ycyAoYXApXFxcIlxcbiA3OTk6XFx0XFx0aGVscFxcbiA4MDA6XFx0XFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2UgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzIHZpYVxcbiA4MDE6XFx0XFx0ICB0aGUgYXAgYnVzLCBjYXJkcyBhbmQgcXVldWVzLiBTdXBwb3J0ZWQgQWRqdW5jdCBQcm9jZXNzb3JzIGFyZVxcbiA4MDI6XFx0XFx0ICB0aGUgQ3J5cHRvRXhwcmVzcyBDYXJkcyAoQ0VYKS5cXG4gODAzOlxcdFxcbiA4MDQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gODA1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFwLlxcbiA4MDY6XFx0XFxuIDgwNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgKGRlZmF1bHQpLlxcbiA4MDg6XFx0XFxuIDgwOTpcXHRjb25maWcgQVBfREVCVUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MjQuODgzMTcxNDIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODQ4MzQyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVsdmluZyBpbnRvIENyeXB0b0V4cHJlc3MgQ2FyZCBFbXVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIENyeXB0b0V4cHJlc3MgQ2FyZHMsIHRoZXNlIENFWCBkZXZpY2VzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGhhcmR3YXJlIGlzIGVtdWxhdGVkIHdpdGhpbiBRRU1VLiBJdCdzIGEga2V5IHF1ZXN0aW9uIHdoZW4gdGhpbmtpbmcgYWJvdXQgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQuIEkgbmVlZCB0byBzZWUgaWYgUUVNVSBwcm92aWRlcyBhbnkgQVAgZGV2aWNlIGVtdWxhdGlvbi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHN5emthbGxlciBoYXMgc29tZSBzMzkweCBzdXBwb3J0LCB3aGljaCBjb3VsZCBiZSBoZWxwZnVsLCBidXQgdGhhdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gaXQgZW11bGF0ZXMgQVAgZGV2aWNlcy5cblxuQWgsIHJpZ2h0LCBWRklPIEFQLiBJdCdzIGNsaWNraW5nIG5vdy4gSXQncyBhIG1lZGlhdGVkIGRldmljZSwgYW4gbWRldiBkcml2ZXIuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuIFNvLCB0aGUga2V5IGlzIHRvIHNlZSBpZiBJIGNhbiByZWFjaCBgdmZpb19hcF9tZGV2X3Byb2JlYC4gVGhhdCdzIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhpcyBtZWRpYXRlZCBkZXZpY2UuIE1lZGlhdGVkIGRldmljZXMgYXJlIGNyZWF0ZWQgdmlhIHN5c2ZzLCB3aGljaCBpcyBncmVhdC5cblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcywgSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLiBUaGF0J3Mgd2hlcmUgSSBzaG91bGQgZmluZCBvdXQgaG93IGB2ZmlvX2FwX21kZXZfcHJvYmVgIGlzIGNvbm5lY3RlZCB0byB0aGUgd2hvbGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTY4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MzAuODY4MDA4MTk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM5MjIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTU4PXN0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHZmaW9fYXBfZHJ2ID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzo1OTpcXHQucHJvYmUgPSB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYwLVxcdC5yZW1vdmUgPSB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTc3Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzg5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3OTA6c3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTEte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzQ9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4Mi1cXHR9LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzgzOlxcdC5wcm9iZSA9IHZmaW9fYXBfbWRldl9wcm9iZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4NC1cXHQucmVtb3ZlID0gdmZpb19hcF9tZGV2X3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNDEwPXZvaWQgdmZpb19hcF9tZGV2X3VucmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDE1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDE2OmludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0MTcte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNTY9dm9pZCB2ZmlvX2FwX21kZXZfdW5yZWdpc3Rlcih2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE1ODppbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKnF1ZXVlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1OS12b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqcXVldWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODozMC45MTU0MDc2MzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMjExMDY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqTXkgVW5kZXJzdGFuZGluZyBvZiB0aGUgdmZpb19hcF9tYXRyaXhfZHJpdmVyKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHZmaW9fYXBfbWF0cml4X2RyaXZlcmAsIGFuZCBpdCdzIGNyeXN0YWwgY2xlYXIgdGhhdCB0aGlzIGlzIGFuIGBtZGV2X2RyaXZlcmAsIGEgZHJpdmVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgbWVkaWF0ZWQgZGV2aWNlcy4gVGhlIGNvcmUgY29uY2VwdCBpbnN0YW50bHkgY2xpY2tzIC0gaWYgeW91IHdhbnQgdG8gaW5zdGFudGlhdGUgYW4gbWRldiwgeW91IGZ1bmRhbWVudGFsbHkgbmVlZCBpdHMgcGFyZW50IGRldmljZS4gVGhpcyBpcyB0aGUgZm91bmRhdGlvbiB1cG9uIHdoaWNoIGV2ZXJ5dGhpbmcgZWxzZSBpcyBidWlsdC5cblxuTm93LCB3aGVyZSBkbyB3ZSBmaW5kIHRoZXNlIHBhcmVudCBkZXZpY2VzPyBBaCwgeWVzLCB0aGV5J3JlIGJlaW5nIHJlZ2lzdGVyZWQgd2l0aGluIGVpdGhlciBgdmZpb19hcF9kcnYuY2Agb3IgcG90ZW50aWFsbHkgYHZmaW9fYXBfb3BzLmNgLiBTbyB0aGF0J3MgdGhlIGxvY2F0aW9uIG9mIHRoZSB2aXRhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjM0LjUyNzUyMDczMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5NjQ2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRldl9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzODc9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzOTE6XFx0cmV0ID0gbWRldl9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnZmaW9fYXBfbWF0cml4X2RyaXZlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTItXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MzQuNTcyNDkwNTExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzU5NDgwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyBQYXJlbnQgRGV2aWNlIENyZWF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHBhcmVudCBkZXZpY2UuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IGl0cyBjcmVhdGlvbiBwb2ludC4gV2hlcmUsIGluIHRoZSBjb2RlYmFzZSwgaXMgdGhhdCBpbnN0YW50aWF0aW9uIGFjdHVhbGx5IGhhcHBlbmluZz8gSXMgaXQgZGlyZWN0bHkgaW4gYSBjb25maWd1cmF0aW9uIGZpbGU/IElzIHRoZXJlIHNvbWUgZmFjdG9yeSBwYXR0ZXJuIGludm9sdmVkPyBBbSBJIGxvb2tpbmcgYXQgYSBkaXJlY3QgYG5ld2AgY2FsbCwgb3Igc29tZXRoaW5nIG1vcmUgYWJzdHJhY3RlZCBiZWhpbmQgYSBidWlsZGVyIG9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGZyYW1ld29yaz8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgcmVsZXZhbnQgbW9kdWxlcywgc3RhcnRpbmcgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBsb2FkaW5nIGFuZCBzZXR1cCByb3V0aW5lcy4gSSdsbCBiZSBsb29raW5nIGZvciBrZXl3b3JkcyBsaWtlIFwibmV3LFwiIFwiY3JlYXRlLFwiIFwiaW5pdGlhbGl6ZSxcIiBvciBhbnl0aGluZyBzdWdnZXN0aXZlIG9mIG9iamVjdCBjb25zdHJ1Y3Rpb24gcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIGRldmljZSB0eXBlLiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCBjbG9zZWx5LCBwYXlpbmcgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgY3JlYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIG9yaWdpbiBwb2ludCBpcyBjcnVjaWFsIGJlZm9yZSBjb25zaWRlcmluZyBmdXJ0aGVyIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODozOC40MDg0NDE5NjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzE4MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kZXZfcmVnaXN0ZXJfcGFyZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzg3PWludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzk3LVxcdG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZXMgPSBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzk4OlxcdHJldCA9IG1kZXZfcmVnaXN0ZXJfcGFyZW50KFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VwYXJlbnQsIFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTktXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnZmaW9fYXBfbWF0cml4X2RyaXZlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6MzguNDUyNzY1NzI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzIzMDc5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEZXZpY2UgQ29udGV4dCoqXG5cbkFscmlnaHQsIG15IGJyYWluIGp1c3Qgd2VudCBzdHJhaWdodCB0byBgbWF0cml4X2Rldi1cdTAwM2VkZXZpY2VgLiBUaGF0J3MgdGhlIGtleS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYG1hdHJpeF9kZXZgIHN0cnVjdHVyZSBhbmQgdGhlIHVuZGVybHlpbmcgZGV2aWNlIHJlcHJlc2VudGF0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBcImRldmljZVwiIG1lbWJlciBvZiB0aGUgYG1hdHJpeF9kZXZgIHN0cnVjdHVyZS5cblxuVGhpcyBpbXBsaWVzIEknbSBwcm9iYWJseSBkZWFsaW5nIHdpdGggc29tZSBzb3J0IG9mIGFic3RyYWN0aW9uIGxheWVyIG9yIGEgZHJpdmVyIGFyY2hpdGVjdHVyZSB3aGVyZSBgbWF0cml4X2RldmAgbGlrZWx5IGVuY2Fwc3VsYXRlcyB0aGUgaGlnaGVyLWxldmVsIG1hdHJpeCBvcGVyYXRpb24sIGFuZCB0aGUgXCJkZXZpY2VcIiBtZW1iZXIgaXMgaG93IHdlIGludGVyZmFjZSB3aXRoIHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgdW5kZXJseWluZyBjb21wdXRlIHJlc291cmNlLiBBbSBJIGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyByZWdpc3RlcnMgb3IgaG93IHRoZSBtZW1vcnkgaXMgbWFwcGVkP1xuXG5JJ20gcHJvYmFibHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGFjY2VzcywgY29uZmlndXJlLCBvciBjb250cm9sIGEgc3BlY2lmaWMgZGV2aWNlIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0gaW52b2x2aW5nIG1hdHJpeCBvcGVyYXRpb25zLiBNYXliZSBJJ20gdHJvdWJsZXNob290aW5nLCBvciBvcHRpbWl6aW5nIHBlcmZvcm1hbmNlLCBvciBldmVuIGFkZGluZyBhIG5ldyBmZWF0dXJlLiBVbmRlcnN0YW5kaW5nIHRoaXMgY29ubmVjdGlvbiBpcyBjcml0aWNhbCB0byByZXNvbHZpbmcgdGhlIHByb2JsZW0gb3IgdGFzay4gSSB3b25kZXIgd2hhdCBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIGRldmljZSB0aGlzIHBvaW50cyB0by4gSGFyZHdhcmUgY2hhcmFjdGVyaXN0aWNzLCBtZW1vcnkgYWxsb2NhdGlvbiwgY29udGV4dCBtYW5hZ2VtZW50Li4uIHdoZXJlIGRvZXMgdGhpcyByYWJiaXQgaG9sZSBsZWFkP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM4OjQzLjQ4NTA3Njg4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0OTgyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNjpcXHRkZXZfc2V0X25hbWUoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIiVzXFxcIiwgVkZJT19BUF9ERVZfTkFNRSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNzpcXHRtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExODpcXHRtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UuYnVzID0gXFx1MDAyNm1hdHJpeF9idXM7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExOTpcXHRtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UucmVsZWFzZSA9IHZmaW9fYXBfbWF0cml4X2Rldl9yZWxlYXNlO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMjAtXFx0bWF0cml4X2Rldi1cXHUwMDNldmZpb19hcF9kcnYgPSBcXHUwMDI2dmZpb19hcF9kcnY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTEyMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTIyOlxcdHJldCA9IGRldmljZV9yZWdpc3RlcihcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTIzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTMyLW1hdHJpeF9kcnZfZXJyOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxMzM6XFx0ZGV2aWNlX2RlbChcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTM0LW1hdHJpeF9yZWdfZXJyOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxMzU6XFx0cHV0X2RldmljZShcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlZGV2aWNlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTM2LW1hdHJpeF9hbGxvY19lcnI6XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTQzPXN0YXRpYyB2b2lkIHZmaW9fYXBfbWF0cml4X2Rldl9kZXN0cm95KHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE0NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE0NTpcXHRzdHJ1Y3QgZGV2aWNlICpyb290X2RldmljZSA9IG1hdHJpeF9kZXYtXFx1MDAzZWRldmljZS5wYXJlbnQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE0Ni1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTQ3LVxcdGRyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZtYXRyaXhfZHJpdmVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTQ4OlxcdGRldmljZV91bnJlZ2lzdGVyKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xNDktXFx0YnVzX3VucmVnaXN0ZXIoXFx1MDAyNm1hdHJpeF9idXMpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzODc9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzOTctXFx0bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlcyA9IFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X3R5cGU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzOTg6XFx0cmV0ID0gbWRldl9yZWdpc3Rlcl9wYXJlbnQoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZXBhcmVudCwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM5OS1cXHRcXHRcXHRcXHQgICBcXHUwMDI2dmZpb19hcF9tYXRyaXhfZHJpdmVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODo0My41MzA1ODA0OTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkzNDIzOTM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipNeSBVbmRlcnN0YW5kaW5nIG9mIHRoZSBNYXRyaXggRGV2aWNlIENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gYG1hdHJpeF9kZXZgIGlzIGJlaW5nIHNwdW4gdXAuIFNlZW1zIGxpa2UgaXQncyB0YWtpbmcgb24gdGhlIHJvbGUgb2YgYSByb290IGRldmljZSBvciBhIGNoaWxkIG9mIHRoZSBgcm9vdF9kZXZpY2VgIG9uIHRoZSBgbWF0cml4X2J1c2AuIFRoYXQncyB0aGUgc2V0dXAgSSdkIGV4cGVjdC4gTm93LCBoZXJlJ3MgdGhlIGludGVyZXN0aW5nIGJpdCDigJMgaXQgZG9lc24ndCBsb29rIGxpa2Ugd2UgKm5lZWQqIHRob3NlIHBoeXNpY2FsIEFQIGRldmljZXMgdG8gYWN0dWFsbHkgKmNyZWF0ZSogdGhlIHBhcmVudCBmb3IgdGhlIG1kZXYuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gV2UncmUgZ2V0dGluZyB0byB0aGUgbWVhdCBvZiB0aGUgbWF0dGVyLlxuXG5BaCwgYW5kIHRoZXJlIGl0IGlzOiBgdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZWAgaXMgZ2V0dGluZyBjYWxsZWQgKmR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24qLiBUaGF0J3Mgd2hlcmUgdGhlIGNyZWF0aW9uIGxvZ2ljIGlzIGhhcHBlbmluZy4gVGhpcyBjbGFyaWZpZXMgdGhlIHRpbWluZyDigJMgaXQncyBoYXBwZW5pbmcgZWFybHkgaW4gdGhlIGRldmljZSBsaWZlY3ljbGUsIHJpZ2h0IHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkaW5nLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGRldmljZSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJIGNhbiBzZWUgaG93IHRoZSBmcmFtZXdvcmsgaXMgZXN0YWJsaXNoZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6NDkuNDY0ODIyNDEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ5OTg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz03OT1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbWF0cml4X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy04NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6ODY6c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTg3LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz0xNjc9c3RhdGljIGludCBfX2luaXQgdmZpb19hcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTc4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxNzk6XFx0cmV0ID0gdmZpb19hcF9tYXRyaXhfZGV2X2NyZWF0ZSgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xODAtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzg6NDkuNTExMzI2NTExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjMyMzkxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlZGSU8gRGV2aWNlIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgY29yZSBwcm9jZXNzIGJlZ2lucyB3aXRoIHRoZSB1bmNvbmRpdGlvbmFsIGNyZWF0aW9uIG9mIHRoZSBwYXJlbnQgVkZJTyBkZXZpY2UgZHVyaW5nIHRoZSBtb2R1bGUncyBpbml0aWFsaXphdGlvbi4gVGhhdCBtYWtlcyBzZW5zZTsgaXQgZXN0YWJsaXNoZXMgdGhlIGZvdW5kYXRpb24uIEFmdGVyIHRoYXQgaW5pdGlhbCBzZXR1cCBpcyBjb21wbGV0ZSwgdGhlIGB2ZmlvX2FwX21kZXZfcmVnaXN0ZXJgIGZ1bmN0aW9uIGlzIGludm9rZWQuIFNvIHRoZSBwYXJlbnQgZGV2aWNlIGlzIHJlYWR5LCBhbmQgbm93IHdlIHJlZ2lzdGVyIHRoZSBtZWRpYXRlZCBkZXZpY2UuIFRoYXQgc3VnZ2VzdHMgYSBjbGVhciBzZXF1ZW5jZTogZXN0YWJsaXNoIHRoZSBiYXNlLCB0aGVuIGNvbm5lY3QgdGhlIG1lZGlhdGVkIGluc3RhbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODo1My44NzQ1NjkwNTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTY2OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfbWRldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4OC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTg5OlxcdHJldCA9IHZmaW9fYXBfbWRldl9yZWdpc3RlcigpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xOTAtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNzQ9c3RhdGljIHN0cnVjdCBtZGV2X2RyaXZlciB2ZmlvX2FwX21hdHJpeF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM4Ni1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM4NzppbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODgte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNDM9c3RydWN0IHZmaW9fYXBfcXVldWUge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTQtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNTU6aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE1Ni12b2lkIHZmaW9fYXBfbWRldl91bnJlZ2lzdGVyKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozODo1My45MTk3NDEwNjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0MTEzMTI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBtZGV2IFJlZ2lzdHJhdGlvbiBhbmQgUHJvYmUgRmxvdyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgdGhlIGBtZGV2YCBwYXJlbnQgaXMgcmVnaXN0ZXJlZCB3aXRob3V0IGFueSBjb25kaXRpb25hbCBjaGVja3MsIHdoaWNoIGlzIGEga2V5IG9ic2VydmF0aW9uLiBUaGF0IGltcGxpZXMgdGhhdCBhbnkgdXNlcnNwYWNlIHByb2Nlc3Mgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMgY2FuIGNyZWF0ZSBgbWRldmAgZGV2aWNlcyBkaXJlY3RseSB0aHJvdWdoIHRoZSBgc3lzZnNgIGludGVyZmFjZS4gVGhpcyB0cmlnZ2VycyBhIGNhbGwgdG8gYHZmaW9fYXBfbWRldl9wcm9iZWAuIFNvLCBteSBmb2N1cyBzaG91bGQgbm93IHNoaWZ0IHRvIHNjcnV0aW5pemluZyB3aGF0IGV4YWN0bHkgaGFwcGVucyBpbnNpZGUgYHZmaW9fYXBfbWRldl9wcm9iZWAuIFdoYXQncyB0aGUgY29udHJvbCBmbG93IHRoZXJlPyBXaGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkPyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBhIHBvdGVudGlhbGx5IHVuY29uZGl0aW9uYWwgcHJvYmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBmcm9tIHRoaXMgdW5jb25kaXRpb25hbCBjcmVhdGlvbiBwYXRoLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozOTowMC45NjA4NzY1MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3ODA6XFx0XFxuIDc4MTpcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNlbWRldiA9IHRvX21kZXZfZGV2aWNlKHZkZXYtXFx1MDAzZWRldik7XFxuIDc4MjpcXHRcXHR2ZmlvX2FwX21hdHJpeF9pbml0KFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VpbmZvLCBcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeCk7XFxuIDc4MzpcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNlcHFhcF9ob29rID0gaGFuZGxlX3BxYXA7XFxuIDc4NDpcXHRcXHR2ZmlvX2FwX21hdHJpeF9pbml0KFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VpbmZvLCBcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZXNoYWRvd19hcGNiKTtcXG4gNzg1OlxcdFxcdGhhc2hfaW5pdChtYXRyaXhfbWRldi1cXHUwMDNlcXRhYmxlLnF1ZXVlcyk7XFxuIDc4NjpcXHRcXG4gNzg3OlxcdFxcdHJldHVybiAwO1xcbiA3ODg6XFx0fVxcbiA3ODk6XFx0XFxuIDc5MDpcXHRzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9wcm9iZShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpXFxuIDc5MTpcXHR7XFxuIDc5MjpcXHRcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xcbiA3OTM6XFx0XFx0aW50IHJldDtcXG4gNzk0OlxcdFxcbiA3OTU6XFx0XFx0bWF0cml4X21kZXYgPSB2ZmlvX2FsbG9jX2RldmljZShhcF9tYXRyaXhfbWRldiwgdmRldiwgXFx1MDAyNm1kZXYtXFx1MDAzZWRldixcXG4gNzk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ2ZmlvX2FwX21hdHJpeF9kZXZfb3BzKTtcXG4gNzk3OlxcdFxcdGlmIChJU19FUlIobWF0cml4X21kZXYpKVxcbiA3OTg6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobWF0cml4X21kZXYpO1xcbiA3OTk6XFx0XFxuIDgwMDpcXHRcXHRyZXQgPSB2ZmlvX3JlZ2lzdGVyX2VtdWxhdGVkX2lvbW11X2RldihcXHUwMDI2bWF0cml4X21kZXYtXFx1MDAzZXZkZXYpO1xcbiA4MDE6XFx0XFx0aWYgKHJldClcXG4gODAyOlxcdFxcdFxcdGdvdG8gZXJyX3B1dF92ZGV2O1xcbiA4MDM6XFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcXG4gODA0OlxcdFxcdG1hdHJpeF9tZGV2LVxcdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xcbiA4MDU6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZtZGV2LVxcdTAwM2VkZXYsIG1hdHJpeF9tZGV2KTtcXG4gODA2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrKTtcXG4gODA3OlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNlbm9kZSwgXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfbGlzdCk7XFxuIDgwODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWd1ZXN0c19sb2NrKTtcXG4gODA5OlxcdFxcdHJldHVybiAwO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRlcnJfcHV0X3ZkZXY6XFxuIDgxMjpcXHRcXHR2ZmlvX3B1dF9kZXZpY2UoXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2V2ZGV2KTtcXG4gODEzOlxcdFxcdHJldHVybiByZXQ7XFxuIDgxNDpcXHR9XFxuIDgxNTpcXHRcXG4gODE2OlxcdHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuIDgxNzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuIDgxODpcXHR7XFxuIDgxOTpcXHRcXHRpZiAoIXEgfHwgdmZpb19hcF9tZGV2X2dldF9xdWV1ZShtYXRyaXhfbWRldiwgcS1cXHUwMDNlYXBxbikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjAwLjk2MTExMDY2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDMwNjE5NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKlZGSU8tQVAgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoYXQncyBnb29kLCBidXQgaXQncyBqdXN0IHRoZSBiZWdpbm5pbmcuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuIExldCdzIHNlZS4uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBhbmQgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBzdXNwZWN0IG1hbmFnZSBkZXZpY2UgY3JlYXRpb24sIHJlbW92YWwsIGFuZCBjaGFuZ2VzIHRvIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZXNlIEFQIGRldmljZXMuIFRoZW4gdGhlcmUncyB0aGUgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgZnVuY3Rpb24uIEkgaGF2ZSB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGltcGFjdHMgaG93IEFQIGRldmljZXMgYXJlIGluaXRpYWxpemVkLiBUaGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuY3Rpb24gY2FsbHMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NjAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjA3LjM5MTczNDg1MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzOTY2NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNTU3PXN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1ODUtLyoqXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1ODY6ICogdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUgLSBkZXRlcm1pbmVzIHdoaWNoIGd1ZXN0cyBhcmUgdXNpbmcgdGhlIGFkYXB0ZXJzLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTg3LSAqXFx0XFx0XFx0ICAgICBkb21haW5zIGFuZCBjb250cm9sIGRvbWFpbnMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1OTctICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI1OTg6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmUodW5zaWduZWQgbG9uZyAqYXBfcmVtb3ZlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTk5LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICphcV9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjY0Nj1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjY3LVxcdGlmIChkb19yZW1vdmUpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI2Njg6XFx0XFx0dmZpb19hcF9tZGV2X2NmZ19yZW1vdmUoYXByZW0sIGFxcmVtLCBjZHJlbSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2NjktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozOTowNy44MjU3MDYxOTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgzNzk0NDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGFja2xpbmcgdGhpczpcblxuKipBbmFseXppbmcgYHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlYCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IG15IGhlYWQgYXJvdW5kIGB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZWAuIFRoaXMgbGlrZWx5IGRlYWxzIHdpdGggcmVtb3ZpbmcgYSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gbWVkaWF0ZWQgZGV2aWNlcyB3aXRoaW4gdGhlIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKSBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBmb3IgQWNjZXNzIFByb3RlY3Rpb24gKEFQKSBtZWRpYXRlZCBkZXZpY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gKmRvKiwgYW5kIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIFZGSU8ncyBtZGV2IChtZWRpYXRlZCBkZXZpY2UpIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXMgaXQgcGVydGFpbnMgdG8gQVAuIElzIHRoaXMgcGFydCBvZiBhIGNsZWFudXAgcm91dGluZSwgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCwgb3IgYSBjb3JlIHBhcnQgb2YgdGhlIG1kZXYgdGVhci1kb3duIHByb2Nlc3M/IE15IGV4cGVyaWVuY2Ugd2l0aCBWRklPIHRlbGxzIG1lIGl0J3MgcHJvYmFibHkgbGlua2VkIHRvIGEgc3BlY2lmaWMgZGV2aWNlIHN0YXRlLiBJdCdzIGxpa2VseSBpbnZvbHZlZCB3aXRoIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIG9yIHJlc291cmNlIGNvcnJ1cHRpb24gdXBvbiByZW1vdmFsLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgYW5kIHJlc291cmNlIGRlYWxsb2NhdGlvbiB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8ga25vdyB3aGF0IHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24uIFRoZSBjb250ZXh0IHdpbGwgdGVsbCBtZSBob3cgY3JpdGljYWwgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjE0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzk6MTcuNjYzNjU0MTc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDUyMTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU5OD1zdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZSh1bnNpZ25lZCBsb25nICphcF9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjYzOC0vKipcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjYzOTogKiB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZSAtIHJlc3BvbmRzIHRvIHRoZSByZW1vdmFsIG9mIGFkYXB0ZXJzLCBkb21haW5zIGFuZFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjQwLSAqXFx0XFx0XFx0XFx0Y29udHJvbCBkb21haW5zIGZyb20gdGhlIGhvc3QgQVAgY29uZmlndXJhdGlvblxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2NDUtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI2NDY6c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2NDctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqcHJldl9jb25maWdfaW5mbylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yODE5PXZvaWQgdmZpb19hcF9vbl9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jZmdfaW5mbyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODI2LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyODI3OlxcdHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlKGN1cl9jZmdfaW5mbywgcHJldl9jZmdfaW5mbyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MjgtXFx0dmZpb19hcF9tZGV2X29uX2NmZ19hZGQoY3VyX2NmZ19pbmZvLCBwcmV2X2NmZ19pbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzk6MTcuNzE0MTgwNTA4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MzU1Mjc2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCwgYW5kIGl0IHVzdWFsbHkgbWVhbnMgc29tZXRoaW5nIHNpZ25pZmljYW50IGhhcyBvY2N1cnJlZCB3aXRoaW4gdGhlIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKSBzdWJzeXN0ZW0gcmVsYXRlZCB0byB0aGUgYWNjZXNzIHByb3RlY3Rpb24gY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBjYWxsIGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgbWVudGFsbHkgZ28gdGhyb3VnaCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBjYWxsIHNpdGVzIHRvIGdldCBhIGdyYXNwIG9mIHRoZSB0cmlnZ2Vycy4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hhdCBraW5kcyBvZiBldmVudHMgY291bGQgcG9zc2libHkgbmVjZXNzaXRhdGUgYSBjaGFuZ2UgaW4gdGhlIGFjY2VzcyBwcm90ZWN0aW9uIGNvbmZpZ3VyYXRpb24uIERldmljZSBob3RwbHVnZ2luZz8gU2VjdXJpdHkgY29udGV4dHM/IFBlcmhhcHMgc29tZSBzb3J0IG9mIHJlc291cmNlIHJlYWxsb2NhdGlvbiBvciB2aXJ0dWFsaXphdGlvbiBtYW5hZ2VtZW50IG9wZXJhdGlvbj8gS25vd2luZyB0aGUgc3BlY2lmaWMgdHJpZ2dlciBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgaW1wbGVtZW50YXRpb24sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGxvY2tzIGl0IHVzZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFZGSU8gaW5mcmFzdHJ1Y3R1cmUuIEkgbmVlZCB0byBpbW1lZGlhdGVseSBldmFsdWF0ZSBwb3RlbnRpYWwgaW1wYWN0cyBpZiB0aGlzIGlzIGhhbmRsZWQgaW5jb3JyZWN0bHkuIFRoZSBpbXBsaWNhdGlvbnMgb2YgZ2V0dGluZyBhY2Nlc3MgcHJvdGVjdGlvbiB3cm9uZyBpbiBWRklPIGFyZSBodWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjIzLjM0OTcxMjIxM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNjExNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19hcF9vbl9jZmdfY2hhbmdlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9NTg9c3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgdmZpb19hcF9kcnYgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtNjEtXFx0LmluX3VzZSA9IHZmaW9fYXBfbWRldl9yZXNvdXJjZV9pbl91c2UsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjYyOlxcdC5vbl9jb25maWdfY2hhbmdlZCA9IHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTYzLVxcdC5vbl9zY2FuX2NvbXBsZXRlID0gdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3ODc9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19hZGQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgxMi0vKipcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgxMzogKiB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkIC0gaGFuZGxlcyBub3RpZmljYXRpb24gb2YgY2hhbmdlcyB0byB0aGUgaG9zdCBBUFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yODE0LSAqXFx0XFx0XFx0ICAgIGNvbmZpZ3VyYXRpb24uXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjgxOC0gKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjgxOTp2b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY2ZnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4MjAtXFx0XFx0XFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqcHJldl9jZmdfaW5mbylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTYxPWludCB2ZmlvX2FwX21kZXZfcmVzb3VyY2VfaW5fdXNlKHVuc2lnbmVkIGxvbmcgKmFwbSwgdW5zaWduZWQgbG9uZyAqYXFtKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2Mi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE2Mzp2b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjQtXFx0XFx0XFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqb2xkX2NvbmZpZ19pbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6Mzk6MjMuNDAwOTc5NzQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzQwMTU0NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU8tQVAgTG9ja2luZyBMb2dpYyBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCBpcyBhbiBgYXBfZHJpdmVyYCBjYWxsYmFjaywgdHJpZ2dlcmVkIGJ5IHRoZSBBUCBidXMuICBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBBUCBidXMgZXZlbiAqZXhpc3RzKiBpbiBRRU1VLiAgQWgsIHJpZ2h0LCB3ZSBoYXZlIHNvbWUgczM5MHggc3VwcG9ydCwgc28geWVzLCBpdCdzIGEgcG9zc2liaWxpdHkuICBOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHBhdGggcmVhY2hhYmxlPyBTeXprYWxsZXIgZG9lc24ndCBkZWZhdWx0IHRvIHMzOTB4IFZNcywgYnV0IGl0IGhhcyBhbiBzMzkweCBwb3J0LCBzbyBpdCdzIGEgZGVmaW5pdGUgbWF5YmUuIElmIGl0J3MgcmVhY2hhYmxlLCBpdCdzIGZ1enphYmxlLlxuXG5UaGlzIHBhdGNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQncyBhIGxvY2tpbmcgbG9naWMgY2hhbmdlLiAgU3BlY2lmaWNhbGx5LCBJJ20gc2VlaW5nOlxuXG5gYGBjXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZ3Vlc3RzX2xvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2bWF0cml4X21kZXYtXHUwMDNlbm9kZSwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG5gYGBcblxuYW5kIGFsc28gdGhpczpcblxuYGBgY1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtYXRyaXhfbWRldiwgXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2X2xpc3QsIG5vZGUpIHtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcbitcdFx0ICogYW5kIGt2bS1cdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xuK1x0XHQgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuXG4rXHRcdCAqL1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuIFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG5gYGBcblxuU28sIHRoaXMgY2hhbmdlIGlzIGEgZnVuY3Rpb25hbCBvbmUsIGFpbWVkIGF0IHByZXZlbnRpbmcgZGVhZGxvY2tzIG9yIGZpeGluZyBsb2NrZGVwIGlzc3Vlcywgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIHRvIGZ1enouXG5cbkxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiAgSSdtIHRoaW5raW5nOlxuXG4qICAgYHZmaW9fYXBfbWRldl9wcm9iZWBcbiogICBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgXG4qICAgYHZmaW9fYXBfbWRldl9jZmdfYWRkYFxuKiAgIGB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnYFxuKiAgIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgXG5cbkhvbGQgb24uLi4gYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCBhbmQgYHZmaW9fYXBfbWRldl9jZmdfYWRkYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIHRoZXkgYXJlIGlubGluZWQuIE5vLCB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmVgIGFuZCBgdmZpb19hcF9tZGV2X29uX2NmZ19hZGRgLCB3aGljaCBhcmUgaW4gdHVybiBjYWxsZWQgYnkgYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgLiBPa2F5LCBzbyB3ZSBjYW4gcHJvYmFibHkgZm9jdXMgb24gYHZmaW9fYXBfb25fY2ZnX2NoYW5nZWRgIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYCBhcyBwcmltYXJ5IHRhcmdldHMsIHNpbmNlIHRoZXkgYXJlIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gQW5kLCBhcyBiZWZvcmUsICBgdmZpb19hcF9tZGV2X3Byb2JlYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSB3aWxsIGNvbmZpcm0gdGhlIHN0YXRpYyBzdGF0dXMgYWdhaW4gLSBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgIGlzIHN0YXRpYywgYHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmdgIGlzIHN0YXRpYyB0b28uICBCdXQgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgaXMgbm9uLXN0YXRpYyAoZXhwb3J0ZWQgb3Igc29tZXRoaW5nIHNpbWlsYXIpLiBUaGF0IGNvbmZpcm1zIHRoZSBmdXp6aW5nIHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzEwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjM1LjE0MTEzNzQ0NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MDY1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI4MzQ9c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI4NTg6dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4NTktXFx0XFx0XFx0ICAgICAgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2Mz12b2lkIHZmaW9fYXBfb25fY2ZnX2NoYW5nZWQoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjQtXFx0XFx0XFx0ICAgIHN0cnVjdCBhcF9jb25maWdfaW5mbyAqb2xkX2NvbmZpZ19pbmZvKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE2NTp2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm9sZF9jb25maWdfaW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjM1LjE4ODA1Mjg2NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzQxMDIyODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFZGSU8tQVAgTW9kdWxlIEVudHJ5IFBvaW50cyBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIGluc3RpbmN0IHBvaW50cyBtZSB0b3dhcmRzIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgLCBgdmZpb19hcF9vbl9jZmdfY2hhbmdlZGAsIGFuZCBgdmZpb19hcF9tZGV2X3Byb2JlYCBhcyB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIGluIHRoaXMgYFZGSU8tQVBgIGNvbnRleHQuIEFoLCByaWdodCwgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgZGVjbGFyZWQgYHN0YXRpY2AuIEkgc2hvdWxkIHByb2JhYmx5IHByZWZlciBhIG5vbi1zdGF0aWMgb3B0aW9uIGlmIGF2YWlsYWJsZSwgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIGNhbiBzb21ldGltZXMgaGluZGVyIGFuYWx5c2lzLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCdzIGJlaW5nIHBhc3NlZCBhcyBhIGNhbGxiYWNrLiBZZXMsIGl0IGxvb2tzIGxpa2UgaXQncyB1c2VkIGFzIHRoZSBgLnByb2JlYCBmdW5jdGlvbiBpbiBgdmZpb19hcF9tYXRyaXhfZHJpdmVyYCwgd2hpY2ggbWFrZXMgaXQgYW4gZW50cnkgcG9pbnQuIEJ1dCwgYXMgYSBwcm9iZSBmdW5jdGlvbiwgaXQncyB2ZXJ5IHVubGlrZWx5IHRvIGJlIGlubGluZWQsIHNvIGluY2x1ZGluZyBpdCBpcyBwcm9iYWJseSBmaW5lIGFuZCB3b24ndCBjb21wbGljYXRlIHRoaW5ncy5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEknbSBzZWVpbmcgdGhhdCB3ZSBjbGVhcmx5IG5lZWQgYFZGSU9fQVBgLiBXYWl0LCBgQVBgIGlzIGBkZWZfdHJpc3RhdGUgeWAgaW4gdGhlIGBhcmNoL3MzOTAvS2NvbmZpZ2AsIHNvIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHMzOTAuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuIExldCdzIGRpZyBpbnRvIGBWRklPX0FQYCdzIGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgbm90aGluZyBlbHNlIGlzIHJlcXVpcmVkLiBPa2F5LCBpdCBuZWVkcyBgS1ZNYCwgYFZGSU9gLCBhbmQgYEFQYCwgd2hpY2ggd2UgY292ZXJlZCwgYW5kIGBWRklPX01ERVZgLCB3aGljaCBpcyBzZWxlY3RlZCBieSBgVkZJT19BUGAgaXRzZWxmLlxuXG5TbywgbG9va3MgbGlrZSBlbmFibGluZyBgVkZJT19BUGAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGNvbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjQwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjQxLjkyOTA3ODU0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0ODEzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL0tjb25maWc9ODIzPWNvbmZpZyBWRklPX0NDV1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctODMzLVxcbmFyY2gvczM5MC9LY29uZmlnOjgzNDpjb25maWcgVkZJT19BUFxcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cXHRkZWZfdHJpc3RhdGUgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzozOTo0MS45NzY1NjY0MTNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4OTcxMDc5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWRklPIEFQIERyaXZlciBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBWRklPX0FQYCBjb25maWd1cmF0aW9uLCB0aGF0J3MgZGVmaW5pdGVseSB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uLiBJJ20gc2VlaW5nIGl0J3MgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkuIFxuXG5JIGNoZWNrZWQ6IGBLVk1gIGFuZCBgVkZJT2AgYXJlIHN0YW5kYXJkIGJ1dCBgVkZJT19BUGAgaXMgdGhlIG1haW4gdGFyZ2V0LlxuXG5JIHdlbnQgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBgdmZpb19hcF9tZGV2X3Byb2JlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QuIEl0IG1lYW5zIGl0J3MgYSBkaXJlY3QgY2FsbGJhY2sgYW5kIGNhbiBiZSBpbmNsdWRlZC4gVGhlcmUncyBubyBub24tc3RhdGljIHdyYXBwZXIgYXJvdW5kIGl0LCBpdCdzIGRpcmVjdGx5IGFzc2lnbmVkIHRvIGBtZGV2X2RyaXZlci5wcm9iZWAuIFRoZW4sIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYCBhbmQgYHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZWAgYXJlIG5vbi1zdGF0aWMuXG5cbk15IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6XG5cbiogICBgdmZpb19hcF9tZGV2X3Byb2JlYFxuKiAgIGB2ZmlvX2FwX29uX2NmZ19jaGFuZ2VkYFxuKiAgIGB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGVgXG5cbkFuZCB0aGUgZW5hYmxlIGNvbmZpZyBpczpcblxuKiAgIGBWRklPX0FQYFxuXG5UaGUgcGF0Y2ggaXMgZml4aW5nIHRoZSBsb2NraW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBsb2NrcyBhcmUgb3JkZXJlZC4gSXQncyBkZWFsaW5nIHdpdGggYG1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9ja2AsIGBtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrYCwgYW5kIGBtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9ja2AgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyBhbmQgZGVhZGxvY2tzLiBUaGVzZSBjaGFuZ2VzIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSdyZSByZWxhdGVkIHRvIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLCBhbGwgY29yZSBkcml2ZXIgZnVuY3Rpb25hbGl0aWVzIHRyaWdnZXJlZCBieSBzeXNmcyBtZGV2IGNyZWF0aW9uIGFuZCBBUCBidXMgY29uZmlndXJhdGlvbi5cblxuVG8gY29uZmlybSB0aGUgc3BlY2lmaWNzLCBJJ3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBmdW5jdGlvbiBuYW1lcy4gWWVwLCBgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcHJvYmUoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KWAgaXMgY29ycmVjdC4gU2FtZSBmb3IgdGhlIG90aGVyIHR3bzogYHZvaWQgdmZpb19hcF9vbl9jZmdfY2hhbmdlZChzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jZmdfaW5mbywgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpwcmV2X2NmZ19pbmZvKWAgYW5kIGB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbywgc3RydWN0IGFwX2NvbmZpZ19pbmZvICpvbGRfY29uZmlnX2luZm8pYC5cblxuVGhlcmUgYXJlIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMsIGB2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZWAsIGB2ZmlvX2FwX21kZXZfY2ZnX2FkZGAsIGFuZCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AsIGJ1dCB0aGV5IGFyZSBjYWxsZWQgZnJvbSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIHdlIHdpbGwgbm90IGluY2x1ZGUgdGhlbS5cblxuU2luY2UgYHZmaW9fYXBfbWRldl9wcm9iZWAgaXMgc3RhdGljLCBpdCdzIHNhZmUgdG8gaW5jbHVkZSBhcyBhIGNhbGxiYWNrLlxuXG5JJ20gcmVhZHkgdG8gbWFyayB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMDEsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjU0Ljg3MzY3ODcwMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MzYxMDI4LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBWRklPX0FQIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9fQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIixcbiAgICBcInZmaW9fYXBfb25fY2ZnX2NoYW5nZWRcIixcbiAgICBcInZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgbG9naWMgYW5kIGJpdG1hcCBvcGVyYXRpb25zIGluIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyLiBJdCBmaXhlcyBsb2NrIG9yZGVyaW5nIGJldHdlZW4gYG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2tgLCBgbWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2tgLCBhbmQgYG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2tgIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3MgZHVyaW5nIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRyaXZlciBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBWRklPX0FQXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjM5OjU0Ljk0ODA0OTE1OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDEzMTY3MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFZGSU9fQVAgQXZhaWxhYmlsaXR5IGluIHRoZSBzMzkwIEFyY2hpdGVjdHVyZSoqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gdGhlIHRvb2wgSSdtIHVzaW5nIGZsYWdnZWQgYFZGSU9fQVBgIGFzIHVuZGVmaW5lZCwgYnV0IG15IG1lbW9yeSBpcyBwcmV0dHkgc29saWQsIGFuZCBJICpjb3VsZCBoYXZlIHN3b3JuKiBJIHNhdyBpdCBpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBUaW1lIGZvciBhIGRvdWJsZS1jaGVjay4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhhdCBLY29uZmlnIGZpbGUgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGVyZSdzIHByb2JhYmx5IGp1c3Qgc29tZSBzdWJ0bGV0eSBJIG1pc3NlZCwgb3IgbWF5YmUgYW4gaW50ZXJhY3Rpb24gd2l0aCBhbm90aGVyIGNvbmZpZyBJJ20gbm90IHRoaW5raW5nIGFib3V0LiBCZXN0IHRvIGNvbmZpcm0gdGhhdCB0aGUgdG9vbCdzIHJpZ2h0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBkZWJ1Z2dpbmcuLi4gYmVjYXVzZSBJJ20gYmV0dGluZyB0aGF0IEtjb25maWcgaGFzIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjQwOjAwLjM2MTIyMDQ1MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyNjQyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL0tjb25maWc9ODIzPWNvbmZpZyBWRklPX0NDV1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctODMzLVxcbmFyY2gvczM5MC9LY29uZmlnOjgzNDpjb25maWcgVkZJT19BUFxcbmFyY2gvczM5MC9LY29uZmlnLTgzNS1cXHRkZWZfdHJpc3RhdGUgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzo0MDowMC40MTE0OTAxODlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwODk5Nzk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBLY29uZmlnIERpc2NyZXBhbmN5KipcblxuT2theSwgc28gdGhlIHRvb2wgY2xhaW1zIGBWRklPX0FQYCBpc24ndCBpbiB0aGUga2VybmVsLCBhbmQgdGhhdCdzIHRocm93aW5nIG1lIGZvciBhIGxvb3AuIE15IGZpcnN0IGluc3RpbmN0IHdhcyB0aGF0IHRoZSB0b29sIG1pZ2h0IGJlIG1pc3Npbmcgc29tZXRoaW5nIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLCBtYXliZSBgYXJjaC9zMzkwL0tjb25maWdgLiBQZXJoYXBzIGl0IHdhc24ndCBwYXJzaW5nIGl0IGNvcnJlY3RseSwgb3IgbWF5YmUgaXQgd2FzIG9ubHkgbG9va2luZyBhdCBgeDg2YCBvciBvdGhlciBzdGFuZGFyZCBjb25maWdzLiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQsIHRoZSB0b29sICpzaG91bGQqIGNoZWNrIGFsbCB0aGUgS2NvbmZpZyBmaWxlcy5cblxuUmlnaHQsIHNvIGxldCdzIHZlcmlmeSDigJMgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbmZpZyAqZXhhY3RseSogYFZGSU9fQVBgPyBZZXAsIGNvbmZpcm1lZDogaXQncyBkZWZpbmVkIGFzIGBjb25maWcgVkZJT19BUGAuIFNvIHdoeSB0aGUgaGVjayBpcyBpdCBzYXlpbmcgdGhhdCBpdCBkb2Vzbid0IGV4aXN0PyBUaGlzIGlzIGJhZmZsaW5nLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBpdHMgZGVmaW5pdGlvbi4gSSdsbCBoZWFkIHN0cmFpZ2h0IGZvciBgZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnYCDigJMgdGhhdCBmZWVscyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZS4gTGV0J3Mgc2VlIGlmIHRoYXQgZmlsZSBhY3R1YWxseSBjb250YWlucyB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6NDA6MDYuNDIwNDkwOTExWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk5MTgzOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9fQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzo0MDowNi40Njg0ODkwNzlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NDQ2ODcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBGaWxlKipcblxuT2theSwgc28gdGhlIGluc3RydWN0aW9uIGlzIHByZXR0eSBjbGVhci4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9zMzkwL0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgaW1tZWRpYXRlbHkgc3RhcnQgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzLiBXaGF0IGFtIEkgbG9va2luZyBmb3I/IFdlbGwsIGl0IGRlcGVuZHMgb24gdGhlIGNvbnRleHQsIG9mIGNvdXJzZSwgYnV0IGdlbmVyYWxseSwgSSdsbCBiZSBpbnRlcmVzdGVkIGluIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgY291bGQgaW52b2x2ZSBkcml2ZXItc3BlY2lmaWMgc2V0dGluZ3MsIGhhcmR3YXJlIHN1cHBvcnQsIG9yIGV2ZW4gZmVhdHVyZSBlbmFibGVtZW50cy4gSSdsbCBsaWtlbHkgYmUgY2hlY2tpbmcgZm9yIHNwZWNpZmljIGtleXdvcmRzIG9yIHN5bWJvbHMgSSdtIGZhbWlsaWFyIHdpdGgsIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgcGFydGljdWxhciBkZXZpY2Ugb3Igc3Vic3lzdGVtLiBUaGUga2V5IGhlcmUgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHdoYXQgY2FuIGJlIGNvbmZpZ3VyZWQuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB3aGF0IGtpbmRzIG9mIHRoaW5ncyB0aGF0IGZpbGUgbWlnaHQgY29udGFpbiwgYW5kIEknbSByZWFkeSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gb3IgcmVmdXRlIHRob3NlIGV4cGVjdGF0aW9ucy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE5MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjQwOjEwLjYyMjk2MTg2NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0ODI3Mzk5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6NDA6MTEuMDE3ODMxNTk1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzc0Mjk2NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyb3VibGVzaG9vdGluZyBhIENvbmZpZ3VyYXRpb24gUmVqZWN0aW9uKipcblxuT2theSwgc28gSSB0aG91Z2h0IEkgd2FzIGJlaW5nIGVmZmljaWVudCBieSBncmVwcGluZyBmb3IgYGNvbmZpZyBWRklPX0FQYCBhbmQgZmluZGluZyBpdCBkZWZpbmVkIHdpdGhpbiBgYXJjaC9zMzkwL0tjb25maWdgLiBJIGtub3cgdGhhdCBJIGZvdW5kIGl0IHRoZXJlIGJlZm9yZSwgSSBtYWRlIGEgbm90ZSBvZiBpdC4gQnV0IGBzZXQtcmVzdWx0c2AgaXMgcmVqZWN0aW5nIGl0LCBhbmQgdGhhdCdzIHRocm93aW5nIG1lIG9mZi4gV2h5IGlzIGl0IGRvaW5nIHRoYXQ/XG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IG1heWJlIGBzZXQtcmVzdWx0c2AgZW1wbG95cyBhIHNjcmlwdCB0byBwYXJzZSBLY29uZmlnIGZpbGVzIGFuZCBwZXJoYXBzIGl0J3MgY2hva2luZyBvbiBzb21ldGhpbmcgaW4gdGhlIGBhcmNoL3MzOTAvS2NvbmZpZ2AgZmlsZSBzcGVjaWZpY2FsbHkuIElzIGl0IHBvc3NpYmxlIHRoYXQgdGhlIEtjb25maWcgcGFyc2luZyBpcyB0aGUgaXNzdWUgaGVyZT9cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGVyZSBpc24ndCBzb21lIHNpbGx5IHR5cG8gaW4gbXkgY29tbWFuZCBsaW5lLCBvciB0aGF0IEkgZGlkbid0IHNvbWVob3cgbWlzcmVtZW1iZXIgdGhlIG5hbWUuIE5vcGUsIHRoZSBuYW1lJ3MgY29ycmVjdC5cblxuV2FpdCBhIHNlY29uZC4uLmlzIGl0IHBvc3NpYmxlIHRoYXQgYHNldC1yZXN1bHRzYCBpcyBvbmx5IGNoZWNraW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxldmFudCB0byB0aGUgYHg4Nl82NGAgYXJjaGl0ZWN0dXJlPyBJZiBgVkZJT19BUGAgaXMgc3BlY2lmaWMgdG8gYHMzOTBgLCBpdCB3b3VsZG4ndCBuZWNlc3NhcmlseSBleGlzdCBpbiB0aGUgZGVmYXVsdCBgeDg2XzY0YCBkZWZjb25maWcsIGV2ZW4gaWYgaXQncyBjb3JyZWN0bHkgZGVmaW5lZCBpbiB0aGUgb3ZlcmFsbCBLY29uZmlnIHN0cnVjdHVyZS4gVGhlIHRvb2wgbWlnaHQgYmUgY2hlY2tpbmcgYWdhaW5zdCB0aGF0IHN0YW5kYXJkIGFyY2hpdGVjdHVyZS5cblxuT2theSwgbGV0J3MgdHJ5IGEgd29ya2Fyb3VuZC4gSWYgYFZGSU9fQVBgIGlzIGJlaW5nIHJlamVjdGVkIGJlY2F1c2Ugb2YgdGhlIGFyY2hpdGVjdHVyZSwgSSdsbCBqdXN0IG9taXQgaXQgZW50aXJlbHkgYW5kIHNlZSB3aGF0IGhhcHBlbnMuIEkgY291bGQgbWF5YmUgdHJ5IHRvIHN1YnN0aXR1dGUgaXQgd2l0aCBgUzM5MGAsIGJ1dCB0aGF0J3MgdGhlICphcmNoaXRlY3R1cmUqIGFuZCBub3QgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGl0c2VsZi4gSXQgd291bGRuJ3Qgd29yay5cblxuQWxyaWdodCwgSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYWdhaW4gd2l0aG91dCBgVkZJT19BUGAgYW5kIHNlZSBpZiB0aGF0IHJlc29sdmVzIHRoZSBpc3N1ZS4gVGhhdCdzIHRoZSBtb3N0IGxvZ2ljYWwgcGF0aCBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ1NSwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTc6NDA6MjMuMzkyMTMxMzM5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX2FwX21kZXZfcHJvYmVcIixcbiAgICBcInZmaW9fYXBfb25fY2ZnX2NoYW5nZWRcIixcbiAgICBcInZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tpbmcgbG9naWMgYW5kIGJpdG1hcCBvcGVyYXRpb25zIGluIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBtZWRpYXRlZCBkZXZpY2UgZHJpdmVyLiBJdCBmaXhlcyBsb2NrIG9yZGVyaW5nIGJldHdlZW4gYG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2tgLCBgbWF0cml4X2Rldi1cXHUwMDNlZ3Vlc3RzX2xvY2tgLCBhbmQgYG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm0tXFx1MDAzZWxvY2tgIHRvIHByZXZlbnQgbG9ja2RlcCBzcGxhdHMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3MgZHVyaW5nIG1kZXYgcHJvYmUsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYW5kIGhvdHBsdWcgZXZlbnRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRyaXZlciBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3lzZnMgbWRldiBjcmVhdGlvbiBhbmQgQVAgYnVzIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fYXBfbWRldl9wcm9iZVwiLFxuICAgIFwidmZpb19hcF9vbl9jZmdfY2hhbmdlZFwiLFxuICAgIFwidmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBsb2dpYyBhbmQgYml0bWFwIG9wZXJhdGlvbnMgaW4gdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIG1lZGlhdGVkIGRldmljZSBkcml2ZXIuIEl0IGZpeGVzIGxvY2sgb3JkZXJpbmcgYmV0d2VlbiBgbWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9ja2AsIGBtYXRyaXhfZGV2LVxcdTAwM2VndWVzdHNfbG9ja2AsIGFuZCBgbWF0cml4X21kZXYtXFx1MDAzZWt2bS1cXHUwMDNlbG9ja2AgdG8gcHJldmVudCBsb2NrZGVwIHNwbGF0cyBhbmQgcG90ZW50aWFsIGRlYWRsb2NrcyBkdXJpbmcgbWRldiBwcm9iZSwgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBhbmQgaG90cGx1ZyBldmVudHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZHJpdmVyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzeXNmcyBtZGV2IGNyZWF0aW9uIGFuZCBBUCBidXMgY29uZmlndXJhdGlvbiBjYWxsYmFja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjQwOjIzLjM5MjE2MjI1OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjE5MTE4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxNzo0MDoyMy4zOTI2MDAyMDlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ0MjE0NjkyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAobG9jayBvcmRlcmluZywgbWlzc2luZyBsb2NrcywgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9uIGBtYXRyaXhfbWRldi1cXHUwMDNla3ZtYCkgaW4gdGhlIHMzOTAgdmZpb19hcCBkcml2ZXIuIEl0IGFsc28gZml4ZXMgYSBtaW5vciBsb2dpYyBidWcgd2l0aCBgZG9fcmVtb3ZlYCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MWQ2NTM2MmU2OTEyMzJjNGRkY2M2M2UwOTNmMzQxMmI1ZTE1OGRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAxNzozNzo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggNDRiM2ExZGNjMWIzNi4uOWM3MjU3YzE3OWE3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtODAzLDkgKzgwMyw5IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Byb2JlKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldilcbiBcdG1hdHJpeF9tZGV2LVx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcbiBcdG1hdHJpeF9tZGV2LVx1MDAzZWNmZ19jaGdfdHJpZ2dlciA9IE5VTEw7XG4gXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWRldi1cdTAwM2VkZXYsIG1hdHJpeF9tZGV2KTtcbi1cdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VndWVzdHNfbG9jayk7XG4gXHRsaXN0X2FkZChcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vub2RlLCBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfbGlzdCk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcdHJldHVybiAwO1xuIFxuIGVycl9wdXRfdmRldjpcbkBAIC0yNjAzLDI4ICsyNjAzLDM1IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKHVuc2lnbmVkIGxvbmcgKmFwX3JlbW92ZSxcbiBcdERFQ0xBUkVfQklUTUFQKGFwcmVtLCBBUF9ERVZJQ0VTKTtcbiBcdERFQ0xBUkVfQklUTUFQKGFxcmVtLCBBUF9ET01BSU5TKTtcbiBcdERFQ0xBUkVfQklUTUFQKGNkcmVtLCBBUF9ET01BSU5TKTtcbi1cdGludCBkb19yZW1vdmUgPSAwO1xuK1x0aW50IGRvX3JlbW92ZTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbWRldnNfbG9jayBtdXN0IGJlIGhlbGQgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gbWF0cml4X21kZXYsXG4rXHRcdCAqIGFuZCBrdm0tXHUwMDNlbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSBtZGV2c19sb2NrIHRvIHNhdGlzZnkgdGhlIGxvY2tcbitcdFx0ICogb3JkZXJpbmcgcmVxdWlyZW1lbnQgYW5kIHByZXZlbnQgYSBsb2NrZGVwIHNwbGF0LlxuK1x0XHQgKi9cbitcdFx0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWt2bSlcbitcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFxuLVx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcHJlbSwgYXBfcmVtb3ZlLFxuLVx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sXG4tXHRcdFx0XHRcdCAgQVBfREVWSUNFUyk7XG4rXHRcdGRvX3JlbW92ZSA9IGJpdG1hcF9hbmQoYXByZW0sIGFwX3JlbW92ZSxcbitcdFx0XHRcdCAgICAgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXBtLFxuK1x0XHRcdFx0ICAgICAgIEFQX0RFVklDRVMpO1xuIFx0XHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZChhcXJlbSwgYXFfcmVtb3ZlLFxuIFx0XHRcdFx0XHQgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sXG4gXHRcdFx0XHRcdCAgQVBfRE9NQUlOUyk7XG4tXHRcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLCBjZF9yZW1vdmUsXG4tXHRcdFx0XHRcdCAgICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbi1cdFx0XHRcdFx0ICAgICBBUF9ET01BSU5TKTtcbitcdFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmQoY2RyZW0sIGNkX3JlbW92ZSxcbitcdFx0XHRcdFx0bWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSxcbitcdFx0XHRcdFx0QVBfRE9NQUlOUyk7XG4gXG4gXHRcdGlmIChkb19yZW1vdmUpXG4gXHRcdFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfY2ZnKG1hdHJpeF9tZGV2LCBhcHJlbSwgYXFyZW0sXG4gXHRcdFx0XHRcdFx0ICAgIGNkcmVtKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2Vrdm0tXHUwMDNlbG9jayk7XG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjc0OSwxMiArMjc1NiwyMCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuIFx0dmZpb19hcF9maWx0ZXJfYXBpZF9ieV9xdHlwZShhcG1fYWRkLCBhcW1fYWRkKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCBpbiBvcmRlciB0byBhY2Nlc3MgZmllbGRzXG4rXHRcdCAqIHdpdGhpbiBtYXRyaXhfbWRldlxuK1x0XHQgKi9cbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuK1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFwbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFwbSwgYXBtX2FkZCwgQVBfREVWSUNFUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xuK1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjgyMSw5ICsyODM2LDYgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuIFx0REVDTEFSRV9CSVRNQVAoYXBtX2ZpbHRlcmVkLCBBUF9ERVZJQ0VTKTtcbiBcdGJvb2wgZmlsdGVyX2RvbWFpbnMsIGZpbHRlcl9hZGFwdGVycywgZmlsdGVyX2Nkb21zLCBkb19ob3RwbHVnID0gZmFsc2U7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbi1cdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbi1cbiBcdGZpbHRlcl9hZGFwdGVycyA9IGJpdG1hcF9pbnRlcnNlY3RzKG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcG0sXG4gXHRcdFx0XHRcdCAgICBtYXRyaXhfbWRldi1cdTAwM2VhcG1fYWRkLCBBUF9ERVZJQ0VTKTtcbiBcdGZpbHRlcl9kb21haW5zID0gYml0bWFwX2ludGVyc2VjdHMobWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFxbSxcbkBAIC0yODQxLDkgKzI4NTMsNiBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3BsdWdfY2ZnKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG4gXHRcdHZmaW9fYXBfbWRldl91cGRhdGVfZ3Vlc3RfYXBjYihtYXRyaXhfbWRldik7XG4gXG4gXHRyZXNldF9xdWV1ZXNfZm9yX2FwaWRzKG1hdHJpeF9tZGV2LCBhcG1fZmlsdGVyZWQpO1xuLVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuIH1cbiBcbiB2b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbkBAIC0yODU0LDE1ICsyODYzLDI5IEBAIHZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkobWF0cml4X21kZXYsIFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl9saXN0LCBub2RlKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBtZGV2c19sb2NrIG11c3QgYmUgaGVsZCB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiBtYXRyaXhfbWRldixcbitcdFx0ICogYW5kIGt2bS1cdTAwM2Vsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIG1kZXZzX2xvY2sgdG8gc2F0aXNmeSB0aGUgbG9ja1xuK1x0XHQgKiBvcmRlcmluZyByZXF1aXJlbWVudCBhbmQgcHJldmVudCBhIGxvY2tkZXAgc3BsYXQuXG4rXHRcdCAqL1xuK1x0XHRpZiAobWF0cml4X21kZXYtXHUwMDNla3ZtKVxuK1x0XHRcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X21kZXYtXHUwMDNla3ZtLVx1MDAzZWxvY2spO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXG4gXHRcdGlmIChiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgQVBfREVWSUNFUykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCwgQVBfRE9NQUlOUykgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBiaXRtYXBfZW1wdHkobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCwgQVBfRE9NQUlOUykpXG4tXHRcdFx0Y29udGludWU7XG4rXHRcdFx0Z290byBkb191bmxvY2s7XG4gXG4gXHRcdHZmaW9fYXBfbWRldl9ob3RfcGx1Z19jZmcobWF0cml4X21kZXYpO1xuIFx0XHRiaXRtYXBfY2xlYXIobWF0cml4X21kZXYtXHUwMDNlYXBtX2FkZCwgMCwgQVBfREVWSUNFUyk7XG4gXHRcdGJpdG1hcF9jbGVhcihtYXRyaXhfbWRldi1cdTAwM2VhcW1fYWRkLCAwLCBBUF9ET01BSU5TKTtcbiBcdFx0Yml0bWFwX2NsZWFyKG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsIDAsIEFQX0RPTUFJTlMpO1xuK1xuK2RvX3VubG9jazpcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHRcdGlmIChtYXRyaXhfbWRldi1cdTAwM2Vrdm0pXG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZWt2bS1cdTAwM2Vsb2NrKTtcbiBcdH1cbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZWd1ZXN0c19sb2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjQwOjIzLjM5MjYwMTA5OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQyMTQ0NTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGxlYW5pbmcgdG93YXJkcyBcIm5vLFwiIGJ1dCBsZXQncyBjb25maXJtLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIFByaW1hcmlseSwgaXQncyBhIGxvY2stcmVsYXRlZCByZXdvcmssIHNwZWNpZmljYWxseSBjaGFuZ2luZyB3aGVyZSBhbmQgd2hlbiB3ZSdyZSBob2xkaW5nIG11dGV4ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgbWF0cml4X2RldmAgYW5kIGBtYXRyaXhfbWRldmAgc3RydWN0dXJlcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBga3ZtYCBmaWVsZC5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBtb3ZpbmcgbG9jayBhY3F1aXNpdGlvbnMgYXJvdW5kIGluIGZ1bmN0aW9ucyBsaWtlIGB2ZmlvX2FwX21kZXZfcHJvYmVgLCBgdmZpb19hcF9tZGV2X2NmZ19yZW1vdmVgLCBgdmZpb19hcF9tZGV2X2NmZ19hZGRgLCBgdmZpb19hcF9tZGV2X2hvdF9wbHVnX2NmZ2AsIGFuZCBgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlYC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZHJlc3NpbmcgZWl0aGVyIGxvY2tkZXAgc3BsYXRzLCBsb2NrIG9yZGVyaW5nIGlzc3VlcywgcG90ZW50aWFsIG1pc3NpbmcgbG9ja3MsIG9yIHBvc3NpYmxlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgd2hlbiBgbWF0cml4X21kZXYtXHUwMDNla3ZtYCBpcyBhY2Nlc3NlZC4gVGhlcmUncyBhbHNvIGEgc3VidGxlIGJ1ZyBmaXggaW4gYHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlYCByZWdhcmRpbmcgdGhlIGBkb19yZW1vdmVgIHZhcmlhYmxlIOKAkyBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSB1c2Ugb2YgdGhlIGBiaXRtYXBfYW5kKClgIG9wZXJhdGlvbiBhcmUgYmVpbmcgY29ycmVjdGVkLiBOb3RoaW5nIHRoZXJlIHN1Z2dlc3RzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IHNlY3VyaXR5IHZlY3RvcnMuXG5cbkNydWNpYWxseSwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmUsIEknbSBub3Qgc2VlaW5nIGFueXRoaW5nIHRoYXQgc2NyZWFtcyBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuXCIgVGhlIGNvZGUgbW9kaWZpY2F0aW9uIG9uIGBkb19yZW1vdmVgIChjaGFuZ2luZyBgaW50IGRvX3JlbW92ZSA9IDA7YCB0byBgaW50IGRvX3JlbW92ZTtgIGFuZCB0aGVuIHByb3Blcmx5IGluaXRpYWxpemluZyBpdCBiZWZvcmUgdXNlKSByZWluZm9yY2VzIHRoaXMuIFRoZSB2YXJpYWJsZSBpcyBkZWZpbml0ZWx5IGluaXRpYWxpemVkIGJlZm9yZSBpdHMgdXNlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBtZW1vcnkgYWxsb2NhdGlvbnMgb3Igc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGV4cG9zdXJlLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uY2x1ZGluZyB0aGF0IHRoaXMgcGF0Y2ggaXNuJ3QgbGlrZWx5IHRvIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UncmUgbG9va2luZyBhdCBsb2NrLXJlbGF0ZWQgYnVncywgYW5kIHRob3NlIGFyZSBnb2luZyB0byBiZSBuYWlsZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gZm9yIHRoaXMgcGF0Y2ggc2VlbXMgdW5uZWNlc3NhcnkuIExldCBtZSBqdXN0IGFydGljdWxhdGUgdGhhdCByZWFzb25pbmcgY29uY2lzZWx5IGluIGEgY29tbWVudC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzk2LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE3OjQwOjM3LjgxNDA1MTMxN1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvY2tpbmcgaXNzdWVzIChsb2NrIG9yZGVyaW5nLCBtaXNzaW5nIGxvY2tzLCBhbmQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb24gYG1hdHJpeF9tZGV2LVxcdTAwM2Vrdm1gKSBpbiB0aGUgczM5MCB2ZmlvX2FwIGRyaXZlci4gSXQgYWxzbyBmaXhlcyBhIG1pbm9yIGxvZ2ljIGJ1ZyB3aXRoIGBkb19yZW1vdmVgIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsb2NraW5nIGlzc3VlcyAobG9jayBvcmRlcmluZywgbWlzc2luZyBsb2NrcywgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9uIGBtYXRyaXhfbWRldi1cXHUwMDNla3ZtYCkgaW4gdGhlIHMzOTAgdmZpb19hcCBkcml2ZXIuIEl0IGFsc28gZml4ZXMgYSBtaW5vciBsb2dpYyBidWcgd2l0aCBgZG9fcmVtb3ZlYCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowtf4dd[1] Phase: Succeeded StartedAt: 2026-08-08 17:40:49 +0000 UTC FinishedAt: 2026-08-08 17:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-08 17:40:49 +0000 UTC FinishedAt: 2026-08-08 17:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2] Phase: Succeeded StartedAt: 2026-08-08 17:40:49 +0000 UTC FinishedAt: 2026-08-08 18:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-08 17:40:49 +0000 UTC FinishedAt: 2026-08-08 18:19:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-08 17:40:49 +0000 UTC FinishedAt: 2026-08-08 17:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-08 17:40:49 +0000 UTC FinishedAt: 2026-08-08 17:40:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowtf4dd/series-workflowtf4dd-convert-artifact-4151830970/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-08 17:40:59 +0000 UTC FinishedAt: 2026-08-08 17:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-08 17:40:59 +0000 UTC FinishedAt: 2026-08-08 17:57:38 +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:*fcf4522a-452c-4565-842d-b8ea94234c91,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-workflowtf4dd/series-workflowtf4dd-convert-artifact-4151830970/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": "8a9a1c6e-e995-46af-87fc-6daf210058f7", "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-workflowtf4dd/series-workflowtf4dd-build-action-833953640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-08 17:40:59 +0000 UTC FinishedAt: 2026-08-08 17:57: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:*fcf4522a-452c-4565-842d-b8ea94234c91,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-workflowtf4dd/series-workflowtf4dd-convert-artifact-4151830970/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": "8a9a1c6e-e995-46af-87fc-6daf210058f7", "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-workflowtf4dd/series-workflowtf4dd-build-action-833953640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-08 17:57:38 +0000 UTC FinishedAt: 2026-08-08 17:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-08 17:57:38 +0000 UTC FinishedAt: 2026-08-08 17:57:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-08 17:57:38 +0000 UTC FinishedAt: 2026-08-08 17:57:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-08 17:57:38 +0000 UTC FinishedAt: 2026-08-08 17:57:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowtf4dd/series-workflowtf4dd-convert-artifact-380607253/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-08 17:57:48 +0000 UTC FinishedAt: 2026-08-08 17:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-08 17:57:48 +0000 UTC FinishedAt: 2026-08-08 17:59:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a9a1c6e-e995-46af-87fc-6daf210058f7,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-workflowtf4dd/series-workflowtf4dd-build-action-833953640/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-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-08 17:59:51 +0000 UTC FinishedAt: 2026-08-08 17:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-08 17:59:51 +0000 UTC FinishedAt: 2026-08-08 17:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-08 17:59:51 +0000 UTC FinishedAt: 2026-08-08 18:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-08 17:59:51 +0000 UTC FinishedAt: 2026-08-08 18:16:05 +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:*fcf4522a-452c-4565-842d-b8ea94234c91,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-workflowtf4dd/series-workflowtf4dd-convert-artifact-380607253/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": "601120e3-2a85-4827-a121-a6de37aa1436", "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-workflowtf4dd/series-workflowtf4dd-build-action-494813601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-08 17:59:51 +0000 UTC FinishedAt: 2026-08-08 18:15: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:*fcf4522a-452c-4565-842d-b8ea94234c91,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-workflowtf4dd/series-workflowtf4dd-convert-artifact-380607253/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": "601120e3-2a85-4827-a121-a6de37aa1436", "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-workflowtf4dd/series-workflowtf4dd-build-action-494813601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-08 18:16:05 +0000 UTC FinishedAt: 2026-08-08 18:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-08 18:16:05 +0000 UTC FinishedAt: 2026-08-08 18:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-08 18:16:05 +0000 UTC FinishedAt: 2026-08-08 18:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-08 18:16:05 +0000 UTC FinishedAt: 2026-08-08 18:18:04 +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:*601120e3-2a85-4827-a121-a6de37aa1436,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-workflowtf4dd/series-workflowtf4dd-build-action-494813601/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-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-08 18:18:09 +0000 UTC FinishedAt: 2026-08-08 18:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-08 18:18:09 +0000 UTC FinishedAt: 2026-08-08 18:19:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"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:*8a9a1c6e-e995-46af-87fc-6daf210058f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*601120e3-2a85-4827-a121-a6de37aa1436,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-workflowtf4dd/series-workflowtf4dd-build-action-833953640/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-workflowtf4dd/series-workflowtf4dd-build-action-494813601/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-08 18:18:09 +0000 UTC FinishedAt: 2026-08-08 18:18:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-08 18:18:09 +0000 UTC FinishedAt: 2026-08-08 18:18:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"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-workflowtf4dd/series-workflowtf4dd-convert-artifact-2687857402/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-08 18:18:09 +0000 UTC FinishedAt: 2026-08-08 18:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-08 18:18:09 +0000 UTC FinishedAt: 2026-08-08 18:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-08 18:18:10 +0000 UTC FinishedAt: 2026-08-08 18:18:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-08 18:18:20 +0000 UTC FinishedAt: 2026-08-08 18:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtf4dd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_ap_mdev_probe","vfio_ap_on_cfg_changed","vfio_ap_on_scan_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a204badd8432f93b7e862e7dac6db0fe3d65f370","config_name":"upstream-apparmor-kasan.config","series_id":"2065e4b5-e773-4125-bb58-4d7c727aa7ac","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-08 18:18:20 +0000 UTC FinishedAt: 2026-08-08 18:19:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a9a1c6e-e995-46af-87fc-6daf210058f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*601120e3-2a85-4827-a121-a6de37aa1436,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-workflowtf4dd/series-workflowtf4dd-build-action-833953640/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-workflowtf4dd/series-workflowtf4dd-build-action-494813601/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-workflowtf4dd/series-workflowtf4dd-convert-artifact-2687857402/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,}