Name: series-workflowrlsw2 Phase: Succeeded StartedAt: 2026-07-31 08:36:30 +0000 UTC FinishedAt: 2026-07-31 13:00:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[0] Phase: Succeeded StartedAt: 2026-07-31 08:36:30 +0000 UTC FinishedAt: 2026-07-31 09:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 08:36:30 +0000 UTC FinishedAt: 2026-07-31 09:03:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "10e04ab3f0bf481bc01982e4301b9f7475a7f7d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_LZ4", "ZRAM_BACKEND_LZ4HC", "ZRAM_BACKEND_ZSTD", "ZRAM_BACKEND_DEFLATE", "ZRAM_BACKEND_842", "ZRAM_BACKEND_LZO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "10e04ab3f0bf481bc01982e4301b9f7475a7f7d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_LZ4", "ZRAM_BACKEND_LZ4HC", "ZRAM_BACKEND_ZSTD", "ZRAM_BACKEND_DEFLATE", "ZRAM_BACKEND_842", "ZRAM_BACKEND_LZO" ], "series_id": "e9c84e25-dd2f-4b60-9024-7283f1273b59" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "zcomp_validate_params", "algorithm_params_store", "__comp_algorithm_store", "zcomp_create" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNCYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFo0SEMmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX1pTVEQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0RFRkxBVEUmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EXzg0MiYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFpPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emNvbXBfdmFsaWRhdGVfcGFyYW1zJiMzNDssCiAgICAmIzM0O2FsZ29yaXRobV9wYXJhbXNfc3RvcmUmIzM0OywKICAgICYjMzQ7X19jb21wX2FsZ29yaXRobV9zdG9yZSYjMzQ7LAogICAgJiMzNDt6Y29tcF9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB6cmFtIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgKGxldmVsIGFuZCBkaWN0aW9uYXJ5KSBhbmQgcmVzZXRzIHBhcmFtZXRlcnMgd2hlbiB0aGUgYWxnb3JpdGhtIGlzIGNoYW5nZWQuIEl0IG1vZGlmaWVzIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyBhbmQgemNvbXAgYmFja2VuZCBvcHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHpyYW0gc3lzZnMgYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZlMGQ5YTE1ODA2NGU4Y2ZhMTEyY2VhNGRlZWE5MzAyZWQ3NDI2NTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwOTowMTo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jXG5pbmRleCAxMGQ5ZDVjNjBmNTMxLi5kNzk2ZWJkYTFmYTBkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jXG5AQCAtNTcsNSAmIzQzOzU3LDYgQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MiA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBkZXN0cm95Xzg0MixcbiBcdC5zZXR1cF9wYXJhbXNcdD0gc2V0dXBfcGFyYW1zXzg0MixcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSByZWxlYXNlX3BhcmFtc184NDIsXG4mIzQzO1x0LmNhcHNcdFx0PSAwLFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDs4NDJcJiMzNDssXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbmluZGV4IGY5MmE1MmE3MjBkMWUuLmNlZGMzZGFhZDMzYWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xuQEAgLTE0NCw1ICYjNDM7MTQ0LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGUgPSB7XG4gXHQuZGVzdHJveV9jdHhcdD0gZGVmbGF0ZV9kZXN0cm95LFxuIFx0LnNldHVwX3BhcmFtc1x0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSBkZWZsYXRlX3JlbGVhc2VfcGFyYW1zLFxuJiM0MztcdC5jYXBzXHRcdD0gWkNPTVBfQ0FQX0xFVkVMLFxuJiM0MztcdC5sZXZlbF9taW5cdD0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLFxuJiM0MztcdC5sZXZlbF9tYXhcdD0gWl9CRVNUX0NPTVBSRVNTSU9OLFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDtkZWZsYXRlXCYjMzQ7LFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uYmQxZTVjYTRkMTM0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuQEAgLTE0Niw1ICYjNDM7MTQ2LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NCA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBsejRfZGVzdHJveSxcbiBcdC5zZXR1cF9wYXJhbXNcdD0gbHo0X3NldHVwX3BhcmFtcyxcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSBsejRfcmVsZWFzZV9wYXJhbXMsXG4mIzQzO1x0LmNhcHNcdFx0PSBaQ09NUF9DQVBfRElDVCB8IFpDT01QX0NBUF9MRVZFTCxcbiYjNDM7XHQubGV2ZWxfbWluXHQ9IExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVCxcbiYjNDM7XHQubGV2ZWxfbWF4XHQ9IDY1NTM1LFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDtsejRcJiMzNDssXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuY1xuaW5kZXggZjZhMzM2YWNmZTIwMi4uMGUwZDdjNjhhN2Q0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbkBAIC0xMjQsNSAmIzQzOzEyNCw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejRoYyA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBsejRoY19kZXN0cm95LFxuIFx0LnNldHVwX3BhcmFtc1x0PSBsejRoY19zZXR1cF9wYXJhbXMsXG4gXHQucmVsZWFzZV9wYXJhbXNcdD0gbHo0aGNfcmVsZWFzZV9wYXJhbXMsXG4mIzQzO1x0LmNhcHNcdFx0PSBaQ09NUF9DQVBfRElDVCB8IFpDT01QX0NBUF9MRVZFTCxcbiYjNDM7XHQubGV2ZWxfbWluXHQ9IExaNEhDX01JTl9DTEVWRUwsXG4mIzQzO1x0LmxldmVsX21heFx0PSBMWjRIQ19NQVhfQ0xFVkVMLFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDtsejRoY1wmIzM0OyxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbmluZGV4IDRjOTA2YmVhYWU2YjMuLjk2NWYwMDdlMmNhODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbkBAIC01NSw1ICYjNDM7NTUsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IGx6b19kZXN0cm95LFxuIFx0LnNldHVwX3BhcmFtc1x0PSBsem9fc2V0dXBfcGFyYW1zLFxuIFx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6b19yZWxlYXNlX3BhcmFtcyxcbiYjNDM7XHQuY2Fwc1x0XHQ9IDAsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O2x6b1wmIzM0OyxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbmluZGV4IDEwNjQwYzk2Y2JmY2EuLjc1N2I0NTk4YmUwMzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbkBAIC01NSw1ICYjNDM7NTUsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IGx6b3JsZV9kZXN0cm95LFxuIFx0LnNldHVwX3BhcmFtc1x0PSBsem9ybGVfc2V0dXBfcGFyYW1zLFxuIFx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6b3JsZV9yZWxlYXNlX3BhcmFtcyxcbiYjNDM7XHQuY2Fwc1x0XHQ9IDAsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O2x6by1ybGVcJiMzNDssXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbmluZGV4IGQwMGI1NDgwNTZkYzIuLjgwMWVlOGVlNGJhNjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuY1xuQEAgLTYwLDYgJiM0Mzs2MCwxMSBAQCBzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcdHBhcmFtcy1cdTAwM2VkcnZfZGF0YSA9IHpwO1xuIFx0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxuIFx0XHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSB6c3RkX2RlZmF1bHRfY2xldmVsKCk7XG4mIzQzO1x0ZWxzZSBpZiAocGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzYyAtKGludClaU1REX1RBUkdFVExFTkdUSF9NQVggfHxcbiYjNDM7XHRcdCBwYXJhbXMtXHUwMDNlbGV2ZWwgXHUwMDNlIHpzdGRfbWF4X2NsZXZlbCgpKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7enN0ZDogaW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCAlZFxcblwmIzM0OywgcGFyYW1zLVx1MDAzZWxldmVsKTtcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1x0fVxuIFxuIFx0enAtXHUwMDNlY3BybSA9IHpzdGRfZ2V0X3BhcmFtcyhwYXJhbXMtXHUwMDNlbGV2ZWwsIFBBR0VfU0laRSk7XG4gXG5AQCAtMTYxLDcgJiM0MzsxNjYsNiBAQCBzdGF0aWMgaW50IHpzdGRfY3JlYXRlKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyb3I6XG4tXHR6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7XG4gXHR6c3RkX2Rlc3Ryb3koY3R4KTtcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbkBAIC0yMTMsNSAmIzQzOzIxNyw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IHpzdGRfZGVzdHJveSxcbiBcdC5zZXR1cF9wYXJhbXNcdD0genN0ZF9zZXR1cF9wYXJhbXMsXG4gXHQucmVsZWFzZV9wYXJhbXNcdD0genN0ZF9yZWxlYXNlX3BhcmFtcyxcbiYjNDM7XHQuY2Fwc1x0XHQ9IFpDT01QX0NBUF9ESUNUIHwgWkNPTVBfQ0FQX0xFVkVMLFxuJiM0MztcdC5sZXZlbF9taW5cdD0gKGludCktWlNURF9UQVJHRVRMRU5HVEhfTUFYLFxuJiM0MztcdC5sZXZlbF9tYXhcdD0gLTEsXHQvKiB2YWxpZGF0ZWQgYnkgenN0ZF9zZXR1cF9wYXJhbXMoKSAqL1xuIFx0Lm5hbWVcdFx0PSBcJiMzNDt6c3RkXCYjMzQ7LFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuaW5kZXggOTc0YzQ2OTE4ODdlNi4uMTQ5ZWZmNDU5MGUxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuQEAgLTk0LDYgJiM0Mzs5NCwzMyBAQCBjb25zdCBjaGFyICp6Y29tcF9sb29rdXBfYmFja2VuZF9uYW1lKGNvbnN0IGNoYXIgKmNvbXApXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4mIzQzO2ludCB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoY29uc3QgY2hhciAqY29tcCwgczMyIGxldmVsLCBjb25zdCBjaGFyICpkaWN0X3BhdGgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemNvbXBfb3BzICpiYWNrZW5kID0gbG9va3VwX2JhY2tlbmRfb3BzKGNvbXApO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJhY2tlbmQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRpY3RfcGF0aCBcdTAwMjZcdTAwMjYgIShiYWNrZW5kLVx1MDAzZWNhcHMgXHUwMDI2IFpDT01QX0NBUF9ESUNUKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O3pyYW06ICVzIGRvZXMgbm90IHN1cHBvcnQgZGljdGlvbmFyeVxcblwmIzM0OywgY29tcCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuJiM0MztcdFx0aWYgKCEoYmFja2VuZC1cdTAwM2VjYXBzIFx1MDAyNiBaQ09NUF9DQVBfTEVWRUwpKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDt6cmFtOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGxldmVsXFxuXCYjMzQ7LCBjb21wKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogbGV2ZWxfbWF4ID09IC0xIG1lYW5zIHZhbGlkYXRlIGluIC5zZXR1cF9wYXJhbXMoKSAqL1xuJiM0MztcdFx0aWYgKGJhY2tlbmQtXHUwMDNlbGV2ZWxfbWF4IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAobGV2ZWwgXHUwMDNjIGJhY2tlbmQtXHUwMDNlbGV2ZWxfbWluIHx8IGxldmVsIFx1MDAzZSBiYWNrZW5kLVx1MDAzZWxldmVsX21heCkpIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O3pyYW06IGludmFsaWQgbGV2ZWwgJWQgZm9yICVzXFxuXCYjMzQ7LCBsZXZlbCwgY29tcCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBzaG93IGF2YWlsYWJsZSBjb21wcmVzc29ycyAqL1xuIHNzaXplX3QgemNvbXBfYXZhaWxhYmxlX3Nob3coY29uc3QgY2hhciAqY29tcCwgY2hhciAqYnVmLCBzc2l6ZV90IGF0KVxuIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaCBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG5pbmRleCA4MWEwZjNmNmZmNDg3Li4zNjYyNTAwNTBkNGFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG5AQCAtNyw2ICYjNDM7Nyw5IEBAXG4gXG4gI2RlZmluZSBaQ09NUF9QQVJBTV9OT1RfU0VUXHRJTlRfTUlOXG4gXG4mIzQzOyNkZWZpbmUgWkNPTVBfQ0FQX0RJQ1RcdFx0QklUKDApXHQvKiBkaWN0aW9uYXJ5IHN1cHBvcnQgKi9cbiYjNDM7I2RlZmluZSBaQ09NUF9DQVBfTEVWRUxcdFx0QklUKDEpXHQvKiBhZGp1c3RhYmxlIGNvbXByZXNzaW9uIGxldmVsICovXG4mIzQzO1xuIHN0cnVjdCBkZWZsYXRlX3BhcmFtcyB7XG4gXHRzMzIgd2luYml0cztcbiB9O1xuQEAgLTY2LDYgJiM0Mzs2OSw5IEBAIHN0cnVjdCB6Y29tcF9vcHMge1xuIFx0aW50ICgqc2V0dXBfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIFx0dm9pZCAoKnJlbGVhc2VfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIFxuJiM0MztcdHVuc2lnbmVkIGludCBjYXBzO1xuJiM0MztcdHMzMiBsZXZlbF9taW47XG4mIzQzO1x0czMyIGxldmVsX21heDtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gfTtcbiBcbkBAIC04MSw2ICYjNDM7ODcsNyBAQCBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpO1xuIGludCB6Y29tcF9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSk7XG4gc3NpemVfdCB6Y29tcF9hdmFpbGFibGVfc2hvdyhjb25zdCBjaGFyICpjb21wLCBjaGFyICpidWYsIHNzaXplX3QgYXQpO1xuIGNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XG4mIzQzO2ludCB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoY29uc3QgY2hhciAqY29tcCwgczMyIGxldmVsLCBjb25zdCBjaGFyICpkaWN0X3BhdGgpO1xuIFxuIHN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbiB2b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBhY2U2NWM1ODYwNzJiLi5iNDU4NWIzYmM1NzZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtMTY2MSw2ICYjNDM7MTY2MSw4IEBAIHN0YXRpYyB2b2lkIGNvbXBfYWxnb3JpdGhtX3NldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmFsZylcbiBcdHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dID0gYWxnO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKTtcbiYjNDM7XG4gc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmFsZztcbkBAIC0xNjgxLDYgJiM0MzsxNjgzLDcgQEAgc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxuIFx0fVxuIFxuIFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XG4mIzQzO1x0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTcwOSw4ICYjNDM7MTcxMiwxMSBAQCBzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuIFx0XHRcdFx0XHRcdElOVF9NQVgsXG4gXHRcdFx0XHRcdFx0TlVMTCxcbiBcdFx0XHRcdFx0XHRSRUFESU5HX1BPTElDWSk7XG4tXHRcdGlmIChzeiBcdTAwM2MgMClcbiYjNDM7XHRcdGlmIChzeiBcdTAwM2M9IDApIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O3pyYW06IGZhaWxlZCB0byBsb2FkIGRpY3Rpb25hcnkgJXMgKGVycj0lemQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgZGljdF9wYXRoLCBzeik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHR6cmFtLVx1MDAzZXBhcmFtc1twcmlvXS5kaWN0X3N6ID0gc3o7XG5AQCAtMTc5NCw2ICYjNDM7MTgwMCwxMyBAQCBzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoenJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10pIHtcbiYjNDM7XHRcdHJldCA9IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyh6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSwgbGV2ZWwsXG4mIzQzO1x0XHRcdFx0XHQgICAgZGljdF9wYXRoKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldCA9IGNvbXBfcGFyYW1zX3N0b3JlKHpyYW0sIHByaW8sIGxldmVsLCBkaWN0X3BhdGgsIFx1MDAyNmRlZmxhdGVfcGFyYW1zKTtcbiBcdHJldHVybiByZXQgPyByZXQgOiBsZW47XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWjQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNEhDJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9aU1REJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9ERUZMQVRFJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF84NDImIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX3ZhbGlkYXRlX3BhcmFtcyYjMzQ7LAogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O19fY29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7emNvbXBfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIChsZXZlbCBhbmQgZGljdGlvbmFyeSkgYW5kIHJlc2V0cyBwYXJhbWV0ZXJzIHdoZW4gdGhlIGFsZ29yaXRobSBpcyBjaGFuZ2VkLiBJdCBtb2RpZmllcyBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYW5kIHpjb21wIGJhY2tlbmQgb3BzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZTBkOWExNTgwNjRlOGNmYTExMmNlYTRkZWVhOTMwMmVkNzQyNjU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDk6MDE6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jCmluZGV4IDEwZDlkNWM2MGY1MzEuLmQ3OTZlYmRhMWZhMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jCkBAIC01Nyw1ICYjNDM7NTcsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyID0gewogCS5kZXN0cm95X2N0eAk9IGRlc3Ryb3lfODQyLAogCS5zZXR1cF9wYXJhbXMJPSBzZXR1cF9wYXJhbXNfODQyLAogCS5yZWxlYXNlX3BhcmFtcwk9IHJlbGVhc2VfcGFyYW1zXzg0MiwKJiM0MzsJLmNhcHMJCT0gMCwKIAkubmFtZQkJPSAmIzM0Ozg0MiYjMzQ7LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYwppbmRleCBmOTJhNTJhNzIwZDFlLi5jZWRjM2RhYWQzM2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jCkBAIC0xNDQsNSAmIzQzOzE0NCw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9kZWZsYXRlID0gewogCS5kZXN0cm95X2N0eAk9IGRlZmxhdGVfZGVzdHJveSwKIAkuc2V0dXBfcGFyYW1zCT0gZGVmbGF0ZV9zZXR1cF9wYXJhbXMsCiAJLnJlbGVhc2VfcGFyYW1zCT0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcywKJiM0MzsJLmNhcHMJCT0gWkNPTVBfQ0FQX0xFVkVMLAomIzQzOwkubGV2ZWxfbWluCT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAomIzQzOwkubGV2ZWxfbWF4CT0gWl9CRVNUX0NPTVBSRVNTSU9OLAogCS5uYW1lCQk9ICYjMzQ7ZGVmbGF0ZSYjMzQ7LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uYmQxZTVjYTRkMTM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKQEAgLTE0Niw1ICYjNDM7MTQ2LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NCA9IHsKIAkuZGVzdHJveV9jdHgJPSBsejRfZGVzdHJveSwKIAkuc2V0dXBfcGFyYW1zCT0gbHo0X3NldHVwX3BhcmFtcywKIAkucmVsZWFzZV9wYXJhbXMJPSBsejRfcmVsZWFzZV9wYXJhbXMsCiYjNDM7CS5jYXBzCQk9IFpDT01QX0NBUF9ESUNUIHwgWkNPTVBfQ0FQX0xFVkVMLAomIzQzOwkubGV2ZWxfbWluCT0gTFo0X0FDQ0VMRVJBVElPTl9ERUZBVUxULAomIzQzOwkubGV2ZWxfbWF4CT0gNjU1MzUsCiAJLm5hbWUJCT0gJiMzNDtsejQmIzM0OywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYwppbmRleCBmNmEzMzZhY2ZlMjAyLi4wZTBkN2M2OGE3ZDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMKQEAgLTEyNCw1ICYjNDM7MTI0LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NGhjID0gewogCS5kZXN0cm95X2N0eAk9IGx6NGhjX2Rlc3Ryb3ksCiAJLnNldHVwX3BhcmFtcwk9IGx6NGhjX3NldHVwX3BhcmFtcywKIAkucmVsZWFzZV9wYXJhbXMJPSBsejRoY19yZWxlYXNlX3BhcmFtcywKJiM0MzsJLmNhcHMJCT0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsCiYjNDM7CS5sZXZlbF9taW4JPSBMWjRIQ19NSU5fQ0xFVkVMLAomIzQzOwkubGV2ZWxfbWF4CT0gTFo0SENfTUFYX0NMRVZFTCwKIAkubmFtZQkJPSAmIzM0O2x6NGhjJiMzNDssCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYwppbmRleCA0YzkwNmJlYWFlNmIzLi45NjVmMDA3ZTJjYTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYwpAQCAtNTUsNSAmIzQzOzU1LDYgQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6byA9IHsKIAkuZGVzdHJveV9jdHgJPSBsem9fZGVzdHJveSwKIAkuc2V0dXBfcGFyYW1zCT0gbHpvX3NldHVwX3BhcmFtcywKIAkucmVsZWFzZV9wYXJhbXMJPSBsem9fcmVsZWFzZV9wYXJhbXMsCiYjNDM7CS5jYXBzCQk9IDAsCiAJLm5hbWUJCT0gJiMzNDtsem8mIzM0OywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jCmluZGV4IDEwNjQwYzk2Y2JmY2EuLjc1N2I0NTk4YmUwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jCkBAIC01NSw1ICYjNDM7NTUsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0gewogCS5kZXN0cm95X2N0eAk9IGx6b3JsZV9kZXN0cm95LAogCS5zZXR1cF9wYXJhbXMJPSBsem9ybGVfc2V0dXBfcGFyYW1zLAogCS5yZWxlYXNlX3BhcmFtcwk9IGx6b3JsZV9yZWxlYXNlX3BhcmFtcywKJiM0MzsJLmNhcHMJCT0gMCwKIAkubmFtZQkJPSAmIzM0O2x6by1ybGUmIzM0OywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMKaW5kZXggZDAwYjU0ODA1NmRjMi4uODAxZWU4ZWU0YmE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYwpAQCAtNjAsNiAmIzQzOzYwLDExIEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCXBhcmFtcy0mZ3Q7ZHJ2X2RhdGEgPSB6cDsKIAlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQogCQlwYXJhbXMtJmd0O2xldmVsID0genN0ZF9kZWZhdWx0X2NsZXZlbCgpOwomIzQzOwllbHNlIGlmIChwYXJhbXMtJmd0O2xldmVsICZsdDsgLShpbnQpWlNURF9UQVJHRVRMRU5HVEhfTUFYIHx8CiYjNDM7CQkgcGFyYW1zLSZndDtsZXZlbCAmZ3Q7IHpzdGRfbWF4X2NsZXZlbCgpKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDt6c3RkOiBpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXG4mIzM0OywgcGFyYW1zLSZndDtsZXZlbCk7CiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwl9CiAKIAl6cC0mZ3Q7Y3BybSA9IHpzdGRfZ2V0X3BhcmFtcyhwYXJhbXMtJmd0O2xldmVsLCBQQUdFX1NJWkUpOwogCkBAIC0xNjEsNyAmIzQzOzE2Niw2IEBAIHN0YXRpYyBpbnQgenN0ZF9jcmVhdGUoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgpCiAJcmV0dXJuIDA7CiAKIGVycm9yOgotCXpzdGRfcmVsZWFzZV9wYXJhbXMocGFyYW1zKTsKIAl6c3RkX2Rlc3Ryb3koY3R4KTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIxMyw1ICYjNDM7MjE3LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX3pzdGQgPSB7CiAJLmRlc3Ryb3lfY3R4CT0genN0ZF9kZXN0cm95LAogCS5zZXR1cF9wYXJhbXMJPSB6c3RkX3NldHVwX3BhcmFtcywKIAkucmVsZWFzZV9wYXJhbXMJPSB6c3RkX3JlbGVhc2VfcGFyYW1zLAomIzQzOwkuY2FwcwkJPSBaQ09NUF9DQVBfRElDVCB8IFpDT01QX0NBUF9MRVZFTCwKJiM0MzsJLmxldmVsX21pbgk9IChpbnQpLVpTVERfVEFSR0VUTEVOR1RIX01BWCwKJiM0MzsJLmxldmVsX21heAk9IC0xLAkvKiB2YWxpZGF0ZWQgYnkgenN0ZF9zZXR1cF9wYXJhbXMoKSAqLwogCS5uYW1lCQk9ICYjMzQ7enN0ZCYjMzQ7LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMKaW5kZXggOTc0YzQ2OTE4ODdlNi4uMTQ5ZWZmNDU5MGUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMKQEAgLTk0LDYgJiM0Mzs5NCwzMyBAQCBjb25zdCBjaGFyICp6Y29tcF9sb29rdXBfYmFja2VuZF9uYW1lKGNvbnN0IGNoYXIgKmNvbXApCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztpbnQgemNvbXBfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IGNoYXIgKmNvbXAsIHMzMiBsZXZlbCwgY29uc3QgY2hhciAqZGljdF9wYXRoKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZCA9IGxvb2t1cF9iYWNrZW5kX29wcyhjb21wKTsKJiM0MzsKJiM0MzsJaWYgKCFiYWNrZW5kKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChkaWN0X3BhdGggJmFtcDsmYW1wOyAhKGJhY2tlbmQtJmd0O2NhcHMgJmFtcDsgWkNPTVBfQ0FQX0RJQ1QpKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDt6cmFtOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGRpY3Rpb25hcnlcbiYjMzQ7LCBjb21wKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkgewomIzQzOwkJaWYgKCEoYmFja2VuZC0mZ3Q7Y2FwcyAmYW1wOyBaQ09NUF9DQVBfTEVWRUwpKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7enJhbTogJXMgZG9lcyBub3Qgc3VwcG9ydCBsZXZlbFxuJiMzNDssIGNvbXApOwomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCX0KJiM0MzsJCS8qIGxldmVsX21heCA9PSAtMSBtZWFucyB2YWxpZGF0ZSBpbiAuc2V0dXBfcGFyYW1zKCkgKi8KJiM0MzsJCWlmIChiYWNrZW5kLSZndDtsZXZlbF9tYXggJmd0Oz0gMCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGxldmVsICZsdDsgYmFja2VuZC0mZ3Q7bGV2ZWxfbWluIHx8IGxldmVsICZndDsgYmFja2VuZC0mZ3Q7bGV2ZWxfbWF4KSkgewomIzQzOwkJCXByX2VycigmIzM0O3pyYW06IGludmFsaWQgbGV2ZWwgJWQgZm9yICVzXG4mIzM0OywgbGV2ZWwsIGNvbXApOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIHNob3cgYXZhaWxhYmxlIGNvbXByZXNzb3JzICovCiBzc2l6ZV90IHpjb21wX2F2YWlsYWJsZV9zaG93KGNvbnN0IGNoYXIgKmNvbXAsIGNoYXIgKmJ1Ziwgc3NpemVfdCBhdCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKaW5kZXggODFhMGYzZjZmZjQ4Ny4uMzY2MjUwMDUwZDRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKQEAgLTcsNiAmIzQzOzcsOSBAQAogCiAjZGVmaW5lIFpDT01QX1BBUkFNX05PVF9TRVQJSU5UX01JTgogCiYjNDM7I2RlZmluZSBaQ09NUF9DQVBfRElDVAkJQklUKDApCS8qIGRpY3Rpb25hcnkgc3VwcG9ydCAqLwomIzQzOyNkZWZpbmUgWkNPTVBfQ0FQX0xFVkVMCQlCSVQoMSkJLyogYWRqdXN0YWJsZSBjb21wcmVzc2lvbiBsZXZlbCAqLwomIzQzOwogc3RydWN0IGRlZmxhdGVfcGFyYW1zIHsKIAlzMzIgd2luYml0czsKIH07CkBAIC02Niw2ICYjNDM7NjksOSBAQCBzdHJ1Y3QgemNvbXBfb3BzIHsKIAlpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7CiAJdm9pZCAoKnJlbGVhc2VfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpOwogCiYjNDM7CXVuc2lnbmVkIGludCBjYXBzOwomIzQzOwlzMzIgbGV2ZWxfbWluOwomIzQzOwlzMzIgbGV2ZWxfbWF4OwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCkBAIC04MSw2ICYjNDM7ODcsNyBAQCBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpOwogaW50IHpjb21wX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKTsKIHNzaXplX3QgemNvbXBfYXZhaWxhYmxlX3Nob3coY29uc3QgY2hhciAqY29tcCwgY2hhciAqYnVmLCBzc2l6ZV90IGF0KTsKIGNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7CiYjNDM7aW50IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBjaGFyICpjb21wLCBzMzIgbGV2ZWwsIGNvbnN0IGNoYXIgKmRpY3RfcGF0aCk7CiAKIHN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTsKIHZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwppbmRleCBhY2U2NWM1ODYwNzJiLi5iNDU4NWIzYmM1NzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwpAQCAtMTY2MSw2ICYjNDM7MTY2MSw4IEBAIHN0YXRpYyB2b2lkIGNvbXBfYWxnb3JpdGhtX3NldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmFsZykKIAl6cmFtLSZndDtjb21wX2FsZ3NbcHJpb10gPSBhbGc7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBjb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8pOwomIzQzOwogc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKQogewogCWNvbnN0IGNoYXIgKmFsZzsKQEAgLTE2ODEsNiAmIzQzOzE2ODMsNyBAQCBzdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpCiAJfQogCiAJY29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7CiYjNDM7CWNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pOwogCXJldHVybiAwOwogfQogCkBAIC0xNzA5LDggJiM0MzsxNzEyLDExIEBAIHN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsCiAJCQkJCQlJTlRfTUFYLAogCQkJCQkJTlVMTCwKIAkJCQkJCVJFQURJTkdfUE9MSUNZKTsKLQkJaWYgKHN6ICZsdDsgMCkKJiM0MzsJCWlmIChzeiAmbHQ7PSAwKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7enJhbTogZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZXJyPSV6ZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBkaWN0X3BhdGgsIHN6KTsKIAkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0KIAogCXpyYW0tJmd0O3BhcmFtc1twcmlvXS5kaWN0X3N6ID0gc3o7CkBAIC0xNzk0LDYgJiM0MzsxODAwLDEzIEBAIHN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWlmICh6cmFtLSZndDtjb21wX2FsZ3NbcHJpb10pIHsKJiM0MzsJCXJldCA9IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyh6cmFtLSZndDtjb21wX2FsZ3NbcHJpb10sIGxldmVsLAomIzQzOwkJCQkJICAgIGRpY3RfcGF0aCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBjb21wX3BhcmFtc19zdG9yZSh6cmFtLCBwcmlvLCBsZXZlbCwgZGljdF9wYXRoLCAmYW1wO2RlZmxhdGVfcGFyYW1zKTsKIAlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjIzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCBmb3IgUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvYmxvY2svenJhbS9gLCBzcGVjaWZpY2FsbHkgdGhlIHZhbGlkYXRpb24gb2YgY29tcHJlc3Npb24gcGFyYW1ldGVycy4gSXQgc2VlbXMgd2UmIzM5O3JlIGFkZGluZyBjaGVja3MgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiBkaWZmZXJlbnQgYWxnb3JpdGhtcyDigJMgdGhpbmdzIGxpa2UgTFo0LCBMWk8sIFpTVEQsIERlZmxhdGUsIHRoYXQgc29ydCBvZiB0aGluZyDigJMgZm9yIGNvbXByZXNzaW9uIGxldmVsIGFuZCBkaWN0aW9uYXJ5IHBhdGguIFNtYXJ0LiBBbHNvLCB0aGUgcGF0Y2ggaXMgcmVzZXR0aW5nIHRoZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIHdoZW4gdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyBjaGFuZ2VkLiBBbmQgSSBzZWUgdGhleSYjMzk7dmUgYWxzbyBjbGVhbmVkIHVwIGEgYHpzdGRfY3JlYXRlYCBidWcgd2hlcmUgYSBgenN0ZF9yZWxlYXNlX3BhcmFtc2AgY2FsbCB3YXMgaW4gdGhlIHdyb25nIHBsYWNlLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgKnJlYWNoYWJsZSogYW5kLCBtb3JlIGltcG9ydGFudGx5IGZvciBteSBwdXJwb3Nlcywgd29ydGggZnV6emluZz8KClpSQU0gaXRzZWxmIGlzIGEgYmxvY2sgZGV2aWNlLCBhbmQgaXTigJlzIG1lYW50IHRvIGNvbXByZXNzIGRhdGEgaW4gUkFNLCBzbyBpdCBzaG91bGQgYmUgcmVhY2hhYmxlLiBUaGF04oCZcyBnb29kLiBVc2VyIHNwYWNlIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHRocm91Z2ggc3lzZnMgYW5kIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLCBzbyB0aGVyZSYjMzk7cyBhbiBhdHRhY2sgc3VyZmFjZSB0aGVyZS4KClRoZSBwYXRjaCBtb2RpZmllcyB0aG9zZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnM6IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBhbmQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBCaW5nbyEgVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIFNvLCBJIGNhbiB0cmlnZ2VyIHRoZXNlIGNoYW5nZXMgYnkgd3JpdGluZyB0byBzeXNmcyBmaWxlcyBsaWtlIGAvc3lzL2Jsb2NrL3pyYW0wL2NvbXBfYWxnb3JpdGhtYCBvciBgL3N5cy9ibG9jay96cmFtMC9hbGdvX3BhcmFtc2Ag4oCTIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgcHJlY2lzZSBwYXRocy4gVGhhdCYjMzk7cyBob3cgSSBjYW4gZXhlcmNpc2UgdGhpcyBjb2RlLiBPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRob3NlIGV4YWN0IHN5c2ZzIGZpbGUgbG9jYXRpb25zIGFuZCB0aGVuIGJ1aWxkIGEgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MDE9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzI3LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcyODpzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjktXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXRpbGl6YXRpb24gb2YgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgb2JqZWN0IG9yIGZ1bmN0aW9uIOKAkyBkZXBlbmRpbmcgb24gaXRzIGRlZmluaXRpb24gaW4gdGhlIGNvZGViYXNlIOKAkyBpcyBiZWluZyByZWZlcmVuY2VkLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBkaXJlY3Qgc2VhcmNoIHdpdGhpbiB0aGUgcHJvamVjdCwgbGlrZWx5IHVzaW5nIG15IHByZWZlcnJlZCBJREUmIzM5O3Mgc2VhcmNoIGNhcGFiaWxpdGllcywgb3IgcG9zc2libHkgdXRpbGl6aW5nIGBncmVwYCBpZiBJIG5lZWQgbW9yZSB0YXJnZXRlZCByZXN1bHRzIGFjcm9zcyBhIGJyb2FkZXIgcmFuZ2Ugb2YgZmlsZXMgb3IgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQgdGhpcyBvYmplY3QgaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gZmluZGluZyB0aGUgZGlyZWN0IGNhbGxzIG9yIGluc3RhbmNlcyBvZiBpdCBpbiBhbnkgb3RoZXIgc291cmNlIGNvZGUgZmlsZXMuIFRoZW4sIEkgd2lsbCBzdGFydCBtYWtpbmcgc2Vuc2Ugb2YgaXRzIHB1cnBvc2UuCgpNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgaXRzIHNjb3BlIG9mIGluZmx1ZW5jZSDigJMgaXMgaXQgZ2xvYmFsLCBtb2R1bGUtc3BlY2lmaWMsIG9yIGxvY2FsPyBXaGF0IG1vZHVsZXMgaW50ZXJhY3Qgd2l0aCBpdD8gSXMgaXQgYSBkYXRhIHN0cnVjdHVyZSwgYSBmdW5jdGlvbiwgYSBjbGFzcyBpbnN0YW5jZT8gVGhlIHNwZWNpZmljIHVzZXMgd2lsbCBwcm92aWRlIGltbWVkaWF0ZSBjbHVlcyB0byBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBpbiB0aGUgc3lzdGVtLiBJIGFudGljaXBhdGUgbmVlZGluZyB0byBhbmFseXplIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgc2V0LCByZXRyaWV2ZWQsIGFuZCBtb2RpZmllZC4gVGhlIHNlYXJjaCBzaG91bGQgaWxsdW1pbmF0ZSB3aGV0aGVyIGl0JiMzOTtzIHBhcnQgb2YgYSBrZXkgY29uZmlndXJhdGlvbiBjb21wb25lbnQsIGEgY2FjaGluZyBtZWNoYW5pc20sIG9yIGEgbWVhbnMgb2YgaW50ZXItbW9kdWxlIGNvbW11bmljYXRpb24uCgpGdXJ0aGVybW9yZSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgc3Vycm91bmRpbmcgY29udGV4dDogd2hhdCBmdW5jdGlvbnMgY2FsbCBpdCwgd2hhdCB2YXJpYWJsZXMgYXJlIHBhc3NlZCB0byBvciByZXR1cm5lZCBmcm9tIGl0LCB3aGF0IHBhcnRzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiBpdCBmb3IgdGhlaXIgb3BlcmF0aW9uLiBUaGUgd2F5IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHN5c3RlbSBjb21wb25lbnRzIHdpbGwgdGVsbCBtZSB0aGUgc3lzdGVtJiMzOTtzIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MDE9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzI3LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcyODpzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjktXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoYXQ6CgoqKkludmVzdGlnYXRpbmcgYHpyYW1fZHJ2LmNgIFVzYWdlKioKClJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gYW55dGhpbmcgZWxzZSwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRob3JvdWdobHkgaW52ZXN0aWdhdGUgdGhlIHVzYWdlcyBvZiB3aGF0ZXZlciBJJiMzOTttIHdvcmtpbmcgd2l0aCB3aXRoaW4gdGhlIGB6cmFtX2Rydi5jYCBmaWxlLiBJdCYjMzk7cyBhIGtleSBjb21wb25lbnQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGludGVncmF0aW9uIGlzIGNydWNpYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBJJiMzOTttIGRlYWxpbmcgd2l0aCBpbnRlcmFjdHMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB3aG9sZSBgenJhbV9kcnYuY2AgaW1wbGVtZW50YXRpb24uIEdvdHRhIGdldCB0aGUgYmFzZWxpbmUgYmVmb3JlIEkgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxnb3JpdGhtX3BhcmFtc19zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MDE9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzI3LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcyODpzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjktXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzg3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpZ2dpbmcgaW50byB0aGUgQ29kZSYjMzk7cyBVc2FnZSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGdldHRpbmcgYSBodW5jaCBhYm91dCB0aGlzLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgaXNzdWUgaXMgc3RlbW1pbmcgZnJvbSBzb21ldGhpbmcgdGhhdCB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgdXNlZCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGl0IG1pZ2h0IGJlIGludGVncmF0ZWQgaW4gYSBtYWNybyBvZiBzb21lIHNvcnQuIFRoZSBvbmx5IHdheSB0byBmaW5kIG91dCBpcyB0byBmb2xsb3cgdGhlIHVzYWdlLiBMZXQgbWUgcXVpY2tseSB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBvZiB0aGUgZmlsZSB3aGVyZSB0aGUgY29kZSBpbiBxdWVzdGlvbiBpcyBjYWxsZWQuIExpbmUgMTcyOCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIG1hY3JvIHRvIHRyb3VibGVzaG9vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3Mjg6XHRzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbjE3Mjk6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuMTczMDpcdFx0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqYnVmLFxuMTczMTpcdFx0XHRcdFx0ICAgICAgc2l6ZV90IGxlbilcbjE3MzI6XHR7XG4xNzMzOlx0XHRzMzIgcHJpbyA9IFpSQU1fUFJJTUFSWV9DT01QLCBsZXZlbCA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XG4xNzM0Olx0XHRjaGFyICphcmdzLCAqcGFyYW0sICp2YWwsICphbGdvID0gTlVMTCwgKmRpY3RfcGF0aCA9IE5VTEw7XG4xNzM1Olx0XHRzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMgZGVmbGF0ZV9wYXJhbXM7XG4xNzM2Olx0XHRzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7XG4xNzM3Olx0XHRib29sIHByaW9fcGFyYW0gPSBmYWxzZTtcbjE3Mzg6XHRcdGludCByZXQ7XG4xNzM5Olx0XG4xNzQwOlx0XHRkZWZsYXRlX3BhcmFtcy53aW5iaXRzID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbjE3NDE6XHRcbjE3NDI6XHRcdGFyZ3MgPSBza2lwX3NwYWNlcyhidWYpO1xuMTc0MzpcdFx0d2hpbGUgKCphcmdzKSB7XG4xNzQ0Olx0XHRcdGFyZ3MgPSBuZXh0X2FyZyhhcmdzLCBcdTAwMjZwYXJhbSwgXHUwMDI2dmFsKTtcbjE3NDU6XHRcbjE3NDY6XHRcdFx0aWYgKCF2YWwgfHwgISp2YWwpXG4xNzQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzQ4Olx0XG4xNzQ5Olx0XHRcdGlmICghc3RyY21wKHBhcmFtLCBcJiMzNDtwcmlvcml0eVwmIzM0OykpIHtcbjE3NTA6XHRcdFx0XHRwcmlvX3BhcmFtID0gdHJ1ZTtcbjE3NTE6XHRcdFx0XHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXHUwMDI2cHJpbyk7XG4xNzUyOlx0XHRcdFx0aWYgKHJldClcbjE3NTM6XHRcdFx0XHRcdHJldHVybiByZXQ7XG4xNzU0Olx0XHRcdFx0Y29udGludWU7XG4xNzU1Olx0XHRcdH1cbjE3NTY6XHRcbjE3NTc6XHRcdFx0aWYgKCFzdHJjbXAocGFyYW0sIFwmIzM0O2xldmVsXCYjMzQ7KSkge1xuMTc1ODpcdFx0XHRcdHJldCA9IGtzdHJ0b2ludCh2YWwsIDEwLCBcdTAwMjZsZXZlbCk7XG4xNzU5Olx0XHRcdFx0aWYgKHJldClcbjE3NjA6XHRcdFx0XHRcdHJldHVybiByZXQ7XG4xNzYxOlx0XHRcdFx0Y29udGludWU7XG4xNzYyOlx0XHRcdH1cbjE3NjM6XHRcbjE3NjQ6XHRcdFx0aWYgKCFzdHJjbXAocGFyYW0sIFwmIzM0O2FsZ29cJiMzNDspKSB7XG4xNzY1Olx0XHRcdFx0YWxnbyA9IHZhbDtcbjE3NjY6XHRcdFx0XHRjb250aW51ZTtcbjE3Njc6XHRcdFx0fVxuMTc2ODpcdFxuMTc2OTpcdFx0XHRpZiAoIXN0cmNtcChwYXJhbSwgXCYjMzQ7ZGljdFwmIzM0OykpIHtcbjE3NzA6XHRcdFx0XHRkaWN0X3BhdGggPSB2YWw7XG4xNzcxOlx0XHRcdFx0Y29udGludWU7XG4xNzcyOlx0XHRcdH1cbjE3NzM6XHRcbjE3NzQ6XHRcdFx0aWYgKCFzdHJjbXAocGFyYW0sIFwmIzM0O2RlZmxhdGUud2luYml0c1wmIzM0OykpIHtcbjE3NzU6XHRcdFx0XHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXHUwMDI2ZGVmbGF0ZV9wYXJhbXMud2luYml0cyk7XG4xNzc2Olx0XHRcdFx0aWYgKHJldClcbjE3Nzc6XHRcdFx0XHRcdHJldHVybiByZXQ7XG4xNzc4Olx0XHRcdFx0Y29udGludWU7XG4xNzc5Olx0XHRcdH1cbjE3ODA6XHRcdH1cbjE3ODE6XHRcbjE3ODI6XHRcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZ6cmFtLVx1MDAzZWRldl9sb2NrKTtcbjE3ODM6XHRcdGlmIChpbml0X2RvbmUoenJhbSkpXG4xNzg0Olx0XHRcdHJldHVybiAtRUJVU1k7XG4xNzg1Olx0XG4xNzg2Olx0XHRpZiAocHJpb19wYXJhbSkge1xuMTc4NzpcdFx0XHRpZiAocHJpbyBcdTAwM2MgWlJBTV9QUklNQVJZX0NPTVAgfHwgcHJpbyBcdTAwM2U9IFpSQU1fTUFYX0NPTVBTKVxuMTc4ODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTc4OTpcdFx0fVxuMTc5MDpcdFxuMTc5MTpcdFx0aWYgKGFsZ28gXHUwMDI2XHUwMDI2IHByaW9fcGFyYW0pIHtcbjE3OTI6XHRcdFx0cmV0ID0gdmFsaWRhdGVfYWxnb19wcmlvcml0eSh6cmFtLCBhbGdvLCBwcmlvKTtcbjE3OTM6XHRcdFx0aWYgKHJldClcbjE3OTQ6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTc5NTpcdFx0fVxuMTc5NjpcdFxuMTc5NzpcdFx0aWYgKGFsZ28gXHUwMDI2XHUwMDI2ICFwcmlvX3BhcmFtKSB7XG4xNzk4Olx0XHRcdHByaW8gPSBsb29rdXBfYWxnb19wcmlvcml0eSh6cmFtLCBhbGdvLCBaUkFNX1BSSU1BUllfQ09NUCk7XG4xNzk5Olx0XHRcdGlmIChwcmlvIFx1MDAzYyAwKVxuMTgwMDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgwMTpcdFx0fVxuMTgwMjpcdFxuMTgwMzpcdFx0aWYgKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dKSB7XG4xODA0Olx0XHRcdHJldCA9IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyh6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSwgbGV2ZWwsXG4xODA1Olx0XHRcdFx0XHRcdCAgICBkaWN0X3BhdGgpO1xuMTgwNjpcdFx0XHRpZiAocmV0KVxuMTgwNzpcdFx0XHRcdHJldHVybiByZXQ7XG4xODA4Olx0XHR9XG4xODA5Olx0XG4xODEwOlx0XHRyZXQgPSBjb21wX3BhcmFtc19zdG9yZSh6cmFtLCBwcmlvLCBsZXZlbCwgZGljdF9wYXRoLCBcdTAwMjZkZWZsYXRlX3BhcmFtcyk7XG4xODExOlx0XHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xuMTgxMjpcdH1cbjE4MTM6XHRcbjE4MTQ6XHRzdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbjE4MTU6XHRcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuMTgxNjpcdFx0XHRcdFx0ICAgY2hhciAqYnVmKVxuMTgxNzpcdHtcbjE4MTg6XHRcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbjE4MTk6XHRcdHNzaXplX3Qgc3o7XG4xODIwOlx0XG4xODIxOlx0XHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZ6cmFtLVx1MDAzZWRldl9sb2NrKTtcbjE4MjI6XHRcdHN6ID0gemNvbXBfYXZhaWxhYmxlX3Nob3coenJhbS1cdTAwM2Vjb21wX2FsZ3NbWlJBTV9QUklNQVJZX0NPTVBdLCBidWYsIDApO1xuMTgyMzpcdFx0cmV0dXJuIHN6O1xuMTgyNDpcdH1cbjE4MjU6XHRcbjE4MjY6XHRzdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4xODI3Olx0XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3lzZnMgU3RvcmUgRnVuY3Rpb24gZm9yIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBhbmQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBJdCYjMzk7cyBtb2RpZnlpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgYGFsZ29fcGFyYW1zYCBhbmQgYGNvbXBfYWxnb3JpdGhtYCBzeXNmcyBmaWxlcy4gVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgaXMgdGhlIGZpcnN0IHJlZCBmbGFnLCBtZWFuaW5nIHN5emthbGxlciBjYW4gbGlrZWx5IGdldCBpdHMgdGVldGggaW50byB0aGVtLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgZnV6emluZy4gVGhpcyBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZvciBmdXp6aW5nLWJhc2VkIHZ1bG5lcmFiaWxpdGllcy4mIzM0OyBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgbWFrZSB0aGlzIGNvZGUgcGF0aCBhY3RpdmUuIExldCYjMzk7cyBzZWUuLi56cmFtLCB0aGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSByZWNhbGwgdGhhdCB6cmFtIGlzIGNvbmZpZ3VyZWQgYnkgYENPTkZJR19aUkFNYCwgc28gSSYjMzk7bGwgY2hlY2sgdGhlIGBkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgcG90ZW50aWFsIHByZS1jb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlJBTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjpjb25maWcgWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXHRib29sIFwmIzM0O2x6NCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7bHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjk6Y29uZmlnIFpSQU1fQkFDS0VORF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7enN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7ODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cdGRlcGVuZHMgb24gWlJBTVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTU0LVx0Ym9vbCBcJiMzNDtsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0OyBpZiAhWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7bHpvLXJsZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Njk6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7bHo0aGNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjgxOmNvbmZpZyBaUkFNX0RFRl9DT01QX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cdHN0cmluZ1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEwNzpjb25maWcgWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcJiMzNDtXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyMTpjb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cdGJvb2wgXCYjMzQ7VHJhY2sgYWNjZXNzIHRpbWUgb2YgenJhbSBlbnRyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDEtXHRib29sIFwmIzM0O0VuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlpSQU0gQmFja2VuZCBTdHJhdGVneSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBvcHRpbWl6aW5nIFpSQU0gY29tcHJlc3Npb24gYmFja2VuZHMuIEVuYWJsaW5nIGFsbCB0aGVzZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zIOKAkyBgTFo0YCwgYExaNEhDYCwgYFpTVERgLCBgREVGTEFURWAsIGA4NDJgLCBhbmQgYExaT2Ag4oCTIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIG1vZGlmeWluZyBgYmFja2VuZF84NDIuY2AsIGBiYWNrZW5kX2RlZmxhdGUuY2AsIGBiYWNrZW5kX2x6NC5jYCwgYGJhY2tlbmRfbHo0aGMuY2AsIGBiYWNrZW5kX2x6by5jYCwgYGJhY2tlbmRfbHpvcmxlLmNgLCBhbmQgYGJhY2tlbmRfenN0ZC5jYCBjb25maXJtcyB0aGF0IHdlJiMzOTtyZSBjb3ZlcmluZyBhbGwgb3VyIGJhc2VzIHdpdGggdGhlIGluY2x1ZGVkIG1vZHVsZXMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGNydWNpYWwgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZGF0ZWQgYW5kIHN0b3JlZC4gSSB3YW50IHRvIGNoZWNrOiBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCwgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAsIGBjb21wX3BhcmFtc19zdG9yZWAsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCBgenN0ZF9zZXR1cF9wYXJhbXNgLgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCBpcyB0aGUga2V5LiBBbmQgZ29vZCwgaXQmIzM5O3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2UgbmVlZCBmb3IgdGhpcy4gTm93IHRvIGNoZWNrIGl0IGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX3ZhbGlkYXRlX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTg3PWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy05Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjk3OmludCB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoY29uc3QgY2hhciAqY29tcCwgczMyIGxldmVsLCBjb25zdCBjaGFyICpkaWN0X3BhdGgpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy05OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlByaW9yaXRpemluZyBDb3ZlcmFnZSBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgYmVzdCB3YXlzIHRvIGd1aWRlIFN5emthbGxlciYjMzk7cyBmdXp6aW5nIGVmZm9ydHMgd2l0aGluIHRoaXMgY29tcHJlc3Npb24gc3Vic3lzdGVtLiBJJiMzOTt2ZSBsYW5kZWQgb24gYHpjb21wX3ZhbGlkYXRlX3BhcmFtc2AgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGEgJiMzNDtGb2N1c1N5bWJvbC4mIzM0OyBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKSSBhbHNvIGNvbnNpZGVyZWQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLCByZWFsaXppbmcgdGhhdCB0aGV5IGFyZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMuIFN5emthbGxlciBmdXp6ZXMgc3lzZnMsIG9mIGNvdXJzZSwgYnV0IGl0IGRvZXMgc28gYnkgd3JpdGluZyBkaXJlY3RseSB0byB0aGUgZmlsZXMsIG5vdCBieSBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLiBTdGlsbCwgbGlzdGluZyB0aGVtIGFzIEZvY3VzU3ltYm9scyB3b3VsZCBiZSBiZW5lZmljaWFsLCBhcyBpdCBjYW4gaGVscCBwcmlvcml0aXplIGNvZGUgY292ZXJhZ2UgaW4gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGV2ZW4gaWYgbm90IGRpcmVjdGx5IGNhbGxlZC4KCkEgcXVpY2sgbm90ZTogSSBhbHNvIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAgaXMgKnN0YXRpYyouIEhtbS4gSXQmIzM5O3Mgc3RpbGwgdXNlZnVsIGZvciBjb3ZlcmFnZSBndWlkYW5jZSBpZiBsaXN0ZWQsIGJ1dCBnZW5lcmFsbHksIEkgcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciB0aGlzIGtpbmQgb2Ygd29yay4gU28gSSB0aGluayBpdCYjMzk7cyBiZXR0ZXIgdG8gbGlzdCBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCBhbmQgdGhlbiBldmFsdWF0ZSBvdGhlciBvcHRpb25zLgoKTGV0IG1lIHRoaW5rLiBBcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgdGhhdCBhcmUgYXZhaWxhYmxlPyBBaCwgd2hhdCBhYm91dCBgemNvbXBfY3JlYXRlYD8gTm93IHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgb3B0aW9uIHRvIGludmVzdGlnYXRlLgoKTGV0JiMzOTtzIGRvIHRoaXMuIEkmIzM5O2xsIG9wZW4gdXAgYGRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jYCB0byBzZWUgd2hhdCBlbHNlIGlzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJJiMzOTttIGNvbnNpZGVyaW5nIGFsbCByZWxldmFudCBwaWVjZXMgdG8gbWF4aW1pemUgU3l6a2FsbGVyJiMzOTtzIGVmZmVjdGl2ZW5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTI1Mj12b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI1OS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjI2MDpzdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDg3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgWnN0ZCBQYXJhbWV0ZXIgU2V0dXAgaW4gYGJhY2tlbmRfenN0ZC5jYCoqCgpBbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgenN0ZF9zZXR1cF9wYXJhbXNgIHdpdGhpbiBgYmFja2VuZF96c3RkLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGF0IGZ1bmN0aW9uIHN0YXRpYz8mIzM0OyBJdCYjMzk7cyBhIGtleSBxdWVzdGlvbiwgYXMgaXQgZ292ZXJucyB0aGUgc2NvcGUgb2YgaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkLCBhbmQgYSBzdGF0aWMgZnVuY3Rpb24gc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGludGVybmFsIHRvIHRoYXQgc3BlY2lmaWMgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIGl0cyB2aXNpYmlsaXR5IGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgZ290IHN0YXRpYyBsaW5rYWdlOyB0aGF0IHdpbGwgZGljdGF0ZSBob3cgZGVlcGx5IEkgbmVlZCB0byBsb29rIGludG8gaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZS4gSXQmIzM5O2xsIGFsc28gaW5mb3JtIGhvdyBlYXNpbHkgaXQgY2FuIGJlIHJlZmFjdG9yZWQgb3IgcmV1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3RkX3NldHVwX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9Mzg9c3RhdGljIHZvaWQgenN0ZF9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUwLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjUxOnN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9MjEzPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMTctXHQuZGVzdHJveV9jdHhcdD0genN0ZF9kZXN0cm95LFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIxODpcdC5zZXR1cF9wYXJhbXNcdD0genN0ZF9zZXR1cF9wYXJhbXMsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjE5LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IHpzdGRfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIyMS1cdC5sZXZlbF9taW5cdD0gKGludCktWlNURF9UQVJHRVRMRU5HVEhfTUFYLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIyMjpcdC5sZXZlbF9tYXhcdD0gLTEsXHQvKiB2YWxpZGF0ZWQgYnkgenN0ZF9zZXR1cF9wYXJhbXMoKSAqL1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIyMy1cdC5uYW1lXHRcdD0gXCYjMzQ7enN0ZFwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYSBTdGFnbmFudCBTdGF0ZSBpbiBaUkFNKioKClJpZ2h0LCB0aGlzIGZlZWxzLi4uIHN0dWNrLiBTb21ldGhpbmcmIzM5O3Mgbm90IG1vdmluZy4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBpcyByYXJlbHkgYSBnb29kIHNpZ24gaW4gc3lzdGVtLWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNvbXByZXNzZWQgdmlydHVhbCBSQU0gY29udGV4dC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBoYW5nLCBkZWFkbG9jaywgb3IgYSBjb21wbGV0ZSBsYWNrIG9mIHJlc3BvbnNlLgoKTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYGNvbXBfcGFyYW1zX3Jlc2V0YCBmdW5jdGlvbiB3aXRoaW4gYHpyYW1fZHJ2LmNgLiBUaGF0IGZ1bmN0aW9uIGhhbmRsZXMgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgb3ZlcmFsbCBsaWZlY3ljbGUgb2YgYSBaUkFNIGRldmljZS4gSWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIGhlcmUsIG15IGd1dCBzYXlzIHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCBhIGxpa2VseSBjYXVzZS4gSXQgd291bGQgYmUgbXkgZmlyc3Qgc3RvcCBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhlcmUgYXJlIGVycm9ycyBvciBpc3N1ZXMgdGhhdCBhcmUgbm90IHByb3Blcmx5IGFjY291bnRlZCBmb3IuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSBvZiB0aGUgY29tcHJlc3Npb24gcGFyYW1ldGVycyByZXNldCBhcmUgYSByb290IGNhdXNlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wX3BhcmFtc19yZXNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2NTk9c3RhdGljIHZvaWQgY29tcF9hbGdvcml0aG1fc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYWxnKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjY0OnN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjY1LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY2Nj1zdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY4NS1cdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY4NjpcdGNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY4Ny1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2ODktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjkwOnN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2OTEte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MDE9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzA2LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcwNzpcdGNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcwOC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODA5PXN0YXRpYyB2b2lkIHpyYW1fc2xvdF9mcmVlX25vdGlmeShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MjUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODI2OnN0YXRpYyB2b2lkIHpyYW1fY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0pXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODI3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODMwLVx0Zm9yIChwcmlvID0gWlJBTV9QUklNQVJZX0NPTVA7IHByaW8gXHUwMDNjIFpSQU1fTUFYX0NPTVBTOyBwcmlvJiM0MzsmIzQzOykge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjgzMTpcdFx0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODMyLVx0fVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4MzU9c3RhdGljIHZvaWQgenJhbV9kZXN0cm95X2NvbXBzKHN0cnVjdCB6cmFtICp6cmFtKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4NTAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODUxOlx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4NTItfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwNDI9c3RhdGljIGludCB6cmFtX2FkZCh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxMDEtXHRzbnByaW50Zih6cmFtLVx1MDAzZWRpc2stXHUwMDNlZGlza19uYW1lLCAxNiwgXCYjMzQ7enJhbSVkXCYjMzQ7LCBkZXZpY2VfaWQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzEwMjpcdHpyYW1fY29tcF9wYXJhbXNfcmVzZXQoenJhbSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTAzLVx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIFpSQU1fUFJJTUFSWV9DT01QLCBkZWZhdWx0X2NvbXByZXNzb3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWlJBTSBDb2RlIGZvciBTeW1ib2wgSW5jbHVzaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGZpcnN0IHRoaW5nLCBgY29tcF9wYXJhbXNfcmVzZXRgIGlzIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgc2tpcCBpdCBmb3Igbm93LiBUaGUga2V5IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIGNoYW5nZWQgb3IgYWRkZWQgc2VlbXMgdG8gYmUgYHpjb21wX3ZhbGlkYXRlX3BhcmFtc2AuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIHRvIGJlIGluIGBGb2N1c1N5bWJvbHNgLiBBbmQgbGV0JiMzOTtzIHNlZSwgZXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgc3RhdGljLCBJIHRoaW5rIEkgc2hvdWxkIHByb2JhYmx5IGluY2x1ZGUgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAgYXMgd2VsbCwgYXMgdGhleSBhcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgc3lzZnMgd3JpdGVzIHRoYXQgdHJpZ2dlciB0aGlzIGNvZGUsIHJpZ2h0PyBBaCwgd2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCBkaWQgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNpbmNlIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCAqaXMqIGEgc3lzZnMgc3RvcmUgY2FsbGJhY2ssIGl0IGlzIHRlY2huaWNhbGx5IGFuIGVudHJ5cG9pbnQsIGV2ZW4gaWYgc3RhdGljLCBzbywgeWVhaCwgSSYjMzk7bGwgaW5jbHVkZSBpdC4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgWlJBTV9CQUNLRU5EX0xaNGAga2luZCBvZiBjb25maWdzLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIEtjb25maWcsIHRoZXJlJiMzOTtzIGBaUkFNX0JBQ0tFTkRfTFo0YCwgYFpSQU1fQkFDS0VORF9MWjRIQ2AsIGBaUkFNX0JBQ0tFTkRfWlNURGAsIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAsIGBaUkFNX0JBQ0tFTkRfODQyYCwgYW5kIGBaUkFNX0JBQ0tFTkRfTFpPYCBhbmQgb2YgY291cnNlIGBaUkFNYCBpdHNlbGYuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGBaUkFNX0JBQ0tFTkRfTFpPYCBpcyBhIGJvb2wsIHl1cCwgYm9vbC4gYFpSQU1gIGlzIHRyaXN0YXRlLiBPaywgSSYjMzk7bSBqdXN0IHF1aWNrbHkgc2VhcmNoaW5nIGZvciBhbnkgb3RoZXIgY29uZmlncy4gTGV0IG1lIGNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay96cmFtL01ha2VmaWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHR6cmFtLXlcdDo9XHR6Y29tcC5vIHpyYW1fZHJ2Lm9cbiAgIDQ6XHRcbiAgIDU6XHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9MWk8pXHRcdCYjNDM7PSBiYWNrZW5kX2x6b3JsZS5vIGJhY2tlbmRfbHpvLm9cbiAgIDY6XHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9MWjQpXHRcdCYjNDM7PSBiYWNrZW5kX2x6NC5vXG4gICA3Olx0enJhbS0kKENPTkZJR19aUkFNX0JBQ0tFTkRfTFo0SEMpXHQmIzQzOz0gYmFja2VuZF9sejRoYy5vXG4gICA4Olx0enJhbS0kKENPTkZJR19aUkFNX0JBQ0tFTkRfWlNURClcdCYjNDM7PSBiYWNrZW5kX3pzdGQub1xuICAgOTpcdHpyYW0tJChDT05GSUdfWlJBTV9CQUNLRU5EX0RFRkxBVEUpXHQmIzQzOz0gYmFja2VuZF9kZWZsYXRlLm9cbiAgMTA6XHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF84NDIpXHRcdCYjNDM7PSBiYWNrZW5kXzg0Mi5vXG4gIDExOlx0XG4gIDEyOlx0b2JqLSQoQ09ORklHX1pSQU0pXHQmIzQzOz1cdHpyYW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMzMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbiBhbmQgQ2FsbCBBbmFseXNpcyoqCgpBbHJpZ2h0LCB5ZXAsIEkmIzM5O3ZlIGp1c3QgZG91YmxlLWNoZWNrZWQgdGhvc2UgY29uZmlncyBhbmQgdGhleSBhcmUgZGVmaW5pdGVseSBjb3JyZWN0LiBObyBpc3N1ZXMgdGhlcmUuIE5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55dGhpbmcgaW4gaG93IGB6Y29tcF92YWxpZGF0ZV9wYXJhbXNgIGlzIHV0aWxpemVkLiBUaW1lIHRvIGludmVzdGlnYXRlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyB0cmFjZSB0aG9zZSBjYWxscyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIGF0dGVudGlvbi4gSXQmIzM5O3MgdGhhdCBraW5kIG9mIGRpbGlnZW50IGF0dGVudGlvbiB0byBkZXRhaWwgdGhhdCB3aWxsIGVuc3VyZSBldmVyeXRoaW5nIGlzIHJvY2sgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX3ZhbGlkYXRlX3BhcmFtcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz04Nz1jb25zdCBjaGFyICp6Y29tcF9sb29rdXBfYmFja2VuZF9uYW1lKGNvbnN0IGNoYXIgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtOTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzo5NzppbnQgemNvbXBfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IGNoYXIgKmNvbXAsIHMzMiBsZXZlbCwgY29uc3QgY2hhciAqZGljdF9wYXRoKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtOTgte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTg5PWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo5MDppbnQgemNvbXBfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IGNoYXIgKmNvbXAsIHMzMiBsZXZlbCwgY29uc3QgY2hhciAqZGljdF9wYXRoKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTkxLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3Mjg9c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgwMy1cdGlmICh6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSkge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTgwNDpcdFx0cmV0ID0gemNvbXBfdmFsaWRhdGVfcGFyYW1zKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dLCBsZXZlbCxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MDUtXHRcdFx0XHRcdCAgICBkaWN0X3BhdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4MgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgbGlrZSB5b3U6CgoqKlRhcmdldGVkIENvZGUgRXhwbG9yYXRpb24gZm9yIFBhcmFtZXRlciBWYWxpZGF0aW9uKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyBjbGVhcjogd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBhbGdvcml0aG0gcGFyYW1ldGVycyBhcmUgdmFsaWRhdGVkIGFuZCByZXNldCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBvdXIgc3lzdGVtLiBJdCYjMzk7cyBldmlkZW50IHRoYXQgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LCB0aGUgb25lIHdlJiMzOTtyZSB0cmFja2luZywgaXMgb25seSBjYWxsZWQgZnJvbSBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAuCgpUaGVyZWZvcmUsIG15IGZvY3VzIG5hcnJvd3MgdG8gYSBzcGVjaWZpYyBzZXQgb2Ygc3ltYm9scy4gSSBuZWVkIHRvIGNsb3NlbHkgZXhhbWluZToKCiogICBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCAtIFRoaXMgaXMgY2xlYXJseSBhIGtleSB2YWxpZGF0aW9uIHBvaW50LgoqICAgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIC0gT2J2aW91c2x5IHRoZSBlbnRyeSBwb2ludCBmb3Igd2hhdCB3ZSYjMzk7cmUgdHJhY2tpbmcuCiogICBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAgLSBMaWtlbHkgc29tZSBraW5kIG9mIGludGVybmFsIHN0b3JhZ2Ugb3IgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBhbGdvcml0aG1zLgoKR2l2ZW4gdGhlIHNpbmdsZSBjYWxsIG9yaWdpbiwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgIGlzICppbmRlZWQqIHRoZSBzb2xlIGNhbGxlciBvZiB0aGUgYGNvbXBfcGFyYW1zX3Jlc2V0YCBmdW5jdGlvbi4gVGhpcyBxdWljayBjaGVjayB3aWxsIGFsbG93IG1lIHRvIHZlcmlmeSB0aGUgYXNzdW1wdGlvbnMgSSYjMzk7bSBtYWtpbmcgYXQgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tcF9wYXJhbXNfcmVzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY1OT1zdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2My1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2NjQ6c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjY2PXN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjg1LVx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjg2Olx0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjg3LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY4OS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2OTA6c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY5MS17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTcwMT1zdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzA3Olx0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzA4LVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4MDk9c3RhdGljIHZvaWQgenJhbV9zbG90X2ZyZWVfbm90aWZ5KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjgyNS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4MjY6c3RhdGljIHZvaWQgenJhbV9jb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSlcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4Mjcte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MzAtXHRmb3IgKHByaW8gPSBaUkFNX1BSSU1BUllfQ09NUDsgcHJpbyBcdTAwM2MgWlJBTV9NQVhfQ09NUFM7IHByaW8mIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODMxOlx0XHRjb21wX3BhcmFtc19yZXNldCh6cmFtLCBwcmlvKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MzItXHR9XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjgzNT1zdGF0aWMgdm9pZCB6cmFtX2Rlc3Ryb3lfY29tcHMoc3RydWN0IHpyYW0gKnpyYW0pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4NTE6XHR6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHpyYW0pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1Mi19XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzA0Mj1zdGF0aWMgaW50IHpyYW1fYWRkKHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzEwMS1cdHNucHJpbnRmKHpyYW0tXHUwMDNlZGlzay1cdTAwM2VkaXNrX25hbWUsIDE2LCBcJiMzNDt6cmFtJWRcJiMzNDssIGRldmljZV9pZCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTAyOlx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxMDMtXHRjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTkyCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWlJBTSBDb21wcmVzc2lvbiBQYXJhbWV0ZXIgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcmV2ZWFscyB0aGF0IGBjb21wX3BhcmFtc19yZXNldGAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gaGVyZSwgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBjcml0aWNhbCBwb2ludHM6IGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYGNvbXBfcGFyYW1zX3N0b3JlYCwgYW5kIGB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0YC4gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIGB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0YCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYHpyYW1fZGVzdHJveV9jb21wc2AgYW5kIGB6cmFtX2FkZGAsIHdoaWNoIG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlua2VkIGR1cmluZyBkZXZpY2UgY3JlYXRpb24gYW5kIHJlbGF0ZWQgc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBhbGwgcG9pbnRzIHRvIGEgZGlyZWN0IHBhdGggdG8gdXNlciBpbnRlcmFjdGlvbiBhbmQgY29uZmlndXJhdGlvbi4KCk5vdywgbGV0IG1lIGludmVzdGlnYXRlIGB6c3RkX3NldHVwX3BhcmFtc2AuIEl0JiMzOTtzIGJlaW5nIGludm9rZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgZnJvbSBgemNvbXBfY3JlYXRlYC4gQW5kIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGB6Y29tcF9jcmVhdGVgIGlzbiYjMzk7dCBzdGF0aWMsIHN1Z2dlc3RpbmcgaXQmIzM5O3MgYWN0aXZlbHkgaW52b2x2ZWQgZHVyaW5nIGNvbXByZXNzaW9uIHN0cmVhbSBpbml0aWFsaXphdGlvbi4gVGhpcyBjYWxscyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKSSBuZWVkIGEgY2xlYXJlciBwaWN0dXJlLCBzbyBJJiMzOTtsbCBjcmVhdGUgYSBjaGVja2xpc3Qgb2Yga2V5IGZ1bmN0aW9uczoKKiAgIGB6Y29tcF92YWxpZGF0ZV9wYXJhbXNgCiogICBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAKKiAgIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYAoqICAgYHpjb21wX2NyZWF0ZWAKCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnM6CiogICBgWlJBTWAKKiAgIGBaUkFNX0JBQ0tFTkRfTFo0YAoqICAgYFpSQU1fQkFDS0VORF9MWjRIQ2AKKiAgIGBaUkFNX0JBQ0tFTkRfWlNURGAKKiAgIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAKKiAgIGBaUkFNX0JBQ0tFTkRfODQyYAoqICAgYFpSQU1fQkFDS0VORF9MWk9gCgpXYWl0LCB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgb24gYCFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXNuJiMzOTt0IG1pc3NlZC4gTGV0JiMzOTtzIGxvb2sgYXQgYFpSQU1fQkFDS0VORF9GT1JDRV9MWk9gLCBhcyBpdCYjMzk7cyBqdXN0IGEgY29uZmlnLiBUbyBhdm9pZCBjbHV0dGVyIEkgd2lsbCBzaW1wbHkgbGlzdCBgWlJBTV9CQUNLRU5EX0xaT2AuCgpPa2F5LCB3aGF0JiMzOTtzIHRoZSBwdXJwb3NlIG9mIGFsbCB0aGlzPyBUaGUgZ29hbCBpcyB0byBhZGQgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIC0gdGhpbmdzIGxpa2UgdGhlIGNvbXByZXNzaW9uIGxldmVsIGFuZCBkaWN0aW9uYXJ5LiBBZGRpdGlvbmFsbHksIHRoZSBwYXJhbWV0ZXJzIHdpbGwgYmUgcmVzZXQgd2hlbiB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGNoYW5nZXMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGFuZCB6Y29tcCBiYWNrZW5kIG9wZXJhdGlvbnMsIGFsbCBvZiB3aGljaCBhcmUgdXNlci1hY2Nlc3NpYmxlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSByZWFkeSB0byBjcmFmdCBhIHJlc3BvbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFo0JiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWjRIQyYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfWlNURCYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfREVGTEFURSYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfODQyJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF92YWxpZGF0ZV9wYXJhbXMmIzM0OywKICAgICYjMzQ7YWxnb3JpdGhtX3BhcmFtc19zdG9yZSYjMzQ7LAogICAgJiMzNDtfX2NvbXBfYWxnb3JpdGhtX3N0b3JlJiMzNDssCiAgICAmIzM0O3pjb21wX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIHpyYW0gY29tcHJlc3Npb24gcGFyYW1ldGVycyAobGV2ZWwgYW5kIGRpY3Rpb25hcnkpIGFuZCByZXNldHMgcGFyYW1ldGVycyB3aGVuIHRoZSBhbGdvcml0aG0gaXMgY2hhbmdlZC4gSXQgbW9kaWZpZXMgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGFuZCB6Y29tcCBiYWNrZW5kIG9wcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgenJhbSBzeXNmcyBhdHRyaWJ1dGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWjQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNEhDJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9aU1REJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9ERUZMQVRFJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF84NDImIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX3ZhbGlkYXRlX3BhcmFtcyYjMzQ7LAogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O19fY29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7emNvbXBfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIChsZXZlbCBhbmQgZGljdGlvbmFyeSkgYW5kIHJlc2V0cyBwYXJhbWV0ZXJzIHdoZW4gdGhlIGFsZ29yaXRobSBpcyBjaGFuZ2VkLiBJdCBtb2RpZmllcyBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYW5kIHpjb21wIGJhY2tlbmQgb3BzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMTo1NS4wMzQwMDk2NDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzU1ODQ3NjY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0XCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0SENcIixcbiAgICBcIlpSQU1fQkFDS0VORF9aU1REXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfREVGTEFURVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EXzg0MlwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX3ZhbGlkYXRlX3BhcmFtc1wiLFxuICAgIFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiLFxuICAgIFwiX19jb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwiemNvbXBfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB6cmFtIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgKGxldmVsIGFuZCBkaWN0aW9uYXJ5KSBhbmQgcmVzZXRzIHBhcmFtZXRlcnMgd2hlbiB0aGUgYWxnb3JpdGhtIGlzIGNoYW5nZWQuIEl0IG1vZGlmaWVzIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyBhbmQgemNvbXAgYmFja2VuZCBvcHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHpyYW0gc3lzZnMgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDE6NTUuMDM0MDE1ODQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU3NDAzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZTBkOWExNTgwNjRlOGNmYTExMmNlYTRkZWVhOTMwMmVkNzQyNjU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDA5OjAxOjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcXG5pbmRleCAxMGQ5ZDVjNjBmNTMxLi5kNzk2ZWJkYTFmYTBkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcXG5AQCAtNTcsNSArNTcsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyID0ge1xcbiBcXHQuZGVzdHJveV9jdHhcXHQ9IGRlc3Ryb3lfODQyLFxcbiBcXHQuc2V0dXBfcGFyYW1zXFx0PSBzZXR1cF9wYXJhbXNfODQyLFxcbiBcXHQucmVsZWFzZV9wYXJhbXNcXHQ9IHJlbGVhc2VfcGFyYW1zXzg0MixcXG4rXFx0LmNhcHNcXHRcXHQ9IDAsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwiODQyXFxcIixcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXFxuaW5kZXggZjkyYTUyYTcyMGQxZS4uY2VkYzNkYWFkMzNhZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcXG5AQCAtMTQ0LDUgKzE0NCw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9kZWZsYXRlID0ge1xcbiBcXHQuZGVzdHJveV9jdHhcXHQ9IGRlZmxhdGVfZGVzdHJveSxcXG4gXFx0LnNldHVwX3BhcmFtc1xcdD0gZGVmbGF0ZV9zZXR1cF9wYXJhbXMsXFxuIFxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyxcXG4rXFx0LmNhcHNcXHRcXHQ9IFpDT01QX0NBUF9MRVZFTCxcXG4rXFx0LmxldmVsX21pblxcdD0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLFxcbitcXHQubGV2ZWxfbWF4XFx0PSBaX0JFU1RfQ09NUFJFU1NJT04sXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwiZGVmbGF0ZVxcXCIsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmNcXG5pbmRleCBjNDQ5ZDUxMWJhODZmLi5iZDFlNWNhNGQxMzQyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmNcXG5AQCAtMTQ2LDUgKzE0Niw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejQgPSB7XFxuIFxcdC5kZXN0cm95X2N0eFxcdD0gbHo0X2Rlc3Ryb3ksXFxuIFxcdC5zZXR1cF9wYXJhbXNcXHQ9IGx6NF9zZXR1cF9wYXJhbXMsXFxuIFxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gbHo0X3JlbGVhc2VfcGFyYW1zLFxcbitcXHQuY2Fwc1xcdFxcdD0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsXFxuK1xcdC5sZXZlbF9taW5cXHQ9IExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVCxcXG4rXFx0LmxldmVsX21heFxcdD0gNjU1MzUsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwibHo0XFxcIixcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcXG5pbmRleCBmNmEzMzZhY2ZlMjAyLi4wZTBkN2M2OGE3ZDQyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jXFxuQEAgLTEyNCw1ICsxMjQsOCBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0aGMgPSB7XFxuIFxcdC5kZXN0cm95X2N0eFxcdD0gbHo0aGNfZGVzdHJveSxcXG4gXFx0LnNldHVwX3BhcmFtc1xcdD0gbHo0aGNfc2V0dXBfcGFyYW1zLFxcbiBcXHQucmVsZWFzZV9wYXJhbXNcXHQ9IGx6NGhjX3JlbGVhc2VfcGFyYW1zLFxcbitcXHQuY2Fwc1xcdFxcdD0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsXFxuK1xcdC5sZXZlbF9taW5cXHQ9IExaNEhDX01JTl9DTEVWRUwsXFxuK1xcdC5sZXZlbF9tYXhcXHQ9IExaNEhDX01BWF9DTEVWRUwsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwibHo0aGNcXFwiLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jXFxuaW5kZXggNGM5MDZiZWFhZTZiMy4uOTY1ZjAwN2UyY2E4OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jXFxuQEAgLTU1LDUgKzU1LDYgQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6byA9IHtcXG4gXFx0LmRlc3Ryb3lfY3R4XFx0PSBsem9fZGVzdHJveSxcXG4gXFx0LnNldHVwX3BhcmFtc1xcdD0gbHpvX3NldHVwX3BhcmFtcyxcXG4gXFx0LnJlbGVhc2VfcGFyYW1zXFx0PSBsem9fcmVsZWFzZV9wYXJhbXMsXFxuK1xcdC5jYXBzXFx0XFx0PSAwLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcImx6b1xcXCIsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcXG5pbmRleCAxMDY0MGM5NmNiZmNhLi43NTdiNDU5OGJlMDMwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcXG5AQCAtNTUsNSArNTUsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0ge1xcbiBcXHQuZGVzdHJveV9jdHhcXHQ9IGx6b3JsZV9kZXN0cm95LFxcbiBcXHQuc2V0dXBfcGFyYW1zXFx0PSBsem9ybGVfc2V0dXBfcGFyYW1zLFxcbiBcXHQucmVsZWFzZV9wYXJhbXNcXHQ9IGx6b3JsZV9yZWxlYXNlX3BhcmFtcyxcXG4rXFx0LmNhcHNcXHRcXHQ9IDAsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwibHpvLXJsZVxcXCIsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuY1xcbmluZGV4IGQwMGI1NDgwNTZkYzIuLjgwMWVlOGVlNGJhNjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXFxuQEAgLTYwLDYgKzYwLDExIEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiBcXHRwYXJhbXMtXFx1MDAzZWRydl9kYXRhID0genA7XFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpXFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlbGV2ZWwgPSB6c3RkX2RlZmF1bHRfY2xldmVsKCk7XFxuK1xcdGVsc2UgaWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgXFx1MDAzYyAtKGludClaU1REX1RBUkdFVExFTkdUSF9NQVggfHxcXG4rXFx0XFx0IHBhcmFtcy1cXHUwMDNlbGV2ZWwgXFx1MDAzZSB6c3RkX21heF9jbGV2ZWwoKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcInpzdGQ6IGludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXFxcblxcXCIsIHBhcmFtcy1cXHUwMDNlbGV2ZWwpO1xcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuIFxcbiBcXHR6cC1cXHUwMDNlY3BybSA9IHpzdGRfZ2V0X3BhcmFtcyhwYXJhbXMtXFx1MDAzZWxldmVsLCBQQUdFX1NJWkUpO1xcbiBcXG5AQCAtMTYxLDcgKzE2Niw2IEBAIHN0YXRpYyBpbnQgenN0ZF9jcmVhdGUoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyb3I6XFxuLVxcdHpzdGRfcmVsZWFzZV9wYXJhbXMocGFyYW1zKTtcXG4gXFx0enN0ZF9kZXN0cm95KGN0eCk7XFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuQEAgLTIxMyw1ICsyMTcsOCBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfenN0ZCA9IHtcXG4gXFx0LmRlc3Ryb3lfY3R4XFx0PSB6c3RkX2Rlc3Ryb3ksXFxuIFxcdC5zZXR1cF9wYXJhbXNcXHQ9IHpzdGRfc2V0dXBfcGFyYW1zLFxcbiBcXHQucmVsZWFzZV9wYXJhbXNcXHQ9IHpzdGRfcmVsZWFzZV9wYXJhbXMsXFxuK1xcdC5jYXBzXFx0XFx0PSBaQ09NUF9DQVBfRElDVCB8IFpDT01QX0NBUF9MRVZFTCxcXG4rXFx0LmxldmVsX21pblxcdD0gKGludCktWlNURF9UQVJHRVRMRU5HVEhfTUFYLFxcbitcXHQubGV2ZWxfbWF4XFx0PSAtMSxcXHQvKiB2YWxpZGF0ZWQgYnkgenN0ZF9zZXR1cF9wYXJhbXMoKSAqL1xcbiBcXHQubmFtZVxcdFxcdD0gXFxcInpzdGRcXFwiLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXFxuaW5kZXggOTc0YzQ2OTE4ODdlNi4uMTQ5ZWZmNDU5MGUxYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXFxuQEAgLTk0LDYgKzk0LDMzIEBAIGNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcClcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuK2ludCB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoY29uc3QgY2hhciAqY29tcCwgczMyIGxldmVsLCBjb25zdCBjaGFyICpkaWN0X3BhdGgpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZCA9IGxvb2t1cF9iYWNrZW5kX29wcyhjb21wKTtcXG4rXFxuK1xcdGlmICghYmFja2VuZClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZGljdF9wYXRoIFxcdTAwMjZcXHUwMDI2ICEoYmFja2VuZC1cXHUwMDNlY2FwcyBcXHUwMDI2IFpDT01QX0NBUF9ESUNUKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcInpyYW06ICVzIGRvZXMgbm90IHN1cHBvcnQgZGljdGlvbmFyeVxcXFxuXFxcIiwgY29tcCk7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGxldmVsICE9IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcXG4rXFx0XFx0aWYgKCEoYmFja2VuZC1cXHUwMDNlY2FwcyBcXHUwMDI2IFpDT01QX0NBUF9MRVZFTCkpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJ6cmFtOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGxldmVsXFxcXG5cXFwiLCBjb21wKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIGxldmVsX21heCA9PSAtMSBtZWFucyB2YWxpZGF0ZSBpbiAuc2V0dXBfcGFyYW1zKCkgKi9cXG4rXFx0XFx0aWYgKGJhY2tlbmQtXFx1MDAzZWxldmVsX21heCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAobGV2ZWwgXFx1MDAzYyBiYWNrZW5kLVxcdTAwM2VsZXZlbF9taW4gfHwgbGV2ZWwgXFx1MDAzZSBiYWNrZW5kLVxcdTAwM2VsZXZlbF9tYXgpKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwienJhbTogaW52YWxpZCBsZXZlbCAlZCBmb3IgJXNcXFxcblxcXCIsIGxldmVsLCBjb21wKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogc2hvdyBhdmFpbGFibGUgY29tcHJlc3NvcnMgKi9cXG4gc3NpemVfdCB6Y29tcF9hdmFpbGFibGVfc2hvdyhjb25zdCBjaGFyICpjb21wLCBjaGFyICpidWYsIHNzaXplX3QgYXQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbmluZGV4IDgxYTBmM2Y2ZmY0ODcuLjM2NjI1MDA1MGQ0YWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbkBAIC03LDYgKzcsOSBAQFxcbiBcXG4gI2RlZmluZSBaQ09NUF9QQVJBTV9OT1RfU0VUXFx0SU5UX01JTlxcbiBcXG4rI2RlZmluZSBaQ09NUF9DQVBfRElDVFxcdFxcdEJJVCgwKVxcdC8qIGRpY3Rpb25hcnkgc3VwcG9ydCAqL1xcbisjZGVmaW5lIFpDT01QX0NBUF9MRVZFTFxcdFxcdEJJVCgxKVxcdC8qIGFkanVzdGFibGUgY29tcHJlc3Npb24gbGV2ZWwgKi9cXG4rXFxuIHN0cnVjdCBkZWZsYXRlX3BhcmFtcyB7XFxuIFxcdHMzMiB3aW5iaXRzO1xcbiB9O1xcbkBAIC02Niw2ICs2OSw5IEBAIHN0cnVjdCB6Y29tcF9vcHMge1xcbiBcXHRpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XFxuIFxcdHZvaWQgKCpyZWxlYXNlX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcXG4gXFxuK1xcdHVuc2lnbmVkIGludCBjYXBzO1xcbitcXHRzMzIgbGV2ZWxfbWluO1xcbitcXHRzMzIgbGV2ZWxfbWF4O1xcbiBcXHRjb25zdCBjaGFyICpuYW1lO1xcbiB9O1xcbiBcXG5AQCAtODEsNiArODcsNyBAQCBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpO1xcbiBpbnQgemNvbXBfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpO1xcbiBzc2l6ZV90IHpjb21wX2F2YWlsYWJsZV9zaG93KGNvbnN0IGNoYXIgKmNvbXAsIGNoYXIgKmJ1Ziwgc3NpemVfdCBhdCk7XFxuIGNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XFxuK2ludCB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoY29uc3QgY2hhciAqY29tcCwgczMyIGxldmVsLCBjb25zdCBjaGFyICpkaWN0X3BhdGgpO1xcbiBcXG4gc3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcbiB2b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbmluZGV4IGFjZTY1YzU4NjA3MmIuLmI0NTg1YjNiYzU3NmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbkBAIC0xNjYxLDYgKzE2NjEsOCBAQCBzdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXFxuIFxcdHpyYW0tXFx1MDAzZWNvbXBfYWxnc1twcmlvXSA9IGFsZztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKTtcXG4rXFxuIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG4ge1xcbiBcXHRjb25zdCBjaGFyICphbGc7XFxuQEAgLTE2ODEsNiArMTY4Myw3IEBAIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG4gXFx0fVxcbiBcXG4gXFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XFxuK1xcdGNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTcwOSw4ICsxNzEyLDExIEBAIHN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdElOVF9NQVgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFJFQURJTkdfUE9MSUNZKTtcXG4tXFx0XFx0aWYgKHN6IFxcdTAwM2MgMClcXG4rXFx0XFx0aWYgKHN6IFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJ6cmFtOiBmYWlsZWQgdG8gbG9hZCBkaWN0aW9uYXJ5ICVzIChlcnI9JXpkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGRpY3RfcGF0aCwgc3opO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHR6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb10uZGljdF9zeiA9IHN6O1xcbkBAIC0xNzk0LDYgKzE4MDAsMTMgQEAgc3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dKSB7XFxuK1xcdFxcdHJldCA9IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyh6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10sIGxldmVsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZGljdF9wYXRoKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gY29tcF9wYXJhbXNfc3RvcmUoenJhbSwgcHJpbywgbGV2ZWwsIGRpY3RfcGF0aCwgXFx1MDAyNmRlZmxhdGVfcGFyYW1zKTtcXG4gXFx0cmV0dXJuIHJldCA/IHJldCA6IGxlbjtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMTo1NS42MzA3MzY1MjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5Njk2MTczNjAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0XCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0SENcIixcbiAgICBcIlpSQU1fQkFDS0VORF9aU1REXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfREVGTEFURVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EXzg0MlwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX3ZhbGlkYXRlX3BhcmFtc1wiLFxuICAgIFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiLFxuICAgIFwiX19jb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwiemNvbXBfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB6cmFtIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgKGxldmVsIGFuZCBkaWN0aW9uYXJ5KSBhbmQgcmVzZXRzIHBhcmFtZXRlcnMgd2hlbiB0aGUgYWxnb3JpdGhtIGlzIGNoYW5nZWQuIEl0IG1vZGlmaWVzIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyBhbmQgemNvbXAgYmFja2VuZCBvcHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHpyYW0gc3lzZnMgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmUwZDlhMTU4MDY0ZThjZmExMTJjZWE0ZGVlYTkzMDJlZDc0MjY1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDA5OjAxOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuY1xuaW5kZXggMTBkOWQ1YzYwZjUzMS4uZDc5NmViZGExZmEwZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuY1xuQEAgLTU3LDUgKzU3LDYgQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MiA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBkZXN0cm95Xzg0MixcbiBcdC5zZXR1cF9wYXJhbXNcdD0gc2V0dXBfcGFyYW1zXzg0MixcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSByZWxlYXNlX3BhcmFtc184NDIsXG4rXHQuY2Fwc1x0XHQ9IDAsXG4gXHQubmFtZVx0XHQ9IFwiODQyXCIsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbmluZGV4IGY5MmE1MmE3MjBkMWUuLmNlZGMzZGFhZDMzYWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xuQEAgLTE0NCw1ICsxNDQsOCBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBkZWZsYXRlX2Rlc3Ryb3ksXG4gXHQuc2V0dXBfcGFyYW1zXHQ9IGRlZmxhdGVfc2V0dXBfcGFyYW1zLFxuIFx0LnJlbGVhc2VfcGFyYW1zXHQ9IGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMsXG4rXHQuY2Fwc1x0XHQ9IFpDT01QX0NBUF9MRVZFTCxcbitcdC5sZXZlbF9taW5cdD0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLFxuK1x0LmxldmVsX21heFx0PSBaX0JFU1RfQ09NUFJFU1NJT04sXG4gXHQubmFtZVx0XHQ9IFwiZGVmbGF0ZVwiLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uYmQxZTVjYTRkMTM0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuQEAgLTE0Niw1ICsxNDYsOCBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0ID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IGx6NF9kZXN0cm95LFxuIFx0LnNldHVwX3BhcmFtc1x0PSBsejRfc2V0dXBfcGFyYW1zLFxuIFx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6NF9yZWxlYXNlX3BhcmFtcyxcbitcdC5jYXBzXHRcdD0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsXG4rXHQubGV2ZWxfbWluXHQ9IExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVCxcbitcdC5sZXZlbF9tYXhcdD0gNjU1MzUsXG4gXHQubmFtZVx0XHQ9IFwibHo0XCIsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuY1xuaW5kZXggZjZhMzM2YWNmZTIwMi4uMGUwZDdjNjhhN2Q0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbkBAIC0xMjQsNSArMTI0LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NGhjID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IGx6NGhjX2Rlc3Ryb3ksXG4gXHQuc2V0dXBfcGFyYW1zXHQ9IGx6NGhjX3NldHVwX3BhcmFtcyxcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSBsejRoY19yZWxlYXNlX3BhcmFtcyxcbitcdC5jYXBzXHRcdD0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsXG4rXHQubGV2ZWxfbWluXHQ9IExaNEhDX01JTl9DTEVWRUwsXG4rXHQubGV2ZWxfbWF4XHQ9IExaNEhDX01BWF9DTEVWRUwsXG4gXHQubmFtZVx0XHQ9IFwibHo0aGNcIixcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbmluZGV4IDRjOTA2YmVhYWU2YjMuLjk2NWYwMDdlMmNhODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbkBAIC01NSw1ICs1NSw2IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem8gPSB7XG4gXHQuZGVzdHJveV9jdHhcdD0gbHpvX2Rlc3Ryb3ksXG4gXHQuc2V0dXBfcGFyYW1zXHQ9IGx6b19zZXR1cF9wYXJhbXMsXG4gXHQucmVsZWFzZV9wYXJhbXNcdD0gbHpvX3JlbGVhc2VfcGFyYW1zLFxuK1x0LmNhcHNcdFx0PSAwLFxuIFx0Lm5hbWVcdFx0PSBcImx6b1wiLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuY1xuaW5kZXggMTA2NDBjOTZjYmZjYS4uNzU3YjQ1OThiZTAzMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuY1xuQEAgLTU1LDUgKzU1LDYgQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6b3JsZSA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBsem9ybGVfZGVzdHJveSxcbiBcdC5zZXR1cF9wYXJhbXNcdD0gbHpvcmxlX3NldHVwX3BhcmFtcyxcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSBsem9ybGVfcmVsZWFzZV9wYXJhbXMsXG4rXHQuY2Fwc1x0XHQ9IDAsXG4gXHQubmFtZVx0XHQ9IFwibHpvLXJsZVwiLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXG5pbmRleCBkMDBiNTQ4MDU2ZGMyLi44MDFlZThlZTRiYTY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbkBAIC02MCw2ICs2MCwxMSBAQCBzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcdHBhcmFtcy1cdTAwM2VkcnZfZGF0YSA9IHpwO1xuIFx0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxuIFx0XHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSB6c3RkX2RlZmF1bHRfY2xldmVsKCk7XG4rXHRlbHNlIGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgXHUwMDNjIC0oaW50KVpTVERfVEFSR0VUTEVOR1RIX01BWCB8fFxuK1x0XHQgcGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzZSB6c3RkX21heF9jbGV2ZWwoKSkge1xuK1x0XHRwcl9lcnIoXCJ6c3RkOiBpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXFxuXCIsIHBhcmFtcy1cdTAwM2VsZXZlbCk7XG4rXHRcdGdvdG8gZXJyb3I7XG4rXHR9XG4gXG4gXHR6cC1cdTAwM2VjcHJtID0genN0ZF9nZXRfcGFyYW1zKHBhcmFtcy1cdTAwM2VsZXZlbCwgUEFHRV9TSVpFKTtcbiBcbkBAIC0xNjEsNyArMTY2LDYgQEAgc3RhdGljIGludCB6c3RkX2NyZWF0ZShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eClcbiBcdHJldHVybiAwO1xuIFxuIGVycm9yOlxuLVx0enN0ZF9yZWxlYXNlX3BhcmFtcyhwYXJhbXMpO1xuIFx0enN0ZF9kZXN0cm95KGN0eCk7XG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG5AQCAtMjEzLDUgKzIxNyw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IHpzdGRfZGVzdHJveSxcbiBcdC5zZXR1cF9wYXJhbXNcdD0genN0ZF9zZXR1cF9wYXJhbXMsXG4gXHQucmVsZWFzZV9wYXJhbXNcdD0genN0ZF9yZWxlYXNlX3BhcmFtcyxcbitcdC5jYXBzXHRcdD0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsXG4rXHQubGV2ZWxfbWluXHQ9IChpbnQpLVpTVERfVEFSR0VUTEVOR1RIX01BWCxcbitcdC5sZXZlbF9tYXhcdD0gLTEsXHQvKiB2YWxpZGF0ZWQgYnkgenN0ZF9zZXR1cF9wYXJhbXMoKSAqL1xuIFx0Lm5hbWVcdFx0PSBcInpzdGRcIixcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbmluZGV4IDk3NGM0NjkxODg3ZTYuLjE0OWVmZjQ1OTBlMWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbkBAIC05NCw2ICs5NCwzMyBAQCBjb25zdCBjaGFyICp6Y29tcF9sb29rdXBfYmFja2VuZF9uYW1lKGNvbnN0IGNoYXIgKmNvbXApXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4raW50IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBjaGFyICpjb21wLCBzMzIgbGV2ZWwsIGNvbnN0IGNoYXIgKmRpY3RfcGF0aClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgemNvbXBfb3BzICpiYWNrZW5kID0gbG9va3VwX2JhY2tlbmRfb3BzKGNvbXApO1xuK1xuK1x0aWYgKCFiYWNrZW5kKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChkaWN0X3BhdGggXHUwMDI2XHUwMDI2ICEoYmFja2VuZC1cdTAwM2VjYXBzIFx1MDAyNiBaQ09NUF9DQVBfRElDVCkpIHtcbitcdFx0cHJfZXJyKFwienJhbTogJXMgZG9lcyBub3Qgc3VwcG9ydCBkaWN0aW9uYXJ5XFxuXCIsIGNvbXApO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAobGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuK1x0XHRpZiAoIShiYWNrZW5kLVx1MDAzZWNhcHMgXHUwMDI2IFpDT01QX0NBUF9MRVZFTCkpIHtcbitcdFx0XHRwcl9lcnIoXCJ6cmFtOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGxldmVsXFxuXCIsIGNvbXApO1xuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0fVxuK1x0XHQvKiBsZXZlbF9tYXggPT0gLTEgbWVhbnMgdmFsaWRhdGUgaW4gLnNldHVwX3BhcmFtcygpICovXG4rXHRcdGlmIChiYWNrZW5kLVx1MDAzZWxldmVsX21heCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAobGV2ZWwgXHUwMDNjIGJhY2tlbmQtXHUwMDNlbGV2ZWxfbWluIHx8IGxldmVsIFx1MDAzZSBiYWNrZW5kLVx1MDAzZWxldmVsX21heCkpIHtcbitcdFx0XHRwcl9lcnIoXCJ6cmFtOiBpbnZhbGlkIGxldmVsICVkIGZvciAlc1xcblwiLCBsZXZlbCwgY29tcCk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBzaG93IGF2YWlsYWJsZSBjb21wcmVzc29ycyAqL1xuIHNzaXplX3QgemNvbXBfYXZhaWxhYmxlX3Nob3coY29uc3QgY2hhciAqY29tcCwgY2hhciAqYnVmLCBzc2l6ZV90IGF0KVxuIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaCBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG5pbmRleCA4MWEwZjNmNmZmNDg3Li4zNjYyNTAwNTBkNGFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG5AQCAtNyw2ICs3LDkgQEBcbiBcbiAjZGVmaW5lIFpDT01QX1BBUkFNX05PVF9TRVRcdElOVF9NSU5cbiBcbisjZGVmaW5lIFpDT01QX0NBUF9ESUNUXHRcdEJJVCgwKVx0LyogZGljdGlvbmFyeSBzdXBwb3J0ICovXG4rI2RlZmluZSBaQ09NUF9DQVBfTEVWRUxcdFx0QklUKDEpXHQvKiBhZGp1c3RhYmxlIGNvbXByZXNzaW9uIGxldmVsICovXG4rXG4gc3RydWN0IGRlZmxhdGVfcGFyYW1zIHtcbiBcdHMzMiB3aW5iaXRzO1xuIH07XG5AQCAtNjYsNiArNjksOSBAQCBzdHJ1Y3QgemNvbXBfb3BzIHtcbiBcdGludCAoKnNldHVwX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbiBcdHZvaWQgKCpyZWxlYXNlX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbiBcbitcdHVuc2lnbmVkIGludCBjYXBzO1xuK1x0czMyIGxldmVsX21pbjtcbitcdHMzMiBsZXZlbF9tYXg7XG4gXHRjb25zdCBjaGFyICpuYW1lO1xuIH07XG4gXG5AQCAtODEsNiArODcsNyBAQCBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpO1xuIGludCB6Y29tcF9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSk7XG4gc3NpemVfdCB6Y29tcF9hdmFpbGFibGVfc2hvdyhjb25zdCBjaGFyICpjb21wLCBjaGFyICpidWYsIHNzaXplX3QgYXQpO1xuIGNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XG4raW50IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBjaGFyICpjb21wLCBzMzIgbGV2ZWwsIGNvbnN0IGNoYXIgKmRpY3RfcGF0aCk7XG4gXG4gc3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIHZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbmluZGV4IGFjZTY1YzU4NjA3MmIuLmI0NTg1YjNiYzU3NmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbkBAIC0xNjYxLDYgKzE2NjEsOCBAQCBzdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXG4gXHR6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSA9IGFsZztcbiB9XG4gXG4rc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKTtcbitcbiBzdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXG4ge1xuIFx0Y29uc3QgY2hhciAqYWxnO1xuQEAgLTE2ODEsNiArMTY4Myw3IEBAIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcbiBcdH1cbiBcbiBcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xuK1x0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTcwOSw4ICsxNzEyLDExIEBAIHN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXG4gXHRcdFx0XHRcdFx0SU5UX01BWCxcbiBcdFx0XHRcdFx0XHROVUxMLFxuIFx0XHRcdFx0XHRcdFJFQURJTkdfUE9MSUNZKTtcbi1cdFx0aWYgKHN6IFx1MDAzYyAwKVxuK1x0XHRpZiAoc3ogXHUwMDNjPSAwKSB7XG4rXHRcdFx0cHJfZXJyKFwienJhbTogZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZXJyPSV6ZClcXG5cIixcbitcdFx0XHQgICAgICAgZGljdF9wYXRoLCBzeik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dLmRpY3Rfc3ogPSBzejtcbkBAIC0xNzk0LDYgKzE4MDAsMTMgQEAgc3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAoenJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10pIHtcbitcdFx0cmV0ID0gemNvbXBfdmFsaWRhdGVfcGFyYW1zKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dLCBsZXZlbCxcbitcdFx0XHRcdFx0ICAgIGRpY3RfcGF0aCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbiBcdHJldCA9IGNvbXBfcGFyYW1zX3N0b3JlKHpyYW0sIHByaW8sIGxldmVsLCBkaWN0X3BhdGgsIFx1MDAyNmRlZmxhdGVfcGFyYW1zKTtcbiBcdHJldHVybiByZXQgPyByZXQgOiBsZW47XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDE6NTUuNjMwNzM4MzU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc4MDM5MDkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpSQU0gUGF0Y2ggZm9yIFJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay96cmFtL2AsIHNwZWNpZmljYWxseSB0aGUgdmFsaWRhdGlvbiBvZiBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLiBJdCBzZWVtcyB3ZSdyZSBhZGRpbmcgY2hlY2tzIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgZGlmZmVyZW50IGFsZ29yaXRobXMg4oCTIHRoaW5ncyBsaWtlIExaNCwgTFpPLCBaU1RELCBEZWZsYXRlLCB0aGF0IHNvcnQgb2YgdGhpbmcg4oCTIGZvciBjb21wcmVzc2lvbiBsZXZlbCBhbmQgZGljdGlvbmFyeSBwYXRoLiBTbWFydC4gQWxzbywgdGhlIHBhdGNoIGlzIHJlc2V0dGluZyB0aGUgY29tcHJlc3Npb24gcGFyYW1ldGVycyB3aGVuIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMgY2hhbmdlZC4gQW5kIEkgc2VlIHRoZXkndmUgYWxzbyBjbGVhbmVkIHVwIGEgYHpzdGRfY3JlYXRlYCBidWcgd2hlcmUgYSBgenN0ZF9yZWxlYXNlX3BhcmFtc2AgY2FsbCB3YXMgaW4gdGhlIHdyb25nIHBsYWNlLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgY29kZSAqcmVhY2hhYmxlKiBhbmQsIG1vcmUgaW1wb3J0YW50bHkgZm9yIG15IHB1cnBvc2VzLCB3b3J0aCBmdXp6aW5nP1xuXG5aUkFNIGl0c2VsZiBpcyBhIGJsb2NrIGRldmljZSwgYW5kIGl04oCZcyBtZWFudCB0byBjb21wcmVzcyBkYXRhIGluIFJBTSwgc28gaXQgc2hvdWxkIGJlIHJlYWNoYWJsZS4gVGhhdOKAmXMgZ29vZC4gVXNlciBzcGFjZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCB0aHJvdWdoIHN5c2ZzIGFuZCBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucywgc28gdGhlcmUncyBhbiBhdHRhY2sgc3VyZmFjZSB0aGVyZS5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIHRob3NlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uczogYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAuIEJpbmdvISBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cy4gU28sIEkgY2FuIHRyaWdnZXIgdGhlc2UgY2hhbmdlcyBieSB3cml0aW5nIHRvIHN5c2ZzIGZpbGVzIGxpa2UgYC9zeXMvYmxvY2svenJhbTAvY29tcF9hbGdvcml0aG1gIG9yIGAvc3lzL2Jsb2NrL3pyYW0wL2FsZ29fcGFyYW1zYCDigJMgb3Igc29tZXRoaW5nIHNpbWlsYXIsIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHByZWNpc2UgcGF0aHMuIFRoYXQncyBob3cgSSBjYW4gZXhlcmNpc2UgdGhpcyBjb2RlLiBPa2F5LCBsZXQncyBuYWlsIGRvd24gdGhvc2UgZXhhY3Qgc3lzZnMgZmlsZSBsb2NhdGlvbnMgYW5kIHRoZW4gYnVpbGQgYSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjIzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDI6MDIuNDExMTMxNTQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzU2MzQ0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzAxPXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzI3LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3Mjg6c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyOS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDI6MDYuNTQ2NzcyMTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM3MDY2MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXRpbGl6YXRpb24gb2YgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgb2JqZWN0IG9yIGZ1bmN0aW9uIOKAkyBkZXBlbmRpbmcgb24gaXRzIGRlZmluaXRpb24gaW4gdGhlIGNvZGViYXNlIOKAkyBpcyBiZWluZyByZWZlcmVuY2VkLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGEgZGlyZWN0IHNlYXJjaCB3aXRoaW4gdGhlIHByb2plY3QsIGxpa2VseSB1c2luZyBteSBwcmVmZXJyZWQgSURFJ3Mgc2VhcmNoIGNhcGFiaWxpdGllcywgb3IgcG9zc2libHkgdXRpbGl6aW5nIGBncmVwYCBpZiBJIG5lZWQgbW9yZSB0YXJnZXRlZCByZXN1bHRzIGFjcm9zcyBhIGJyb2FkZXIgcmFuZ2Ugb2YgZmlsZXMgb3IgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQgdGhpcyBvYmplY3QgaXMuIEknbSBmb2N1c2luZyBvbiBmaW5kaW5nIHRoZSBkaXJlY3QgY2FsbHMgb3IgaW5zdGFuY2VzIG9mIGl0IGluIGFueSBvdGhlciBzb3VyY2UgY29kZSBmaWxlcy4gVGhlbiwgSSB3aWxsIHN0YXJ0IG1ha2luZyBzZW5zZSBvZiBpdHMgcHVycG9zZS5cblxuTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IGl0cyBzY29wZSBvZiBpbmZsdWVuY2Ug4oCTIGlzIGl0IGdsb2JhbCwgbW9kdWxlLXNwZWNpZmljLCBvciBsb2NhbD8gV2hhdCBtb2R1bGVzIGludGVyYWN0IHdpdGggaXQ/IElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUsIGEgZnVuY3Rpb24sIGEgY2xhc3MgaW5zdGFuY2U/IFRoZSBzcGVjaWZpYyB1c2VzIHdpbGwgcHJvdmlkZSBpbW1lZGlhdGUgY2x1ZXMgdG8gaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaW4gdGhlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gYW5hbHl6ZSBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIHNldCwgcmV0cmlldmVkLCBhbmQgbW9kaWZpZWQuIFRoZSBzZWFyY2ggc2hvdWxkIGlsbHVtaW5hdGUgd2hldGhlciBpdCdzIHBhcnQgb2YgYSBrZXkgY29uZmlndXJhdGlvbiBjb21wb25lbnQsIGEgY2FjaGluZyBtZWNoYW5pc20sIG9yIGEgbWVhbnMgb2YgaW50ZXItbW9kdWxlIGNvbW11bmljYXRpb24uXG5cbkZ1cnRoZXJtb3JlLCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN1cnJvdW5kaW5nIGNvbnRleHQ6IHdoYXQgZnVuY3Rpb25zIGNhbGwgaXQsIHdoYXQgdmFyaWFibGVzIGFyZSBwYXNzZWQgdG8gb3IgcmV0dXJuZWQgZnJvbSBpdCwgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQgZm9yIHRoZWlyIG9wZXJhdGlvbi4gVGhlIHdheSBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cyB3aWxsIHRlbGwgbWUgdGhlIHN5c3RlbSdzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjEwLjQ4Mzg0MTQ4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTU2OTMyMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTcwMT1zdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyNy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzI4OnN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjE0LjY0MDc4MDAxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTY5MjUxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhhdDpcblxuKipJbnZlc3RpZ2F0aW5nIGB6cmFtX2Rydi5jYCBVc2FnZSoqXG5cblJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gYW55dGhpbmcgZWxzZSwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBpbnZlc3RpZ2F0ZSB0aGUgdXNhZ2VzIG9mIHdoYXRldmVyIEknbSB3b3JraW5nIHdpdGggd2l0aGluIHRoZSBgenJhbV9kcnYuY2AgZmlsZS4gSXQncyBhIGtleSBjb21wb25lbnQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGludGVncmF0aW9uIGlzIGNydWNpYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBJJ20gZGVhbGluZyB3aXRoIGludGVyYWN0cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdob2xlIGB6cmFtX2Rydi5jYCBpbXBsZW1lbnRhdGlvbi4gR290dGEgZ2V0IHRoZSBiYXNlbGluZSBiZWZvcmUgSSBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjE4Ljc5NzcwNzU0OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEwNTUzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzAxPXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzI3LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3Mjg6c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyOS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDI6MTguOTA4NzY4MTYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NzcwNzYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQ29kZSdzIFVzYWdlKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiBJJ20gZ2V0dGluZyBhIGh1bmNoIGFib3V0IHRoaXMuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBpc3N1ZSBpcyBzdGVtbWluZyBmcm9tIHNvbWV0aGluZyB0aGF0IHRoaXMgcGllY2Ugb2YgY29kZSBpcyB1c2VkIGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgaXQgbWlnaHQgYmUgaW50ZWdyYXRlZCBpbiBhIG1hY3JvIG9mIHNvbWUgc29ydC4gVGhlIG9ubHkgd2F5IHRvIGZpbmQgb3V0IGlzIHRvIGZvbGxvdyB0aGUgdXNhZ2UuIExldCBtZSBxdWlja2x5IHplcm8gaW4gb24gdGhhdCBzZWN0aW9uIG9mIHRoZSBmaWxlIHdoZXJlIHRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGNhbGxlZC4gTGluZSAxNzI4IHNlZW1zIGxpa2UgYSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZy4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIG1hY3JvIHRvIHRyb3VibGVzaG9vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc4NywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjIyLjU4NjQ3ODUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzYzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcyOCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3Mjg6XFx0c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuMTcyOTpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4xNzMwOlxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKmJ1ZixcXG4xNzMxOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBsZW4pXFxuMTczMjpcXHR7XFxuMTczMzpcXHRcXHRzMzIgcHJpbyA9IFpSQU1fUFJJTUFSWV9DT01QLCBsZXZlbCA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XFxuMTczNDpcXHRcXHRjaGFyICphcmdzLCAqcGFyYW0sICp2YWwsICphbGdvID0gTlVMTCwgKmRpY3RfcGF0aCA9IE5VTEw7XFxuMTczNTpcXHRcXHRzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMgZGVmbGF0ZV9wYXJhbXM7XFxuMTczNjpcXHRcXHRzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7XFxuMTczNzpcXHRcXHRib29sIHByaW9fcGFyYW0gPSBmYWxzZTtcXG4xNzM4OlxcdFxcdGludCByZXQ7XFxuMTczOTpcXHRcXG4xNzQwOlxcdFxcdGRlZmxhdGVfcGFyYW1zLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xcbjE3NDE6XFx0XFxuMTc0MjpcXHRcXHRhcmdzID0gc2tpcF9zcGFjZXMoYnVmKTtcXG4xNzQzOlxcdFxcdHdoaWxlICgqYXJncykge1xcbjE3NDQ6XFx0XFx0XFx0YXJncyA9IG5leHRfYXJnKGFyZ3MsIFxcdTAwMjZwYXJhbSwgXFx1MDAyNnZhbCk7XFxuMTc0NTpcXHRcXG4xNzQ2OlxcdFxcdFxcdGlmICghdmFsIHx8ICEqdmFsKVxcbjE3NDc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTc0ODpcXHRcXG4xNzQ5OlxcdFxcdFxcdGlmICghc3RyY21wKHBhcmFtLCBcXFwicHJpb3JpdHlcXFwiKSkge1xcbjE3NTA6XFx0XFx0XFx0XFx0cHJpb19wYXJhbSA9IHRydWU7XFxuMTc1MTpcXHRcXHRcXHRcXHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXFx1MDAyNnByaW8pO1xcbjE3NTI6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4xNzUzOlxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTc1NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNzU1OlxcdFxcdFxcdH1cXG4xNzU2OlxcdFxcbjE3NTc6XFx0XFx0XFx0aWYgKCFzdHJjbXAocGFyYW0sIFxcXCJsZXZlbFxcXCIpKSB7XFxuMTc1ODpcXHRcXHRcXHRcXHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXFx1MDAyNmxldmVsKTtcXG4xNzU5OlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuMTc2MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3NjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTc2MjpcXHRcXHRcXHR9XFxuMTc2MzpcXHRcXG4xNzY0OlxcdFxcdFxcdGlmICghc3RyY21wKHBhcmFtLCBcXFwiYWxnb1xcXCIpKSB7XFxuMTc2NTpcXHRcXHRcXHRcXHRhbGdvID0gdmFsO1xcbjE3NjY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTc2NzpcXHRcXHRcXHR9XFxuMTc2ODpcXHRcXG4xNzY5OlxcdFxcdFxcdGlmICghc3RyY21wKHBhcmFtLCBcXFwiZGljdFxcXCIpKSB7XFxuMTc3MDpcXHRcXHRcXHRcXHRkaWN0X3BhdGggPSB2YWw7XFxuMTc3MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNzcyOlxcdFxcdFxcdH1cXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0XFx0aWYgKCFzdHJjbXAocGFyYW0sIFxcXCJkZWZsYXRlLndpbmJpdHNcXFwiKSkge1xcbjE3NzU6XFx0XFx0XFx0XFx0cmV0ID0ga3N0cnRvaW50KHZhbCwgMTAsIFxcdTAwMjZkZWZsYXRlX3BhcmFtcy53aW5iaXRzKTtcXG4xNzc2OlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuMTc3NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3Nzg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTc3OTpcXHRcXHRcXHR9XFxuMTc4MDpcXHRcXHR9XFxuMTc4MTpcXHRcXG4xNzgyOlxcdFxcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbjE3ODM6XFx0XFx0aWYgKGluaXRfZG9uZSh6cmFtKSlcXG4xNzg0OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTc4NTpcXHRcXG4xNzg2OlxcdFxcdGlmIChwcmlvX3BhcmFtKSB7XFxuMTc4NzpcXHRcXHRcXHRpZiAocHJpbyBcXHUwMDNjIFpSQU1fUFJJTUFSWV9DT01QIHx8IHByaW8gXFx1MDAzZT0gWlJBTV9NQVhfQ09NUFMpXFxuMTc4ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNzg5OlxcdFxcdH1cXG4xNzkwOlxcdFxcbjE3OTE6XFx0XFx0aWYgKGFsZ28gXFx1MDAyNlxcdTAwMjYgcHJpb19wYXJhbSkge1xcbjE3OTI6XFx0XFx0XFx0cmV0ID0gdmFsaWRhdGVfYWxnb19wcmlvcml0eSh6cmFtLCBhbGdvLCBwcmlvKTtcXG4xNzkzOlxcdFxcdFxcdGlmIChyZXQpXFxuMTc5NDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3OTU6XFx0XFx0fVxcbjE3OTY6XFx0XFxuMTc5NzpcXHRcXHRpZiAoYWxnbyBcXHUwMDI2XFx1MDAyNiAhcHJpb19wYXJhbSkge1xcbjE3OTg6XFx0XFx0XFx0cHJpbyA9IGxvb2t1cF9hbGdvX3ByaW9yaXR5KHpyYW0sIGFsZ28sIFpSQU1fUFJJTUFSWV9DT01QKTtcXG4xNzk5OlxcdFxcdFxcdGlmIChwcmlvIFxcdTAwM2MgMClcXG4xODAwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4MDE6XFx0XFx0fVxcbjE4MDI6XFx0XFxuMTgwMzpcXHRcXHRpZiAoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dKSB7XFxuMTgwNDpcXHRcXHRcXHRyZXQgPSB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dLCBsZXZlbCxcXG4xODA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBkaWN0X3BhdGgpO1xcbjE4MDY6XFx0XFx0XFx0aWYgKHJldClcXG4xODA3OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTgwODpcXHRcXHR9XFxuMTgwOTpcXHRcXG4xODEwOlxcdFxcdHJldCA9IGNvbXBfcGFyYW1zX3N0b3JlKHpyYW0sIHByaW8sIGxldmVsLCBkaWN0X3BhdGgsIFxcdTAwMjZkZWZsYXRlX3BhcmFtcyk7XFxuMTgxMTpcXHRcXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcbjE4MTI6XFx0fVxcbjE4MTM6XFx0XFxuMTgxNDpcXHRzdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4xODE1OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbjE4MTY6XFx0XFx0XFx0XFx0XFx0ICAgY2hhciAqYnVmKVxcbjE4MTc6XFx0e1xcbjE4MTg6XFx0XFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xcbjE4MTk6XFx0XFx0c3NpemVfdCBzejtcXG4xODIwOlxcdFxcbjE4MjE6XFx0XFx0Z3VhcmQocndzZW1fcmVhZCkoXFx1MDAyNnpyYW0tXFx1MDAzZWRldl9sb2NrKTtcXG4xODIyOlxcdFxcdHN6ID0gemNvbXBfYXZhaWxhYmxlX3Nob3coenJhbS1cXHUwMDNlY29tcF9hbGdzW1pSQU1fUFJJTUFSWV9DT01QXSwgYnVmLCAwKTtcXG4xODIzOlxcdFxcdHJldHVybiBzejtcXG4xODI0OlxcdH1cXG4xODI1OlxcdFxcbjE4MjY6XFx0c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbjE4Mjc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMjoyMi41ODc4MTkxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQ5Mzc3Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN5c2ZzIFN0b3JlIEZ1bmN0aW9uIGZvciBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAgYW5kIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYC4gSXQncyBtb2RpZnlpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgYGFsZ29fcGFyYW1zYCBhbmQgYGNvbXBfYWxnb3JpdGhtYCBzeXNmcyBmaWxlcy4gVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgaXMgdGhlIGZpcnN0IHJlZCBmbGFnLCBtZWFuaW5nIHN5emthbGxlciBjYW4gbGlrZWx5IGdldCBpdHMgdGVldGggaW50byB0aGVtLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyBmdXp6aW5nLiBUaGlzIHNjcmVhbXMgXCJwb3RlbnRpYWwgZm9yIGZ1enppbmctYmFzZWQgdnVsbmVyYWJpbGl0aWVzLlwiIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBtYWtlIHRoaXMgY29kZSBwYXRoIGFjdGl2ZS4gTGV0J3Mgc2VlLi4uenJhbSwgdGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSByZWNhbGwgdGhhdCB6cmFtIGlzIGNvbmZpZ3VyZWQgYnkgYENPTkZJR19aUkFNYCwgc28gSSdsbCBjaGVjayB0aGUgYGRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBwb3RlbnRpYWwgcHJlLWNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMjoyNy40MzcxOTkxODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjA3Nzg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVxcdGJvb2wgXFxcImx6NCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJ6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIjg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cXHRkZXBlbmRzIG9uIFpSQU1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXFx0Ym9vbCBcXFwibHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiIGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVxcdGJvb2wgXFxcImx6by1ybGVcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJsem9cXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cXHRib29sIFxcXCJsejRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcImx6NGhjXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXFx0Ym9vbCBcXFwiZGVmbGF0ZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXFx0c3RyaW5nXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cXHRib29sIFxcXCJUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cXHRib29sIFxcXCJFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDI6MjcuNjEzMjgxOTM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjUyNjQyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWlJBTSBCYWNrZW5kIFN0cmF0ZWd5KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBvcHRpbWl6aW5nIFpSQU0gY29tcHJlc3Npb24gYmFja2VuZHMuIEVuYWJsaW5nIGFsbCB0aGVzZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zIOKAkyBgTFo0YCwgYExaNEhDYCwgYFpTVERgLCBgREVGTEFURWAsIGA4NDJgLCBhbmQgYExaT2Ag4oCTIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIG1vZGlmeWluZyBgYmFja2VuZF84NDIuY2AsIGBiYWNrZW5kX2RlZmxhdGUuY2AsIGBiYWNrZW5kX2x6NC5jYCwgYGJhY2tlbmRfbHo0aGMuY2AsIGBiYWNrZW5kX2x6by5jYCwgYGJhY2tlbmRfbHpvcmxlLmNgLCBhbmQgYGJhY2tlbmRfenN0ZC5jYCBjb25maXJtcyB0aGF0IHdlJ3JlIGNvdmVyaW5nIGFsbCBvdXIgYmFzZXMgd2l0aCB0aGUgaW5jbHVkZWQgbW9kdWxlcy5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGNydWNpYWwgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZGF0ZWQgYW5kIHN0b3JlZC4gSSB3YW50IHRvIGNoZWNrOiBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCwgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAsIGBjb21wX3BhcmFtc19zdG9yZWAsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCBgenN0ZF9zZXR1cF9wYXJhbXNgLlxuXG5BbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGB6Y29tcF92YWxpZGF0ZV9wYXJhbXNgIGlzIHRoZSBrZXkuIEFuZCBnb29kLCBpdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIG5lZWQgZm9yIHRoaXMuIE5vdyB0byBjaGVjayBpdCBpbiBgZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMjozMi45Mzg1NTAwMjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDQ1MDk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF92YWxpZGF0ZV9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9ODc9Y29uc3QgY2hhciAqemNvbXBfbG9va3VwX2JhY2tlbmRfbmFtZShjb25zdCBjaGFyICpjb21wKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtOTYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6OTc6aW50IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBjaGFyICpjb21wLCBzMzIgbGV2ZWwsIGNvbnN0IGNoYXIgKmRpY3RfcGF0aClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy05OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjMzLjA3MzAwOTQ3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMDUxNzUwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUHJpb3JpdGl6aW5nIENvdmVyYWdlIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgYmVzdCB3YXlzIHRvIGd1aWRlIFN5emthbGxlcidzIGZ1enppbmcgZWZmb3J0cyB3aXRoaW4gdGhpcyBjb21wcmVzc2lvbiBzdWJzeXN0ZW0uIEkndmUgbGFuZGVkIG9uIGB6Y29tcF92YWxpZGF0ZV9wYXJhbXNgIGFzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIFwiRm9jdXNTeW1ib2wuXCIgVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuSSBhbHNvIGNvbnNpZGVyZWQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLCByZWFsaXppbmcgdGhhdCB0aGV5IGFyZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMuIFN5emthbGxlciBmdXp6ZXMgc3lzZnMsIG9mIGNvdXJzZSwgYnV0IGl0IGRvZXMgc28gYnkgd3JpdGluZyBkaXJlY3RseSB0byB0aGUgZmlsZXMsIG5vdCBieSBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLiBTdGlsbCwgbGlzdGluZyB0aGVtIGFzIEZvY3VzU3ltYm9scyB3b3VsZCBiZSBiZW5lZmljaWFsLCBhcyBpdCBjYW4gaGVscCBwcmlvcml0aXplIGNvZGUgY292ZXJhZ2UgaW4gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGV2ZW4gaWYgbm90IGRpcmVjdGx5IGNhbGxlZC5cblxuQSBxdWljayBub3RlOiBJIGFsc28gbmVlZCB0byByZW1lbWJlciB0aGF0IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBpcyAqc3RhdGljKi4gSG1tLiBJdCdzIHN0aWxsIHVzZWZ1bCBmb3IgY292ZXJhZ2UgZ3VpZGFuY2UgaWYgbGlzdGVkLCBidXQgZ2VuZXJhbGx5LCBJIHByZWZlciBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgdGhpcyBraW5kIG9mIHdvcmsuIFNvIEkgdGhpbmsgaXQncyBiZXR0ZXIgdG8gbGlzdCBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCBhbmQgdGhlbiBldmFsdWF0ZSBvdGhlciBvcHRpb25zLlxuXG5MZXQgbWUgdGhpbmsuIEFyZSB0aGVyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyB0aGF0IGFyZSBhdmFpbGFibGU/IEFoLCB3aGF0IGFib3V0IGB6Y29tcF9jcmVhdGVgPyBOb3cgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBvcHRpb24gdG8gaW52ZXN0aWdhdGUuXG5cbkxldCdzIGRvIHRoaXMuIEknbGwgb3BlbiB1cCBgZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNgIHRvIHNlZSB3aGF0IGVsc2UgaXMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEknbSBjb25zaWRlcmluZyBhbGwgcmVsZXZhbnQgcGllY2VzIHRvIG1heGltaXplIFN5emthbGxlcidzIGVmZmVjdGl2ZW5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjM5LjM3ODE4ODEyMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5MTQ4MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjb21wX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0yNTI9dm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI1OS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyNjA6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDI6MzkuNTk3MzQxMjg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzkwMTQ3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFpzdGQgUGFyYW1ldGVyIFNldHVwIGluIGBiYWNrZW5kX3pzdGQuY2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgenN0ZF9zZXR1cF9wYXJhbXNgIHdpdGhpbiBgYmFja2VuZF96c3RkLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGF0IGZ1bmN0aW9uIHN0YXRpYz9cIiBJdCdzIGEga2V5IHF1ZXN0aW9uLCBhcyBpdCBnb3Zlcm5zIHRoZSBzY29wZSBvZiBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQsIGFuZCBhIHN0YXRpYyBmdW5jdGlvbiBzdWdnZXN0cyBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byB0aGF0IHNwZWNpZmljIG1vZHVsZS4gVW5kZXJzdGFuZGluZyBpdHMgdmlzaWJpbGl0eSBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBmaWd1cmluZyBvdXQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBnb3Qgc3RhdGljIGxpbmthZ2U7IHRoYXQgd2lsbCBkaWN0YXRlIGhvdyBkZWVwbHkgSSBuZWVkIHRvIGxvb2sgaW50byBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBJdCdsbCBhbHNvIGluZm9ybSBob3cgZWFzaWx5IGl0IGNhbiBiZSByZWZhY3RvcmVkIG9yIHJldXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMjo0My41MzYzNTg4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM5NTY0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN0ZF9zZXR1cF9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYz0zOD1zdGF0aWMgdm9pZCB6c3RkX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy01MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM6NTE6c3RhdGljIGludCB6c3RkX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYz0yMTM9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX3pzdGQgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjE3LVxcdC5kZXN0cm95X2N0eFxcdD0genN0ZF9kZXN0cm95LFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYzoyMTg6XFx0LnNldHVwX3BhcmFtc1xcdD0genN0ZF9zZXR1cF9wYXJhbXMsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIxOS1cXHQucmVsZWFzZV9wYXJhbXNcXHQ9IHpzdGRfcmVsZWFzZV9wYXJhbXMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjIxLVxcdC5sZXZlbF9taW5cXHQ9IChpbnQpLVpTVERfVEFSR0VUTEVOR1RIX01BWCxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM6MjIyOlxcdC5sZXZlbF9tYXhcXHQ9IC0xLFxcdC8qIHZhbGlkYXRlZCBieSB6c3RkX3NldHVwX3BhcmFtcygpICovXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIyMy1cXHQubmFtZVxcdFxcdD0gXFxcInpzdGRcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMjo0My42MzAzMjIwMTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyNjUzMzA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGEgU3RhZ25hbnQgU3RhdGUgaW4gWlJBTSoqXG5cblJpZ2h0LCB0aGlzIGZlZWxzLi4uIHN0dWNrLiBTb21ldGhpbmcncyBub3QgbW92aW5nLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgcmFyZWx5IGEgZ29vZCBzaWduIGluIHN5c3RlbS1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB3aXRoaW4gYSBjb21wcmVzc2VkIHZpcnR1YWwgUkFNIGNvbnRleHQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaGFuZywgZGVhZGxvY2ssIG9yIGEgY29tcGxldGUgbGFjayBvZiByZXNwb25zZS5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYGNvbXBfcGFyYW1zX3Jlc2V0YCBmdW5jdGlvbiB3aXRoaW4gYHpyYW1fZHJ2LmNgLiBUaGF0IGZ1bmN0aW9uIGhhbmRsZXMgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgb3ZlcmFsbCBsaWZlY3ljbGUgb2YgYSBaUkFNIGRldmljZS4gSWYgdGhlcmUncyBhIHByb2JsZW0gaGVyZSwgbXkgZ3V0IHNheXMgdGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgYSBsaWtlbHkgY2F1c2UuIEl0IHdvdWxkIGJlIG15IGZpcnN0IHN0b3AgZm9yIGRldGVybWluaW5nIGlmIHRoZXJlIGFyZSBlcnJvcnMgb3IgaXNzdWVzIHRoYXQgYXJlIG5vdCBwcm9wZXJseSBhY2NvdW50ZWQgZm9yLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSBvZiB0aGUgY29tcHJlc3Npb24gcGFyYW1ldGVycyByZXNldCBhcmUgYSByb290IGNhdXNlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjQ4LjY1Njg1NzgzOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3MjQ5MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXBfcGFyYW1zX3Jlc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2NTk9c3RhdGljIHZvaWQgY29tcF9hbGdvcml0aG1fc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYWxnKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjY0OnN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjY2PXN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2ODUtXFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY4NjpcXHRjb21wX3BhcmFtc19yZXNldCh6cmFtLCBwcmlvKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjg3LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY4OS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjkwOnN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjkxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MDE9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MDYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcwNzpcXHRjb21wX3BhcmFtc19yZXNldCh6cmFtLCBwcmlvKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzA4LVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjgwOT1zdGF0aWMgdm9pZCB6cmFtX3Nsb3RfZnJlZV9ub3RpZnkoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MjUtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjgyNjpzdGF0aWMgdm9pZCB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4Mjcte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjgzMC1cXHRmb3IgKHByaW8gPSBaUkFNX1BSSU1BUllfQ09NUDsgcHJpbyBcXHUwMDNjIFpSQU1fTUFYX0NPTVBTOyBwcmlvKyspIHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODMxOlxcdFxcdGNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MzItXFx0fVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjgzNT1zdGF0aWMgdm9pZCB6cmFtX2Rlc3Ryb3lfY29tcHMoc3RydWN0IHpyYW0gKnpyYW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODUwLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4NTE6XFx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODUyLX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwNDI9c3RhdGljIGludCB6cmFtX2FkZCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzEwMS1cXHRzbnByaW50Zih6cmFtLVxcdTAwM2VkaXNrLVxcdTAwM2VkaXNrX25hbWUsIDE2LCBcXFwienJhbSVkXFxcIiwgZGV2aWNlX2lkKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTAyOlxcdHpyYW1fY29tcF9wYXJhbXNfcmVzZXQoenJhbSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzEwMy1cXHRjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjQ4Ljg1NDExMjkwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI0NTI0Nzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWlJBTSBDb2RlIGZvciBTeW1ib2wgSW5jbHVzaW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgYGNvbXBfcGFyYW1zX3Jlc2V0YCBpcyBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IHNraXAgaXQgZm9yIG5vdy4gVGhlIGtleSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQncyBiZWVuIGNoYW5nZWQgb3IgYWRkZWQgc2VlbXMgdG8gYmUgYHpjb21wX3ZhbGlkYXRlX3BhcmFtc2AuIFRoYXQncyBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgdG8gYmUgaW4gYEZvY3VzU3ltYm9sc2AuIEFuZCBsZXQncyBzZWUsIGV2ZW4gdGhvdWdoIHRoZXkncmUgc3RhdGljLCBJIHRoaW5rIEkgc2hvdWxkIHByb2JhYmx5IGluY2x1ZGUgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAgYXMgd2VsbCwgYXMgdGhleSBhcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgc3lzZnMgd3JpdGVzIHRoYXQgdHJpZ2dlciB0aGlzIGNvZGUsIHJpZ2h0PyBBaCwgd2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCBkaWQgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNpbmNlIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCAqaXMqIGEgc3lzZnMgc3RvcmUgY2FsbGJhY2ssIGl0IGlzIHRlY2huaWNhbGx5IGFuIGVudHJ5cG9pbnQsIGV2ZW4gaWYgc3RhdGljLCBzbywgeWVhaCwgSSdsbCBpbmNsdWRlIGl0LlxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYFpSQU1fQkFDS0VORF9MWjRgIGtpbmQgb2YgY29uZmlncy4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIEtjb25maWcsIHRoZXJlJ3MgYFpSQU1fQkFDS0VORF9MWjRgLCBgWlJBTV9CQUNLRU5EX0xaNEhDYCwgYFpSQU1fQkFDS0VORF9aU1REYCwgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCwgYFpSQU1fQkFDS0VORF84NDJgLCBhbmQgYFpSQU1fQkFDS0VORF9MWk9gIGFuZCBvZiBjb3Vyc2UgYFpSQU1gIGl0c2VsZi5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgWlJBTV9CQUNLRU5EX0xaT2AgaXMgYSBib29sLCB5dXAsIGJvb2wuIGBaUkFNYCBpcyB0cmlzdGF0ZS4gT2ssIEknbSBqdXN0IHF1aWNrbHkgc2VhcmNoaW5nIGZvciBhbnkgb3RoZXIgY29uZmlncy4gTGV0IG1lIGNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay96cmFtL01ha2VmaWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDM6MDYuMDk5MzYzNDE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHR6cmFtLXlcXHQ6PVxcdHpjb21wLm8genJhbV9kcnYub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9MWk8pXFx0XFx0Kz0gYmFja2VuZF9sem9ybGUubyBiYWNrZW5kX2x6by5vXFxuICAgNjpcXHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9MWjQpXFx0XFx0Kz0gYmFja2VuZF9sejQub1xcbiAgIDc6XFx0enJhbS0kKENPTkZJR19aUkFNX0JBQ0tFTkRfTFo0SEMpXFx0Kz0gYmFja2VuZF9sejRoYy5vXFxuICAgODpcXHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9aU1REKVxcdCs9IGJhY2tlbmRfenN0ZC5vXFxuICAgOTpcXHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9ERUZMQVRFKVxcdCs9IGJhY2tlbmRfZGVmbGF0ZS5vXFxuICAxMDpcXHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF84NDIpXFx0XFx0Kz0gYmFja2VuZF84NDIub1xcbiAgMTE6XFx0XFxuICAxMjpcXHRvYmotJChDT05GSUdfWlJBTSlcXHQrPVxcdHpyYW0ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMzowNi4wOTk0NDEzODlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MDc0MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24gYW5kIENhbGwgQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCB5ZXAsIEkndmUganVzdCBkb3VibGUtY2hlY2tlZCB0aG9zZSBjb25maWdzIGFuZCB0aGV5IGFyZSBkZWZpbml0ZWx5IGNvcnJlY3QuIE5vIGlzc3VlcyB0aGVyZS4gTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UncmUgbm90IG1pc3NpbmcgYW55dGhpbmcgaW4gaG93IGB6Y29tcF92YWxpZGF0ZV9wYXJhbXNgIGlzIHV0aWxpemVkLiBUaW1lIHRvIGludmVzdGlnYXRlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIExldCdzIHRyYWNlIHRob3NlIGNhbGxzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgYXR0ZW50aW9uLiBJdCdzIHRoYXQga2luZCBvZiBkaWxpZ2VudCBhdHRlbnRpb24gdG8gZGV0YWlsIHRoYXQgd2lsbCBlbnN1cmUgZXZlcnl0aGluZyBpcyByb2NrIHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDM6MDkuNjgwMTg2MDc0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ5Mzk0ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjb21wX3ZhbGlkYXRlX3BhcmFtc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz04Nz1jb25zdCBjaGFyICp6Y29tcF9sb29rdXBfYmFja2VuZF9uYW1lKGNvbnN0IGNoYXIgKmNvbXApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy05Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzo5NzppbnQgemNvbXBfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IGNoYXIgKmNvbXAsIHMzMiBsZXZlbCwgY29uc3QgY2hhciAqZGljdF9wYXRoKVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTk4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTg5PWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6OTA6aW50IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBjaGFyICpjb21wLCBzMzIgbGV2ZWwsIGNvbnN0IGNoYXIgKmRpY3RfcGF0aCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtOTEtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzI4PXN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgwMy1cXHRpZiAoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTgwNDpcXHRcXHRyZXQgPSB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dLCBsZXZlbCxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODA1LVxcdFxcdFxcdFxcdFxcdCAgICBkaWN0X3BhdGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMzoxNC40Mjk1ODU2NTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MTc2MDU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgbGlrZSB5b3U6XG5cbioqVGFyZ2V0ZWQgQ29kZSBFeHBsb3JhdGlvbiBmb3IgUGFyYW1ldGVyIFZhbGlkYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGhlcmUgaXMgY2xlYXI6IHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYWxnb3JpdGhtIHBhcmFtZXRlcnMgYXJlIHZhbGlkYXRlZCBhbmQgcmVzZXQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygb3VyIHN5c3RlbS4gSXQncyBldmlkZW50IHRoYXQgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LCB0aGUgb25lIHdlJ3JlIHRyYWNraW5nLCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYC5cblxuVGhlcmVmb3JlLCBteSBmb2N1cyBuYXJyb3dzIHRvIGEgc3BlY2lmaWMgc2V0IG9mIHN5bWJvbHMuIEkgbmVlZCB0byBjbG9zZWx5IGV4YW1pbmU6XG5cbiogICBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCAtIFRoaXMgaXMgY2xlYXJseSBhIGtleSB2YWxpZGF0aW9uIHBvaW50LlxuKiAgIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCAtIE9idmlvdXNseSB0aGUgZW50cnkgcG9pbnQgZm9yIHdoYXQgd2UncmUgdHJhY2tpbmcuXG4qICAgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgIC0gTGlrZWx5IHNvbWUga2luZCBvZiBpbnRlcm5hbCBzdG9yYWdlIG9yIG1hbmFnZW1lbnQgcmVsYXRlZCB0byB0aGUgYWxnb3JpdGhtcy5cblxuR2l2ZW4gdGhlIHNpbmdsZSBjYWxsIG9yaWdpbiwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgIGlzICppbmRlZWQqIHRoZSBzb2xlIGNhbGxlciBvZiB0aGUgYGNvbXBfcGFyYW1zX3Jlc2V0YCBmdW5jdGlvbi4gVGhpcyBxdWljayBjaGVjayB3aWxsIGFsbG93IG1lIHRvIHZlcmlmeSB0aGUgYXNzdW1wdGlvbnMgSSdtIG1ha2luZyBhdCB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg4MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAzOjE4LjYxMTM0OTIyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NDA5Njg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wX3BhcmFtc19yZXNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjU5PXN0YXRpYyB2b2lkIGNvbXBfYWxnb3JpdGhtX3NldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmFsZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjMtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY2NDpzdGF0aWMgdm9pZCBjb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjUtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY2Nj1zdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjg1LVxcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2ODY6XFx0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY4Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2ODktXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY5MDpzdGF0aWMgdm9pZCBjb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8pXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY5MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzAxPXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzA2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3MDc6XFx0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcwOC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4MDk9c3RhdGljIHZvaWQgenJhbV9zbG90X2ZyZWVfbm90aWZ5KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODI1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4MjY6c3RhdGljIHZvaWQgenJhbV9jb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODI3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MzAtXFx0Zm9yIChwcmlvID0gWlJBTV9QUklNQVJZX0NPTVA7IHByaW8gXFx1MDAzYyBaUkFNX01BWF9DT01QUzsgcHJpbysrKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjgzMTpcXHRcXHRjb21wX3BhcmFtc19yZXNldCh6cmFtLCBwcmlvKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODMyLVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4MzU9c3RhdGljIHZvaWQgenJhbV9kZXN0cm95X2NvbXBzKHN0cnVjdCB6cmFtICp6cmFtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODUxOlxcdHpyYW1fY29tcF9wYXJhbXNfcmVzZXQoenJhbSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1Mi19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDQyPXN0YXRpYyBpbnQgenJhbV9hZGQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxMDEtXFx0c25wcmludGYoenJhbS1cXHUwMDNlZGlzay1cXHUwMDNlZGlza19uYW1lLCAxNiwgXFxcInpyYW0lZFxcXCIsIGRldmljZV9pZCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzEwMjpcXHR6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHpyYW0pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxMDMtXFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIFpSQU1fUFJJTUFSWV9DT01QLCBkZWZhdWx0X2NvbXByZXNzb3IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMzoyMy44NTU0NTIxMjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU0NDY5MDU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWlJBTSBDb21wcmVzc2lvbiBQYXJhbWV0ZXIgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJldmVhbHMgdGhhdCBgY29tcF9wYXJhbXNfcmVzZXRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUsIHRyaWdnZXJlZCBmcm9tIHNldmVyYWwgY3JpdGljYWwgcG9pbnRzOiBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAsIGBjb21wX3BhcmFtc19zdG9yZWAsIGFuZCBgenJhbV9jb21wX3BhcmFtc19yZXNldGAuIEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIGB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0YCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYHpyYW1fZGVzdHJveV9jb21wc2AgYW5kIGB6cmFtX2FkZGAsIHdoaWNoIG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlua2VkIGR1cmluZyBkZXZpY2UgY3JlYXRpb24gYW5kIHJlbGF0ZWQgc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBhbGwgcG9pbnRzIHRvIGEgZGlyZWN0IHBhdGggdG8gdXNlciBpbnRlcmFjdGlvbiBhbmQgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQgbWUgaW52ZXN0aWdhdGUgYHpzdGRfc2V0dXBfcGFyYW1zYC4gSXQncyBiZWluZyBpbnZva2VkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYHpjb21wX2NyZWF0ZWAuIEFuZCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyBgemNvbXBfY3JlYXRlYCBpc24ndCBzdGF0aWMsIHN1Z2dlc3RpbmcgaXQncyBhY3RpdmVseSBpbnZvbHZlZCBkdXJpbmcgY29tcHJlc3Npb24gc3RyZWFtIGluaXRpYWxpemF0aW9uLiBUaGlzIGNhbGxzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cbkkgbmVlZCBhIGNsZWFyZXIgcGljdHVyZSwgc28gSSdsbCBjcmVhdGUgYSBjaGVja2xpc3Qgb2Yga2V5IGZ1bmN0aW9uczpcbiogICBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYFxuKiAgIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYFxuKiAgIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYFxuKiAgIGB6Y29tcF9jcmVhdGVgXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnM6XG4qICAgYFpSQU1gXG4qICAgYFpSQU1fQkFDS0VORF9MWjRgXG4qICAgYFpSQU1fQkFDS0VORF9MWjRIQ2BcbiogICBgWlJBTV9CQUNLRU5EX1pTVERgXG4qICAgYFpSQU1fQkFDS0VORF9ERUZMQVRFYFxuKiAgIGBaUkFNX0JBQ0tFTkRfODQyYFxuKiAgIGBaUkFNX0JBQ0tFTkRfTFpPYFxuXG5XYWl0LCB0aGVyZSdzIGEgZGVwZW5kZW5jeSBvbiBgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpc24ndCBtaXNzZWQuIExldCdzIGxvb2sgYXQgYFpSQU1fQkFDS0VORF9GT1JDRV9MWk9gLCBhcyBpdCdzIGp1c3QgYSBjb25maWcuIFRvIGF2b2lkIGNsdXR0ZXIgSSB3aWxsIHNpbXBseSBsaXN0IGBaUkFNX0JBQ0tFTkRfTFpPYC5cblxuT2theSwgd2hhdCdzIHRoZSBwdXJwb3NlIG9mIGFsbCB0aGlzPyBUaGUgZ29hbCBpcyB0byBhZGQgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIC0gdGhpbmdzIGxpa2UgdGhlIGNvbXByZXNzaW9uIGxldmVsIGFuZCBkaWN0aW9uYXJ5LiBBZGRpdGlvbmFsbHksIHRoZSBwYXJhbWV0ZXJzIHdpbGwgYmUgcmVzZXQgd2hlbiB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGNoYW5nZXMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGFuZCB6Y29tcCBiYWNrZW5kIG9wZXJhdGlvbnMsIGFsbCBvZiB3aGljaCBhcmUgdXNlci1hY2Nlc3NpYmxlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuIFRoYXQncyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJ20gcmVhZHkgdG8gY3JhZnQgYSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTIsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAzOjMyLjQwMDE0NjcyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjMyMDY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNEhDXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfWlNURFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0RFRkxBVEVcIixcbiAgICBcIlpSQU1fQkFDS0VORF84NDJcIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWk9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF92YWxpZGF0ZV9wYXJhbXNcIixcbiAgICBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgICBcIl9fY29tcF9hbGdvcml0aG1fc3RvcmVcIixcbiAgICBcInpjb21wX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIChsZXZlbCBhbmQgZGljdGlvbmFyeSkgYW5kIHJlc2V0cyBwYXJhbWV0ZXJzIHdoZW4gdGhlIGFsZ29yaXRobSBpcyBjaGFuZ2VkLiBJdCBtb2RpZmllcyBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYW5kIHpjb21wIGJhY2tlbmQgb3BzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNEhDXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfWlNURFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0RFRkxBVEVcIixcbiAgICBcIlpSQU1fQkFDS0VORF84NDJcIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWk9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF92YWxpZGF0ZV9wYXJhbXNcIixcbiAgICBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgICBcIl9fY29tcF9hbGdvcml0aG1fc3RvcmVcIixcbiAgICBcInpjb21wX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIChsZXZlbCBhbmQgZGljdGlvbmFyeSkgYW5kIHJlc2V0cyBwYXJhbWV0ZXJzIHdoZW4gdGhlIGFsZ29yaXRobSBpcyBjaGFuZ2VkLiBJdCBtb2RpZmllcyBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYW5kIHpjb21wIGJhY2tlbmQgb3BzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlsw2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 08:36:30 +0000 UTC FinishedAt: 2026-07-31 09:03:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "10e04ab3f0bf481bc01982e4301b9f7475a7f7d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_LZ4", "ZRAM_BACKEND_LZ4HC", "ZRAM_BACKEND_ZSTD", "ZRAM_BACKEND_DEFLATE", "ZRAM_BACKEND_842", "ZRAM_BACKEND_LZO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "10e04ab3f0bf481bc01982e4301b9f7475a7f7d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_BACKEND_LZ4", "ZRAM_BACKEND_LZ4HC", "ZRAM_BACKEND_ZSTD", "ZRAM_BACKEND_DEFLATE", "ZRAM_BACKEND_842", "ZRAM_BACKEND_LZO" ], "series_id": "e9c84e25-dd2f-4b60-9024-7283f1273b59" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "zcomp_validate_params", "algorithm_params_store", "__comp_algorithm_store", "zcomp_create" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNCYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFo0SEMmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX1pTVEQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0RFRkxBVEUmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EXzg0MiYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFpPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emNvbXBfdmFsaWRhdGVfcGFyYW1zJiMzNDssCiAgICAmIzM0O2FsZ29yaXRobV9wYXJhbXNfc3RvcmUmIzM0OywKICAgICYjMzQ7X19jb21wX2FsZ29yaXRobV9zdG9yZSYjMzQ7LAogICAgJiMzNDt6Y29tcF9jcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB6cmFtIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgKGxldmVsIGFuZCBkaWN0aW9uYXJ5KSBhbmQgcmVzZXRzIHBhcmFtZXRlcnMgd2hlbiB0aGUgYWxnb3JpdGhtIGlzIGNoYW5nZWQuIEl0IG1vZGlmaWVzIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyBhbmQgemNvbXAgYmFja2VuZCBvcHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHpyYW0gc3lzZnMgYXR0cmlidXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZlMGQ5YTE1ODA2NGU4Y2ZhMTEyY2VhNGRlZWE5MzAyZWQ3NDI2NTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwOTowMTo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jXG5pbmRleCAxMGQ5ZDVjNjBmNTMxLi5kNzk2ZWJkYTFmYTBkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jXG5AQCAtNTcsNSAmIzQzOzU3LDYgQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MiA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBkZXN0cm95Xzg0MixcbiBcdC5zZXR1cF9wYXJhbXNcdD0gc2V0dXBfcGFyYW1zXzg0MixcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSByZWxlYXNlX3BhcmFtc184NDIsXG4mIzQzO1x0LmNhcHNcdFx0PSAwLFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDs4NDJcJiMzNDssXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbmluZGV4IGY5MmE1MmE3MjBkMWUuLmNlZGMzZGFhZDMzYWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xuQEAgLTE0NCw1ICYjNDM7MTQ0LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2RlZmxhdGUgPSB7XG4gXHQuZGVzdHJveV9jdHhcdD0gZGVmbGF0ZV9kZXN0cm95LFxuIFx0LnNldHVwX3BhcmFtc1x0PSBkZWZsYXRlX3NldHVwX3BhcmFtcyxcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSBkZWZsYXRlX3JlbGVhc2VfcGFyYW1zLFxuJiM0MztcdC5jYXBzXHRcdD0gWkNPTVBfQ0FQX0xFVkVMLFxuJiM0MztcdC5sZXZlbF9taW5cdD0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLFxuJiM0MztcdC5sZXZlbF9tYXhcdD0gWl9CRVNUX0NPTVBSRVNTSU9OLFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDtkZWZsYXRlXCYjMzQ7LFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uYmQxZTVjYTRkMTM0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuQEAgLTE0Niw1ICYjNDM7MTQ2LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NCA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBsejRfZGVzdHJveSxcbiBcdC5zZXR1cF9wYXJhbXNcdD0gbHo0X3NldHVwX3BhcmFtcyxcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSBsejRfcmVsZWFzZV9wYXJhbXMsXG4mIzQzO1x0LmNhcHNcdFx0PSBaQ09NUF9DQVBfRElDVCB8IFpDT01QX0NBUF9MRVZFTCxcbiYjNDM7XHQubGV2ZWxfbWluXHQ9IExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVCxcbiYjNDM7XHQubGV2ZWxfbWF4XHQ9IDY1NTM1LFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDtsejRcJiMzNDssXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuY1xuaW5kZXggZjZhMzM2YWNmZTIwMi4uMGUwZDdjNjhhN2Q0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbkBAIC0xMjQsNSAmIzQzOzEyNCw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejRoYyA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBsejRoY19kZXN0cm95LFxuIFx0LnNldHVwX3BhcmFtc1x0PSBsejRoY19zZXR1cF9wYXJhbXMsXG4gXHQucmVsZWFzZV9wYXJhbXNcdD0gbHo0aGNfcmVsZWFzZV9wYXJhbXMsXG4mIzQzO1x0LmNhcHNcdFx0PSBaQ09NUF9DQVBfRElDVCB8IFpDT01QX0NBUF9MRVZFTCxcbiYjNDM7XHQubGV2ZWxfbWluXHQ9IExaNEhDX01JTl9DTEVWRUwsXG4mIzQzO1x0LmxldmVsX21heFx0PSBMWjRIQ19NQVhfQ0xFVkVMLFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDtsejRoY1wmIzM0OyxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbmluZGV4IDRjOTA2YmVhYWU2YjMuLjk2NWYwMDdlMmNhODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbkBAIC01NSw1ICYjNDM7NTUsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IGx6b19kZXN0cm95LFxuIFx0LnNldHVwX3BhcmFtc1x0PSBsem9fc2V0dXBfcGFyYW1zLFxuIFx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6b19yZWxlYXNlX3BhcmFtcyxcbiYjNDM7XHQuY2Fwc1x0XHQ9IDAsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O2x6b1wmIzM0OyxcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbmluZGV4IDEwNjQwYzk2Y2JmY2EuLjc1N2I0NTk4YmUwMzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcbkBAIC01NSw1ICYjNDM7NTUsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IGx6b3JsZV9kZXN0cm95LFxuIFx0LnNldHVwX3BhcmFtc1x0PSBsem9ybGVfc2V0dXBfcGFyYW1zLFxuIFx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6b3JsZV9yZWxlYXNlX3BhcmFtcyxcbiYjNDM7XHQuY2Fwc1x0XHQ9IDAsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O2x6by1ybGVcJiMzNDssXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbmluZGV4IGQwMGI1NDgwNTZkYzIuLjgwMWVlOGVlNGJhNjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuY1xuQEAgLTYwLDYgJiM0Mzs2MCwxMSBAQCBzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcdHBhcmFtcy1cdTAwM2VkcnZfZGF0YSA9IHpwO1xuIFx0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxuIFx0XHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSB6c3RkX2RlZmF1bHRfY2xldmVsKCk7XG4mIzQzO1x0ZWxzZSBpZiAocGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzYyAtKGludClaU1REX1RBUkdFVExFTkdUSF9NQVggfHxcbiYjNDM7XHRcdCBwYXJhbXMtXHUwMDNlbGV2ZWwgXHUwMDNlIHpzdGRfbWF4X2NsZXZlbCgpKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7enN0ZDogaW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCAlZFxcblwmIzM0OywgcGFyYW1zLVx1MDAzZWxldmVsKTtcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1x0fVxuIFxuIFx0enAtXHUwMDNlY3BybSA9IHpzdGRfZ2V0X3BhcmFtcyhwYXJhbXMtXHUwMDNlbGV2ZWwsIFBBR0VfU0laRSk7XG4gXG5AQCAtMTYxLDcgJiM0MzsxNjYsNiBAQCBzdGF0aWMgaW50IHpzdGRfY3JlYXRlKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcywgc3RydWN0IHpjb21wX2N0eCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyb3I6XG4tXHR6c3RkX3JlbGVhc2VfcGFyYW1zKHBhcmFtcyk7XG4gXHR6c3RkX2Rlc3Ryb3koY3R4KTtcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbkBAIC0yMTMsNSAmIzQzOzIxNyw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IHpzdGRfZGVzdHJveSxcbiBcdC5zZXR1cF9wYXJhbXNcdD0genN0ZF9zZXR1cF9wYXJhbXMsXG4gXHQucmVsZWFzZV9wYXJhbXNcdD0genN0ZF9yZWxlYXNlX3BhcmFtcyxcbiYjNDM7XHQuY2Fwc1x0XHQ9IFpDT01QX0NBUF9ESUNUIHwgWkNPTVBfQ0FQX0xFVkVMLFxuJiM0MztcdC5sZXZlbF9taW5cdD0gKGludCktWlNURF9UQVJHRVRMRU5HVEhfTUFYLFxuJiM0MztcdC5sZXZlbF9tYXhcdD0gLTEsXHQvKiB2YWxpZGF0ZWQgYnkgenN0ZF9zZXR1cF9wYXJhbXMoKSAqL1xuIFx0Lm5hbWVcdFx0PSBcJiMzNDt6c3RkXCYjMzQ7LFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuaW5kZXggOTc0YzQ2OTE4ODdlNi4uMTQ5ZWZmNDU5MGUxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuQEAgLTk0LDYgJiM0Mzs5NCwzMyBAQCBjb25zdCBjaGFyICp6Y29tcF9sb29rdXBfYmFja2VuZF9uYW1lKGNvbnN0IGNoYXIgKmNvbXApXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4mIzQzO2ludCB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoY29uc3QgY2hhciAqY29tcCwgczMyIGxldmVsLCBjb25zdCBjaGFyICpkaWN0X3BhdGgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgemNvbXBfb3BzICpiYWNrZW5kID0gbG9va3VwX2JhY2tlbmRfb3BzKGNvbXApO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJhY2tlbmQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRpY3RfcGF0aCBcdTAwMjZcdTAwMjYgIShiYWNrZW5kLVx1MDAzZWNhcHMgXHUwMDI2IFpDT01QX0NBUF9ESUNUKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O3pyYW06ICVzIGRvZXMgbm90IHN1cHBvcnQgZGljdGlvbmFyeVxcblwmIzM0OywgY29tcCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuJiM0MztcdFx0aWYgKCEoYmFja2VuZC1cdTAwM2VjYXBzIFx1MDAyNiBaQ09NUF9DQVBfTEVWRUwpKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDt6cmFtOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGxldmVsXFxuXCYjMzQ7LCBjb21wKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogbGV2ZWxfbWF4ID09IC0xIG1lYW5zIHZhbGlkYXRlIGluIC5zZXR1cF9wYXJhbXMoKSAqL1xuJiM0MztcdFx0aWYgKGJhY2tlbmQtXHUwMDNlbGV2ZWxfbWF4IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAobGV2ZWwgXHUwMDNjIGJhY2tlbmQtXHUwMDNlbGV2ZWxfbWluIHx8IGxldmVsIFx1MDAzZSBiYWNrZW5kLVx1MDAzZWxldmVsX21heCkpIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O3pyYW06IGludmFsaWQgbGV2ZWwgJWQgZm9yICVzXFxuXCYjMzQ7LCBsZXZlbCwgY29tcCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBzaG93IGF2YWlsYWJsZSBjb21wcmVzc29ycyAqL1xuIHNzaXplX3QgemNvbXBfYXZhaWxhYmxlX3Nob3coY29uc3QgY2hhciAqY29tcCwgY2hhciAqYnVmLCBzc2l6ZV90IGF0KVxuIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaCBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG5pbmRleCA4MWEwZjNmNmZmNDg3Li4zNjYyNTAwNTBkNGFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG5AQCAtNyw2ICYjNDM7Nyw5IEBAXG4gXG4gI2RlZmluZSBaQ09NUF9QQVJBTV9OT1RfU0VUXHRJTlRfTUlOXG4gXG4mIzQzOyNkZWZpbmUgWkNPTVBfQ0FQX0RJQ1RcdFx0QklUKDApXHQvKiBkaWN0aW9uYXJ5IHN1cHBvcnQgKi9cbiYjNDM7I2RlZmluZSBaQ09NUF9DQVBfTEVWRUxcdFx0QklUKDEpXHQvKiBhZGp1c3RhYmxlIGNvbXByZXNzaW9uIGxldmVsICovXG4mIzQzO1xuIHN0cnVjdCBkZWZsYXRlX3BhcmFtcyB7XG4gXHRzMzIgd2luYml0cztcbiB9O1xuQEAgLTY2LDYgJiM0Mzs2OSw5IEBAIHN0cnVjdCB6Y29tcF9vcHMge1xuIFx0aW50ICgqc2V0dXBfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIFx0dm9pZCAoKnJlbGVhc2VfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIFxuJiM0MztcdHVuc2lnbmVkIGludCBjYXBzO1xuJiM0MztcdHMzMiBsZXZlbF9taW47XG4mIzQzO1x0czMyIGxldmVsX21heDtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gfTtcbiBcbkBAIC04MSw2ICYjNDM7ODcsNyBAQCBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpO1xuIGludCB6Y29tcF9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSk7XG4gc3NpemVfdCB6Y29tcF9hdmFpbGFibGVfc2hvdyhjb25zdCBjaGFyICpjb21wLCBjaGFyICpidWYsIHNzaXplX3QgYXQpO1xuIGNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XG4mIzQzO2ludCB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoY29uc3QgY2hhciAqY29tcCwgczMyIGxldmVsLCBjb25zdCBjaGFyICpkaWN0X3BhdGgpO1xuIFxuIHN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbiB2b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBhY2U2NWM1ODYwNzJiLi5iNDU4NWIzYmM1NzZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtMTY2MSw2ICYjNDM7MTY2MSw4IEBAIHN0YXRpYyB2b2lkIGNvbXBfYWxnb3JpdGhtX3NldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmFsZylcbiBcdHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dID0gYWxnO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKTtcbiYjNDM7XG4gc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmFsZztcbkBAIC0xNjgxLDYgJiM0MzsxNjgzLDcgQEAgc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKVxuIFx0fVxuIFxuIFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XG4mIzQzO1x0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTcwOSw4ICYjNDM7MTcxMiwxMSBAQCBzdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuIFx0XHRcdFx0XHRcdElOVF9NQVgsXG4gXHRcdFx0XHRcdFx0TlVMTCxcbiBcdFx0XHRcdFx0XHRSRUFESU5HX1BPTElDWSk7XG4tXHRcdGlmIChzeiBcdTAwM2MgMClcbiYjNDM7XHRcdGlmIChzeiBcdTAwM2M9IDApIHtcbiYjNDM7XHRcdFx0cHJfZXJyKFwmIzM0O3pyYW06IGZhaWxlZCB0byBsb2FkIGRpY3Rpb25hcnkgJXMgKGVycj0lemQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgZGljdF9wYXRoLCBzeik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHR6cmFtLVx1MDAzZXBhcmFtc1twcmlvXS5kaWN0X3N6ID0gc3o7XG5AQCAtMTc5NCw2ICYjNDM7MTgwMCwxMyBAQCBzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoenJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10pIHtcbiYjNDM7XHRcdHJldCA9IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyh6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSwgbGV2ZWwsXG4mIzQzO1x0XHRcdFx0XHQgICAgZGljdF9wYXRoKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldCA9IGNvbXBfcGFyYW1zX3N0b3JlKHpyYW0sIHByaW8sIGxldmVsLCBkaWN0X3BhdGgsIFx1MDAyNmRlZmxhdGVfcGFyYW1zKTtcbiBcdHJldHVybiByZXQgPyByZXQgOiBsZW47XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWjQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNEhDJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9aU1REJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9ERUZMQVRFJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF84NDImIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX3ZhbGlkYXRlX3BhcmFtcyYjMzQ7LAogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O19fY29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7emNvbXBfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIChsZXZlbCBhbmQgZGljdGlvbmFyeSkgYW5kIHJlc2V0cyBwYXJhbWV0ZXJzIHdoZW4gdGhlIGFsZ29yaXRobSBpcyBjaGFuZ2VkLiBJdCBtb2RpZmllcyBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYW5kIHpjb21wIGJhY2tlbmQgb3BzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZTBkOWExNTgwNjRlOGNmYTExMmNlYTRkZWVhOTMwMmVkNzQyNjU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDk6MDE6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jCmluZGV4IDEwZDlkNWM2MGY1MzEuLmQ3OTZlYmRhMWZhMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jCkBAIC01Nyw1ICYjNDM7NTcsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyID0gewogCS5kZXN0cm95X2N0eAk9IGRlc3Ryb3lfODQyLAogCS5zZXR1cF9wYXJhbXMJPSBzZXR1cF9wYXJhbXNfODQyLAogCS5yZWxlYXNlX3BhcmFtcwk9IHJlbGVhc2VfcGFyYW1zXzg0MiwKJiM0MzsJLmNhcHMJCT0gMCwKIAkubmFtZQkJPSAmIzM0Ozg0MiYjMzQ7LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuYwppbmRleCBmOTJhNTJhNzIwZDFlLi5jZWRjM2RhYWQzM2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jCkBAIC0xNDQsNSAmIzQzOzE0NCw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9kZWZsYXRlID0gewogCS5kZXN0cm95X2N0eAk9IGRlZmxhdGVfZGVzdHJveSwKIAkuc2V0dXBfcGFyYW1zCT0gZGVmbGF0ZV9zZXR1cF9wYXJhbXMsCiAJLnJlbGVhc2VfcGFyYW1zCT0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcywKJiM0MzsJLmNhcHMJCT0gWkNPTVBfQ0FQX0xFVkVMLAomIzQzOwkubGV2ZWxfbWluCT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAomIzQzOwkubGV2ZWxfbWF4CT0gWl9CRVNUX0NPTVBSRVNTSU9OLAogCS5uYW1lCQk9ICYjMzQ7ZGVmbGF0ZSYjMzQ7LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uYmQxZTVjYTRkMTM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMKQEAgLTE0Niw1ICYjNDM7MTQ2LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NCA9IHsKIAkuZGVzdHJveV9jdHgJPSBsejRfZGVzdHJveSwKIAkuc2V0dXBfcGFyYW1zCT0gbHo0X3NldHVwX3BhcmFtcywKIAkucmVsZWFzZV9wYXJhbXMJPSBsejRfcmVsZWFzZV9wYXJhbXMsCiYjNDM7CS5jYXBzCQk9IFpDT01QX0NBUF9ESUNUIHwgWkNPTVBfQ0FQX0xFVkVMLAomIzQzOwkubGV2ZWxfbWluCT0gTFo0X0FDQ0VMRVJBVElPTl9ERUZBVUxULAomIzQzOwkubGV2ZWxfbWF4CT0gNjU1MzUsCiAJLm5hbWUJCT0gJiMzNDtsejQmIzM0OywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYwppbmRleCBmNmEzMzZhY2ZlMjAyLi4wZTBkN2M2OGE3ZDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmMKQEAgLTEyNCw1ICYjNDM7MTI0LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NGhjID0gewogCS5kZXN0cm95X2N0eAk9IGx6NGhjX2Rlc3Ryb3ksCiAJLnNldHVwX3BhcmFtcwk9IGx6NGhjX3NldHVwX3BhcmFtcywKIAkucmVsZWFzZV9wYXJhbXMJPSBsejRoY19yZWxlYXNlX3BhcmFtcywKJiM0MzsJLmNhcHMJCT0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsCiYjNDM7CS5sZXZlbF9taW4JPSBMWjRIQ19NSU5fQ0xFVkVMLAomIzQzOwkubGV2ZWxfbWF4CT0gTFo0SENfTUFYX0NMRVZFTCwKIAkubmFtZQkJPSAmIzM0O2x6NGhjJiMzNDssCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYwppbmRleCA0YzkwNmJlYWFlNmIzLi45NjVmMDA3ZTJjYTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYwpAQCAtNTUsNSAmIzQzOzU1LDYgQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6byA9IHsKIAkuZGVzdHJveV9jdHgJPSBsem9fZGVzdHJveSwKIAkuc2V0dXBfcGFyYW1zCT0gbHpvX3NldHVwX3BhcmFtcywKIAkucmVsZWFzZV9wYXJhbXMJPSBsem9fcmVsZWFzZV9wYXJhbXMsCiYjNDM7CS5jYXBzCQk9IDAsCiAJLm5hbWUJCT0gJiMzNDtsem8mIzM0OywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jCmluZGV4IDEwNjQwYzk2Y2JmY2EuLjc1N2I0NTk4YmUwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jCkBAIC01NSw1ICYjNDM7NTUsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0gewogCS5kZXN0cm95X2N0eAk9IGx6b3JsZV9kZXN0cm95LAogCS5zZXR1cF9wYXJhbXMJPSBsem9ybGVfc2V0dXBfcGFyYW1zLAogCS5yZWxlYXNlX3BhcmFtcwk9IGx6b3JsZV9yZWxlYXNlX3BhcmFtcywKJiM0MzsJLmNhcHMJCT0gMCwKIAkubmFtZQkJPSAmIzM0O2x6by1ybGUmIzM0OywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMKaW5kZXggZDAwYjU0ODA1NmRjMi4uODAxZWU4ZWU0YmE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYwpAQCAtNjAsNiAmIzQzOzYwLDExIEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKQogCXBhcmFtcy0mZ3Q7ZHJ2X2RhdGEgPSB6cDsKIAlpZiAocGFyYW1zLSZndDtsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKQogCQlwYXJhbXMtJmd0O2xldmVsID0genN0ZF9kZWZhdWx0X2NsZXZlbCgpOwomIzQzOwllbHNlIGlmIChwYXJhbXMtJmd0O2xldmVsICZsdDsgLShpbnQpWlNURF9UQVJHRVRMRU5HVEhfTUFYIHx8CiYjNDM7CQkgcGFyYW1zLSZndDtsZXZlbCAmZ3Q7IHpzdGRfbWF4X2NsZXZlbCgpKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDt6c3RkOiBpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXG4mIzM0OywgcGFyYW1zLSZndDtsZXZlbCk7CiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwl9CiAKIAl6cC0mZ3Q7Y3BybSA9IHpzdGRfZ2V0X3BhcmFtcyhwYXJhbXMtJmd0O2xldmVsLCBQQUdFX1NJWkUpOwogCkBAIC0xNjEsNyAmIzQzOzE2Niw2IEBAIHN0YXRpYyBpbnQgenN0ZF9jcmVhdGUoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgpCiAJcmV0dXJuIDA7CiAKIGVycm9yOgotCXpzdGRfcmVsZWFzZV9wYXJhbXMocGFyYW1zKTsKIAl6c3RkX2Rlc3Ryb3koY3R4KTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIxMyw1ICYjNDM7MjE3LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX3pzdGQgPSB7CiAJLmRlc3Ryb3lfY3R4CT0genN0ZF9kZXN0cm95LAogCS5zZXR1cF9wYXJhbXMJPSB6c3RkX3NldHVwX3BhcmFtcywKIAkucmVsZWFzZV9wYXJhbXMJPSB6c3RkX3JlbGVhc2VfcGFyYW1zLAomIzQzOwkuY2FwcwkJPSBaQ09NUF9DQVBfRElDVCB8IFpDT01QX0NBUF9MRVZFTCwKJiM0MzsJLmxldmVsX21pbgk9IChpbnQpLVpTVERfVEFSR0VUTEVOR1RIX01BWCwKJiM0MzsJLmxldmVsX21heAk9IC0xLAkvKiB2YWxpZGF0ZWQgYnkgenN0ZF9zZXR1cF9wYXJhbXMoKSAqLwogCS5uYW1lCQk9ICYjMzQ7enN0ZCYjMzQ7LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMKaW5kZXggOTc0YzQ2OTE4ODdlNi4uMTQ5ZWZmNDU5MGUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMKQEAgLTk0LDYgJiM0Mzs5NCwzMyBAQCBjb25zdCBjaGFyICp6Y29tcF9sb29rdXBfYmFja2VuZF9uYW1lKGNvbnN0IGNoYXIgKmNvbXApCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztpbnQgemNvbXBfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IGNoYXIgKmNvbXAsIHMzMiBsZXZlbCwgY29uc3QgY2hhciAqZGljdF9wYXRoKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZCA9IGxvb2t1cF9iYWNrZW5kX29wcyhjb21wKTsKJiM0MzsKJiM0MzsJaWYgKCFiYWNrZW5kKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChkaWN0X3BhdGggJmFtcDsmYW1wOyAhKGJhY2tlbmQtJmd0O2NhcHMgJmFtcDsgWkNPTVBfQ0FQX0RJQ1QpKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDt6cmFtOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGRpY3Rpb25hcnlcbiYjMzQ7LCBjb21wKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkgewomIzQzOwkJaWYgKCEoYmFja2VuZC0mZ3Q7Y2FwcyAmYW1wOyBaQ09NUF9DQVBfTEVWRUwpKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7enJhbTogJXMgZG9lcyBub3Qgc3VwcG9ydCBsZXZlbFxuJiMzNDssIGNvbXApOwomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCX0KJiM0MzsJCS8qIGxldmVsX21heCA9PSAtMSBtZWFucyB2YWxpZGF0ZSBpbiAuc2V0dXBfcGFyYW1zKCkgKi8KJiM0MzsJCWlmIChiYWNrZW5kLSZndDtsZXZlbF9tYXggJmd0Oz0gMCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGxldmVsICZsdDsgYmFja2VuZC0mZ3Q7bGV2ZWxfbWluIHx8IGxldmVsICZndDsgYmFja2VuZC0mZ3Q7bGV2ZWxfbWF4KSkgewomIzQzOwkJCXByX2VycigmIzM0O3pyYW06IGludmFsaWQgbGV2ZWwgJWQgZm9yICVzXG4mIzM0OywgbGV2ZWwsIGNvbXApOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIHNob3cgYXZhaWxhYmxlIGNvbXByZXNzb3JzICovCiBzc2l6ZV90IHpjb21wX2F2YWlsYWJsZV9zaG93KGNvbnN0IGNoYXIgKmNvbXAsIGNoYXIgKmJ1Ziwgc3NpemVfdCBhdCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKaW5kZXggODFhMGYzZjZmZjQ4Ny4uMzY2MjUwMDUwZDRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgKQEAgLTcsNiAmIzQzOzcsOSBAQAogCiAjZGVmaW5lIFpDT01QX1BBUkFNX05PVF9TRVQJSU5UX01JTgogCiYjNDM7I2RlZmluZSBaQ09NUF9DQVBfRElDVAkJQklUKDApCS8qIGRpY3Rpb25hcnkgc3VwcG9ydCAqLwomIzQzOyNkZWZpbmUgWkNPTVBfQ0FQX0xFVkVMCQlCSVQoMSkJLyogYWRqdXN0YWJsZSBjb21wcmVzc2lvbiBsZXZlbCAqLwomIzQzOwogc3RydWN0IGRlZmxhdGVfcGFyYW1zIHsKIAlzMzIgd2luYml0czsKIH07CkBAIC02Niw2ICYjNDM7NjksOSBAQCBzdHJ1Y3QgemNvbXBfb3BzIHsKIAlpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7CiAJdm9pZCAoKnJlbGVhc2VfcGFyYW1zKShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpOwogCiYjNDM7CXVuc2lnbmVkIGludCBjYXBzOwomIzQzOwlzMzIgbGV2ZWxfbWluOwomIzQzOwlzMzIgbGV2ZWxfbWF4OwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCkBAIC04MSw2ICYjNDM7ODcsNyBAQCBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpOwogaW50IHpjb21wX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKTsKIHNzaXplX3QgemNvbXBfYXZhaWxhYmxlX3Nob3coY29uc3QgY2hhciAqY29tcCwgY2hhciAqYnVmLCBzc2l6ZV90IGF0KTsKIGNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7CiYjNDM7aW50IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBjaGFyICpjb21wLCBzMzIgbGV2ZWwsIGNvbnN0IGNoYXIgKmRpY3RfcGF0aCk7CiAKIHN0cnVjdCB6Y29tcCAqemNvbXBfY3JlYXRlKGNvbnN0IGNoYXIgKmFsZywgc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTsKIHZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwppbmRleCBhY2U2NWM1ODYwNzJiLi5iNDU4NWIzYmM1NzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwpAQCAtMTY2MSw2ICYjNDM7MTY2MSw4IEBAIHN0YXRpYyB2b2lkIGNvbXBfYWxnb3JpdGhtX3NldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmFsZykKIAl6cmFtLSZndDtjb21wX2FsZ3NbcHJpb10gPSBhbGc7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBjb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8pOwomIzQzOwogc3RhdGljIGludCBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYnVmKQogewogCWNvbnN0IGNoYXIgKmFsZzsKQEAgLTE2ODEsNiAmIzQzOzE2ODMsNyBAQCBzdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpCiAJfQogCiAJY29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7CiYjNDM7CWNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pOwogCXJldHVybiAwOwogfQogCkBAIC0xNzA5LDggJiM0MzsxNzEyLDExIEBAIHN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsCiAJCQkJCQlJTlRfTUFYLAogCQkJCQkJTlVMTCwKIAkJCQkJCVJFQURJTkdfUE9MSUNZKTsKLQkJaWYgKHN6ICZsdDsgMCkKJiM0MzsJCWlmIChzeiAmbHQ7PSAwKSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7enJhbTogZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZXJyPSV6ZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBkaWN0X3BhdGgsIHN6KTsKIAkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQogCX0KIAogCXpyYW0tJmd0O3BhcmFtc1twcmlvXS5kaWN0X3N6ID0gc3o7CkBAIC0xNzk0LDYgJiM0MzsxODAwLDEzIEBAIHN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWlmICh6cmFtLSZndDtjb21wX2FsZ3NbcHJpb10pIHsKJiM0MzsJCXJldCA9IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyh6cmFtLSZndDtjb21wX2FsZ3NbcHJpb10sIGxldmVsLAomIzQzOwkJCQkJICAgIGRpY3RfcGF0aCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBjb21wX3BhcmFtc19zdG9yZSh6cmFtLCBwcmlvLCBsZXZlbCwgZGljdF9wYXRoLCAmYW1wO2RlZmxhdGVfcGFyYW1zKTsKIAlyZXR1cm4gcmV0ID8gcmV0IDogbGVuOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjIzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCBmb3IgUmVhY2hhYmlsaXR5IGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvYmxvY2svenJhbS9gLCBzcGVjaWZpY2FsbHkgdGhlIHZhbGlkYXRpb24gb2YgY29tcHJlc3Npb24gcGFyYW1ldGVycy4gSXQgc2VlbXMgd2UmIzM5O3JlIGFkZGluZyBjaGVja3MgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiBkaWZmZXJlbnQgYWxnb3JpdGhtcyDigJMgdGhpbmdzIGxpa2UgTFo0LCBMWk8sIFpTVEQsIERlZmxhdGUsIHRoYXQgc29ydCBvZiB0aGluZyDigJMgZm9yIGNvbXByZXNzaW9uIGxldmVsIGFuZCBkaWN0aW9uYXJ5IHBhdGguIFNtYXJ0LiBBbHNvLCB0aGUgcGF0Y2ggaXMgcmVzZXR0aW5nIHRoZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIHdoZW4gdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyBjaGFuZ2VkLiBBbmQgSSBzZWUgdGhleSYjMzk7dmUgYWxzbyBjbGVhbmVkIHVwIGEgYHpzdGRfY3JlYXRlYCBidWcgd2hlcmUgYSBgenN0ZF9yZWxlYXNlX3BhcmFtc2AgY2FsbCB3YXMgaW4gdGhlIHdyb25nIHBsYWNlLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgKnJlYWNoYWJsZSogYW5kLCBtb3JlIGltcG9ydGFudGx5IGZvciBteSBwdXJwb3Nlcywgd29ydGggZnV6emluZz8KClpSQU0gaXRzZWxmIGlzIGEgYmxvY2sgZGV2aWNlLCBhbmQgaXTigJlzIG1lYW50IHRvIGNvbXByZXNzIGRhdGEgaW4gUkFNLCBzbyBpdCBzaG91bGQgYmUgcmVhY2hhYmxlLiBUaGF04oCZcyBnb29kLiBVc2VyIHNwYWNlIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHRocm91Z2ggc3lzZnMgYW5kIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLCBzbyB0aGVyZSYjMzk7cyBhbiBhdHRhY2sgc3VyZmFjZSB0aGVyZS4KClRoZSBwYXRjaCBtb2RpZmllcyB0aG9zZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnM6IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBhbmQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBCaW5nbyEgVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIFNvLCBJIGNhbiB0cmlnZ2VyIHRoZXNlIGNoYW5nZXMgYnkgd3JpdGluZyB0byBzeXNmcyBmaWxlcyBsaWtlIGAvc3lzL2Jsb2NrL3pyYW0wL2NvbXBfYWxnb3JpdGhtYCBvciBgL3N5cy9ibG9jay96cmFtMC9hbGdvX3BhcmFtc2Ag4oCTIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgcHJlY2lzZSBwYXRocy4gVGhhdCYjMzk7cyBob3cgSSBjYW4gZXhlcmNpc2UgdGhpcyBjb2RlLiBPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRob3NlIGV4YWN0IHN5c2ZzIGZpbGUgbG9jYXRpb25zIGFuZCB0aGVuIGJ1aWxkIGEgZnV6emluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MDE9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzI3LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcyODpzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjktXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXRpbGl6YXRpb24gb2YgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgb2JqZWN0IG9yIGZ1bmN0aW9uIOKAkyBkZXBlbmRpbmcgb24gaXRzIGRlZmluaXRpb24gaW4gdGhlIGNvZGViYXNlIOKAkyBpcyBiZWluZyByZWZlcmVuY2VkLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBkaXJlY3Qgc2VhcmNoIHdpdGhpbiB0aGUgcHJvamVjdCwgbGlrZWx5IHVzaW5nIG15IHByZWZlcnJlZCBJREUmIzM5O3Mgc2VhcmNoIGNhcGFiaWxpdGllcywgb3IgcG9zc2libHkgdXRpbGl6aW5nIGBncmVwYCBpZiBJIG5lZWQgbW9yZSB0YXJnZXRlZCByZXN1bHRzIGFjcm9zcyBhIGJyb2FkZXIgcmFuZ2Ugb2YgZmlsZXMgb3IgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQgdGhpcyBvYmplY3QgaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gZmluZGluZyB0aGUgZGlyZWN0IGNhbGxzIG9yIGluc3RhbmNlcyBvZiBpdCBpbiBhbnkgb3RoZXIgc291cmNlIGNvZGUgZmlsZXMuIFRoZW4sIEkgd2lsbCBzdGFydCBtYWtpbmcgc2Vuc2Ugb2YgaXRzIHB1cnBvc2UuCgpNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgaXRzIHNjb3BlIG9mIGluZmx1ZW5jZSDigJMgaXMgaXQgZ2xvYmFsLCBtb2R1bGUtc3BlY2lmaWMsIG9yIGxvY2FsPyBXaGF0IG1vZHVsZXMgaW50ZXJhY3Qgd2l0aCBpdD8gSXMgaXQgYSBkYXRhIHN0cnVjdHVyZSwgYSBmdW5jdGlvbiwgYSBjbGFzcyBpbnN0YW5jZT8gVGhlIHNwZWNpZmljIHVzZXMgd2lsbCBwcm92aWRlIGltbWVkaWF0ZSBjbHVlcyB0byBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBpbiB0aGUgc3lzdGVtLiBJIGFudGljaXBhdGUgbmVlZGluZyB0byBhbmFseXplIGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgc2V0LCByZXRyaWV2ZWQsIGFuZCBtb2RpZmllZC4gVGhlIHNlYXJjaCBzaG91bGQgaWxsdW1pbmF0ZSB3aGV0aGVyIGl0JiMzOTtzIHBhcnQgb2YgYSBrZXkgY29uZmlndXJhdGlvbiBjb21wb25lbnQsIGEgY2FjaGluZyBtZWNoYW5pc20sIG9yIGEgbWVhbnMgb2YgaW50ZXItbW9kdWxlIGNvbW11bmljYXRpb24uCgpGdXJ0aGVybW9yZSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgc3Vycm91bmRpbmcgY29udGV4dDogd2hhdCBmdW5jdGlvbnMgY2FsbCBpdCwgd2hhdCB2YXJpYWJsZXMgYXJlIHBhc3NlZCB0byBvciByZXR1cm5lZCBmcm9tIGl0LCB3aGF0IHBhcnRzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiBpdCBmb3IgdGhlaXIgb3BlcmF0aW9uLiBUaGUgd2F5IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHN5c3RlbSBjb21wb25lbnRzIHdpbGwgdGVsbCBtZSB0aGUgc3lzdGVtJiMzOTtzIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MDE9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzI3LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcyODpzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjktXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoYXQ6CgoqKkludmVzdGlnYXRpbmcgYHpyYW1fZHJ2LmNgIFVzYWdlKioKClJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gYW55dGhpbmcgZWxzZSwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRob3JvdWdobHkgaW52ZXN0aWdhdGUgdGhlIHVzYWdlcyBvZiB3aGF0ZXZlciBJJiMzOTttIHdvcmtpbmcgd2l0aCB3aXRoaW4gdGhlIGB6cmFtX2Rydi5jYCBmaWxlLiBJdCYjMzk7cyBhIGtleSBjb21wb25lbnQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGludGVncmF0aW9uIGlzIGNydWNpYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBJJiMzOTttIGRlYWxpbmcgd2l0aCBpbnRlcmFjdHMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB3aG9sZSBgenJhbV9kcnYuY2AgaW1wbGVtZW50YXRpb24uIEdvdHRhIGdldCB0aGUgYmFzZWxpbmUgYmVmb3JlIEkgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxnb3JpdGhtX3BhcmFtc19zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MDE9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzI3LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcyODpzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjktXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzg3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpZ2dpbmcgaW50byB0aGUgQ29kZSYjMzk7cyBVc2FnZSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGdldHRpbmcgYSBodW5jaCBhYm91dCB0aGlzLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgaXNzdWUgaXMgc3RlbW1pbmcgZnJvbSBzb21ldGhpbmcgdGhhdCB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgdXNlZCBpbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGl0IG1pZ2h0IGJlIGludGVncmF0ZWQgaW4gYSBtYWNybyBvZiBzb21lIHNvcnQuIFRoZSBvbmx5IHdheSB0byBmaW5kIG91dCBpcyB0byBmb2xsb3cgdGhlIHVzYWdlLiBMZXQgbWUgcXVpY2tseSB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBvZiB0aGUgZmlsZSB3aGVyZSB0aGUgY29kZSBpbiBxdWVzdGlvbiBpcyBjYWxsZWQuIExpbmUgMTcyOCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIG1hY3JvIHRvIHRyb3VibGVzaG9vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3Mjg6XHRzdGF0aWMgc3NpemVfdCBhbGdvcml0aG1fcGFyYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbjE3Mjk6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuMTczMDpcdFx0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqYnVmLFxuMTczMTpcdFx0XHRcdFx0ICAgICAgc2l6ZV90IGxlbilcbjE3MzI6XHR7XG4xNzMzOlx0XHRzMzIgcHJpbyA9IFpSQU1fUFJJTUFSWV9DT01QLCBsZXZlbCA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XG4xNzM0Olx0XHRjaGFyICphcmdzLCAqcGFyYW0sICp2YWwsICphbGdvID0gTlVMTCwgKmRpY3RfcGF0aCA9IE5VTEw7XG4xNzM1Olx0XHRzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMgZGVmbGF0ZV9wYXJhbXM7XG4xNzM2Olx0XHRzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7XG4xNzM3Olx0XHRib29sIHByaW9fcGFyYW0gPSBmYWxzZTtcbjE3Mzg6XHRcdGludCByZXQ7XG4xNzM5Olx0XG4xNzQwOlx0XHRkZWZsYXRlX3BhcmFtcy53aW5iaXRzID0gWkNPTVBfUEFSQU1fTk9UX1NFVDtcbjE3NDE6XHRcbjE3NDI6XHRcdGFyZ3MgPSBza2lwX3NwYWNlcyhidWYpO1xuMTc0MzpcdFx0d2hpbGUgKCphcmdzKSB7XG4xNzQ0Olx0XHRcdGFyZ3MgPSBuZXh0X2FyZyhhcmdzLCBcdTAwMjZwYXJhbSwgXHUwMDI2dmFsKTtcbjE3NDU6XHRcbjE3NDY6XHRcdFx0aWYgKCF2YWwgfHwgISp2YWwpXG4xNzQ3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzQ4Olx0XG4xNzQ5Olx0XHRcdGlmICghc3RyY21wKHBhcmFtLCBcJiMzNDtwcmlvcml0eVwmIzM0OykpIHtcbjE3NTA6XHRcdFx0XHRwcmlvX3BhcmFtID0gdHJ1ZTtcbjE3NTE6XHRcdFx0XHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXHUwMDI2cHJpbyk7XG4xNzUyOlx0XHRcdFx0aWYgKHJldClcbjE3NTM6XHRcdFx0XHRcdHJldHVybiByZXQ7XG4xNzU0Olx0XHRcdFx0Y29udGludWU7XG4xNzU1Olx0XHRcdH1cbjE3NTY6XHRcbjE3NTc6XHRcdFx0aWYgKCFzdHJjbXAocGFyYW0sIFwmIzM0O2xldmVsXCYjMzQ7KSkge1xuMTc1ODpcdFx0XHRcdHJldCA9IGtzdHJ0b2ludCh2YWwsIDEwLCBcdTAwMjZsZXZlbCk7XG4xNzU5Olx0XHRcdFx0aWYgKHJldClcbjE3NjA6XHRcdFx0XHRcdHJldHVybiByZXQ7XG4xNzYxOlx0XHRcdFx0Y29udGludWU7XG4xNzYyOlx0XHRcdH1cbjE3NjM6XHRcbjE3NjQ6XHRcdFx0aWYgKCFzdHJjbXAocGFyYW0sIFwmIzM0O2FsZ29cJiMzNDspKSB7XG4xNzY1Olx0XHRcdFx0YWxnbyA9IHZhbDtcbjE3NjY6XHRcdFx0XHRjb250aW51ZTtcbjE3Njc6XHRcdFx0fVxuMTc2ODpcdFxuMTc2OTpcdFx0XHRpZiAoIXN0cmNtcChwYXJhbSwgXCYjMzQ7ZGljdFwmIzM0OykpIHtcbjE3NzA6XHRcdFx0XHRkaWN0X3BhdGggPSB2YWw7XG4xNzcxOlx0XHRcdFx0Y29udGludWU7XG4xNzcyOlx0XHRcdH1cbjE3NzM6XHRcbjE3NzQ6XHRcdFx0aWYgKCFzdHJjbXAocGFyYW0sIFwmIzM0O2RlZmxhdGUud2luYml0c1wmIzM0OykpIHtcbjE3NzU6XHRcdFx0XHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXHUwMDI2ZGVmbGF0ZV9wYXJhbXMud2luYml0cyk7XG4xNzc2Olx0XHRcdFx0aWYgKHJldClcbjE3Nzc6XHRcdFx0XHRcdHJldHVybiByZXQ7XG4xNzc4Olx0XHRcdFx0Y29udGludWU7XG4xNzc5Olx0XHRcdH1cbjE3ODA6XHRcdH1cbjE3ODE6XHRcbjE3ODI6XHRcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZ6cmFtLVx1MDAzZWRldl9sb2NrKTtcbjE3ODM6XHRcdGlmIChpbml0X2RvbmUoenJhbSkpXG4xNzg0Olx0XHRcdHJldHVybiAtRUJVU1k7XG4xNzg1Olx0XG4xNzg2Olx0XHRpZiAocHJpb19wYXJhbSkge1xuMTc4NzpcdFx0XHRpZiAocHJpbyBcdTAwM2MgWlJBTV9QUklNQVJZX0NPTVAgfHwgcHJpbyBcdTAwM2U9IFpSQU1fTUFYX0NPTVBTKVxuMTc4ODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTc4OTpcdFx0fVxuMTc5MDpcdFxuMTc5MTpcdFx0aWYgKGFsZ28gXHUwMDI2XHUwMDI2IHByaW9fcGFyYW0pIHtcbjE3OTI6XHRcdFx0cmV0ID0gdmFsaWRhdGVfYWxnb19wcmlvcml0eSh6cmFtLCBhbGdvLCBwcmlvKTtcbjE3OTM6XHRcdFx0aWYgKHJldClcbjE3OTQ6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTc5NTpcdFx0fVxuMTc5NjpcdFxuMTc5NzpcdFx0aWYgKGFsZ28gXHUwMDI2XHUwMDI2ICFwcmlvX3BhcmFtKSB7XG4xNzk4Olx0XHRcdHByaW8gPSBsb29rdXBfYWxnb19wcmlvcml0eSh6cmFtLCBhbGdvLCBaUkFNX1BSSU1BUllfQ09NUCk7XG4xNzk5Olx0XHRcdGlmIChwcmlvIFx1MDAzYyAwKVxuMTgwMDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTgwMTpcdFx0fVxuMTgwMjpcdFxuMTgwMzpcdFx0aWYgKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dKSB7XG4xODA0Olx0XHRcdHJldCA9IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyh6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSwgbGV2ZWwsXG4xODA1Olx0XHRcdFx0XHRcdCAgICBkaWN0X3BhdGgpO1xuMTgwNjpcdFx0XHRpZiAocmV0KVxuMTgwNzpcdFx0XHRcdHJldHVybiByZXQ7XG4xODA4Olx0XHR9XG4xODA5Olx0XG4xODEwOlx0XHRyZXQgPSBjb21wX3BhcmFtc19zdG9yZSh6cmFtLCBwcmlvLCBsZXZlbCwgZGljdF9wYXRoLCBcdTAwMjZkZWZsYXRlX3BhcmFtcyk7XG4xODExOlx0XHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xuMTgxMjpcdH1cbjE4MTM6XHRcbjE4MTQ6XHRzdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbjE4MTU6XHRcdFx0XHRcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuMTgxNjpcdFx0XHRcdFx0ICAgY2hhciAqYnVmKVxuMTgxNzpcdHtcbjE4MTg6XHRcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbjE4MTk6XHRcdHNzaXplX3Qgc3o7XG4xODIwOlx0XG4xODIxOlx0XHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZ6cmFtLVx1MDAzZWRldl9sb2NrKTtcbjE4MjI6XHRcdHN6ID0gemNvbXBfYXZhaWxhYmxlX3Nob3coenJhbS1cdTAwM2Vjb21wX2FsZ3NbWlJBTV9QUklNQVJZX0NPTVBdLCBidWYsIDApO1xuMTgyMzpcdFx0cmV0dXJuIHN6O1xuMTgyNDpcdH1cbjE4MjU6XHRcbjE4MjY6XHRzdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4xODI3Olx0XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3lzZnMgU3RvcmUgRnVuY3Rpb24gZm9yIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBhbmQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgLiBJdCYjMzk7cyBtb2RpZnlpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgYGFsZ29fcGFyYW1zYCBhbmQgYGNvbXBfYWxnb3JpdGhtYCBzeXNmcyBmaWxlcy4gVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgaXMgdGhlIGZpcnN0IHJlZCBmbGFnLCBtZWFuaW5nIHN5emthbGxlciBjYW4gbGlrZWx5IGdldCBpdHMgdGVldGggaW50byB0aGVtLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgZnV6emluZy4gVGhpcyBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZvciBmdXp6aW5nLWJhc2VkIHZ1bG5lcmFiaWxpdGllcy4mIzM0OyBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgbWFrZSB0aGlzIGNvZGUgcGF0aCBhY3RpdmUuIExldCYjMzk7cyBzZWUuLi56cmFtLCB0aGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSByZWNhbGwgdGhhdCB6cmFtIGlzIGNvbmZpZ3VyZWQgYnkgYENPTkZJR19aUkFNYCwgc28gSSYjMzk7bGwgY2hlY2sgdGhlIGBkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgcG90ZW50aWFsIHByZS1jb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlJBTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjpjb25maWcgWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXHRib29sIFwmIzM0O2x6NCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7bHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjk6Y29uZmlnIFpSQU1fQkFDS0VORF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7enN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7ODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cdGRlcGVuZHMgb24gWlJBTVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTU0LVx0Ym9vbCBcJiMzNDtsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0OyBpZiAhWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7bHpvLXJsZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Njk6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7bHo0aGNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjgxOmNvbmZpZyBaUkFNX0RFRl9DT01QX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cdHN0cmluZ1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEwNzpjb25maWcgWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcJiMzNDtXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyMTpjb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cdGJvb2wgXCYjMzQ7VHJhY2sgYWNjZXNzIHRpbWUgb2YgenJhbSBlbnRyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDEtXHRib29sIFwmIzM0O0VuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlpSQU0gQmFja2VuZCBTdHJhdGVneSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBvcHRpbWl6aW5nIFpSQU0gY29tcHJlc3Npb24gYmFja2VuZHMuIEVuYWJsaW5nIGFsbCB0aGVzZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zIOKAkyBgTFo0YCwgYExaNEhDYCwgYFpTVERgLCBgREVGTEFURWAsIGA4NDJgLCBhbmQgYExaT2Ag4oCTIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIG1vZGlmeWluZyBgYmFja2VuZF84NDIuY2AsIGBiYWNrZW5kX2RlZmxhdGUuY2AsIGBiYWNrZW5kX2x6NC5jYCwgYGJhY2tlbmRfbHo0aGMuY2AsIGBiYWNrZW5kX2x6by5jYCwgYGJhY2tlbmRfbHpvcmxlLmNgLCBhbmQgYGJhY2tlbmRfenN0ZC5jYCBjb25maXJtcyB0aGF0IHdlJiMzOTtyZSBjb3ZlcmluZyBhbGwgb3VyIGJhc2VzIHdpdGggdGhlIGluY2x1ZGVkIG1vZHVsZXMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGNydWNpYWwgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZGF0ZWQgYW5kIHN0b3JlZC4gSSB3YW50IHRvIGNoZWNrOiBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCwgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAsIGBjb21wX3BhcmFtc19zdG9yZWAsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCBgenN0ZF9zZXR1cF9wYXJhbXNgLgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCBpcyB0aGUga2V5LiBBbmQgZ29vZCwgaXQmIzM5O3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2UgbmVlZCBmb3IgdGhpcy4gTm93IHRvIGNoZWNrIGl0IGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX3ZhbGlkYXRlX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTg3PWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy05Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjk3OmludCB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoY29uc3QgY2hhciAqY29tcCwgczMyIGxldmVsLCBjb25zdCBjaGFyICpkaWN0X3BhdGgpXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy05OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlByaW9yaXRpemluZyBDb3ZlcmFnZSBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgYmVzdCB3YXlzIHRvIGd1aWRlIFN5emthbGxlciYjMzk7cyBmdXp6aW5nIGVmZm9ydHMgd2l0aGluIHRoaXMgY29tcHJlc3Npb24gc3Vic3lzdGVtLiBJJiMzOTt2ZSBsYW5kZWQgb24gYHpjb21wX3ZhbGlkYXRlX3BhcmFtc2AgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGEgJiMzNDtGb2N1c1N5bWJvbC4mIzM0OyBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKSSBhbHNvIGNvbnNpZGVyZWQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLCByZWFsaXppbmcgdGhhdCB0aGV5IGFyZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMuIFN5emthbGxlciBmdXp6ZXMgc3lzZnMsIG9mIGNvdXJzZSwgYnV0IGl0IGRvZXMgc28gYnkgd3JpdGluZyBkaXJlY3RseSB0byB0aGUgZmlsZXMsIG5vdCBieSBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLiBTdGlsbCwgbGlzdGluZyB0aGVtIGFzIEZvY3VzU3ltYm9scyB3b3VsZCBiZSBiZW5lZmljaWFsLCBhcyBpdCBjYW4gaGVscCBwcmlvcml0aXplIGNvZGUgY292ZXJhZ2UgaW4gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGV2ZW4gaWYgbm90IGRpcmVjdGx5IGNhbGxlZC4KCkEgcXVpY2sgbm90ZTogSSBhbHNvIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAgaXMgKnN0YXRpYyouIEhtbS4gSXQmIzM5O3Mgc3RpbGwgdXNlZnVsIGZvciBjb3ZlcmFnZSBndWlkYW5jZSBpZiBsaXN0ZWQsIGJ1dCBnZW5lcmFsbHksIEkgcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciB0aGlzIGtpbmQgb2Ygd29yay4gU28gSSB0aGluayBpdCYjMzk7cyBiZXR0ZXIgdG8gbGlzdCBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCBhbmQgdGhlbiBldmFsdWF0ZSBvdGhlciBvcHRpb25zLgoKTGV0IG1lIHRoaW5rLiBBcmUgdGhlcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgdGhhdCBhcmUgYXZhaWxhYmxlPyBBaCwgd2hhdCBhYm91dCBgemNvbXBfY3JlYXRlYD8gTm93IHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgb3B0aW9uIHRvIGludmVzdGlnYXRlLgoKTGV0JiMzOTtzIGRvIHRoaXMuIEkmIzM5O2xsIG9wZW4gdXAgYGRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jYCB0byBzZWUgd2hhdCBlbHNlIGlzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJJiMzOTttIGNvbnNpZGVyaW5nIGFsbCByZWxldmFudCBwaWVjZXMgdG8gbWF4aW1pemUgU3l6a2FsbGVyJiMzOTtzIGVmZmVjdGl2ZW5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTI1Mj12b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI1OS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jOjI2MDpzdHJ1Y3QgemNvbXAgKnpjb21wX2NyZWF0ZShjb25zdCBjaGFyICphbGcsIHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDg3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgWnN0ZCBQYXJhbWV0ZXIgU2V0dXAgaW4gYGJhY2tlbmRfenN0ZC5jYCoqCgpBbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgenN0ZF9zZXR1cF9wYXJhbXNgIHdpdGhpbiBgYmFja2VuZF96c3RkLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGF0IGZ1bmN0aW9uIHN0YXRpYz8mIzM0OyBJdCYjMzk7cyBhIGtleSBxdWVzdGlvbiwgYXMgaXQgZ292ZXJucyB0aGUgc2NvcGUgb2YgaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkLCBhbmQgYSBzdGF0aWMgZnVuY3Rpb24gc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGludGVybmFsIHRvIHRoYXQgc3BlY2lmaWMgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIGl0cyB2aXNpYmlsaXR5IGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgZ290IHN0YXRpYyBsaW5rYWdlOyB0aGF0IHdpbGwgZGljdGF0ZSBob3cgZGVlcGx5IEkgbmVlZCB0byBsb29rIGludG8gaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZS4gSXQmIzM5O2xsIGFsc28gaW5mb3JtIGhvdyBlYXNpbHkgaXQgY2FuIGJlIHJlZmFjdG9yZWQgb3IgcmV1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3RkX3NldHVwX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9Mzg9c3RhdGljIHZvaWQgenN0ZF9yZWxlYXNlX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUwLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjUxOnN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM9MjEzPWNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy0yMTctXHQuZGVzdHJveV9jdHhcdD0genN0ZF9kZXN0cm95LFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIxODpcdC5zZXR1cF9wYXJhbXNcdD0genN0ZF9zZXR1cF9wYXJhbXMsXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjE5LVx0LnJlbGVhc2VfcGFyYW1zXHQ9IHpzdGRfcmVsZWFzZV9wYXJhbXMsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIyMS1cdC5sZXZlbF9taW5cdD0gKGludCktWlNURF9UQVJHRVRMRU5HVEhfTUFYLFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jOjIyMjpcdC5sZXZlbF9tYXhcdD0gLTEsXHQvKiB2YWxpZGF0ZWQgYnkgenN0ZF9zZXR1cF9wYXJhbXMoKSAqL1xuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIyMy1cdC5uYW1lXHRcdD0gXCYjMzQ7enN0ZFwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYSBTdGFnbmFudCBTdGF0ZSBpbiBaUkFNKioKClJpZ2h0LCB0aGlzIGZlZWxzLi4uIHN0dWNrLiBTb21ldGhpbmcmIzM5O3Mgbm90IG1vdmluZy4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBpcyByYXJlbHkgYSBnb29kIHNpZ24gaW4gc3lzdGVtLWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNvbXByZXNzZWQgdmlydHVhbCBSQU0gY29udGV4dC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBoYW5nLCBkZWFkbG9jaywgb3IgYSBjb21wbGV0ZSBsYWNrIG9mIHJlc3BvbnNlLgoKTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYGNvbXBfcGFyYW1zX3Jlc2V0YCBmdW5jdGlvbiB3aXRoaW4gYHpyYW1fZHJ2LmNgLiBUaGF0IGZ1bmN0aW9uIGhhbmRsZXMgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgb3ZlcmFsbCBsaWZlY3ljbGUgb2YgYSBaUkFNIGRldmljZS4gSWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIGhlcmUsIG15IGd1dCBzYXlzIHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCBhIGxpa2VseSBjYXVzZS4gSXQgd291bGQgYmUgbXkgZmlyc3Qgc3RvcCBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhlcmUgYXJlIGVycm9ycyBvciBpc3N1ZXMgdGhhdCBhcmUgbm90IHByb3Blcmx5IGFjY291bnRlZCBmb3IuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSBvZiB0aGUgY29tcHJlc3Npb24gcGFyYW1ldGVycyByZXNldCBhcmUgYSByb290IGNhdXNlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wX3BhcmFtc19yZXNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2NTk9c3RhdGljIHZvaWQgY29tcF9hbGdvcml0aG1fc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYWxnKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjMtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjY0OnN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjY1LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY2Nj1zdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY4NS1cdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY4NjpcdGNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY4Ny1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2ODktXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjkwOnN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2OTEte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MDE9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzA2LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcwNzpcdGNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcwOC1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yODA5PXN0YXRpYyB2b2lkIHpyYW1fc2xvdF9mcmVlX25vdGlmeShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MjUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODI2OnN0YXRpYyB2b2lkIHpyYW1fY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0pXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODI3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODMwLVx0Zm9yIChwcmlvID0gWlJBTV9QUklNQVJZX0NPTVA7IHByaW8gXHUwMDNjIFpSQU1fTUFYX0NPTVBTOyBwcmlvJiM0MzsmIzQzOykge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjgzMTpcdFx0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODMyLVx0fVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4MzU9c3RhdGljIHZvaWQgenJhbV9kZXN0cm95X2NvbXBzKHN0cnVjdCB6cmFtICp6cmFtKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4NTAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODUxOlx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4NTItfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwNDI9c3RhdGljIGludCB6cmFtX2FkZCh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxMDEtXHRzbnByaW50Zih6cmFtLVx1MDAzZWRpc2stXHUwMDNlZGlza19uYW1lLCAxNiwgXCYjMzQ7enJhbSVkXCYjMzQ7LCBkZXZpY2VfaWQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzEwMjpcdHpyYW1fY29tcF9wYXJhbXNfcmVzZXQoenJhbSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMTAzLVx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIFpSQU1fUFJJTUFSWV9DT01QLCBkZWZhdWx0X2NvbXByZXNzb3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWlJBTSBDb2RlIGZvciBTeW1ib2wgSW5jbHVzaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGZpcnN0IHRoaW5nLCBgY29tcF9wYXJhbXNfcmVzZXRgIGlzIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgc2tpcCBpdCBmb3Igbm93LiBUaGUga2V5IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIGNoYW5nZWQgb3IgYWRkZWQgc2VlbXMgdG8gYmUgYHpjb21wX3ZhbGlkYXRlX3BhcmFtc2AuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIHRvIGJlIGluIGBGb2N1c1N5bWJvbHNgLiBBbmQgbGV0JiMzOTtzIHNlZSwgZXZlbiB0aG91Z2ggdGhleSYjMzk7cmUgc3RhdGljLCBJIHRoaW5rIEkgc2hvdWxkIHByb2JhYmx5IGluY2x1ZGUgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAgYXMgd2VsbCwgYXMgdGhleSBhcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgc3lzZnMgd3JpdGVzIHRoYXQgdHJpZ2dlciB0aGlzIGNvZGUsIHJpZ2h0PyBBaCwgd2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCBkaWQgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNpbmNlIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCAqaXMqIGEgc3lzZnMgc3RvcmUgY2FsbGJhY2ssIGl0IGlzIHRlY2huaWNhbGx5IGFuIGVudHJ5cG9pbnQsIGV2ZW4gaWYgc3RhdGljLCBzbywgeWVhaCwgSSYjMzk7bGwgaW5jbHVkZSBpdC4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgWlJBTV9CQUNLRU5EX0xaNGAga2luZCBvZiBjb25maWdzLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIEtjb25maWcsIHRoZXJlJiMzOTtzIGBaUkFNX0JBQ0tFTkRfTFo0YCwgYFpSQU1fQkFDS0VORF9MWjRIQ2AsIGBaUkFNX0JBQ0tFTkRfWlNURGAsIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAsIGBaUkFNX0JBQ0tFTkRfODQyYCwgYW5kIGBaUkFNX0JBQ0tFTkRfTFpPYCBhbmQgb2YgY291cnNlIGBaUkFNYCBpdHNlbGYuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGBaUkFNX0JBQ0tFTkRfTFpPYCBpcyBhIGJvb2wsIHl1cCwgYm9vbC4gYFpSQU1gIGlzIHRyaXN0YXRlLiBPaywgSSYjMzk7bSBqdXN0IHF1aWNrbHkgc2VhcmNoaW5nIGZvciBhbnkgb3RoZXIgY29uZmlncy4gTGV0IG1lIGNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay96cmFtL01ha2VmaWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHR6cmFtLXlcdDo9XHR6Y29tcC5vIHpyYW1fZHJ2Lm9cbiAgIDQ6XHRcbiAgIDU6XHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9MWk8pXHRcdCYjNDM7PSBiYWNrZW5kX2x6b3JsZS5vIGJhY2tlbmRfbHpvLm9cbiAgIDY6XHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9MWjQpXHRcdCYjNDM7PSBiYWNrZW5kX2x6NC5vXG4gICA3Olx0enJhbS0kKENPTkZJR19aUkFNX0JBQ0tFTkRfTFo0SEMpXHQmIzQzOz0gYmFja2VuZF9sejRoYy5vXG4gICA4Olx0enJhbS0kKENPTkZJR19aUkFNX0JBQ0tFTkRfWlNURClcdCYjNDM7PSBiYWNrZW5kX3pzdGQub1xuICAgOTpcdHpyYW0tJChDT05GSUdfWlJBTV9CQUNLRU5EX0RFRkxBVEUpXHQmIzQzOz0gYmFja2VuZF9kZWZsYXRlLm9cbiAgMTA6XHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF84NDIpXHRcdCYjNDM7PSBiYWNrZW5kXzg0Mi5vXG4gIDExOlx0XG4gIDEyOlx0b2JqLSQoQ09ORklHX1pSQU0pXHQmIzQzOz1cdHpyYW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMzMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbiBhbmQgQ2FsbCBBbmFseXNpcyoqCgpBbHJpZ2h0LCB5ZXAsIEkmIzM5O3ZlIGp1c3QgZG91YmxlLWNoZWNrZWQgdGhvc2UgY29uZmlncyBhbmQgdGhleSBhcmUgZGVmaW5pdGVseSBjb3JyZWN0LiBObyBpc3N1ZXMgdGhlcmUuIE5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55dGhpbmcgaW4gaG93IGB6Y29tcF92YWxpZGF0ZV9wYXJhbXNgIGlzIHV0aWxpemVkLiBUaW1lIHRvIGludmVzdGlnYXRlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyB0cmFjZSB0aG9zZSBjYWxscyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIGF0dGVudGlvbi4gSXQmIzM5O3MgdGhhdCBraW5kIG9mIGRpbGlnZW50IGF0dGVudGlvbiB0byBkZXRhaWwgdGhhdCB3aWxsIGVuc3VyZSBldmVyeXRoaW5nIGlzIHJvY2sgc29saWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX3ZhbGlkYXRlX3BhcmFtcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz04Nz1jb25zdCBjaGFyICp6Y29tcF9sb29rdXBfYmFja2VuZF9uYW1lKGNvbnN0IGNoYXIgKmNvbXApXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtOTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzo5NzppbnQgemNvbXBfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IGNoYXIgKmNvbXAsIHMzMiBsZXZlbCwgY29uc3QgY2hhciAqZGljdF9wYXRoKVxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtOTgte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTg5PWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaDo5MDppbnQgemNvbXBfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IGNoYXIgKmNvbXAsIHMzMiBsZXZlbCwgY29uc3QgY2hhciAqZGljdF9wYXRoKTtcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTkxLVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3Mjg9c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgwMy1cdGlmICh6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSkge1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTgwNDpcdFx0cmV0ID0gemNvbXBfdmFsaWRhdGVfcGFyYW1zKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dLCBsZXZlbCxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE4MDUtXHRcdFx0XHRcdCAgICBkaWN0X3BhdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4MgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgbGlrZSB5b3U6CgoqKlRhcmdldGVkIENvZGUgRXhwbG9yYXRpb24gZm9yIFBhcmFtZXRlciBWYWxpZGF0aW9uKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaGVyZSBpcyBjbGVhcjogd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBhbGdvcml0aG0gcGFyYW1ldGVycyBhcmUgdmFsaWRhdGVkIGFuZCByZXNldCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBvdXIgc3lzdGVtLiBJdCYjMzk7cyBldmlkZW50IHRoYXQgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LCB0aGUgb25lIHdlJiMzOTtyZSB0cmFja2luZywgaXMgb25seSBjYWxsZWQgZnJvbSBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAuCgpUaGVyZWZvcmUsIG15IGZvY3VzIG5hcnJvd3MgdG8gYSBzcGVjaWZpYyBzZXQgb2Ygc3ltYm9scy4gSSBuZWVkIHRvIGNsb3NlbHkgZXhhbWluZToKCiogICBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCAtIFRoaXMgaXMgY2xlYXJseSBhIGtleSB2YWxpZGF0aW9uIHBvaW50LgoqICAgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIC0gT2J2aW91c2x5IHRoZSBlbnRyeSBwb2ludCBmb3Igd2hhdCB3ZSYjMzk7cmUgdHJhY2tpbmcuCiogICBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAgLSBMaWtlbHkgc29tZSBraW5kIG9mIGludGVybmFsIHN0b3JhZ2Ugb3IgbWFuYWdlbWVudCByZWxhdGVkIHRvIHRoZSBhbGdvcml0aG1zLgoKR2l2ZW4gdGhlIHNpbmdsZSBjYWxsIG9yaWdpbiwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgIGlzICppbmRlZWQqIHRoZSBzb2xlIGNhbGxlciBvZiB0aGUgYGNvbXBfcGFyYW1zX3Jlc2V0YCBmdW5jdGlvbi4gVGhpcyBxdWljayBjaGVjayB3aWxsIGFsbG93IG1lIHRvIHZlcmlmeSB0aGUgYXNzdW1wdGlvbnMgSSYjMzk7bSBtYWtpbmcgYXQgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tcF9wYXJhbXNfcmVzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY1OT1zdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2My1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2NjQ6c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjUtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjY2PXN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjg1LVx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjg2Olx0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjg3LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY4OS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2OTA6c3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY5MS17XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTcwMT1zdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzA3Olx0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzA4LVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4MDk9c3RhdGljIHZvaWQgenJhbV9zbG90X2ZyZWVfbm90aWZ5KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjgyNS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4MjY6c3RhdGljIHZvaWQgenJhbV9jb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSlcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4Mjcte1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MzAtXHRmb3IgKHByaW8gPSBaUkFNX1BSSU1BUllfQ09NUDsgcHJpbyBcdTAwM2MgWlJBTV9NQVhfQ09NUFM7IHByaW8mIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODMxOlx0XHRjb21wX3BhcmFtc19yZXNldCh6cmFtLCBwcmlvKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MzItXHR9XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjgzNT1zdGF0aWMgdm9pZCB6cmFtX2Rlc3Ryb3lfY29tcHMoc3RydWN0IHpyYW0gKnpyYW0pXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4NTE6XHR6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHpyYW0pO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1Mi19XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MzA0Mj1zdGF0aWMgaW50IHpyYW1fYWRkKHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzEwMS1cdHNucHJpbnRmKHpyYW0tXHUwMDNlZGlzay1cdTAwM2VkaXNrX25hbWUsIDE2LCBcJiMzNDt6cmFtJWRcJiMzNDssIGRldmljZV9pZCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTAyOlx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxMDMtXHRjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTkyCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWlJBTSBDb21wcmVzc2lvbiBQYXJhbWV0ZXIgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcmV2ZWFscyB0aGF0IGBjb21wX3BhcmFtc19yZXNldGAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gaGVyZSwgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBjcml0aWNhbCBwb2ludHM6IGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYCwgYGNvbXBfcGFyYW1zX3N0b3JlYCwgYW5kIGB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0YC4gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIGB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0YCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYHpyYW1fZGVzdHJveV9jb21wc2AgYW5kIGB6cmFtX2FkZGAsIHdoaWNoIG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlua2VkIGR1cmluZyBkZXZpY2UgY3JlYXRpb24gYW5kIHJlbGF0ZWQgc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBhbGwgcG9pbnRzIHRvIGEgZGlyZWN0IHBhdGggdG8gdXNlciBpbnRlcmFjdGlvbiBhbmQgY29uZmlndXJhdGlvbi4KCk5vdywgbGV0IG1lIGludmVzdGlnYXRlIGB6c3RkX3NldHVwX3BhcmFtc2AuIEl0JiMzOTtzIGJlaW5nIGludm9rZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgZnJvbSBgemNvbXBfY3JlYXRlYC4gQW5kIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGB6Y29tcF9jcmVhdGVgIGlzbiYjMzk7dCBzdGF0aWMsIHN1Z2dlc3RpbmcgaXQmIzM5O3MgYWN0aXZlbHkgaW52b2x2ZWQgZHVyaW5nIGNvbXByZXNzaW9uIHN0cmVhbSBpbml0aWFsaXphdGlvbi4gVGhpcyBjYWxscyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKSSBuZWVkIGEgY2xlYXJlciBwaWN0dXJlLCBzbyBJJiMzOTtsbCBjcmVhdGUgYSBjaGVja2xpc3Qgb2Yga2V5IGZ1bmN0aW9uczoKKiAgIGB6Y29tcF92YWxpZGF0ZV9wYXJhbXNgCiogICBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAKKiAgIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYAoqICAgYHpjb21wX2NyZWF0ZWAKCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnM6CiogICBgWlJBTWAKKiAgIGBaUkFNX0JBQ0tFTkRfTFo0YAoqICAgYFpSQU1fQkFDS0VORF9MWjRIQ2AKKiAgIGBaUkFNX0JBQ0tFTkRfWlNURGAKKiAgIGBaUkFNX0JBQ0tFTkRfREVGTEFURWAKKiAgIGBaUkFNX0JBQ0tFTkRfODQyYAoqICAgYFpSQU1fQkFDS0VORF9MWk9gCgpXYWl0LCB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgb24gYCFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXNuJiMzOTt0IG1pc3NlZC4gTGV0JiMzOTtzIGxvb2sgYXQgYFpSQU1fQkFDS0VORF9GT1JDRV9MWk9gLCBhcyBpdCYjMzk7cyBqdXN0IGEgY29uZmlnLiBUbyBhdm9pZCBjbHV0dGVyIEkgd2lsbCBzaW1wbHkgbGlzdCBgWlJBTV9CQUNLRU5EX0xaT2AuCgpPa2F5LCB3aGF0JiMzOTtzIHRoZSBwdXJwb3NlIG9mIGFsbCB0aGlzPyBUaGUgZ29hbCBpcyB0byBhZGQgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIC0gdGhpbmdzIGxpa2UgdGhlIGNvbXByZXNzaW9uIGxldmVsIGFuZCBkaWN0aW9uYXJ5LiBBZGRpdGlvbmFsbHksIHRoZSBwYXJhbWV0ZXJzIHdpbGwgYmUgcmVzZXQgd2hlbiB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGNoYW5nZXMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGFuZCB6Y29tcCBiYWNrZW5kIG9wZXJhdGlvbnMsIGFsbCBvZiB3aGljaCBhcmUgdXNlci1hY2Nlc3NpYmxlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSByZWFkeSB0byBjcmFmdCBhIHJlc3BvbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfTFo0JiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWjRIQyYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfWlNURCYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfREVGTEFURSYjMzQ7LAogICAgJiMzNDtaUkFNX0JBQ0tFTkRfODQyJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF92YWxpZGF0ZV9wYXJhbXMmIzM0OywKICAgICYjMzQ7YWxnb3JpdGhtX3BhcmFtc19zdG9yZSYjMzQ7LAogICAgJiMzNDtfX2NvbXBfYWxnb3JpdGhtX3N0b3JlJiMzNDssCiAgICAmIzM0O3pjb21wX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIHpyYW0gY29tcHJlc3Npb24gcGFyYW1ldGVycyAobGV2ZWwgYW5kIGRpY3Rpb25hcnkpIGFuZCByZXNldHMgcGFyYW1ldGVycyB3aGVuIHRoZSBhbGdvcml0aG0gaXMgY2hhbmdlZC4gSXQgbW9kaWZpZXMgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGFuZCB6Y29tcCBiYWNrZW5kIG9wcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgenJhbSBzeXNmcyBhdHRyaWJ1dGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9MWjQmIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaNEhDJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9aU1REJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF9ERUZMQVRFJiMzNDssCiAgICAmIzM0O1pSQU1fQkFDS0VORF84NDImIzM0OywKICAgICYjMzQ7WlJBTV9CQUNLRU5EX0xaTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX3ZhbGlkYXRlX3BhcmFtcyYjMzQ7LAogICAgJiMzNDthbGdvcml0aG1fcGFyYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O19fY29tcF9hbGdvcml0aG1fc3RvcmUmIzM0OywKICAgICYjMzQ7emNvbXBfY3JlYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIChsZXZlbCBhbmQgZGljdGlvbmFyeSkgYW5kIHJlc2V0cyBwYXJhbWV0ZXJzIHdoZW4gdGhlIGFsZ29yaXRobSBpcyBjaGFuZ2VkLiBJdCBtb2RpZmllcyBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYW5kIHpjb21wIGJhY2tlbmQgb3BzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMTo1NS4wMzQwMDk2NDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzU1ODQ3NjY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0XCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0SENcIixcbiAgICBcIlpSQU1fQkFDS0VORF9aU1REXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfREVGTEFURVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EXzg0MlwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX3ZhbGlkYXRlX3BhcmFtc1wiLFxuICAgIFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiLFxuICAgIFwiX19jb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwiemNvbXBfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB6cmFtIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgKGxldmVsIGFuZCBkaWN0aW9uYXJ5KSBhbmQgcmVzZXRzIHBhcmFtZXRlcnMgd2hlbiB0aGUgYWxnb3JpdGhtIGlzIGNoYW5nZWQuIEl0IG1vZGlmaWVzIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyBhbmQgemNvbXAgYmFja2VuZCBvcHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHpyYW0gc3lzZnMgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDE6NTUuMDM0MDE1ODQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU3NDAzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZTBkOWExNTgwNjRlOGNmYTExMmNlYTRkZWVhOTMwMmVkNzQyNjU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDA5OjAxOjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcXG5pbmRleCAxMGQ5ZDVjNjBmNTMxLi5kNzk2ZWJkYTFmYTBkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmNcXG5AQCAtNTcsNSArNTcsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfODQyID0ge1xcbiBcXHQuZGVzdHJveV9jdHhcXHQ9IGRlc3Ryb3lfODQyLFxcbiBcXHQuc2V0dXBfcGFyYW1zXFx0PSBzZXR1cF9wYXJhbXNfODQyLFxcbiBcXHQucmVsZWFzZV9wYXJhbXNcXHQ9IHJlbGVhc2VfcGFyYW1zXzg0MixcXG4rXFx0LmNhcHNcXHRcXHQ9IDAsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwiODQyXFxcIixcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfZGVmbGF0ZS5jXFxuaW5kZXggZjkyYTUyYTcyMGQxZS4uY2VkYzNkYWFkMzNhZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcXG5AQCAtMTQ0LDUgKzE0NCw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9kZWZsYXRlID0ge1xcbiBcXHQuZGVzdHJveV9jdHhcXHQ9IGRlZmxhdGVfZGVzdHJveSxcXG4gXFx0LnNldHVwX3BhcmFtc1xcdD0gZGVmbGF0ZV9zZXR1cF9wYXJhbXMsXFxuIFxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gZGVmbGF0ZV9yZWxlYXNlX3BhcmFtcyxcXG4rXFx0LmNhcHNcXHRcXHQ9IFpDT01QX0NBUF9MRVZFTCxcXG4rXFx0LmxldmVsX21pblxcdD0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLFxcbitcXHQubGV2ZWxfbWF4XFx0PSBaX0JFU1RfQ09NUFJFU1NJT04sXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwiZGVmbGF0ZVxcXCIsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmNcXG5pbmRleCBjNDQ5ZDUxMWJhODZmLi5iZDFlNWNhNGQxMzQyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmNcXG5AQCAtMTQ2LDUgKzE0Niw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sejQgPSB7XFxuIFxcdC5kZXN0cm95X2N0eFxcdD0gbHo0X2Rlc3Ryb3ksXFxuIFxcdC5zZXR1cF9wYXJhbXNcXHQ9IGx6NF9zZXR1cF9wYXJhbXMsXFxuIFxcdC5yZWxlYXNlX3BhcmFtc1xcdD0gbHo0X3JlbGVhc2VfcGFyYW1zLFxcbitcXHQuY2Fwc1xcdFxcdD0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsXFxuK1xcdC5sZXZlbF9taW5cXHQ9IExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVCxcXG4rXFx0LmxldmVsX21heFxcdD0gNjU1MzUsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwibHo0XFxcIixcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcXG5pbmRleCBmNmEzMzZhY2ZlMjAyLi4wZTBkN2M2OGE3ZDQyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jXFxuQEAgLTEyNCw1ICsxMjQsOCBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0aGMgPSB7XFxuIFxcdC5kZXN0cm95X2N0eFxcdD0gbHo0aGNfZGVzdHJveSxcXG4gXFx0LnNldHVwX3BhcmFtc1xcdD0gbHo0aGNfc2V0dXBfcGFyYW1zLFxcbiBcXHQucmVsZWFzZV9wYXJhbXNcXHQ9IGx6NGhjX3JlbGVhc2VfcGFyYW1zLFxcbitcXHQuY2Fwc1xcdFxcdD0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsXFxuK1xcdC5sZXZlbF9taW5cXHQ9IExaNEhDX01JTl9DTEVWRUwsXFxuK1xcdC5sZXZlbF9tYXhcXHQ9IExaNEhDX01BWF9DTEVWRUwsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwibHo0aGNcXFwiLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jXFxuaW5kZXggNGM5MDZiZWFhZTZiMy4uOTY1ZjAwN2UyY2E4OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jXFxuQEAgLTU1LDUgKzU1LDYgQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6byA9IHtcXG4gXFx0LmRlc3Ryb3lfY3R4XFx0PSBsem9fZGVzdHJveSxcXG4gXFx0LnNldHVwX3BhcmFtc1xcdD0gbHpvX3NldHVwX3BhcmFtcyxcXG4gXFx0LnJlbGVhc2VfcGFyYW1zXFx0PSBsem9fcmVsZWFzZV9wYXJhbXMsXFxuK1xcdC5jYXBzXFx0XFx0PSAwLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcImx6b1xcXCIsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcXG5pbmRleCAxMDY0MGM5NmNiZmNhLi43NTdiNDU5OGJlMDMwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmNcXG5AQCAtNTUsNSArNTUsNiBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHpvcmxlID0ge1xcbiBcXHQuZGVzdHJveV9jdHhcXHQ9IGx6b3JsZV9kZXN0cm95LFxcbiBcXHQuc2V0dXBfcGFyYW1zXFx0PSBsem9ybGVfc2V0dXBfcGFyYW1zLFxcbiBcXHQucmVsZWFzZV9wYXJhbXNcXHQ9IGx6b3JsZV9yZWxlYXNlX3BhcmFtcyxcXG4rXFx0LmNhcHNcXHRcXHQ9IDAsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwibHpvLXJsZVxcXCIsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuY1xcbmluZGV4IGQwMGI1NDgwNTZkYzIuLjgwMWVlOGVlNGJhNjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXFxuQEAgLTYwLDYgKzYwLDExIEBAIHN0YXRpYyBpbnQgenN0ZF9zZXR1cF9wYXJhbXMoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKVxcbiBcXHRwYXJhbXMtXFx1MDAzZWRydl9kYXRhID0genA7XFxuIFxcdGlmIChwYXJhbXMtXFx1MDAzZWxldmVsID09IFpDT01QX1BBUkFNX05PVF9TRVQpXFxuIFxcdFxcdHBhcmFtcy1cXHUwMDNlbGV2ZWwgPSB6c3RkX2RlZmF1bHRfY2xldmVsKCk7XFxuK1xcdGVsc2UgaWYgKHBhcmFtcy1cXHUwMDNlbGV2ZWwgXFx1MDAzYyAtKGludClaU1REX1RBUkdFVExFTkdUSF9NQVggfHxcXG4rXFx0XFx0IHBhcmFtcy1cXHUwMDNlbGV2ZWwgXFx1MDAzZSB6c3RkX21heF9jbGV2ZWwoKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcInpzdGQ6IGludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgJWRcXFxcblxcXCIsIHBhcmFtcy1cXHUwMDNlbGV2ZWwpO1xcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuIFxcbiBcXHR6cC1cXHUwMDNlY3BybSA9IHpzdGRfZ2V0X3BhcmFtcyhwYXJhbXMtXFx1MDAzZWxldmVsLCBQQUdFX1NJWkUpO1xcbiBcXG5AQCAtMTYxLDcgKzE2Niw2IEBAIHN0YXRpYyBpbnQgenN0ZF9jcmVhdGUoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgemNvbXBfY3R4ICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyb3I6XFxuLVxcdHpzdGRfcmVsZWFzZV9wYXJhbXMocGFyYW1zKTtcXG4gXFx0enN0ZF9kZXN0cm95KGN0eCk7XFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuQEAgLTIxMyw1ICsyMTcsOCBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfenN0ZCA9IHtcXG4gXFx0LmRlc3Ryb3lfY3R4XFx0PSB6c3RkX2Rlc3Ryb3ksXFxuIFxcdC5zZXR1cF9wYXJhbXNcXHQ9IHpzdGRfc2V0dXBfcGFyYW1zLFxcbiBcXHQucmVsZWFzZV9wYXJhbXNcXHQ9IHpzdGRfcmVsZWFzZV9wYXJhbXMsXFxuK1xcdC5jYXBzXFx0XFx0PSBaQ09NUF9DQVBfRElDVCB8IFpDT01QX0NBUF9MRVZFTCxcXG4rXFx0LmxldmVsX21pblxcdD0gKGludCktWlNURF9UQVJHRVRMRU5HVEhfTUFYLFxcbitcXHQubGV2ZWxfbWF4XFx0PSAtMSxcXHQvKiB2YWxpZGF0ZWQgYnkgenN0ZF9zZXR1cF9wYXJhbXMoKSAqL1xcbiBcXHQubmFtZVxcdFxcdD0gXFxcInpzdGRcXFwiLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXFxuaW5kZXggOTc0YzQ2OTE4ODdlNi4uMTQ5ZWZmNDU5MGUxYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXFxuQEAgLTk0LDYgKzk0LDMzIEBAIGNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcClcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuK2ludCB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoY29uc3QgY2hhciAqY29tcCwgczMyIGxldmVsLCBjb25zdCBjaGFyICpkaWN0X3BhdGgpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHpjb21wX29wcyAqYmFja2VuZCA9IGxvb2t1cF9iYWNrZW5kX29wcyhjb21wKTtcXG4rXFxuK1xcdGlmICghYmFja2VuZClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZGljdF9wYXRoIFxcdTAwMjZcXHUwMDI2ICEoYmFja2VuZC1cXHUwMDNlY2FwcyBcXHUwMDI2IFpDT01QX0NBUF9ESUNUKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcInpyYW06ICVzIGRvZXMgbm90IHN1cHBvcnQgZGljdGlvbmFyeVxcXFxuXFxcIiwgY29tcCk7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGxldmVsICE9IFpDT01QX1BBUkFNX05PVF9TRVQpIHtcXG4rXFx0XFx0aWYgKCEoYmFja2VuZC1cXHUwMDNlY2FwcyBcXHUwMDI2IFpDT01QX0NBUF9MRVZFTCkpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJ6cmFtOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGxldmVsXFxcXG5cXFwiLCBjb21wKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIGxldmVsX21heCA9PSAtMSBtZWFucyB2YWxpZGF0ZSBpbiAuc2V0dXBfcGFyYW1zKCkgKi9cXG4rXFx0XFx0aWYgKGJhY2tlbmQtXFx1MDAzZWxldmVsX21heCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAobGV2ZWwgXFx1MDAzYyBiYWNrZW5kLVxcdTAwM2VsZXZlbF9taW4gfHwgbGV2ZWwgXFx1MDAzZSBiYWNrZW5kLVxcdTAwM2VsZXZlbF9tYXgpKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwienJhbTogaW52YWxpZCBsZXZlbCAlZCBmb3IgJXNcXFxcblxcXCIsIGxldmVsLCBjb21wKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogc2hvdyBhdmFpbGFibGUgY29tcHJlc3NvcnMgKi9cXG4gc3NpemVfdCB6Y29tcF9hdmFpbGFibGVfc2hvdyhjb25zdCBjaGFyICpjb21wLCBjaGFyICpidWYsIHNzaXplX3QgYXQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbmluZGV4IDgxYTBmM2Y2ZmY0ODcuLjM2NjI1MDA1MGQ0YWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbkBAIC03LDYgKzcsOSBAQFxcbiBcXG4gI2RlZmluZSBaQ09NUF9QQVJBTV9OT1RfU0VUXFx0SU5UX01JTlxcbiBcXG4rI2RlZmluZSBaQ09NUF9DQVBfRElDVFxcdFxcdEJJVCgwKVxcdC8qIGRpY3Rpb25hcnkgc3VwcG9ydCAqL1xcbisjZGVmaW5lIFpDT01QX0NBUF9MRVZFTFxcdFxcdEJJVCgxKVxcdC8qIGFkanVzdGFibGUgY29tcHJlc3Npb24gbGV2ZWwgKi9cXG4rXFxuIHN0cnVjdCBkZWZsYXRlX3BhcmFtcyB7XFxuIFxcdHMzMiB3aW5iaXRzO1xcbiB9O1xcbkBAIC02Niw2ICs2OSw5IEBAIHN0cnVjdCB6Y29tcF9vcHMge1xcbiBcXHRpbnQgKCpzZXR1cF9wYXJhbXMpKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcyk7XFxuIFxcdHZvaWQgKCpyZWxlYXNlX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcXG4gXFxuK1xcdHVuc2lnbmVkIGludCBjYXBzO1xcbitcXHRzMzIgbGV2ZWxfbWluO1xcbitcXHRzMzIgbGV2ZWxfbWF4O1xcbiBcXHRjb25zdCBjaGFyICpuYW1lO1xcbiB9O1xcbiBcXG5AQCAtODEsNiArODcsNyBAQCBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpO1xcbiBpbnQgemNvbXBfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpO1xcbiBzc2l6ZV90IHpjb21wX2F2YWlsYWJsZV9zaG93KGNvbnN0IGNoYXIgKmNvbXAsIGNoYXIgKmJ1Ziwgc3NpemVfdCBhdCk7XFxuIGNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XFxuK2ludCB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoY29uc3QgY2hhciAqY29tcCwgczMyIGxldmVsLCBjb25zdCBjaGFyICpkaWN0X3BhdGgpO1xcbiBcXG4gc3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xcbiB2b2lkIHpjb21wX2Rlc3Ryb3koc3RydWN0IHpjb21wICpjb21wKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbmluZGV4IGFjZTY1YzU4NjA3MmIuLmI0NTg1YjNiYzU3NmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbkBAIC0xNjYxLDYgKzE2NjEsOCBAQCBzdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXFxuIFxcdHpyYW0tXFx1MDAzZWNvbXBfYWxnc1twcmlvXSA9IGFsZztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKTtcXG4rXFxuIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG4ge1xcbiBcXHRjb25zdCBjaGFyICphbGc7XFxuQEAgLTE2ODEsNiArMTY4Myw3IEBAIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG4gXFx0fVxcbiBcXG4gXFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XFxuK1xcdGNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTcwOSw4ICsxNzEyLDExIEBAIHN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdElOVF9NQVgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdE5VTEwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFJFQURJTkdfUE9MSUNZKTtcXG4tXFx0XFx0aWYgKHN6IFxcdTAwM2MgMClcXG4rXFx0XFx0aWYgKHN6IFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJ6cmFtOiBmYWlsZWQgdG8gbG9hZCBkaWN0aW9uYXJ5ICVzIChlcnI9JXpkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGRpY3RfcGF0aCwgc3opO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHR6cmFtLVxcdTAwM2VwYXJhbXNbcHJpb10uZGljdF9zeiA9IHN6O1xcbkBAIC0xNzk0LDYgKzE4MDAsMTMgQEAgc3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dKSB7XFxuK1xcdFxcdHJldCA9IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyh6cmFtLVxcdTAwM2Vjb21wX2FsZ3NbcHJpb10sIGxldmVsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZGljdF9wYXRoKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gY29tcF9wYXJhbXNfc3RvcmUoenJhbSwgcHJpbywgbGV2ZWwsIGRpY3RfcGF0aCwgXFx1MDAyNmRlZmxhdGVfcGFyYW1zKTtcXG4gXFx0cmV0dXJuIHJldCA/IHJldCA6IGxlbjtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMTo1NS42MzA3MzY1MjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5Njk2MTczNjAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0XCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfTFo0SENcIixcbiAgICBcIlpSQU1fQkFDS0VORF9aU1REXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfREVGTEFURVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EXzg0MlwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX3ZhbGlkYXRlX3BhcmFtc1wiLFxuICAgIFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiLFxuICAgIFwiX19jb21wX2FsZ29yaXRobV9zdG9yZVwiLFxuICAgIFwiemNvbXBfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciB6cmFtIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgKGxldmVsIGFuZCBkaWN0aW9uYXJ5KSBhbmQgcmVzZXRzIHBhcmFtZXRlcnMgd2hlbiB0aGUgYWxnb3JpdGhtIGlzIGNoYW5nZWQuIEl0IG1vZGlmaWVzIHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyBhbmQgemNvbXAgYmFja2VuZCBvcHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHpyYW0gc3lzZnMgYXR0cmlidXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmUwZDlhMTU4MDY0ZThjZmExMTJjZWE0ZGVlYTkzMDJlZDc0MjY1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDA5OjAxOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfODQyLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuY1xuaW5kZXggMTBkOWQ1YzYwZjUzMS4uZDc5NmViZGExZmEwZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kXzg0Mi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF84NDIuY1xuQEAgLTU3LDUgKzU3LDYgQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kXzg0MiA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBkZXN0cm95Xzg0MixcbiBcdC5zZXR1cF9wYXJhbXNcdD0gc2V0dXBfcGFyYW1zXzg0MixcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSByZWxlYXNlX3BhcmFtc184NDIsXG4rXHQuY2Fwc1x0XHQ9IDAsXG4gXHQubmFtZVx0XHQ9IFwiODQyXCIsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbmluZGV4IGY5MmE1MmE3MjBkMWUuLmNlZGMzZGFhZDMzYWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9kZWZsYXRlLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2RlZmxhdGUuY1xuQEAgLTE0NCw1ICsxNDQsOCBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfZGVmbGF0ZSA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBkZWZsYXRlX2Rlc3Ryb3ksXG4gXHQuc2V0dXBfcGFyYW1zXHQ9IGRlZmxhdGVfc2V0dXBfcGFyYW1zLFxuIFx0LnJlbGVhc2VfcGFyYW1zXHQ9IGRlZmxhdGVfcmVsZWFzZV9wYXJhbXMsXG4rXHQuY2Fwc1x0XHQ9IFpDT01QX0NBUF9MRVZFTCxcbitcdC5sZXZlbF9taW5cdD0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OLFxuK1x0LmxldmVsX21heFx0PSBaX0JFU1RfQ09NUFJFU1NJT04sXG4gXHQubmFtZVx0XHQ9IFwiZGVmbGF0ZVwiLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuaW5kZXggYzQ0OWQ1MTFiYTg2Zi4uYmQxZTVjYTRkMTM0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejQuY1xuQEAgLTE0Niw1ICsxNDYsOCBAQCBjb25zdCBzdHJ1Y3QgemNvbXBfb3BzIGJhY2tlbmRfbHo0ID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IGx6NF9kZXN0cm95LFxuIFx0LnNldHVwX3BhcmFtc1x0PSBsejRfc2V0dXBfcGFyYW1zLFxuIFx0LnJlbGVhc2VfcGFyYW1zXHQ9IGx6NF9yZWxlYXNlX3BhcmFtcyxcbitcdC5jYXBzXHRcdD0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsXG4rXHQubGV2ZWxfbWluXHQ9IExaNF9BQ0NFTEVSQVRJT05fREVGQVVMVCxcbitcdC5sZXZlbF9tYXhcdD0gNjU1MzUsXG4gXHQubmFtZVx0XHQ9IFwibHo0XCIsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sejRoYy5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHo0aGMuY1xuaW5kZXggZjZhMzM2YWNmZTIwMi4uMGUwZDdjNjhhN2Q0MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6NGhjLmNcbkBAIC0xMjQsNSArMTI0LDggQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6NGhjID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IGx6NGhjX2Rlc3Ryb3ksXG4gXHQuc2V0dXBfcGFyYW1zXHQ9IGx6NGhjX3NldHVwX3BhcmFtcyxcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSBsejRoY19yZWxlYXNlX3BhcmFtcyxcbitcdC5jYXBzXHRcdD0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsXG4rXHQubGV2ZWxfbWluXHQ9IExaNEhDX01JTl9DTEVWRUwsXG4rXHQubGV2ZWxfbWF4XHQ9IExaNEhDX01BWF9DTEVWRUwsXG4gXHQubmFtZVx0XHQ9IFwibHo0aGNcIixcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6by5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbmluZGV4IDRjOTA2YmVhYWU2YjMuLjk2NWYwMDdlMmNhODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem8uY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvLmNcbkBAIC01NSw1ICs1NSw2IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF9sem8gPSB7XG4gXHQuZGVzdHJveV9jdHhcdD0gbHpvX2Rlc3Ryb3ksXG4gXHQuc2V0dXBfcGFyYW1zXHQ9IGx6b19zZXR1cF9wYXJhbXMsXG4gXHQucmVsZWFzZV9wYXJhbXNcdD0gbHpvX3JlbGVhc2VfcGFyYW1zLFxuK1x0LmNhcHNcdFx0PSAwLFxuIFx0Lm5hbWVcdFx0PSBcImx6b1wiLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfbHpvcmxlLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuY1xuaW5kZXggMTA2NDBjOTZjYmZjYS4uNzU3YjQ1OThiZTAzMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX2x6b3JsZS5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF9sem9ybGUuY1xuQEAgLTU1LDUgKzU1LDYgQEAgY29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX2x6b3JsZSA9IHtcbiBcdC5kZXN0cm95X2N0eFx0PSBsem9ybGVfZGVzdHJveSxcbiBcdC5zZXR1cF9wYXJhbXNcdD0gbHpvcmxlX3NldHVwX3BhcmFtcyxcbiBcdC5yZWxlYXNlX3BhcmFtc1x0PSBsem9ybGVfcmVsZWFzZV9wYXJhbXMsXG4rXHQuY2Fwc1x0XHQ9IDAsXG4gXHQubmFtZVx0XHQ9IFwibHpvLXJsZVwiLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jIGIvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXG5pbmRleCBkMDBiNTQ4MDU2ZGMyLi44MDFlZThlZTRiYTY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmNcbkBAIC02MCw2ICs2MCwxMSBAQCBzdGF0aWMgaW50IHpzdGRfc2V0dXBfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcbiBcdHBhcmFtcy1cdTAwM2VkcnZfZGF0YSA9IHpwO1xuIFx0aWYgKHBhcmFtcy1cdTAwM2VsZXZlbCA9PSBaQ09NUF9QQVJBTV9OT1RfU0VUKVxuIFx0XHRwYXJhbXMtXHUwMDNlbGV2ZWwgPSB6c3RkX2RlZmF1bHRfY2xldmVsKCk7XG4rXHRlbHNlIGlmIChwYXJhbXMtXHUwMDNlbGV2ZWwgXHUwMDNjIC0oaW50KVpTVERfVEFSR0VUTEVOR1RIX01BWCB8fFxuK1x0XHQgcGFyYW1zLVx1MDAzZWxldmVsIFx1MDAzZSB6c3RkX21heF9jbGV2ZWwoKSkge1xuK1x0XHRwcl9lcnIoXCJ6c3RkOiBpbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsICVkXFxuXCIsIHBhcmFtcy1cdTAwM2VsZXZlbCk7XG4rXHRcdGdvdG8gZXJyb3I7XG4rXHR9XG4gXG4gXHR6cC1cdTAwM2VjcHJtID0genN0ZF9nZXRfcGFyYW1zKHBhcmFtcy1cdTAwM2VsZXZlbCwgUEFHRV9TSVpFKTtcbiBcbkBAIC0xNjEsNyArMTY2LDYgQEAgc3RhdGljIGludCB6c3RkX2NyZWF0ZShzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCB6Y29tcF9jdHggKmN0eClcbiBcdHJldHVybiAwO1xuIFxuIGVycm9yOlxuLVx0enN0ZF9yZWxlYXNlX3BhcmFtcyhwYXJhbXMpO1xuIFx0enN0ZF9kZXN0cm95KGN0eCk7XG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG5AQCAtMjEzLDUgKzIxNyw4IEBAIGNvbnN0IHN0cnVjdCB6Y29tcF9vcHMgYmFja2VuZF96c3RkID0ge1xuIFx0LmRlc3Ryb3lfY3R4XHQ9IHpzdGRfZGVzdHJveSxcbiBcdC5zZXR1cF9wYXJhbXNcdD0genN0ZF9zZXR1cF9wYXJhbXMsXG4gXHQucmVsZWFzZV9wYXJhbXNcdD0genN0ZF9yZWxlYXNlX3BhcmFtcyxcbitcdC5jYXBzXHRcdD0gWkNPTVBfQ0FQX0RJQ1QgfCBaQ09NUF9DQVBfTEVWRUwsXG4rXHQubGV2ZWxfbWluXHQ9IChpbnQpLVpTVERfVEFSR0VUTEVOR1RIX01BWCxcbitcdC5sZXZlbF9tYXhcdD0gLTEsXHQvKiB2YWxpZGF0ZWQgYnkgenN0ZF9zZXR1cF9wYXJhbXMoKSAqL1xuIFx0Lm5hbWVcdFx0PSBcInpzdGRcIixcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbmluZGV4IDk3NGM0NjkxODg3ZTYuLjE0OWVmZjQ1OTBlMWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbkBAIC05NCw2ICs5NCwzMyBAQCBjb25zdCBjaGFyICp6Y29tcF9sb29rdXBfYmFja2VuZF9uYW1lKGNvbnN0IGNoYXIgKmNvbXApXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4raW50IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBjaGFyICpjb21wLCBzMzIgbGV2ZWwsIGNvbnN0IGNoYXIgKmRpY3RfcGF0aClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgemNvbXBfb3BzICpiYWNrZW5kID0gbG9va3VwX2JhY2tlbmRfb3BzKGNvbXApO1xuK1xuK1x0aWYgKCFiYWNrZW5kKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChkaWN0X3BhdGggXHUwMDI2XHUwMDI2ICEoYmFja2VuZC1cdTAwM2VjYXBzIFx1MDAyNiBaQ09NUF9DQVBfRElDVCkpIHtcbitcdFx0cHJfZXJyKFwienJhbTogJXMgZG9lcyBub3Qgc3VwcG9ydCBkaWN0aW9uYXJ5XFxuXCIsIGNvbXApO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAobGV2ZWwgIT0gWkNPTVBfUEFSQU1fTk9UX1NFVCkge1xuK1x0XHRpZiAoIShiYWNrZW5kLVx1MDAzZWNhcHMgXHUwMDI2IFpDT01QX0NBUF9MRVZFTCkpIHtcbitcdFx0XHRwcl9lcnIoXCJ6cmFtOiAlcyBkb2VzIG5vdCBzdXBwb3J0IGxldmVsXFxuXCIsIGNvbXApO1xuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0fVxuK1x0XHQvKiBsZXZlbF9tYXggPT0gLTEgbWVhbnMgdmFsaWRhdGUgaW4gLnNldHVwX3BhcmFtcygpICovXG4rXHRcdGlmIChiYWNrZW5kLVx1MDAzZWxldmVsX21heCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAobGV2ZWwgXHUwMDNjIGJhY2tlbmQtXHUwMDNlbGV2ZWxfbWluIHx8IGxldmVsIFx1MDAzZSBiYWNrZW5kLVx1MDAzZWxldmVsX21heCkpIHtcbitcdFx0XHRwcl9lcnIoXCJ6cmFtOiBpbnZhbGlkIGxldmVsICVkIGZvciAlc1xcblwiLCBsZXZlbCwgY29tcCk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBzaG93IGF2YWlsYWJsZSBjb21wcmVzc29ycyAqL1xuIHNzaXplX3QgemNvbXBfYXZhaWxhYmxlX3Nob3coY29uc3QgY2hhciAqY29tcCwgY2hhciAqYnVmLCBzc2l6ZV90IGF0KVxuIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaCBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG5pbmRleCA4MWEwZjNmNmZmNDg3Li4zNjYyNTAwNTBkNGFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG5AQCAtNyw2ICs3LDkgQEBcbiBcbiAjZGVmaW5lIFpDT01QX1BBUkFNX05PVF9TRVRcdElOVF9NSU5cbiBcbisjZGVmaW5lIFpDT01QX0NBUF9ESUNUXHRcdEJJVCgwKVx0LyogZGljdGlvbmFyeSBzdXBwb3J0ICovXG4rI2RlZmluZSBaQ09NUF9DQVBfTEVWRUxcdFx0QklUKDEpXHQvKiBhZGp1c3RhYmxlIGNvbXByZXNzaW9uIGxldmVsICovXG4rXG4gc3RydWN0IGRlZmxhdGVfcGFyYW1zIHtcbiBcdHMzMiB3aW5iaXRzO1xuIH07XG5AQCAtNjYsNiArNjksOSBAQCBzdHJ1Y3QgemNvbXBfb3BzIHtcbiBcdGludCAoKnNldHVwX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbiBcdHZvaWQgKCpyZWxlYXNlX3BhcmFtcykoc3RydWN0IHpjb21wX3BhcmFtcyAqcGFyYW1zKTtcbiBcbitcdHVuc2lnbmVkIGludCBjYXBzO1xuK1x0czMyIGxldmVsX21pbjtcbitcdHMzMiBsZXZlbF9tYXg7XG4gXHRjb25zdCBjaGFyICpuYW1lO1xuIH07XG4gXG5AQCAtODEsNiArODcsNyBAQCBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpO1xuIGludCB6Y29tcF9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSk7XG4gc3NpemVfdCB6Y29tcF9hdmFpbGFibGVfc2hvdyhjb25zdCBjaGFyICpjb21wLCBjaGFyICpidWYsIHNzaXplX3QgYXQpO1xuIGNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XG4raW50IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBjaGFyICpjb21wLCBzMzIgbGV2ZWwsIGNvbnN0IGNoYXIgKmRpY3RfcGF0aCk7XG4gXG4gc3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpO1xuIHZvaWQgemNvbXBfZGVzdHJveShzdHJ1Y3QgemNvbXAgKmNvbXApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbmluZGV4IGFjZTY1YzU4NjA3MmIuLmI0NTg1YjNiYzU3NmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbkBAIC0xNjYxLDYgKzE2NjEsOCBAQCBzdGF0aWMgdm9pZCBjb21wX2FsZ29yaXRobV9zZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICphbGcpXG4gXHR6cmFtLVx1MDAzZWNvbXBfYWxnc1twcmlvXSA9IGFsZztcbiB9XG4gXG4rc3RhdGljIHZvaWQgY29tcF9wYXJhbXNfcmVzZXQoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvKTtcbitcbiBzdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXG4ge1xuIFx0Y29uc3QgY2hhciAqYWxnO1xuQEAgLTE2ODEsNiArMTY4Myw3IEBAIHN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcbiBcdH1cbiBcbiBcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xuK1x0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTcwOSw4ICsxNzEyLDExIEBAIHN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXG4gXHRcdFx0XHRcdFx0SU5UX01BWCxcbiBcdFx0XHRcdFx0XHROVUxMLFxuIFx0XHRcdFx0XHRcdFJFQURJTkdfUE9MSUNZKTtcbi1cdFx0aWYgKHN6IFx1MDAzYyAwKVxuK1x0XHRpZiAoc3ogXHUwMDNjPSAwKSB7XG4rXHRcdFx0cHJfZXJyKFwienJhbTogZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyeSAlcyAoZXJyPSV6ZClcXG5cIixcbitcdFx0XHQgICAgICAgZGljdF9wYXRoLCBzeik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHpyYW0tXHUwMDNlcGFyYW1zW3ByaW9dLmRpY3Rfc3ogPSBzejtcbkBAIC0xNzk0LDYgKzE4MDAsMTMgQEAgc3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAoenJhbS1cdTAwM2Vjb21wX2FsZ3NbcHJpb10pIHtcbitcdFx0cmV0ID0gemNvbXBfdmFsaWRhdGVfcGFyYW1zKHpyYW0tXHUwMDNlY29tcF9hbGdzW3ByaW9dLCBsZXZlbCxcbitcdFx0XHRcdFx0ICAgIGRpY3RfcGF0aCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbiBcdHJldCA9IGNvbXBfcGFyYW1zX3N0b3JlKHpyYW0sIHByaW8sIGxldmVsLCBkaWN0X3BhdGgsIFx1MDAyNmRlZmxhdGVfcGFyYW1zKTtcbiBcdHJldHVybiByZXQgPyByZXQgOiBsZW47XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDE6NTUuNjMwNzM4MzU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc4MDM5MDkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpSQU0gUGF0Y2ggZm9yIFJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay96cmFtL2AsIHNwZWNpZmljYWxseSB0aGUgdmFsaWRhdGlvbiBvZiBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLiBJdCBzZWVtcyB3ZSdyZSBhZGRpbmcgY2hlY2tzIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgZGlmZmVyZW50IGFsZ29yaXRobXMg4oCTIHRoaW5ncyBsaWtlIExaNCwgTFpPLCBaU1RELCBEZWZsYXRlLCB0aGF0IHNvcnQgb2YgdGhpbmcg4oCTIGZvciBjb21wcmVzc2lvbiBsZXZlbCBhbmQgZGljdGlvbmFyeSBwYXRoLiBTbWFydC4gQWxzbywgdGhlIHBhdGNoIGlzIHJlc2V0dGluZyB0aGUgY29tcHJlc3Npb24gcGFyYW1ldGVycyB3aGVuIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMgY2hhbmdlZC4gQW5kIEkgc2VlIHRoZXkndmUgYWxzbyBjbGVhbmVkIHVwIGEgYHpzdGRfY3JlYXRlYCBidWcgd2hlcmUgYSBgenN0ZF9yZWxlYXNlX3BhcmFtc2AgY2FsbCB3YXMgaW4gdGhlIHdyb25nIHBsYWNlLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgY29kZSAqcmVhY2hhYmxlKiBhbmQsIG1vcmUgaW1wb3J0YW50bHkgZm9yIG15IHB1cnBvc2VzLCB3b3J0aCBmdXp6aW5nP1xuXG5aUkFNIGl0c2VsZiBpcyBhIGJsb2NrIGRldmljZSwgYW5kIGl04oCZcyBtZWFudCB0byBjb21wcmVzcyBkYXRhIGluIFJBTSwgc28gaXQgc2hvdWxkIGJlIHJlYWNoYWJsZS4gVGhhdOKAmXMgZ29vZC4gVXNlciBzcGFjZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCB0aHJvdWdoIHN5c2ZzIGFuZCBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucywgc28gdGhlcmUncyBhbiBhdHRhY2sgc3VyZmFjZSB0aGVyZS5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIHRob3NlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uczogYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAuIEJpbmdvISBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cy4gU28sIEkgY2FuIHRyaWdnZXIgdGhlc2UgY2hhbmdlcyBieSB3cml0aW5nIHRvIHN5c2ZzIGZpbGVzIGxpa2UgYC9zeXMvYmxvY2svenJhbTAvY29tcF9hbGdvcml0aG1gIG9yIGAvc3lzL2Jsb2NrL3pyYW0wL2FsZ29fcGFyYW1zYCDigJMgb3Igc29tZXRoaW5nIHNpbWlsYXIsIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHByZWNpc2UgcGF0aHMuIFRoYXQncyBob3cgSSBjYW4gZXhlcmNpc2UgdGhpcyBjb2RlLiBPa2F5LCBsZXQncyBuYWlsIGRvd24gdGhvc2UgZXhhY3Qgc3lzZnMgZmlsZSBsb2NhdGlvbnMgYW5kIHRoZW4gYnVpbGQgYSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjIzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDI6MDIuNDExMTMxNTQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzU2MzQ0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzAxPXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzI3LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3Mjg6c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyOS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDI6MDYuNTQ2NzcyMTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM3MDY2MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXRpbGl6YXRpb24gb2YgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgb2JqZWN0IG9yIGZ1bmN0aW9uIOKAkyBkZXBlbmRpbmcgb24gaXRzIGRlZmluaXRpb24gaW4gdGhlIGNvZGViYXNlIOKAkyBpcyBiZWluZyByZWZlcmVuY2VkLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIGEgZGlyZWN0IHNlYXJjaCB3aXRoaW4gdGhlIHByb2plY3QsIGxpa2VseSB1c2luZyBteSBwcmVmZXJyZWQgSURFJ3Mgc2VhcmNoIGNhcGFiaWxpdGllcywgb3IgcG9zc2libHkgdXRpbGl6aW5nIGBncmVwYCBpZiBJIG5lZWQgbW9yZSB0YXJnZXRlZCByZXN1bHRzIGFjcm9zcyBhIGJyb2FkZXIgcmFuZ2Ugb2YgZmlsZXMgb3IgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHdoYXQgdGhpcyBvYmplY3QgaXMuIEknbSBmb2N1c2luZyBvbiBmaW5kaW5nIHRoZSBkaXJlY3QgY2FsbHMgb3IgaW5zdGFuY2VzIG9mIGl0IGluIGFueSBvdGhlciBzb3VyY2UgY29kZSBmaWxlcy4gVGhlbiwgSSB3aWxsIHN0YXJ0IG1ha2luZyBzZW5zZSBvZiBpdHMgcHVycG9zZS5cblxuTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IGl0cyBzY29wZSBvZiBpbmZsdWVuY2Ug4oCTIGlzIGl0IGdsb2JhbCwgbW9kdWxlLXNwZWNpZmljLCBvciBsb2NhbD8gV2hhdCBtb2R1bGVzIGludGVyYWN0IHdpdGggaXQ/IElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUsIGEgZnVuY3Rpb24sIGEgY2xhc3MgaW5zdGFuY2U/IFRoZSBzcGVjaWZpYyB1c2VzIHdpbGwgcHJvdmlkZSBpbW1lZGlhdGUgY2x1ZXMgdG8gaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaW4gdGhlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gYW5hbHl6ZSBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIHNldCwgcmV0cmlldmVkLCBhbmQgbW9kaWZpZWQuIFRoZSBzZWFyY2ggc2hvdWxkIGlsbHVtaW5hdGUgd2hldGhlciBpdCdzIHBhcnQgb2YgYSBrZXkgY29uZmlndXJhdGlvbiBjb21wb25lbnQsIGEgY2FjaGluZyBtZWNoYW5pc20sIG9yIGEgbWVhbnMgb2YgaW50ZXItbW9kdWxlIGNvbW11bmljYXRpb24uXG5cbkZ1cnRoZXJtb3JlLCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN1cnJvdW5kaW5nIGNvbnRleHQ6IHdoYXQgZnVuY3Rpb25zIGNhbGwgaXQsIHdoYXQgdmFyaWFibGVzIGFyZSBwYXNzZWQgdG8gb3IgcmV0dXJuZWQgZnJvbSBpdCwgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQgZm9yIHRoZWlyIG9wZXJhdGlvbi4gVGhlIHdheSBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cyB3aWxsIHRlbGwgbWUgdGhlIHN5c3RlbSdzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjEwLjQ4Mzg0MTQ4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTU2OTMyMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTcwMT1zdGF0aWMgaW50IGNvbXBfcGFyYW1zX3N0b3JlKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgczMyIGxldmVsLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyNy1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNzI4OnN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MjktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjE0LjY0MDc4MDAxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTY5MjUxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhhdDpcblxuKipJbnZlc3RpZ2F0aW5nIGB6cmFtX2Rydi5jYCBVc2FnZSoqXG5cblJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gYW55dGhpbmcgZWxzZSwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBpbnZlc3RpZ2F0ZSB0aGUgdXNhZ2VzIG9mIHdoYXRldmVyIEknbSB3b3JraW5nIHdpdGggd2l0aGluIHRoZSBgenJhbV9kcnYuY2AgZmlsZS4gSXQncyBhIGtleSBjb21wb25lbnQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGludGVncmF0aW9uIGlzIGNydWNpYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBJJ20gZGVhbGluZyB3aXRoIGludGVyYWN0cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHdob2xlIGB6cmFtX2Rydi5jYCBpbXBsZW1lbnRhdGlvbi4gR290dGEgZ2V0IHRoZSBiYXNlbGluZSBiZWZvcmUgSSBiZWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjE4Ljc5NzcwNzU0OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEwNTUzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxnb3JpdGhtX3BhcmFtc19zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzAxPXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzI3LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3Mjg6c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcyOS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDI6MTguOTA4NzY4MTYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NzcwNzYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQ29kZSdzIFVzYWdlKipcblxuUmlnaHQsIGxldCdzIHNlZS4uLiBJJ20gZ2V0dGluZyBhIGh1bmNoIGFib3V0IHRoaXMuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBpc3N1ZSBpcyBzdGVtbWluZyBmcm9tIHNvbWV0aGluZyB0aGF0IHRoaXMgcGllY2Ugb2YgY29kZSBpcyB1c2VkIGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgaXQgbWlnaHQgYmUgaW50ZWdyYXRlZCBpbiBhIG1hY3JvIG9mIHNvbWUgc29ydC4gVGhlIG9ubHkgd2F5IHRvIGZpbmQgb3V0IGlzIHRvIGZvbGxvdyB0aGUgdXNhZ2UuIExldCBtZSBxdWlja2x5IHplcm8gaW4gb24gdGhhdCBzZWN0aW9uIG9mIHRoZSBmaWxlIHdoZXJlIHRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIGNhbGxlZC4gTGluZSAxNzI4IHNlZW1zIGxpa2UgYSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZy4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIG1hY3JvIHRvIHRyb3VibGVzaG9vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc4NywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjIyLjU4NjQ3ODUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzYzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcyOCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3Mjg6XFx0c3RhdGljIHNzaXplX3QgYWxnb3JpdGhtX3BhcmFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuMTcyOTpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4xNzMwOlxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKmJ1ZixcXG4xNzMxOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBsZW4pXFxuMTczMjpcXHR7XFxuMTczMzpcXHRcXHRzMzIgcHJpbyA9IFpSQU1fUFJJTUFSWV9DT01QLCBsZXZlbCA9IFpDT01QX1BBUkFNX05PVF9TRVQ7XFxuMTczNDpcXHRcXHRjaGFyICphcmdzLCAqcGFyYW0sICp2YWwsICphbGdvID0gTlVMTCwgKmRpY3RfcGF0aCA9IE5VTEw7XFxuMTczNTpcXHRcXHRzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMgZGVmbGF0ZV9wYXJhbXM7XFxuMTczNjpcXHRcXHRzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7XFxuMTczNzpcXHRcXHRib29sIHByaW9fcGFyYW0gPSBmYWxzZTtcXG4xNzM4OlxcdFxcdGludCByZXQ7XFxuMTczOTpcXHRcXG4xNzQwOlxcdFxcdGRlZmxhdGVfcGFyYW1zLndpbmJpdHMgPSBaQ09NUF9QQVJBTV9OT1RfU0VUO1xcbjE3NDE6XFx0XFxuMTc0MjpcXHRcXHRhcmdzID0gc2tpcF9zcGFjZXMoYnVmKTtcXG4xNzQzOlxcdFxcdHdoaWxlICgqYXJncykge1xcbjE3NDQ6XFx0XFx0XFx0YXJncyA9IG5leHRfYXJnKGFyZ3MsIFxcdTAwMjZwYXJhbSwgXFx1MDAyNnZhbCk7XFxuMTc0NTpcXHRcXG4xNzQ2OlxcdFxcdFxcdGlmICghdmFsIHx8ICEqdmFsKVxcbjE3NDc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTc0ODpcXHRcXG4xNzQ5OlxcdFxcdFxcdGlmICghc3RyY21wKHBhcmFtLCBcXFwicHJpb3JpdHlcXFwiKSkge1xcbjE3NTA6XFx0XFx0XFx0XFx0cHJpb19wYXJhbSA9IHRydWU7XFxuMTc1MTpcXHRcXHRcXHRcXHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXFx1MDAyNnByaW8pO1xcbjE3NTI6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4xNzUzOlxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTc1NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNzU1OlxcdFxcdFxcdH1cXG4xNzU2OlxcdFxcbjE3NTc6XFx0XFx0XFx0aWYgKCFzdHJjbXAocGFyYW0sIFxcXCJsZXZlbFxcXCIpKSB7XFxuMTc1ODpcXHRcXHRcXHRcXHRyZXQgPSBrc3RydG9pbnQodmFsLCAxMCwgXFx1MDAyNmxldmVsKTtcXG4xNzU5OlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuMTc2MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3NjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTc2MjpcXHRcXHRcXHR9XFxuMTc2MzpcXHRcXG4xNzY0OlxcdFxcdFxcdGlmICghc3RyY21wKHBhcmFtLCBcXFwiYWxnb1xcXCIpKSB7XFxuMTc2NTpcXHRcXHRcXHRcXHRhbGdvID0gdmFsO1xcbjE3NjY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTc2NzpcXHRcXHRcXHR9XFxuMTc2ODpcXHRcXG4xNzY5OlxcdFxcdFxcdGlmICghc3RyY21wKHBhcmFtLCBcXFwiZGljdFxcXCIpKSB7XFxuMTc3MDpcXHRcXHRcXHRcXHRkaWN0X3BhdGggPSB2YWw7XFxuMTc3MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xNzcyOlxcdFxcdFxcdH1cXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0XFx0aWYgKCFzdHJjbXAocGFyYW0sIFxcXCJkZWZsYXRlLndpbmJpdHNcXFwiKSkge1xcbjE3NzU6XFx0XFx0XFx0XFx0cmV0ID0ga3N0cnRvaW50KHZhbCwgMTAsIFxcdTAwMjZkZWZsYXRlX3BhcmFtcy53aW5iaXRzKTtcXG4xNzc2OlxcdFxcdFxcdFxcdGlmIChyZXQpXFxuMTc3NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3Nzg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTc3OTpcXHRcXHRcXHR9XFxuMTc4MDpcXHRcXHR9XFxuMTc4MTpcXHRcXG4xNzgyOlxcdFxcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbjE3ODM6XFx0XFx0aWYgKGluaXRfZG9uZSh6cmFtKSlcXG4xNzg0OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTc4NTpcXHRcXG4xNzg2OlxcdFxcdGlmIChwcmlvX3BhcmFtKSB7XFxuMTc4NzpcXHRcXHRcXHRpZiAocHJpbyBcXHUwMDNjIFpSQU1fUFJJTUFSWV9DT01QIHx8IHByaW8gXFx1MDAzZT0gWlJBTV9NQVhfQ09NUFMpXFxuMTc4ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNzg5OlxcdFxcdH1cXG4xNzkwOlxcdFxcbjE3OTE6XFx0XFx0aWYgKGFsZ28gXFx1MDAyNlxcdTAwMjYgcHJpb19wYXJhbSkge1xcbjE3OTI6XFx0XFx0XFx0cmV0ID0gdmFsaWRhdGVfYWxnb19wcmlvcml0eSh6cmFtLCBhbGdvLCBwcmlvKTtcXG4xNzkzOlxcdFxcdFxcdGlmIChyZXQpXFxuMTc5NDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE3OTU6XFx0XFx0fVxcbjE3OTY6XFx0XFxuMTc5NzpcXHRcXHRpZiAoYWxnbyBcXHUwMDI2XFx1MDAyNiAhcHJpb19wYXJhbSkge1xcbjE3OTg6XFx0XFx0XFx0cHJpbyA9IGxvb2t1cF9hbGdvX3ByaW9yaXR5KHpyYW0sIGFsZ28sIFpSQU1fUFJJTUFSWV9DT01QKTtcXG4xNzk5OlxcdFxcdFxcdGlmIChwcmlvIFxcdTAwM2MgMClcXG4xODAwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4MDE6XFx0XFx0fVxcbjE4MDI6XFx0XFxuMTgwMzpcXHRcXHRpZiAoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dKSB7XFxuMTgwNDpcXHRcXHRcXHRyZXQgPSB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dLCBsZXZlbCxcXG4xODA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBkaWN0X3BhdGgpO1xcbjE4MDY6XFx0XFx0XFx0aWYgKHJldClcXG4xODA3OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTgwODpcXHRcXHR9XFxuMTgwOTpcXHRcXG4xODEwOlxcdFxcdHJldCA9IGNvbXBfcGFyYW1zX3N0b3JlKHpyYW0sIHByaW8sIGxldmVsLCBkaWN0X3BhdGgsIFxcdTAwMjZkZWZsYXRlX3BhcmFtcyk7XFxuMTgxMTpcXHRcXHRyZXR1cm4gcmV0ID8gcmV0IDogbGVuO1xcbjE4MTI6XFx0fVxcbjE4MTM6XFx0XFxuMTgxNDpcXHRzdGF0aWMgc3NpemVfdCBjb21wX2FsZ29yaXRobV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4xODE1OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbjE4MTY6XFx0XFx0XFx0XFx0XFx0ICAgY2hhciAqYnVmKVxcbjE4MTc6XFx0e1xcbjE4MTg6XFx0XFx0c3RydWN0IHpyYW0gKnpyYW0gPSBkZXZfdG9fenJhbShkZXYpO1xcbjE4MTk6XFx0XFx0c3NpemVfdCBzejtcXG4xODIwOlxcdFxcbjE4MjE6XFx0XFx0Z3VhcmQocndzZW1fcmVhZCkoXFx1MDAyNnpyYW0tXFx1MDAzZWRldl9sb2NrKTtcXG4xODIyOlxcdFxcdHN6ID0gemNvbXBfYXZhaWxhYmxlX3Nob3coenJhbS1cXHUwMDNlY29tcF9hbGdzW1pSQU1fUFJJTUFSWV9DT01QXSwgYnVmLCAwKTtcXG4xODIzOlxcdFxcdHJldHVybiBzejtcXG4xODI0OlxcdH1cXG4xODI1OlxcdFxcbjE4MjY6XFx0c3RhdGljIHNzaXplX3QgY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbjE4Mjc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMjoyMi41ODc4MTkxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQ5Mzc3Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN5c2ZzIFN0b3JlIEZ1bmN0aW9uIGZvciBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgYWxnb3JpdGhtX3BhcmFtc19zdG9yZWAgYW5kIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYC4gSXQncyBtb2RpZnlpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgYGFsZ29fcGFyYW1zYCBhbmQgYGNvbXBfYWxnb3JpdGhtYCBzeXNmcyBmaWxlcy4gVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgaXMgdGhlIGZpcnN0IHJlZCBmbGFnLCBtZWFuaW5nIHN5emthbGxlciBjYW4gbGlrZWx5IGdldCBpdHMgdGVldGggaW50byB0aGVtLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyBmdXp6aW5nLiBUaGlzIHNjcmVhbXMgXCJwb3RlbnRpYWwgZm9yIGZ1enppbmctYmFzZWQgdnVsbmVyYWJpbGl0aWVzLlwiIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBtYWtlIHRoaXMgY29kZSBwYXRoIGFjdGl2ZS4gTGV0J3Mgc2VlLi4uenJhbSwgdGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSByZWNhbGwgdGhhdCB6cmFtIGlzIGNvbmZpZ3VyZWQgYnkgYENPTkZJR19aUkFNYCwgc28gSSdsbCBjaGVjayB0aGUgYGRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnYCBmaWxlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBwb3RlbnRpYWwgcHJlLWNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMjoyNy40MzcxOTkxODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjA3Nzg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVxcdGJvb2wgXFxcImx6NCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJ6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIjg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cXHRkZXBlbmRzIG9uIFpSQU1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXFx0Ym9vbCBcXFwibHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiIGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVxcdGJvb2wgXFxcImx6by1ybGVcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJsem9cXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cXHRib29sIFxcXCJsejRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcImx6NGhjXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXFx0Ym9vbCBcXFwiZGVmbGF0ZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXFx0c3RyaW5nXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cXHRib29sIFxcXCJUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cXHRib29sIFxcXCJFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDI6MjcuNjEzMjgxOTM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjUyNjQyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWlJBTSBCYWNrZW5kIFN0cmF0ZWd5KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBvcHRpbWl6aW5nIFpSQU0gY29tcHJlc3Npb24gYmFja2VuZHMuIEVuYWJsaW5nIGFsbCB0aGVzZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zIOKAkyBgTFo0YCwgYExaNEhDYCwgYFpTVERgLCBgREVGTEFURWAsIGA4NDJgLCBhbmQgYExaT2Ag4oCTIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIG1vZGlmeWluZyBgYmFja2VuZF84NDIuY2AsIGBiYWNrZW5kX2RlZmxhdGUuY2AsIGBiYWNrZW5kX2x6NC5jYCwgYGJhY2tlbmRfbHo0aGMuY2AsIGBiYWNrZW5kX2x6by5jYCwgYGJhY2tlbmRfbHpvcmxlLmNgLCBhbmQgYGJhY2tlbmRfenN0ZC5jYCBjb25maXJtcyB0aGF0IHdlJ3JlIGNvdmVyaW5nIGFsbCBvdXIgYmFzZXMgd2l0aCB0aGUgaW5jbHVkZWQgbW9kdWxlcy5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGNydWNpYWwgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZGF0ZWQgYW5kIHN0b3JlZC4gSSB3YW50IHRvIGNoZWNrOiBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCwgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgLCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAsIGBjb21wX3BhcmFtc19zdG9yZWAsIGBjb21wX2FsZ29yaXRobV9zdG9yZWAsIGFuZCBgenN0ZF9zZXR1cF9wYXJhbXNgLlxuXG5BbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGB6Y29tcF92YWxpZGF0ZV9wYXJhbXNgIGlzIHRoZSBrZXkuIEFuZCBnb29kLCBpdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIG5lZWQgZm9yIHRoaXMuIE5vdyB0byBjaGVjayBpdCBpbiBgZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMjozMi45Mzg1NTAwMjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDQ1MDk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF92YWxpZGF0ZV9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9ODc9Y29uc3QgY2hhciAqemNvbXBfbG9va3VwX2JhY2tlbmRfbmFtZShjb25zdCBjaGFyICpjb21wKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtOTYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6OTc6aW50IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBjaGFyICpjb21wLCBzMzIgbGV2ZWwsIGNvbnN0IGNoYXIgKmRpY3RfcGF0aClcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy05OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjMzLjA3MzAwOTQ3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMDUxNzUwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUHJpb3JpdGl6aW5nIENvdmVyYWdlIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgYmVzdCB3YXlzIHRvIGd1aWRlIFN5emthbGxlcidzIGZ1enppbmcgZWZmb3J0cyB3aXRoaW4gdGhpcyBjb21wcmVzc2lvbiBzdWJzeXN0ZW0uIEkndmUgbGFuZGVkIG9uIGB6Y29tcF92YWxpZGF0ZV9wYXJhbXNgIGFzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIFwiRm9jdXNTeW1ib2wuXCIgVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuSSBhbHNvIGNvbnNpZGVyZWQgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgY29tcF9hbGdvcml0aG1fc3RvcmVgLCByZWFsaXppbmcgdGhhdCB0aGV5IGFyZSBzeXNmcyBzdG9yZSBmdW5jdGlvbnMuIFN5emthbGxlciBmdXp6ZXMgc3lzZnMsIG9mIGNvdXJzZSwgYnV0IGl0IGRvZXMgc28gYnkgd3JpdGluZyBkaXJlY3RseSB0byB0aGUgZmlsZXMsIG5vdCBieSBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLiBTdGlsbCwgbGlzdGluZyB0aGVtIGFzIEZvY3VzU3ltYm9scyB3b3VsZCBiZSBiZW5lZmljaWFsLCBhcyBpdCBjYW4gaGVscCBwcmlvcml0aXplIGNvZGUgY292ZXJhZ2UgaW4gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGV2ZW4gaWYgbm90IGRpcmVjdGx5IGNhbGxlZC5cblxuQSBxdWljayBub3RlOiBJIGFsc28gbmVlZCB0byByZW1lbWJlciB0aGF0IGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCBpcyAqc3RhdGljKi4gSG1tLiBJdCdzIHN0aWxsIHVzZWZ1bCBmb3IgY292ZXJhZ2UgZ3VpZGFuY2UgaWYgbGlzdGVkLCBidXQgZ2VuZXJhbGx5LCBJIHByZWZlciBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgdGhpcyBraW5kIG9mIHdvcmsuIFNvIEkgdGhpbmsgaXQncyBiZXR0ZXIgdG8gbGlzdCBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCBhbmQgdGhlbiBldmFsdWF0ZSBvdGhlciBvcHRpb25zLlxuXG5MZXQgbWUgdGhpbmsuIEFyZSB0aGVyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyB0aGF0IGFyZSBhdmFpbGFibGU/IEFoLCB3aGF0IGFib3V0IGB6Y29tcF9jcmVhdGVgPyBOb3cgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBvcHRpb24gdG8gaW52ZXN0aWdhdGUuXG5cbkxldCdzIGRvIHRoaXMuIEknbGwgb3BlbiB1cCBgZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNgIHRvIHNlZSB3aGF0IGVsc2UgaXMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEknbSBjb25zaWRlcmluZyBhbGwgcmVsZXZhbnQgcGllY2VzIHRvIG1heGltaXplIFN5emthbGxlcidzIGVmZmVjdGl2ZW5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjM5LjM3ODE4ODEyMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5MTQ4MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjb21wX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz0yNTI9dm9pZCB6Y29tcF9kZXN0cm95KHN0cnVjdCB6Y29tcCAqY29tcClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTI1OS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoyNjA6c3RydWN0IHpjb21wICp6Y29tcF9jcmVhdGUoY29uc3QgY2hhciAqYWxnLCBzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMtMjYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDI6MzkuNTk3MzQxMjg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzkwMTQ3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFpzdGQgUGFyYW1ldGVyIFNldHVwIGluIGBiYWNrZW5kX3pzdGQuY2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgenN0ZF9zZXR1cF9wYXJhbXNgIHdpdGhpbiBgYmFja2VuZF96c3RkLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGF0IGZ1bmN0aW9uIHN0YXRpYz9cIiBJdCdzIGEga2V5IHF1ZXN0aW9uLCBhcyBpdCBnb3Zlcm5zIHRoZSBzY29wZSBvZiBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyZWQsIGFuZCBhIHN0YXRpYyBmdW5jdGlvbiBzdWdnZXN0cyBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byB0aGF0IHNwZWNpZmljIG1vZHVsZS4gVW5kZXJzdGFuZGluZyBpdHMgdmlzaWJpbGl0eSBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBmaWd1cmluZyBvdXQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBnb3Qgc3RhdGljIGxpbmthZ2U7IHRoYXQgd2lsbCBkaWN0YXRlIGhvdyBkZWVwbHkgSSBuZWVkIHRvIGxvb2sgaW50byBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBJdCdsbCBhbHNvIGluZm9ybSBob3cgZWFzaWx5IGl0IGNhbiBiZSByZWZhY3RvcmVkIG9yIHJldXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMjo0My41MzYzNTg4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM5NTY0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN0ZF9zZXR1cF9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYz0zOD1zdGF0aWMgdm9pZCB6c3RkX3JlbGVhc2VfcGFyYW1zKHN0cnVjdCB6Y29tcF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYy01MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM6NTE6c3RhdGljIGludCB6c3RkX3NldHVwX3BhcmFtcyhzdHJ1Y3QgemNvbXBfcGFyYW1zICpwYXJhbXMpXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTUyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYz0yMTM9Y29uc3Qgc3RydWN0IHpjb21wX29wcyBiYWNrZW5kX3pzdGQgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjE3LVxcdC5kZXN0cm95X2N0eFxcdD0genN0ZF9kZXN0cm95LFxcbmRyaXZlcnMvYmxvY2svenJhbS9iYWNrZW5kX3pzdGQuYzoyMTg6XFx0LnNldHVwX3BhcmFtc1xcdD0genN0ZF9zZXR1cF9wYXJhbXMsXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIxOS1cXHQucmVsZWFzZV9wYXJhbXNcXHQ9IHpzdGRfcmVsZWFzZV9wYXJhbXMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmMtMjIxLVxcdC5sZXZlbF9taW5cXHQ9IChpbnQpLVpTVERfVEFSR0VUTEVOR1RIX01BWCxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vYmFja2VuZF96c3RkLmM6MjIyOlxcdC5sZXZlbF9tYXhcXHQ9IC0xLFxcdC8qIHZhbGlkYXRlZCBieSB6c3RkX3NldHVwX3BhcmFtcygpICovXFxuZHJpdmVycy9ibG9jay96cmFtL2JhY2tlbmRfenN0ZC5jLTIyMy1cXHQubmFtZVxcdFxcdD0gXFxcInpzdGRcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMjo0My42MzAzMjIwMTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyNjUzMzA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGEgU3RhZ25hbnQgU3RhdGUgaW4gWlJBTSoqXG5cblJpZ2h0LCB0aGlzIGZlZWxzLi4uIHN0dWNrLiBTb21ldGhpbmcncyBub3QgbW92aW5nLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgcmFyZWx5IGEgZ29vZCBzaWduIGluIHN5c3RlbS1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB3aXRoaW4gYSBjb21wcmVzc2VkIHZpcnR1YWwgUkFNIGNvbnRleHQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaGFuZywgZGVhZGxvY2ssIG9yIGEgY29tcGxldGUgbGFjayBvZiByZXNwb25zZS5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYGNvbXBfcGFyYW1zX3Jlc2V0YCBmdW5jdGlvbiB3aXRoaW4gYHpyYW1fZHJ2LmNgLiBUaGF0IGZ1bmN0aW9uIGhhbmRsZXMgYSBjcml0aWNhbCBwaWVjZSBpbiB0aGUgb3ZlcmFsbCBsaWZlY3ljbGUgb2YgYSBaUkFNIGRldmljZS4gSWYgdGhlcmUncyBhIHByb2JsZW0gaGVyZSwgbXkgZ3V0IHNheXMgdGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgYSBsaWtlbHkgY2F1c2UuIEl0IHdvdWxkIGJlIG15IGZpcnN0IHN0b3AgZm9yIGRldGVybWluaW5nIGlmIHRoZXJlIGFyZSBlcnJvcnMgb3IgaXNzdWVzIHRoYXQgYXJlIG5vdCBwcm9wZXJseSBhY2NvdW50ZWQgZm9yLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSBvZiB0aGUgY29tcHJlc3Npb24gcGFyYW1ldGVycyByZXNldCBhcmUgYSByb290IGNhdXNlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjQ4LjY1Njg1NzgzOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3MjQ5MjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXBfcGFyYW1zX3Jlc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE2NTk9c3RhdGljIHZvaWQgY29tcF9hbGdvcml0aG1fc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbywgY29uc3QgY2hhciAqYWxnKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2My1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjY0OnN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY2NS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjY2PXN0YXRpYyBpbnQgX19jb21wX2FsZ29yaXRobV9zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2ODUtXFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIHByaW8sIGFsZyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY4NjpcXHRjb21wX3BhcmFtc19yZXNldCh6cmFtLCBwcmlvKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjg3LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY4OS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNjkwOnN0YXRpYyB2b2lkIGNvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgcHJpbylcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjkxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE3MDE9c3RhdGljIGludCBjb21wX3BhcmFtc19zdG9yZShzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIHMzMiBsZXZlbCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE3MDYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTcwNzpcXHRjb21wX3BhcmFtc19yZXNldCh6cmFtLCBwcmlvKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzA4LVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjgwOT1zdGF0aWMgdm9pZCB6cmFtX3Nsb3RfZnJlZV9ub3RpZnkoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MjUtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjgyNjpzdGF0aWMgdm9pZCB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHN0cnVjdCB6cmFtICp6cmFtKVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4Mjcte1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjgzMC1cXHRmb3IgKHByaW8gPSBaUkFNX1BSSU1BUllfQ09NUDsgcHJpbyBcXHUwMDNjIFpSQU1fTUFYX0NPTVBTOyBwcmlvKyspIHtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODMxOlxcdFxcdGNvbXBfcGFyYW1zX3Jlc2V0KHpyYW0sIHByaW8pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MzItXFx0fVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjgzNT1zdGF0aWMgdm9pZCB6cmFtX2Rlc3Ryb3lfY29tcHMoc3RydWN0IHpyYW0gKnpyYW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODUwLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4NTE6XFx0enJhbV9jb21wX3BhcmFtc19yZXNldCh6cmFtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODUyLX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwNDI9c3RhdGljIGludCB6cmFtX2FkZCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzEwMS1cXHRzbnByaW50Zih6cmFtLVxcdTAwM2VkaXNrLVxcdTAwM2VkaXNrX25hbWUsIDE2LCBcXFwienJhbSVkXFxcIiwgZGV2aWNlX2lkKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMTAyOlxcdHpyYW1fY29tcF9wYXJhbXNfcmVzZXQoenJhbSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzEwMy1cXHRjb21wX2FsZ29yaXRobV9zZXQoenJhbSwgWlJBTV9QUklNQVJZX0NPTVAsIGRlZmF1bHRfY29tcHJlc3Nvcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAyOjQ4Ljg1NDExMjkwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI0NTI0Nzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWlJBTSBDb2RlIGZvciBTeW1ib2wgSW5jbHVzaW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgYGNvbXBfcGFyYW1zX3Jlc2V0YCBpcyBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IHNraXAgaXQgZm9yIG5vdy4gVGhlIGtleSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQncyBiZWVuIGNoYW5nZWQgb3IgYWRkZWQgc2VlbXMgdG8gYmUgYHpjb21wX3ZhbGlkYXRlX3BhcmFtc2AuIFRoYXQncyBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgdG8gYmUgaW4gYEZvY3VzU3ltYm9sc2AuIEFuZCBsZXQncyBzZWUsIGV2ZW4gdGhvdWdoIHRoZXkncmUgc3RhdGljLCBJIHRoaW5rIEkgc2hvdWxkIHByb2JhYmx5IGluY2x1ZGUgYGFsZ29yaXRobV9wYXJhbXNfc3RvcmVgIGFuZCBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAgYXMgd2VsbCwgYXMgdGhleSBhcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgc3lzZnMgd3JpdGVzIHRoYXQgdHJpZ2dlciB0aGlzIGNvZGUsIHJpZ2h0PyBBaCwgd2FpdCBhIG1pbnV0ZSwgdGhlIHByb21wdCBkaWQgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNpbmNlIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCAqaXMqIGEgc3lzZnMgc3RvcmUgY2FsbGJhY2ssIGl0IGlzIHRlY2huaWNhbGx5IGFuIGVudHJ5cG9pbnQsIGV2ZW4gaWYgc3RhdGljLCBzbywgeWVhaCwgSSdsbCBpbmNsdWRlIGl0LlxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYFpSQU1fQkFDS0VORF9MWjRgIGtpbmQgb2YgY29uZmlncy4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIEtjb25maWcsIHRoZXJlJ3MgYFpSQU1fQkFDS0VORF9MWjRgLCBgWlJBTV9CQUNLRU5EX0xaNEhDYCwgYFpSQU1fQkFDS0VORF9aU1REYCwgYFpSQU1fQkFDS0VORF9ERUZMQVRFYCwgYFpSQU1fQkFDS0VORF84NDJgLCBhbmQgYFpSQU1fQkFDS0VORF9MWk9gIGFuZCBvZiBjb3Vyc2UgYFpSQU1gIGl0c2VsZi5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgWlJBTV9CQUNLRU5EX0xaT2AgaXMgYSBib29sLCB5dXAsIGJvb2wuIGBaUkFNYCBpcyB0cmlzdGF0ZS4gT2ssIEknbSBqdXN0IHF1aWNrbHkgc2VhcmNoaW5nIGZvciBhbnkgb3RoZXIgY29uZmlncy4gTGV0IG1lIGNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay96cmFtL01ha2VmaWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDM6MDYuMDk5MzYzNDE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHR6cmFtLXlcXHQ6PVxcdHpjb21wLm8genJhbV9kcnYub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9MWk8pXFx0XFx0Kz0gYmFja2VuZF9sem9ybGUubyBiYWNrZW5kX2x6by5vXFxuICAgNjpcXHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9MWjQpXFx0XFx0Kz0gYmFja2VuZF9sejQub1xcbiAgIDc6XFx0enJhbS0kKENPTkZJR19aUkFNX0JBQ0tFTkRfTFo0SEMpXFx0Kz0gYmFja2VuZF9sejRoYy5vXFxuICAgODpcXHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9aU1REKVxcdCs9IGJhY2tlbmRfenN0ZC5vXFxuICAgOTpcXHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF9ERUZMQVRFKVxcdCs9IGJhY2tlbmRfZGVmbGF0ZS5vXFxuICAxMDpcXHR6cmFtLSQoQ09ORklHX1pSQU1fQkFDS0VORF84NDIpXFx0XFx0Kz0gYmFja2VuZF84NDIub1xcbiAgMTE6XFx0XFxuICAxMjpcXHRvYmotJChDT05GSUdfWlJBTSlcXHQrPVxcdHpyYW0ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMzowNi4wOTk0NDEzODlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MDc0MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24gYW5kIENhbGwgQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCB5ZXAsIEkndmUganVzdCBkb3VibGUtY2hlY2tlZCB0aG9zZSBjb25maWdzIGFuZCB0aGV5IGFyZSBkZWZpbml0ZWx5IGNvcnJlY3QuIE5vIGlzc3VlcyB0aGVyZS4gTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UncmUgbm90IG1pc3NpbmcgYW55dGhpbmcgaW4gaG93IGB6Y29tcF92YWxpZGF0ZV9wYXJhbXNgIGlzIHV0aWxpemVkLiBUaW1lIHRvIGludmVzdGlnYXRlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBzeXN0ZW0uIFdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIExldCdzIHRyYWNlIHRob3NlIGNhbGxzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgYXR0ZW50aW9uLiBJdCdzIHRoYXQga2luZCBvZiBkaWxpZ2VudCBhdHRlbnRpb24gdG8gZGV0YWlsIHRoYXQgd2lsbCBlbnN1cmUgZXZlcnl0aGluZyBpcyByb2NrIHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDk6MDM6MDkuNjgwMTg2MDc0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ5Mzk0ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpjb21wX3ZhbGlkYXRlX3BhcmFtc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYz04Nz1jb25zdCBjaGFyICp6Y29tcF9sb29rdXBfYmFja2VuZF9uYW1lKGNvbnN0IGNoYXIgKmNvbXApXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy05Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzo5NzppbnQgemNvbXBfdmFsaWRhdGVfcGFyYW1zKGNvbnN0IGNoYXIgKmNvbXAsIHMzMiBsZXZlbCwgY29uc3QgY2hhciAqZGljdF9wYXRoKVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTk4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oPTg5PWNvbnN0IGNoYXIgKnpjb21wX2xvb2t1cF9iYWNrZW5kX25hbWUoY29uc3QgY2hhciAqY29tcCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6OTA6aW50IHpjb21wX3ZhbGlkYXRlX3BhcmFtcyhjb25zdCBjaGFyICpjb21wLCBzMzIgbGV2ZWwsIGNvbnN0IGNoYXIgKmRpY3RfcGF0aCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtOTEtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzI4PXN0YXRpYyBzc2l6ZV90IGFsZ29yaXRobV9wYXJhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTgwMy1cXHRpZiAoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTgwNDpcXHRcXHRyZXQgPSB6Y29tcF92YWxpZGF0ZV9wYXJhbXMoenJhbS1cXHUwMDNlY29tcF9hbGdzW3ByaW9dLCBsZXZlbCxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xODA1LVxcdFxcdFxcdFxcdFxcdCAgICBkaWN0X3BhdGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMzoxNC40Mjk1ODU2NTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MTc2MDU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgbGlrZSB5b3U6XG5cbioqVGFyZ2V0ZWQgQ29kZSBFeHBsb3JhdGlvbiBmb3IgUGFyYW1ldGVyIFZhbGlkYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGhlcmUgaXMgY2xlYXI6IHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYWxnb3JpdGhtIHBhcmFtZXRlcnMgYXJlIHZhbGlkYXRlZCBhbmQgcmVzZXQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygb3VyIHN5c3RlbS4gSXQncyBldmlkZW50IHRoYXQgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LCB0aGUgb25lIHdlJ3JlIHRyYWNraW5nLCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYC5cblxuVGhlcmVmb3JlLCBteSBmb2N1cyBuYXJyb3dzIHRvIGEgc3BlY2lmaWMgc2V0IG9mIHN5bWJvbHMuIEkgbmVlZCB0byBjbG9zZWx5IGV4YW1pbmU6XG5cbiogICBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYCAtIFRoaXMgaXMgY2xlYXJseSBhIGtleSB2YWxpZGF0aW9uIHBvaW50LlxuKiAgIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYCAtIE9idmlvdXNseSB0aGUgZW50cnkgcG9pbnQgZm9yIHdoYXQgd2UncmUgdHJhY2tpbmcuXG4qICAgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgIC0gTGlrZWx5IHNvbWUga2luZCBvZiBpbnRlcm5hbCBzdG9yYWdlIG9yIG1hbmFnZW1lbnQgcmVsYXRlZCB0byB0aGUgYWxnb3JpdGhtcy5cblxuR2l2ZW4gdGhlIHNpbmdsZSBjYWxsIG9yaWdpbiwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYF9fY29tcF9hbGdvcml0aG1fc3RvcmVgIGlzICppbmRlZWQqIHRoZSBzb2xlIGNhbGxlciBvZiB0aGUgYGNvbXBfcGFyYW1zX3Jlc2V0YCBmdW5jdGlvbi4gVGhpcyBxdWljayBjaGVjayB3aWxsIGFsbG93IG1lIHRvIHZlcmlmeSB0aGUgYXNzdW1wdGlvbnMgSSdtIG1ha2luZyBhdCB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg4MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAzOjE4LjYxMTM0OTIyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NDA5Njg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wX3BhcmFtc19yZXNldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNjU5PXN0YXRpYyB2b2lkIGNvbXBfYWxnb3JpdGhtX3NldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8sIGNvbnN0IGNoYXIgKmFsZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjMtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY2NDpzdGF0aWMgdm9pZCBjb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2NjUtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTY2Nj1zdGF0aWMgaW50IF9fY29tcF9hbGdvcml0aG1fc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBjb25zdCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNjg1LVxcdGNvbXBfYWxnb3JpdGhtX3NldCh6cmFtLCBwcmlvLCBhbGcpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE2ODY6XFx0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY4Ny1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE2ODktXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTY5MDpzdGF0aWMgdm9pZCBjb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIHByaW8pXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTY5MS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xNzAxPXN0YXRpYyBpbnQgY29tcF9wYXJhbXNfc3RvcmUoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBwcmlvLCBzMzIgbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xNzA2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjE3MDc6XFx0Y29tcF9wYXJhbXNfcmVzZXQoenJhbSwgcHJpbyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTcwOC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4MDk9c3RhdGljIHZvaWQgenJhbV9zbG90X2ZyZWVfbm90aWZ5KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODI1LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI4MjY6c3RhdGljIHZvaWQgenJhbV9jb21wX3BhcmFtc19yZXNldChzdHJ1Y3QgenJhbSAqenJhbSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODI3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI4MzAtXFx0Zm9yIChwcmlvID0gWlJBTV9QUklNQVJZX0NPTVA7IHByaW8gXFx1MDAzYyBaUkFNX01BWF9DT01QUzsgcHJpbysrKSB7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjgzMTpcXHRcXHRjb21wX3BhcmFtc19yZXNldCh6cmFtLCBwcmlvKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yODMyLVxcdH1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI4MzU9c3RhdGljIHZvaWQgenJhbV9kZXN0cm95X2NvbXBzKHN0cnVjdCB6cmFtICp6cmFtKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyODUxOlxcdHpyYW1fY29tcF9wYXJhbXNfcmVzZXQoenJhbSk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjg1Mi19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDQyPXN0YXRpYyBpbnQgenJhbV9hZGQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxMDEtXFx0c25wcmludGYoenJhbS1cXHUwMDNlZGlzay1cXHUwMDNlZGlza19uYW1lLCAxNiwgXFxcInpyYW0lZFxcXCIsIGRldmljZV9pZCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzEwMjpcXHR6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0KHpyYW0pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMxMDMtXFx0Y29tcF9hbGdvcml0aG1fc2V0KHpyYW0sIFpSQU1fUFJJTUFSWV9DT01QLCBkZWZhdWx0X2NvbXByZXNzb3IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwOTowMzoyMy44NTU0NTIxMjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU0NDY5MDU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgWlJBTSBDb21wcmVzc2lvbiBQYXJhbWV0ZXIgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJldmVhbHMgdGhhdCBgY29tcF9wYXJhbXNfcmVzZXRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUsIHRyaWdnZXJlZCBmcm9tIHNldmVyYWwgY3JpdGljYWwgcG9pbnRzOiBgX19jb21wX2FsZ29yaXRobV9zdG9yZWAsIGBjb21wX3BhcmFtc19zdG9yZWAsIGFuZCBgenJhbV9jb21wX3BhcmFtc19yZXNldGAuIEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIGB6cmFtX2NvbXBfcGFyYW1zX3Jlc2V0YCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYHpyYW1fZGVzdHJveV9jb21wc2AgYW5kIGB6cmFtX2FkZGAsIHdoaWNoIG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlua2VkIGR1cmluZyBkZXZpY2UgY3JlYXRpb24gYW5kIHJlbGF0ZWQgc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBhbGwgcG9pbnRzIHRvIGEgZGlyZWN0IHBhdGggdG8gdXNlciBpbnRlcmFjdGlvbiBhbmQgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQgbWUgaW52ZXN0aWdhdGUgYHpzdGRfc2V0dXBfcGFyYW1zYC4gSXQncyBiZWluZyBpbnZva2VkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYHpjb21wX2NyZWF0ZWAuIEFuZCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyBgemNvbXBfY3JlYXRlYCBpc24ndCBzdGF0aWMsIHN1Z2dlc3RpbmcgaXQncyBhY3RpdmVseSBpbnZvbHZlZCBkdXJpbmcgY29tcHJlc3Npb24gc3RyZWFtIGluaXRpYWxpemF0aW9uLiBUaGlzIGNhbGxzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cbkkgbmVlZCBhIGNsZWFyZXIgcGljdHVyZSwgc28gSSdsbCBjcmVhdGUgYSBjaGVja2xpc3Qgb2Yga2V5IGZ1bmN0aW9uczpcbiogICBgemNvbXBfdmFsaWRhdGVfcGFyYW1zYFxuKiAgIGBhbGdvcml0aG1fcGFyYW1zX3N0b3JlYFxuKiAgIGBfX2NvbXBfYWxnb3JpdGhtX3N0b3JlYFxuKiAgIGB6Y29tcF9jcmVhdGVgXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnM6XG4qICAgYFpSQU1gXG4qICAgYFpSQU1fQkFDS0VORF9MWjRgXG4qICAgYFpSQU1fQkFDS0VORF9MWjRIQ2BcbiogICBgWlJBTV9CQUNLRU5EX1pTVERgXG4qICAgYFpSQU1fQkFDS0VORF9ERUZMQVRFYFxuKiAgIGBaUkFNX0JBQ0tFTkRfODQyYFxuKiAgIGBaUkFNX0JBQ0tFTkRfTFpPYFxuXG5XYWl0LCB0aGVyZSdzIGEgZGVwZW5kZW5jeSBvbiBgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpc24ndCBtaXNzZWQuIExldCdzIGxvb2sgYXQgYFpSQU1fQkFDS0VORF9GT1JDRV9MWk9gLCBhcyBpdCdzIGp1c3QgYSBjb25maWcuIFRvIGF2b2lkIGNsdXR0ZXIgSSB3aWxsIHNpbXBseSBsaXN0IGBaUkFNX0JBQ0tFTkRfTFpPYC5cblxuT2theSwgd2hhdCdzIHRoZSBwdXJwb3NlIG9mIGFsbCB0aGlzPyBUaGUgZ29hbCBpcyB0byBhZGQgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIC0gdGhpbmdzIGxpa2UgdGhlIGNvbXByZXNzaW9uIGxldmVsIGFuZCBkaWN0aW9uYXJ5LiBBZGRpdGlvbmFsbHksIHRoZSBwYXJhbWV0ZXJzIHdpbGwgYmUgcmVzZXQgd2hlbiB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGNoYW5nZXMuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgc3lzZnMgc3RvcmUgZnVuY3Rpb25zIGFuZCB6Y29tcCBiYWNrZW5kIG9wZXJhdGlvbnMsIGFsbCBvZiB3aGljaCBhcmUgdXNlci1hY2Nlc3NpYmxlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuIFRoYXQncyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJ20gcmVhZHkgdG8gY3JhZnQgYSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTIsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA5OjAzOjMyLjQwMDE0NjcyM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjMyMDY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNEhDXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfWlNURFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0RFRkxBVEVcIixcbiAgICBcIlpSQU1fQkFDS0VORF84NDJcIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWk9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF92YWxpZGF0ZV9wYXJhbXNcIixcbiAgICBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgICBcIl9fY29tcF9hbGdvcml0aG1fc3RvcmVcIixcbiAgICBcInpjb21wX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIChsZXZlbCBhbmQgZGljdGlvbmFyeSkgYW5kIHJlc2V0cyBwYXJhbWV0ZXJzIHdoZW4gdGhlIGFsZ29yaXRobSBpcyBjaGFuZ2VkLiBJdCBtb2RpZmllcyBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYW5kIHpjb21wIGJhY2tlbmQgb3BzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0xaNEhDXCIsXG4gICAgXCJaUkFNX0JBQ0tFTkRfWlNURFwiLFxuICAgIFwiWlJBTV9CQUNLRU5EX0RFRkxBVEVcIixcbiAgICBcIlpSQU1fQkFDS0VORF84NDJcIixcbiAgICBcIlpSQU1fQkFDS0VORF9MWk9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF92YWxpZGF0ZV9wYXJhbXNcIixcbiAgICBcImFsZ29yaXRobV9wYXJhbXNfc3RvcmVcIixcbiAgICBcIl9fY29tcF9hbGdvcml0aG1fc3RvcmVcIixcbiAgICBcInpjb21wX2NyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgenJhbSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIChsZXZlbCBhbmQgZGljdGlvbmFyeSkgYW5kIHJlc2V0cyBwYXJhbWV0ZXJzIHdoZW4gdGhlIGFsZ29yaXRobSBpcyBjaGFuZ2VkLiBJdCBtb2RpZmllcyBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYW5kIHpjb21wIGJhY2tlbmQgb3BzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB6cmFtIHN5c2ZzIGF0dHJpYnV0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlsw2[1] Phase: Succeeded StartedAt: 2026-07-31 09:03:44 +0000 UTC FinishedAt: 2026-07-31 09:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 09:03:44 +0000 UTC FinishedAt: 2026-07-31 09:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2] Phase: Succeeded StartedAt: 2026-07-31 09:03:44 +0000 UTC FinishedAt: 2026-07-31 13:00:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 09:03:44 +0000 UTC FinishedAt: 2026-07-31 13:00:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 09:03:44 +0000 UTC FinishedAt: 2026-07-31 09:04:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 09:03:44 +0000 UTC FinishedAt: 2026-07-31 09:04:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrlsw2/series-workflowrlsw2-convert-artifact-3305416355/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 09:04:13 +0000 UTC FinishedAt: 2026-07-31 09:33:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 09:04:13 +0000 UTC FinishedAt: 2026-07-31 09:33:30 +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:*dc9d8857-6e03-4b0c-9702-6663e0dccaf5,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-workflowrlsw2/series-workflowrlsw2-convert-artifact-3305416355/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": "de3b09bd-f95d-4242-b853-323311d9ada3", "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-workflowrlsw2/series-workflowrlsw2-build-action-1690245905/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 09:04:13 +0000 UTC FinishedAt: 2026-07-31 09:33:19 +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:*dc9d8857-6e03-4b0c-9702-6663e0dccaf5,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-workflowrlsw2/series-workflowrlsw2-convert-artifact-3305416355/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": "de3b09bd-f95d-4242-b853-323311d9ada3", "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-workflowrlsw2/series-workflowrlsw2-build-action-1690245905/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 09:33:30 +0000 UTC FinishedAt: 2026-07-31 09:33:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 09:33:30 +0000 UTC FinishedAt: 2026-07-31 09:33:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 09:33:30 +0000 UTC FinishedAt: 2026-07-31 09:33:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 09:33:30 +0000 UTC FinishedAt: 2026-07-31 09:33:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrlsw2/series-workflowrlsw2-convert-artifact-938878426/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 09:33:41 +0000 UTC FinishedAt: 2026-07-31 09:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 09:33:42 +0000 UTC FinishedAt: 2026-07-31 09:35:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*de3b09bd-f95d-4242-b853-323311d9ada3,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-workflowrlsw2/series-workflowrlsw2-build-action-1690245905/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-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 09:35:46 +0000 UTC FinishedAt: 2026-07-31 09:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 09:35:46 +0000 UTC FinishedAt: 2026-07-31 09:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 09:35:46 +0000 UTC FinishedAt: 2026-07-31 09:52:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 09:35:46 +0000 UTC FinishedAt: 2026-07-31 09:52:00 +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:*dc9d8857-6e03-4b0c-9702-6663e0dccaf5,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-workflowrlsw2/series-workflowrlsw2-convert-artifact-938878426/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": "68350045-e359-4717-bcfe-e7b27a663fee", "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-workflowrlsw2/series-workflowrlsw2-build-action-2907271870/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 09:35:46 +0000 UTC FinishedAt: 2026-07-31 09:51:50 +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:*dc9d8857-6e03-4b0c-9702-6663e0dccaf5,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-workflowrlsw2/series-workflowrlsw2-convert-artifact-938878426/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": "68350045-e359-4717-bcfe-e7b27a663fee", "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-workflowrlsw2/series-workflowrlsw2-build-action-2907271870/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 09:52:00 +0000 UTC FinishedAt: 2026-07-31 09:52:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 09:52:00 +0000 UTC FinishedAt: 2026-07-31 09:52:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 09:52:00 +0000 UTC FinishedAt: 2026-07-31 09:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 09:52:00 +0000 UTC FinishedAt: 2026-07-31 09:53:54 +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:*68350045-e359-4717-bcfe-e7b27a663fee,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-workflowrlsw2/series-workflowrlsw2-build-action-2907271870/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-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 09:54:04 +0000 UTC FinishedAt: 2026-07-31 13:00:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 09:54:04 +0000 UTC FinishedAt: 2026-07-31 13:00:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"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:*de3b09bd-f95d-4242-b853-323311d9ada3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*68350045-e359-4717-bcfe-e7b27a663fee,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-workflowrlsw2/series-workflowrlsw2-build-action-1690245905/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-workflowrlsw2/series-workflowrlsw2-build-action-2907271870/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 09:54:04 +0000 UTC FinishedAt: 2026-07-31 09:54:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 09:54:04 +0000 UTC FinishedAt: 2026-07-31 09:54:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"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-workflowrlsw2/series-workflowrlsw2-convert-artifact-893544335/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 09:54:04 +0000 UTC FinishedAt: 2026-07-31 09:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 09:54:04 +0000 UTC FinishedAt: 2026-07-31 09:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 09:54:04 +0000 UTC FinishedAt: 2026-07-31 09:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 09:54:14 +0000 UTC FinishedAt: 2026-07-31 13:00:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlsw2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zcomp_validate_params","algorithm_params_store","__comp_algorithm_store","zcomp_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_BACKEND_LZ4","ZRAM_BACKEND_LZ4HC","ZRAM_BACKEND_ZSTD","ZRAM_BACKEND_DEFLATE","ZRAM_BACKEND_842","ZRAM_BACKEND_LZO"],"series_id":"e9c84e25-dd2f-4b60-9024-7283f1273b59","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 09:54:14 +0000 UTC FinishedAt: 2026-07-31 12:59:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*de3b09bd-f95d-4242-b853-323311d9ada3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*68350045-e359-4717-bcfe-e7b27a663fee,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-workflowrlsw2/series-workflowrlsw2-build-action-1690245905/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-workflowrlsw2/series-workflowrlsw2-build-action-2907271870/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-workflowrlsw2/series-workflowrlsw2-convert-artifact-893544335/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,}