Name: series-workflowd8gbp Phase: Failed StartedAt: 2026-08-30 09:00:42 +0000 UTC FinishedAt: 2026-08-30 09:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8gbp[0] Phase: Succeeded StartedAt: 2026-08-30 09:00:42 +0000 UTC FinishedAt: 2026-08-30 09:38:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8gbp[0].run-triage Phase: Succeeded StartedAt: 2026-08-30 09:00:42 +0000 UTC FinishedAt: 2026-08-30 09:38:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7JiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3RhbmRhcmQgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgdHJhY2tpbmcgKGRldl9zd19uZXRzdGF0c190eF9hZGQsIGRldl9zd19uZXRzdGF0c19yeF9hZGQsIGRldl9nZXRfdHN0YXRzNjQpIHRvIHRoZSBRdWFsY29tbSBCQU0tRE1VWCBkcml2ZXIgKGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jKS4gVGhpcyBwbGF0Zm9ybSBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gUXVhbGNvbW0gU29DcyAocmVxdWlyaW5nIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgY2hhbm5lbHMpIGFuZCBpcyBub3QgcmVhY2hhYmxlIG9yIHByb2JlYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwOTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyNmYwYjAyYjM5MWVlOWI5NDg2NDI4NzdjMzczMDIwMjdhNDkzYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAzMCAwOTowMzozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG5pbmRleCBjYzZhY2U4ZDY0MzcxLi40MGM0MGJjNTY0NWEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG5AQCAtMTc3LDggJiM0MzsxNzcsMTUgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfdHhfY2FsbGJhY2sodm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSA9IGRhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RtYS1cdTAwM2Vza2I7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNrYi1cdTAwM2VkZXY7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxlbiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRkZXYpXG4mIzQzO1x0XHRsZW4gPSAoKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2ItXHUwMDNlZGF0YSktXHUwMDNlbGVuO1xuIFxuIFx0YmFtX2RtdXhfdHhfZG9uZShza2JfZG1hKTtcbiYjNDM7XHRpZiAobmV0ZGV2KVxuJiM0MztcdFx0ZGV2X3N3X25ldHN0YXRzX3R4X2FkZChuZXRkZXYsIDEsIGxlbik7XG4gXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XG4gfVxuIFxuQEAgLTQwMiw2ICYjNDM7NDA5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiYW1fZG11eF9vcHMgPSB7XG4gXHQubmRvX29wZW5cdD0gYmFtX2RtdXhfbmV0ZGV2X29wZW4sXG4gXHQubmRvX3N0b3BcdD0gYmFtX2RtdXhfbmV0ZGV2X3N0b3AsXG4gXHQubmRvX3N0YXJ0X3htaXRcdD0gYmFtX2RtdXhfbmV0ZGV2X3N0YXJ0X3htaXQsXG4mIzQzO1x0Lm5kb19nZXRfc3RhdHM2NFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3d2FuX3R5cGUgPSB7XG5AQCAtNDIxLDYgJiM0Mzs0MjksNyBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9uZXRkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGJhbV9kbXV4X2hkcik7XG4gXHRkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tID0gc2l6ZW9mKHUzMik7IC8qIHdvcmQtYWxpZ25lZCAqL1xuIFx0ZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOO1xuJiM0MztcdGRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTO1xuIFxuIFx0LyogVGhpcyBwZXJtIGFkZHIgd2lsbCBiZSB1c2VkIGFzIGludGVyZmFjZSBpZGVudGlmaWVyIGJ5IElQdjYgKi9cbiBcdGRldi1cdTAwM2VhZGRyX2Fzc2lnbl90eXBlID0gTkVUX0FERFJfUkFORE9NO1xuQEAgLTUzMyw2ICYjNDM7NTQyLDcgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2RhdGEoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuJiM0MztcdGRldl9zd19uZXRzdGF0c19yeF9hZGQobmV0ZGV2LCBza2ItXHUwMDNlbGVuKTtcbiBcdG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjM1bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN0YW5kYXJkIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHRyYWNraW5nIChkZXZfc3dfbmV0c3RhdHNfdHhfYWRkLCBkZXZfc3dfbmV0c3RhdHNfcnhfYWRkLCBkZXZfZ2V0X3RzdGF0czY0KSB0byB0aGUgUXVhbGNvbW0gQkFNLURNVVggZHJpdmVyIChkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYykuIFRoaXMgcGxhdGZvcm0gZHJpdmVyIGlzIHNwZWNpZmljIHRvIFF1YWxjb21tIFNvQ3MgKHJlcXVpcmluZyBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIGNoYW5uZWxzKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBvciBwcm9iZWFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMjZmMGIwMmIzOTFlZTliOTQ4NjQyODc3YzM3MzAyMDI3YTQ5M2JhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMDk6MDM6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jCmluZGV4IGNjNmFjZThkNjQzNzEuLjQwYzQwYmM1NjQ1YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jCkBAIC0xNzcsOCAmIzQzOzE3NywxNSBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF90eF9jYWxsYmFjayh2b2lkICpkYXRhKQogewogCXN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hID0gZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RtYS0mZ3Q7c2tiOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLSZndDtkZXY7CiYjNDM7CXVuc2lnbmVkIGludCBsZW4gPSAwOwomIzQzOwomIzQzOwlpZiAobmV0ZGV2KQomIzQzOwkJbGVuID0gKChzdHJ1Y3QgYmFtX2RtdXhfaGRyICopc2tiLSZndDtkYXRhKS0mZ3Q7bGVuOwogCiAJYmFtX2RtdXhfdHhfZG9uZShza2JfZG1hKTsKJiM0MzsJaWYgKG5ldGRldikKJiM0MzsJCWRldl9zd19uZXRzdGF0c190eF9hZGQobmV0ZGV2LCAxLCBsZW4pOwogCWRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTsKIH0KIApAQCAtNDAyLDYgJiM0Mzs0MDksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhbV9kbXV4X29wcyA9IHsKIAkubmRvX29wZW4JPSBiYW1fZG11eF9uZXRkZXZfb3BlbiwKIAkubmRvX3N0b3AJPSBiYW1fZG11eF9uZXRkZXZfc3RvcCwKIAkubmRvX3N0YXJ0X3htaXQJPSBiYW1fZG11eF9uZXRkZXZfc3RhcnRfeG1pdCwKJiM0MzsJLm5kb19nZXRfc3RhdHM2NAk9IGRldl9nZXRfdHN0YXRzNjQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHd3YW5fdHlwZSA9IHsKQEAgLTQyMSw2ICYjNDM7NDI5LDcgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGJhbV9kbXV4X2hkcik7CiAJZGV2LSZndDtuZWVkZWRfdGFpbHJvb20gPSBzaXplb2YodTMyKTsgLyogd29yZC1hbGlnbmVkICovCiAJZGV2LSZndDt0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjsKJiM0MzsJZGV2LSZndDtwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTOwogCiAJLyogVGhpcyBwZXJtIGFkZHIgd2lsbCBiZSB1c2VkIGFzIGludGVyZmFjZSBpZGVudGlmaWVyIGJ5IElQdjYgKi8KIAlkZXYtJmd0O2FkZHJfYXNzaWduX3R5cGUgPSBORVRfQUREUl9SQU5ET007CkBAIC01MzMsNiAmIzQzOzU0Miw3IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X2NtZF9kYXRhKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKQogCQlicmVhazsKIAl9CiAKJiM0MzsJZGV2X3N3X25ldHN0YXRzX3J4X2FkZChuZXRkZXYsIHNrYi0mZ3Q7bGVuKTsKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhhdCBkcml2ZXIuIExldCYjMzk7cyBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCAqaXMqLiBJcyBpdCBhIG1vZGVtIGRyaXZlcj8gU29tZSBraW5kIG9mIGRhdGEgbXVsdGlwbGV4ZXI/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBmdW5jdGlvbiBhbmQgcHVycG9zZS4gRG9lcyBpdCBpbnRlcmZhY2Ugd2l0aCBoYXJkd2FyZT8gSXMgaXQgdXNlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsIGVudmlyb25tZW50cyBvciBqdXN0IHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGlzIGl0ICpyZWFjaGFibGUqIGluIFFFTVUsIG9yIHNvbWUgb3RoZXIgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQ/CgpSaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gTGV0JiMzOTtzIGZpcmUgdXAgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgcXVpY2sgbG9vayBhdCBgcWNvbV9iYW1fZG11eC5jYCBpdHNlbGYuIFRoZW4sIEkgc2hvdWxkIGFsc28gY2hlY2sgaXRzIGNvcnJlc3BvbmRpbmcgYEtjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBidWlsZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIHRlbGwgbWUgaG93IGl0JiMzOTtzIGludGVncmF0ZWQsIGFuZCBpZiBpdCYjMzk7cyBldmVuIGEgdmlhYmxlIHRhcmdldCBmb3IgcXVpY2sgdGVzdGluZy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgdGhlIHBhdGNoJiMzOTtzIGltcGFjdCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtRQ09NX0JBTV9ETVVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL0tjb25maWc9NTM9Y29uZmlnIE1ISV9XV0FOX01CSU1cbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNjQtXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6NjU6Y29uZmlnIFFDT01fQkFNX0RNVVhcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy02Ni1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIEJBTS1ETVVYIFdXQU4gbmV0d29yayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19NSElfV1dBTl9NQklNKSAmIzQzOz0gbWhpX3d3YW5fbWJpbS5vXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19RQ09NX0JBTV9ETVVYKSAmIzQzOz0gcWNvbV9iYW1fZG11eC5vXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19SUE1TR19XV0FOX0NUUkwpICYjNDM7PSBycG1zZ193d2FuX2N0cmwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBRQ09NX0JBTV9ETVVYIEtjb25maWcgRW50cnkqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgUUNPTV9CQU1fRE1VWGAgbW9kdWxlLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIEtjb25maWcgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBlbnRyeSBmb3IgaXQgaW1tZWRpYXRlbHkuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGl0cyBkZXBlbmRlbmNpZXMg4oCTIHdoYXQgb3RoZXIgY29tcG9uZW50cyAqbXVzdCogYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGZvciB0aGlzIHRvIGV2ZW4gY29tcGlsZSBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIHByZXNlbnQgb3IgZW5hYmxlZD8gSXQmIzM5O3MgYWxsIGFib3V0IHVudGFuZ2xpbmcgdGhvc2UgcmVsYXRpb25zaGlwcy4KClRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gdGhlIG1vcmUgY3J1Y2lhbCBhc3BlY3Q6IGJpbmRpbmcgYW5kIHByb2JpbmcuIEhvdyBkb2VzIHRoZSBkcml2ZXIgZm9yIHRoaXMgYFFDT01fQkFNX0RNVVhgIGdldCBjb25uZWN0ZWQgdG8gdGhlIGhhcmR3YXJlPyBXaGF0JiMzOTtzIHRoZSBwcm9iZSBzZXF1ZW5jZT8gV2hhdCBraW5kIG9mIGRldmljZSB0cmVlIGJpbmRpbmdzIGFyZSBpbnZvbHZlZD8gVW5kZXJzdGFuZGluZyB0aGUgYmluZGluZyBwcm9jZXNzIHdpbGwgcXVpY2tseSBwb2ludCB0byBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9ucyBhbmQgbGlrZWx5IGlkZW50aWZ5IHBvdGVudGlhbCBjb25mbGljdHMsIG9yIGV2ZW4gc3VnZ2VzdCBhcmVhcyB0aGF0IG5lZWQgcmVmaW5lbWVudC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBoaW50cyBhYm91dCBpbnRlcnJ1cHQgaGFuZGxpbmcsIERNQSBjb25maWd1cmF0aW9uIChpZiBhcHBsaWNhYmxlKSwgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIFRoaXMgd2lsbCBpbmZvcm0gbXkgZGVzaWduIGNob2ljZXMsIG9yIGV2ZW4gbXkgZGVidWdnaW5nIHN0cmF0ZWd5IGRvd24gdGhlIHJvYWQuIEFscmlnaHQsIEtjb25maWcgZmlsZS4uLiBsZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdCAgICAgICAgICBJRCAwLiBBZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSBjcmVhdGVkIHZpYSB3d2FuIHJ0bmV0bGluayB0eXBlLlxuICA2MTpcdFxuICA2MjpcdCAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgNjM6XHQgICAgICAgICAgY2FsbGVkIG1oaV93d2FuX21iaW0uXG4gIDY0Olx0XG4gIDY1Olx0Y29uZmlnIFFDT01fQkFNX0RNVVhcbiAgNjY6XHRcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIEJBTS1ETVVYIFdXQU4gbmV0d29yayBkcml2ZXJcJiMzNDtcbiAgNjc6XHRcdGRlcGVuZHMgb24gKERNQV9FTkdJTkUgXHUwMDI2XHUwMDI2IFBNIFx1MDAyNlx1MDAyNiBRQ09NX1NNRU1fU1RBVEUpIHx8IENPTVBJTEVfVEVTVFxuICA2ODpcdFx0aGVscFxuICA2OTpcdFx0ICBUaGUgQkFNIERhdGEgTXVsdGlwbGV4ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBuZXR3b3JrIGRhdGEgY2hhbm5lbHNcbiAgNzA6XHRcdCAgb2YgbW9kZW1zIGludGVncmF0ZWQgaW50byBtYW55IG9sZGVyIFF1YWxjb21tIFNvQ3MsIGUuZy4gUXVhbGNvbW1cbiAgNzE6XHRcdCAgTVNNODkxNiBvciBNU004OTc0LiBUaGUgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFFNSS9BVCBmcm9tXG4gIDcyOlx0XHQgIHVzZXJzcGFjZSB3aXRoIGNvbnRyb2wgcG9ydHMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIFdXQU4gc3Vic3lzdGVtXG4gIDczOlx0XHQgIChDT05GSUdfUlBNU0dfV1dBTl9DVFJMKSBvciBRUlRSIG5ldHdvcmsgc29ja2V0cyAoQ09ORklHX1FSVFIpLlxuICA3NDpcdFxuICA3NTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgNzY6XHRcdCAgY2FsbGVkIHFjb21fYmFtX2RtdXguXG4gIDc3Olx0XG4gIDc4Olx0Y29uZmlnIFJQTVNHX1dXQU5fQ1RSTFxuICA3OTpcdFx0dHJpc3RhdGUgXCYjMzQ7UlBNU0cgV1dBTiBjb250cm9sIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBxY29tX2JhbV9kbXV4LmNgIGZvciBEcml2ZXIgUHJvYmUgQW5hbHlzaXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYHFjb21fYmFtX2RtdXguY2AgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHRoaW5nIGhhbmRsZXMgaXRzIHByb2JlIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmZhY2luZyB3aXRoIHRoZSBCQU0gRE1VWCAoQnVzIEFjY2VzcyBNYW5hZ2VyL0RlbXVsdGlwbGV4ZXIpLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCwgb2YgY291cnNlLCB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLiBIb3BlZnVsbHksIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBkZWNlbnQgYW5kIG1ha2UgdGhpcyBleHBsb3JhdGlvbiBzdHJhaWdodGZvcndhcmQuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHByb2JlIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTA6XHRcdFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG4gNzUxOlx0XHRcdHJldHVybiAtRVRJTUVET1VUO1xuIDc1MjpcdFx0fVxuIDc1MzpcdFxuIDc1NDpcdFx0LyogRW5zdXJlIHRoYXQgd2UgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG4gNzU1Olx0XHRpZiAoIWRtdXgtXHUwMDNlcngpIHtcbiA3NTY6XHRcdFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG4gNzU3Olx0XHRcdHJldHVybiAtRU5YSU87XG4gNzU4Olx0XHR9XG4gNzU5Olx0XG4gNzYwOlx0XHQvKiBSZXF1ZXN0IFRYIGNoYW5uZWwgaWYgbmVjZXNzYXJ5ICovXG4gNzYxOlx0XHRpZiAoZG11eC1cdTAwM2V0eClcbiA3NjI6XHRcdFx0cmV0dXJuIDA7XG4gNzYzOlx0XG4gNzY0Olx0XHRkbXV4LVx1MDAzZXR4ID0gZG1hX3JlcXVlc3RfY2hhbihkZXYsIFwmIzM0O3R4XCYjMzQ7KTtcbiA3NjU6XHRcdGlmIChJU19FUlIoZG11eC1cdTAwM2V0eCkpIHtcbiA3NjY6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byByZXF1ZXN0IFRYIERNQSBjaGFubmVsOiAlcGVcXG5cJiMzNDssIGRtdXgtXHUwMDNldHgpO1xuIDc2NzpcdFx0XHRkbXV4LVx1MDAzZXR4ID0gTlVMTDtcbiA3Njg6XHRcdFx0YmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7XG4gNzY5Olx0XHRcdHJldHVybiAtRU5YSU87XG4gNzcwOlx0XHR9XG4gNzcxOlx0XG4gNzcyOlx0XHRyZXR1cm4gMDtcbiA3NzM6XHR9XG4gNzc0Olx0XG4gNzc1Olx0c3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIDc3NjpcdHtcbiA3Nzc6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIDc3ODpcdFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4O1xuIDc3OTpcdFx0aW50IHJldCwgcGNfYWNrX2lycSwgaTtcbiA3ODA6XHRcdHVuc2lnbmVkIGludCBiaXQ7XG4gNzgxOlx0XG4gNzgyOlx0XHRkbXV4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkbXV4KSwgR0ZQX0tFUk5FTCk7XG4gNzgzOlx0XHRpZiAoIWRtdXgpXG4gNzg0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDc4NTpcdFxuIDc4NjpcdFx0ZG11eC1cdTAwM2VkZXYgPSBkZXY7XG4gNzg3Olx0XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkbXV4KTtcbiA3ODg6XHRcbiA3ODk6XHRcdGRtdXgtXHUwMDNlcGNfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgXCYjMzQ7cGNcJiMzNDspO1xuIDc5MDpcdFx0aWYgKGRtdXgtXHUwMDNlcGNfaXJxIFx1MDAzYyAwKVxuIDc5MTpcdFx0XHRyZXR1cm4gZG11eC1cdTAwM2VwY19pcnE7XG4gNzkyOlx0XG4gNzkzOlx0XHRwY19hY2tfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgXCYjMzQ7cGMtYWNrXCYjMzQ7KTtcbiA3OTQ6XHRcdGlmIChwY19hY2tfaXJxIFx1MDAzYyAwKVxuIDc5NTpcdFx0XHRyZXR1cm4gcGNfYWNrX2lycTtcbiA3OTY6XHRcbiA3OTc6XHRcdGRtdXgtXHUwMDNlcGMgPSBkZXZtX3Fjb21fc21lbV9zdGF0ZV9nZXQoZGV2LCBcJiMzNDtwY1wmIzM0OywgXHUwMDI2Yml0KTtcbiA3OTg6XHRcdGlmIChJU19FUlIoZG11eC1cdTAwM2VwYykpXG4gNzk5Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkbXV4LVx1MDAzZXBjKSxcbiA4MDA6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGdldCBwYyBzdGF0ZVxcblwmIzM0Oyk7XG4gODAxOlx0XHRkbXV4LVx1MDAzZXBjX21hc2sgPSBCSVQoYml0KTtcbiA4MDI6XHRcbiA4MDM6XHRcdGRtdXgtXHUwMDNlcGNfYWNrID0gZGV2bV9xY29tX3NtZW1fc3RhdGVfZ2V0KGRldiwgXCYjMzQ7cGMtYWNrXCYjMzQ7LCBcdTAwMjZiaXQpO1xuIDgwNDpcdFx0aWYgKElTX0VSUihkbXV4LVx1MDAzZXBjX2FjaykpXG4gODA1Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkbXV4LVx1MDAzZXBjX2FjayksXG4gODA2Olx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBnZXQgcGMtYWNrIHN0YXRlXFxuXCYjMzQ7KTtcbiA4MDc6XHRcdGRtdXgtXHUwMDNlcGNfYWNrX21hc2sgPSBCSVQoYml0KTtcbiA4MDg6XHRcbiA4MDk6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZG11eC1cdTAwM2VwY193YWl0KTtcbiA4MTA6XHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbiA4MTE6XHRcdGNvbXBsZXRlX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbiA4MTI6XHRcbiA4MTM6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRtdXgtXHUwMDNldHhfbG9jayk7XG4gODE0Olx0XHRJTklUX1dPUksoXHUwMDI2ZG11eC1cdTAwM2V0eF93YWtldXBfd29yaywgYmFtX2RtdXhfdHhfd2FrZXVwX3dvcmspO1xuIDgxNTpcdFx0SU5JVF9XT1JLKFx1MDAyNmRtdXgtXHUwMDNlcmVnaXN0ZXJfbmV0ZGV2X3dvcmssIGJhbV9kbXV4X3JlZ2lzdGVyX25ldGRldl93b3JrKTtcbiA4MTY6XHRcbiA4MTc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJBTV9ETVVYX05VTV9TS0I7IGkmIzQzOyYjNDM7KSB7XG4gODE4Olx0XHRcdGRtdXgtXHUwMDNlcnhfc2tic1tpXS5kbXV4ID0gZG11eDtcbiA4MTk6XHRcdFx0ZG11eC1cdTAwM2V0eF9za2JzW2ldLmRtdXggPSBkbXV4O1xuIDgyMDpcdFx0fVxuIDgyMTpcdFxuIDgyMjpcdFx0LyogUnVudGltZSBQTSBtYW5hZ2VzIG91ciBvd24gcG93ZXIgdm90ZS5cbiA4MjM6XHRcdCAqIE5vdGUgdGhhdCB0aGUgUlggcGF0aCBtYXkgYmUgYWN0aXZlIGV2ZW4gaWYgd2UgYXJlIHJ1bnRpbWUgc3VzcGVuZGVkLFxuIDgyNDpcdFx0ICogc2luY2UgaXQgaXMgY29udHJvbGxlZCBieSB0aGUgcmVtb3RlIHNpZGUuXG4gODI1Olx0XHQgKi9cbiA4MjY6XHRcdHBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KGRldiwgQkFNX0RNVVhfQVVUT1NVU1BFTkRfREVMQVkpO1xuIDgyNzpcdFx0cG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoZGV2KTtcbiA4Mjg6XHRcdHBtX3J1bnRpbWVfZW5hYmxlKGRldik7XG4gODI5Olx0XG4gODMwOlx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgcGNfYWNrX2lycSwgTlVMTCwgYmFtX2RtdXhfcGNfYWNrX2lycSxcbiA4MzE6XHRcdFx0XHRcdFx0SVJRRl9PTkVTSE9ULCBOVUxMLCBkbXV4KTtcbiA4MzI6XHRcdGlmIChyZXQpXG4gODMzOlx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfcG07XG4gODM0Olx0XG4gODM1Olx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgZG11eC1cdTAwM2VwY19pcnEsIE5VTEwsIGJhbV9kbXV4X3BjX2lycSxcbiA4MzY6XHRcdFx0XHRcdFx0SVJRRl9PTkVTSE9ULCBOVUxMLCBkbXV4KTtcbiA4Mzc6XHRcdGlmIChyZXQpXG4gODM4Olx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfcG07XG4gODM5Olx0XG4gODQwOlx0XHRyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC1cdTAwM2VwY19pcnEsIElSUUNISVBfU1RBVEVfTElORV9MRVZFTCxcbiA4NDE6XHRcdFx0XHRcdCAgICBcdTAwMjZkbXV4LVx1MDAzZXBjX3N0YXRlKTtcbiA4NDI6XHRcdGlmIChyZXQpXG4gODQzOlx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfcG07XG4gODQ0Olx0XG4gODQ1Olx0XHQvKiBDaGVjayBpZiByZW1vdGUgZmluaXNoZWQgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzICovXG4gODQ2Olx0XHRpZiAoZG11eC1cdTAwM2VwY19zdGF0ZSkge1xuIDg0NzpcdFx0XHRpZiAoYmFtX2RtdXhfcG93ZXJfb24oZG11eCkpXG4gODQ4Olx0XHRcdFx0YmFtX2RtdXhfcGNfYWNrKGRtdXgpO1xuIDg0OTpcdFx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc1OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBxY29tX2JhbV9kbXV4YCBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBxY29tX2JhbV9kbXV4YCB0aGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIGJpbmRpbmcuIElzIHRoaXMgYSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgYSBRdWFsY29tbSBTeXN0ZW0tb24tYS1DaGlwPyBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIHRoYXQmIzM5O3MgbXkgc3Ryb25nIHN1c3BpY2lvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgZG9jdW1lbnRhdGlvbiBvciBzb3VyY2UgY29kZSB0aGF0IGNvbmZpcm1zIGl0cyBwdXJwb3NlIGFuZCB0aGUgaGFyZHdhcmUgaXQmIzM5O3MgaW50ZW5kZWQgdG8gbWFuYWdlLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIHRoYXQgdGllIHRoaXMgZHJpdmVyIHRvIGEgc3BlY2lmaWMgcGllY2Ugb2YgUXVhbGNvbW0gc2lsaWNvbi4gSXQgd2lsbCBiZSByZWFsbHkgaGVscGZ1bCB0byB1bmRlcnN0YW5kIGlmIGl0cyBhIGxlZ2FjeSBkcml2ZXIgb3IgbmV3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFx0XHRcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbiA4NTE6XHRcdH1cbiA4NTI6XHRcbiA4NTM6XHRcdHJldHVybiAwO1xuIDg1NDpcdFxuIDg1NTpcdGVycl9kaXNhYmxlX3BtOlxuIDg1NjpcdFx0cG1fcnVudGltZV9kaXNhYmxlKGRldik7XG4gODU3Olx0XHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XG4gODU4Olx0XHRyZXR1cm4gcmV0O1xuIDg1OTpcdH1cbiA4NjA6XHRcbiA4NjE6XHRzdGF0aWMgdm9pZCBiYW1fZG11eF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiA4NjI6XHR7XG4gODYzOlx0XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiA4NjQ6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRtdXgtXHUwMDNlZGV2O1xuIDg2NTpcdFx0TElTVF9IRUFEKGxpc3QpO1xuIDg2NjpcdFx0aW50IGk7XG4gODY3Olx0XG4gODY4Olx0XHQvKiBVbnJlZ2lzdGVyIG5ldHdvcmsgaW50ZXJmYWNlcyAqL1xuIDg2OTpcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZkbXV4LVx1MDAzZXJlZ2lzdGVyX25ldGRldl93b3JrKTtcbiA4NzA6XHRcdHJ0bmxfbG9jaygpO1xuIDg3MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkFNX0RNVVhfTlVNX0NIOyAmIzQzOyYjNDM7aSlcbiA4NzI6XHRcdFx0aWYgKGRtdXgtXHUwMDNlbmV0ZGV2c1tpXSlcbiA4NzM6XHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkbXV4LVx1MDAzZW5ldGRldnNbaV0sIFx1MDAyNmxpc3QpO1xuIDg3NDpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcdTAwMjZsaXN0KTtcbiA4NzU6XHRcdHJ0bmxfdW5sb2NrKCk7XG4gODc2Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmRtdXgtXHUwMDNldHhfd2FrZXVwX3dvcmspO1xuIDg3NzpcdFxuIDg3ODpcdFx0LyogRHJvcCBvdXIgb3duIHBvd2VyIHZvdGUgKi9cbiA4Nzk6XHRcdHBtX3J1bnRpbWVfZGlzYWJsZShkZXYpO1xuIDg4MDpcdFx0cG1fcnVudGltZV9kb250X3VzZV9hdXRvc3VzcGVuZChkZXYpO1xuIDg4MTpcdFx0YmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7XG4gODgyOlx0XHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTtcbiA4ODM6XHRcbiA4ODQ6XHRcdC8qIFRyeSB0byB3YWl0IGZvciByZW1vdGUgc2lkZSB0byBkcm9wIHBvd2VyIHZvdGUgKi9cbiA4ODU6XHRcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXHUwMDNlcGNfd2FpdCwgIWRtdXgtXHUwMDNlcngsIEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSlcbiA4ODY6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciByZW1vdGUgc2lkZSB0byBzdXNwZW5kXFxuXCYjMzQ7KTtcbiA4ODc6XHRcbiA4ODg6XHRcdC8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuZWQgdXAgYmVmb3JlIHdlIHJldHVybiAqL1xuIDg4OTpcdFx0ZGlzYWJsZV9pcnEoZG11eC1cdTAwM2VwY19pcnEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjE0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gc3VtbWFyaXplIG15ICYjMzQ7dGhvdWdodHMmIzM0OyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGEgc3ViamVjdCBtYXR0ZXIgZXhwZXJ0LiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIGl0OgoKKipEaWdnaW5nIERlZXBlcjogRW5zdXJpbmcgQ29tcHJlaGVuc2l2ZSBDb3ZlcmFnZSoqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIFdlJiMzOTt2ZSBsb29rZWQgYXQgb25lIHBhcnQgb2YgdGhlIGZpbGUsIGJ1dCB3ZSBjYW4mIzM5O3Qgc3RvcCB0aGVyZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3Mgbm90IGp1c3QgYXNzdW1lIHdlJiMzOTt2ZSBzZWVuIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBzZWUuJiMzNDsgV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBicmllZiBnbGltcHNlIGlzIHJlcHJlc2VudGF0aXZlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgZm9yIGFueSBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGdvIHRocm91Z2ggdGhlIE9GIG1hdGNoIHRhYmxlLiBNYXliZSB0aGVyZSBhcmUgb3RoZXIgdGFibGVzIG9yIGRhdGEgcG9pbnRzIGluIHRoaXMgZmlsZSB0aGF0IGFyZSByZWxldmFudC4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiB3aGF0IG90aGVyIHBpZWNlcyBtaWdodCBpbnRlcmFjdCB3aXRoIHRoaXMgZmlyc3QgcGFydC4gV2hhdCBlbHNlIG1pZ2h0IGJlIGltcGFjdGVkLCB3aGF0IG90aGVyIHJ1bGVzIG9yIGRlcGVuZGVuY2llcyBhcmUgdHJpZ2dlcmVkIGJ5IHRoaXMgY29kZT8gSSBuZWVkIHRvIGJ1aWxkIGEgcmVhbGx5IGNvbXBsZXRlIHBpY3R1cmUgdG8gYXZvaWQgbWlzc2luZyBzb21ldGhpbmcgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDk6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODkwOlx0XHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XG4gODkxOlx0XHRiYW1fZG11eF9mcmVlX3NrYnMoZG11eC1cdTAwM2V0eF9za2JzLCBETUFfVE9fREVWSUNFKTtcbiA4OTI6XHR9XG4gODkzOlx0XG4gODk0Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGJhbV9kbXV4X3BtX29wcyA9IHtcbiA4OTU6XHRcdFNFVF9SVU5USU1FX1BNX09QUyhiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQsIGJhbV9kbXV4X3J1bnRpbWVfcmVzdW1lLCBOVUxMKVxuIDg5NjpcdH07XG4gODk3Olx0XG4gODk4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmFtX2RtdXhfb2ZfbWF0Y2hbXSA9IHtcbiA4OTk6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7IH0sXG4gOTAwOlx0XHR7IC8qIHNlbnRpbmVsICovIH1cbiA5MDE6XHR9O1xuIDkwMjpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJhbV9kbXV4X29mX21hdGNoKTtcbiA5MDM6XHRcbiA5MDQ6XHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiYW1fZG11eF9kcml2ZXIgPSB7XG4gOTA1Olx0XHQucHJvYmUgPSBiYW1fZG11eF9wcm9iZSxcbiA5MDY6XHRcdC5yZW1vdmUgPSBiYW1fZG11eF9yZW1vdmUsXG4gOTA3Olx0XHQuZHJpdmVyID0ge1xuIDkwODpcdFx0XHQubmFtZSA9IFwmIzM0O2JhbS1kbXV4XCYjMzQ7LFxuIDkwOTpcdFx0XHQucG0gPSBcdTAwMjZiYW1fZG11eF9wbV9vcHMsXG4gOTEwOlx0XHRcdC5vZl9tYXRjaF90YWJsZSA9IGJhbV9kbXV4X29mX21hdGNoLFxuIDkxMTpcdFx0fSxcbiA5MTI6XHR9O1xuIDkxMzpcdG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYmFtX2RtdXhfZHJpdmVyKTtcbiA5MTQ6XHRcbiA5MTU6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUEwgdjJcJiMzNDspO1xuIDkxNjpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtRdWFsY29tbSBCQU0tRE1VWCBXV0FOIE5ldHdvcmsgRHJpdmVyXCYjMzQ7KTtcbiA5MTc6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O1N0ZXBoYW4gR2VyaG9sZCBcdTAwM2NzdGVwaGFuQGdlcmhvbGQubmV0XHUwMDNlXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDk6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgcWNvbV9iYW1fZG11eGAgRHJpdmVyJiMzOTtzIFZpcnR1YWxpemF0aW9uIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHNlZSBpZiB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBRdWFsY29tbSBTb0NzIGFuZCB1dGlsaXplcyBEZXZpY2UgVHJlZSBtYXRjaGluZyB0aGUgYHFjb20sYmFtLWRtdXhgIGNvbXBhdGlibGUgc3RyaW5nLCBjb3VsZCBiZSBzb21laG93IHJlYWNoZWQgb3IgaW5zdGFudGlhdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gTXkgZXhwZXJ0IGludHVpdGlvbiBpbW1lZGlhdGVseSBmbGFnZ2VkIHNvbWUgcG90ZW50aWFsIHJvYWRibG9ja3MuCgpUaGUgYGJhbV9kbXV4X3Byb2JlYCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmUuIEl0JiMzOTtzIGxvb2tpbmcgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSBzZWUgaXQmIzM5O3MgYXR0ZW1wdGluZyB0byBhY3F1aXJlIGludGVycnVwdHMgdXNpbmcgYHBsYXRmb3JtX2dldF9pcnFfYnluYW1lYCAoJiMzNDtwYyYjMzQ7LCAmIzM0O3BjLWFjayYjMzQ7KSwgYWNjZXNzaW5nIHNoYXJlZCBtZW1vcnkgdGhyb3VnaCBgZGV2bV9xY29tX3NtZW1fc3RhdGVfZ2V0YCAoJiMzNDtwYyYjMzQ7LCAmIzM0O3BjLWFjayYjMzQ7KSwgYW5kIHJlcXVlc3RpbmcgRE1BIGNoYW5uZWxzIHdpdGggYGRtYV9yZXF1ZXN0X2NoYW5gICgmIzM0O3R4JiMzNDspLiBUaGUgdXNlIG9mIGBkZXZtX3Fjb21fc21lbV9zdGF0ZV9nZXRgIGluIHBhcnRpY3VsYXIgc2NyZWFtcyAmIzM0O1F1YWxjb21tLXNwZWNpZmljJiMzNDsgc2hhcmVkIG1lbW9yeSBhY2Nlc3MsIGxpa2VseSB0aWVkIHRvIHRoZWlyIFN5c3RlbSBNZW1vcnkgUmVnaW9uIChTTUVNKS4gQkFNIERNQSBpcyBhbHNvIGEgc3Ryb25nIGhpbnQuCgpTbywgSSBzdGFydGVkIHRvIHRoaW5rLCAmIzM0O0NhbiB0aGlzIGJlIHRyaWNrZWQ/JiMzNDsgQ2FuIHdlIG1vY2sgdGhlc2UgY2FsbHM/IFRoZSBhbnN3ZXIsIGdpdmVuIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIGlzIGEgcmVzb3VuZGluZyBuby4gU3BlY2lmaWNhbGx5IHJlZmVyZW5jaW5nIHRoaXMgaW5mb3JtYXRpb246CiYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuJiMzNDsKJiMzNDtDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsKCk15IGFuYWx5c2lzIHRlbGxzIG1lIHRoZSBkcml2ZXIgaXMgZGVmaW5pdGVseSAqbm90KiBnb2luZyB0byB3b3JrIGluIHRoZSBzdGFuZGFyZCB4ODYgb3IgYXJtNjQgUUVNVS9HQ0UgZW52aXJvbm1lbnQuIFRoaXMgZHJpdmVyICpyZWxpZXMqIG9uIHRoZSBRdWFsY29tbSBNU00gU29DJiMzOTtzIHNwZWNpZmljIGhhcmR3YXJlIGNvbXBvbmVudHMsIG5hbWVseSwgdGhlIEJBTSBETUEgYW5kIFNNRU0gc3RhdGUsIHdoaWNoIGFyZSBmdW5kYW1lbnRhbGx5IHVuYXZhaWxhYmxlLCBvciBhdCBsZWFzdCB1bm1hcHBlZCwgd2l0aG91dCB0aGUgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG9yIGEgdmVyeSBlbGFib3JhdGUgYW5kIHNwZWNpZmljIERUIGVtdWxhdGlvbi4gRXZlbiBpZiBzb21lb25lIHdlcmUgYWJsZSB0byBsb2FkIHRoZSBtb2R1bGUgb3IgY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGVudHJ5LCB0aGUgcHJvYmUgZnVuY3Rpb24gd291bGQgZmFpbCBiZWNhdXNlIGl0IHdpbGwgbm90IGJlIGFibGUgdG8gZ2V0IGludGVycnVwdHMuIExpa2V3aXNlLCBpdCB3b3VsZCBmYWlsIHRvIGdldCB0aGUgc2hhcmVkIG1lbW9yeSBvciBETUEgY2hhbm5lbHMuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgcXVlc3Rpb24gb2YgbmV0d29yayBkZXZpY2UgY3JlYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgbWFueSBkcml2ZXJzIHdpbGwgcmVnaXN0ZXIgYSBuZXR3b3JrIGRldmljZSB1c2luZyBydG5ldGxpbmsgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIGRyaXZlciBwcm9iZXMgYW5kIGlzIGxvYWRlZCBzdWNjZXNzZnVsbHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRyaXZlciBpdHNlbGYgcmVnaXN0ZXJzIGFueSBgcnRubF9saW5rX29wc2AuIE15IGd1ZXNzIGlzIHRoYXQgaXQgZG9lcyBub3QsIGdpdmVuIHRoYXQgaXRzIHB1cnBvc2UgaXMgdG8gYnJpZGdlIHRvIHVuZGVybHlpbmcgUXVhbGNvbW0gc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50cyAoQkFNIERNQSBhbmQgU01FTSkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfbGlua19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM9MTI0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgd3dhbl9ydG5sX3BvbGljeVtJRkxBX1dXQU5fTUFYICYjNDM7IDFdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTI0NC1cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTI0NTpzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgd3dhbl9ydG5sX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTEyNDYtXHQua2luZCA9IFwmIzM0O3d3YW5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz0xMjU3PXN0YXRpYyB2b2lkIHd3YW5fY3JlYXRlX2RlZmF1bHRfbGluayhzdHJ1Y3Qgd3dhbl9kZXZpY2UgKnd3YW5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMzA2LVx0ZGV2ID0gcnRubF9jcmVhdGVfbGluayhcdTAwMjZpbml0X25ldCwgXCYjMzQ7d3dhbiVkXCYjMzQ7LCBORVRfTkFNRV9FTlVNLFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzoxMzA3Olx0XHRcdCAgICAgICBcdTAwMjZ3d2FuX3J0bmxfbGlua19vcHMsIHRiLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTMwOC1cdGlmIChXQVJOX09OKElTX0VSUihkZXYpKSlcbi0tXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jPTE0MjA9c3RhdGljIGludCBfX2luaXQgd3dhbl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xNDIzLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzoxNDI0Olx0ZXJyID0gcnRubF9saW5rX3JlZ2lzdGVyKFx1MDAyNnd3YW5fcnRubF9saW5rX29wcyk7XG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0MjUtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTQ0OC11bnJlZ2lzdGVyOlxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzoxNDQ5Olx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2d3dhbl9ydG5sX2xpbmtfb3BzKTtcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTQ1MC1cdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz0xNDUzPXN0YXRpYyB2b2lkIF9fZXhpdCB3d2FuX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0NTYtXHRfX3VucmVnaXN0ZXJfY2hyZGV2KHd3YW5fbWFqb3IsIDAsIFdXQU5fTUFYX01JTk9SUywgXCYjMzQ7d3dhbl9wb3J0XCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTQ1NzpcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNnd3YW5fcnRubF9saW5rX29wcyk7XG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0NTgtXHRjbGFzc191bnJlZ2lzdGVyKFx1MDAyNnd3YW5fY2xhc3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjU1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHByb21wdCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIHd3YW5fcnRubF9saW5rX29wcyBhbmQgcWNvbV9iYW1fZG11eCoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGB3d2FuX3J0bmxfbGlua19vcHNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byBpdHMgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyByb2xlIGluIHRoZSBXV0FOIHN0YWNrLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O2xsIGxpa2VseSBzdGFydCBieSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGtlcm5lbCBoZWFkZXJzIGFuZCBzb3VyY2UgZmlsZXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGl0cyBleGVjdXRpb24gcGF0aCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBsaW5rIG1hbmFnZW1lbnQgYW5kIHJvdXRpbmcuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIGBxY29tX2JhbV9kbXV4YCBpcyBhY3R1YWxseSB1c2luZyBpdC4gVGhlIG5hbWUgc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSBhIFF1YWxjb21tLXNwZWNpZmljIEJBTSAoQnVmZmVyIEFjY2VzcyBNYW5hZ2VyKSBjb21wb25lbnQsIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmVsYXRlIHRoaXMgdG8gdGhlIGJyb2FkZXIgV1dBTiBmcmFtZXdvcmsgYW5kIGlmIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBkZW11bHRpcGxleGluZyBvZiBkYXRhLiBJZiBgcWNvbV9iYW1fZG11eGAgKmlzKiBkZXBlbmRlbnQgb24gYHd3YW5fY29yZWAsIHRoYXQgbWVhbnMgYHd3YW5fcnRubF9saW5rX29wc2AgaXMgcHJvYmFibHkgYWxzbyBjcml0aWNhbCBmb3IgdGhlIFFDT00gQkFNIGRlbXVsdGlwbGV4aW5nLiBUaGlzIHJlbGF0aW9uc2hpcCBpcyBpbXBvcnRhbnQgdG8gcGluIGRvd24uIEluIGVzc2VuY2UsIEkgbmVlZCB0byBzZWUgaWYgdGhlIEJBTSBkcml2ZXImIzM5O3MgZnVuY3Rpb25hbGl0eSBsZXZlcmFnZXMgdGhlIGNvcmUgV1dBTiBmdW5jdGlvbmFsaXRpZXMsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBuZXRsaW5rIGludGVyZmFjZSBvcGVyYXRpb25zLiBJIHdpbGwgc3RhcnQgdHJhY2luZyB0aGUgY2FsbHMgYW5kIGRhdGEgZmxvdyBhbmQgdGhlbiBjb21lIHVwIHdpdGggYSBjb25jbHVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3d2FuXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jPTQwOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhbV9kbXV4X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MTQtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo0MTU6c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3d2FuX3R5cGUgPSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MTYtXHQubmFtZSA9IFwmIzM0O3d3YW5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM9NDE5PXN0YXRpYyB2b2lkIGJhbV9kbXV4X25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQyMy1cdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX1JBV0lQO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDI0Olx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXHUwMDI2d3dhbl90eXBlKTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQyNS1cdGRldi1cdTAwM2VmbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEwbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NTQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgYHFjb21fYmFtX2RtdXguY2AmIzM5O3MgTmV0d29yayBEZXZpY2UgSGFuZGxpbmcqKgoKUmlnaHQsIHNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBxY29tX2JhbV9kbXV4LmNgIGRyaXZlci4gVGhlIGltbWVkaWF0ZSBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGUgbmV0d29yayBkZXZpY2UgYXNwZWN0LiAgSG1tLCBpbnRlcmVzdGluZy4uLiBpdCAqZG9lc24mIzM5O3QqIGFwcGVhciB0byBkaXJlY3RseSBsZXZlcmFnZSBgd3dhbl9jb3JlLmNgIGxpa2UgSSBtaWdodCBoYXZlIGluaXRpYWxseSBzdXNwZWN0ZWQuIEluc3RlYWQsIGl0JiMzOTtzIHRha2luZyBhIG1vcmUgZGlyZWN0IGFwcHJvYWNoIOKAkyByZWdpc3RlcmluZyByYXcgbmV0ZGV2aWNlcyB1c2luZyBgYWxsb2NfbmV0ZGV2YC4gVGhlIHVzZSBvZiBgYWxsb2NfbmV0ZGV2YCBpcyBrZXkgaGVyZSwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoZSBwcml2YXRlIGRhdGEgYGJhbV9kbXV4X25ldGRldl9wcml2YCBpcyBoYW5kbGVkLiAgT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGxpbmVzIGJldHdlZW4gNDAwIGFuZCA1MDAgaW4gYGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiBpdHMgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgbWFuYWdlbWVudCBzdHJhdGVneSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCYjMzk7cyB1c2luZyB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSB0byBoYW5kbGUgdGhlIG11bHRpcGxleGluZyBvZiB0aGUgQkFNIGludGVyZmFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgdHJhbnNsYXRpbmcgdGhhdCBCQU0gaW50ZXJmYWNlIGludG8gdXNhYmxlIG5ldHdvcmsgZGV2aWNlcywgYmVjYXVzZSwgYXMgSSByZWNhbGwsIGl0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIFdXQU4gaW50ZXJmYWNlLiBHb3R0YSBnZXQgdG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0XHRiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF90eChcdTAwMjZkbXV4LVx1MDAzZXR4X3NrYnNbaV0pO1xuIDQwMTpcdFx0fVxuIDQwMjpcdFx0ZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoZG11eC1cdTAwM2V0eCk7XG4gNDAzOlx0XG4gNDA0Olx0b3V0OlxuIDQwNTpcdFx0cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoZG11eC1cdTAwM2VkZXYpO1xuIDQwNjpcdH1cbiA0MDc6XHRcbiA0MDg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhbV9kbXV4X29wcyA9IHtcbiA0MDk6XHRcdC5uZG9fb3Blblx0PSBiYW1fZG11eF9uZXRkZXZfb3BlbixcbiA0MTA6XHRcdC5uZG9fc3RvcFx0PSBiYW1fZG11eF9uZXRkZXZfc3RvcCxcbiA0MTE6XHRcdC5uZG9fc3RhcnRfeG1pdFx0PSBiYW1fZG11eF9uZXRkZXZfc3RhcnRfeG1pdCxcbiA0MTI6XHRcdC5uZG9fZ2V0X3N0YXRzNjRcdD0gZGV2X2dldF90c3RhdHM2NCxcbiA0MTM6XHR9O1xuIDQxNDpcdFxuIDQxNTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3dhbl90eXBlID0ge1xuIDQxNjpcdFx0Lm5hbWUgPSBcJiMzNDt3d2FuXCYjMzQ7LFxuIDQxNzpcdH07XG4gNDE4Olx0XG4gNDE5Olx0c3RhdGljIHZvaWQgYmFtX2RtdXhfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNDIwOlx0e1xuIDQyMTpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZiYW1fZG11eF9vcHM7XG4gNDIyOlx0XG4gNDIzOlx0XHRkZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9SQVdJUDtcbiA0MjQ6XHRcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFx1MDAyNnd3YW5fdHlwZSk7XG4gNDI1Olx0XHRkZXYtXHUwMDNlZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7XG4gNDI2Olx0XG4gNDI3Olx0XHRkZXYtXHUwMDNlbXR1ID0gRVRIX0RBVEFfTEVOO1xuIDQyODpcdFx0ZGV2LVx1MDAzZW1heF9tdHUgPSBCQU1fRE1VWF9NQVhfREFUQV9TSVpFO1xuIDQyOTpcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYmFtX2RtdXhfaGRyKTtcbiA0MzA6XHRcdGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20gPSBzaXplb2YodTMyKTsgLyogd29yZC1hbGlnbmVkICovXG4gNDMxOlx0XHRkZXYtXHUwMDNldHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47XG4gNDMyOlx0XHRkZXYtXHUwMDNlcGNwdV9zdGF0X3R5cGUgPSBORVRERVZfUENQVV9TVEFUX1RTVEFUUztcbiA0MzM6XHRcbiA0MzQ6XHRcdC8qIFRoaXMgcGVybSBhZGRyIHdpbGwgYmUgdXNlZCBhcyBpbnRlcmZhY2UgaWRlbnRpZmllciBieSBJUHY2ICovXG4gNDM1Olx0XHRkZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1JBTkRPTTtcbiA0MzY6XHRcdGV0aF9yYW5kb21fYWRkcihkZXYtXHUwMDNlcGVybV9hZGRyKTtcbiA0Mzc6XHR9XG4gNDM4Olx0XG4gNDM5Olx0c3RhdGljIHZvaWQgYmFtX2RtdXhfcmVnaXN0ZXJfbmV0ZGV2X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDQ0MDpcdHtcbiA0NDE6XHRcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmFtX2RtdXgsIHJlZ2lzdGVyX25ldGRldl93b3JrKTtcbiA0NDI6XHRcdHN0cnVjdCBiYW1fZG11eF9uZXRkZXYgKmJuZGV2O1xuIDQ0MzpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiA0NDQ6XHRcdGludCBjaCwgcmV0O1xuIDQ0NTpcdFxuIDQ0NjpcdFx0Zm9yX2VhY2hfc2V0X2JpdChjaCwgZG11eC1cdTAwM2VyZW1vdGVfY2hhbm5lbHMsIEJBTV9ETVVYX05VTV9DSCkge1xuIDQ0NzpcdFx0XHRpZiAoZG11eC1cdTAwM2VuZXRkZXZzW2NoXSlcbiA0NDg6XHRcdFx0XHRjb250aW51ZTtcbiA0NDk6XHRcbiA0NTA6XHRcdFx0bmV0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqYm5kZXYpLCBcJiMzNDt3d2FuJWRcJiMzNDssIE5FVF9OQU1FX0VOVU0sXG4gNDUxOlx0XHRcdFx0XHQgICAgICBiYW1fZG11eF9uZXRkZXZfc2V0dXApO1xuIDQ1MjpcdFx0XHRpZiAoIW5ldGRldilcbiA0NTM6XHRcdFx0XHRyZXR1cm47XG4gNDU0Olx0XG4gNDU1Olx0XHRcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgZG11eC1cdTAwM2VkZXYpO1xuIDQ1NjpcdFx0XHRuZXRkZXYtXHUwMDNlZGV2X3BvcnQgPSBjaDtcbiA0NTc6XHRcbiA0NTg6XHRcdFx0Ym5kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDQ1OTpcdFx0XHRibmRldi1cdTAwM2VkbXV4ID0gZG11eDtcbiA0NjA6XHRcdFx0Ym5kZXYtXHUwMDNlY2ggPSBjaDtcbiA0NjE6XHRcbiA0NjI6XHRcdFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7XG4gNDYzOlx0XHRcdGlmIChyZXQpIHtcbiA0NjQ6XHRcdFx0XHRkZXZfZXJyKGRtdXgtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0ZGV2IGZvciBjaGFubmVsICV1OiAlZFxcblwmIzM0OyxcbiA0NjU6XHRcdFx0XHRcdGNoLCByZXQpO1xuIDQ2NjpcdFx0XHRcdGZyZWVfbmV0ZGV2KG5ldGRldik7XG4gNDY3Olx0XHRcdFx0cmV0dXJuO1xuIDQ2ODpcdFx0XHR9XG4gNDY5Olx0XG4gNDcwOlx0XHRcdGRtdXgtXHUwMDNlbmV0ZGV2c1tjaF0gPSBuZXRkZXY7XG4gNDcxOlx0XHR9XG4gNDcyOlx0fVxuIDQ3MzpcdFxuIDQ3NDpcdHN0YXRpYyB2b2lkIGJhbV9kbXV4X3J4X2NhbGxiYWNrKHZvaWQgKmRhdGEpO1xuIDQ3NTpcdFxuIDQ3NjpcdHN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKVxuIDQ3NzpcdHtcbiA0Nzg6XHRcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtXHUwMDNlZG11eDtcbiA0Nzk6XHRcdHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2ODcKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogOTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYWRkaW5nIG5ldHdvcmsgc3RhdGlzdGljcyB0byB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyAqZHluYW1pY2FsbHkqIHJlZ2lzdGVyZWQgdmlhIGNvbW1hbmQgcGFja2V0cyBmcm9tIHRoZSByZW1vdGUgbW9kZW0uIEkgc2VlIHRoYXQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgdGhyb3VnaCBgYmFtX2RtdXhfY21kX29wZW5gIGFuZCBhIHNjaGVkdWxlZCB3b3JrIGl0ZW0gdGhhdCBjYWxscyBgc2NoZWR1bGVfd29yaygmYW1wO2RtdXgtJmd0O3JlZ2lzdGVyX25ldGRldl93b3JrKWAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBiYW1fZG11eGAgaXMgc3BlY2lmaWNhbGx5IGEgcGxhdGZvcm0gZHJpdmVyIGRlc2lnbmVkIGZvciBRdWFsY29tbSBNU00gU29DcywgYW5kIGl0IHJlbGllcyBvbiBRdWFsY29tbS1zcGVjaWZpYyBoYXJkd2FyZTogU01FTSBzdGF0ZXMsIEJBTSBETUEgY2hhbm5lbHMsIGFuZCBpbnRlcnJ1cHRzLiBUaGF0IGdpdmVzIG1lIGEgY2x1ZSBhYm91dCByZWFjaGFiaWxpdHkuCgpOb3csIGxldCYjMzk7cyBnbyBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgZm9yIGRldGVybWluaW5nICYjMzQ7V29ydGhGdXp6aW5nLiYjMzQ7IEkgaGF2ZSB0byBiZSBjYXJlZnVsIGhlcmU6CiogICBEb2N1bWVudGF0aW9uL0tjb25maWcvQ29tbWVudHM/IE5vCiogICBEZWNvcmF0aXZlIGNoYW5nZXMgKGxvZ2dpbmcsIHRyYWNlcG9pbnRzKT8gTm8KKiAgIENoYW5nZXMgdG8gY29uc3RhbnRzL21hY3JvcyB3aXRob3V0IGZ1bmN0aW9uYWwgaW1wYWN0PyBObwoqICAgVW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRT8gVGhpcyBpcyBhIGtleSBwb2ludCwgYW5kIEkgaGF2ZSB0byBiZSBzdXJlLgoqICAgVmVuZG9yLXNwZWNpZmljIFBDSWUvU21hcnROSUMvR1BVIGRyaXZlcnMgKHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSk/IERlZmluaXRlbHkgbmVlZCB0byBjb25zaWRlcgoqICAgRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IG9ubHkgcnVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciB1bmJpbmQgb3BlcmF0aW9ucz8gTm8uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcy4gSSBzZWU6CgoxLiAgYGRldl9zd19uZXRzdGF0c190eF9hZGQobmV0ZGV2LCAxLCBsZW4pO2AgaW4gYGJhbV9kbXV4X3R4X2NhbGxiYWNrYAoyLiAgYC5uZG9fZ2V0X3N0YXRzNjQgPSBkZXZfZ2V0X3RzdGF0czY0LGAgaW4gYGJhbV9kbXV4X29wc2AKMy4gIGBkZXYtJmd0O3BjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9UU1RBVFM7YCBpbiBgYmFtX2RtdXhfbmV0ZGV2X3NldHVwYAo0LiAgYGRldl9zd19uZXRzdGF0c19yeF9hZGQobmV0ZGV2LCBza2ItJmd0O2xlbik7YCBpbiBgYmFtX2RtdXhfY21kX2RhdGFgCgpUaGlzIGFsbCBsb29rcyBsaWtlIHN0YW5kYXJkIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZywgYWRkaW5nIGB0c3RhdHNgIHVzaW5nIGBkZXZfc3dfbmV0c3RhdHNfKmAgYW5kIGAubmRvX2dldF9zdGF0czY0YC4gVGhpcyBtZWFucyBjb3VudGluZyBwYWNrZXRzIGFuZCBieXRlcy4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGVudmlyb25tZW50IGFuZCB0aGUgY2hhbmdlcywgSSBjYW4gbWFrZSBzb21lIGp1ZGdlbWVudHMuCgpGaXJzdCwgYHFjb21fYmFtX2RtdXguY2AgaXMgUXVhbGNvbW0tc3BlY2lmaWMgaGFyZHdhcmUgKEJBTS1ETVVYKSwgd2hpY2ggaW1wbGllcyB0aGF0IGl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcmVhY2hlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS4KClNlY29uZCwgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMgYXJlIG9ubHkgYWRkaW5nIHN0YXRzIHJlcG9ydGluZywgd2hpY2ggaXMgY29tbW9uIGFuZCBub3QgcmVhbGx5IGEgbmV3IGNvZGUgcGF0aC4gVGhpcyBhbHNvIG1lYW5zIHRoaXMgd291bGRuJiMzOTt0IGxpa2VseSBicmVhayB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpUaGVyZWZvcmUsICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgc2hvdWxkIGJlIHNldCB0byAqZmFsc2UqLiBUaGlzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuCgpMZXQgbWUgZG91YmxlLWNoZWNrOgoqICAgT25seSBvbmUgZmlsZSBtb2RpZmllZCwgYGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jYC4KKiAgIGBxY29tX2JhbV9kbXV4LmNgIHVzZXMgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSBjaGFubmVscywgd2hpY2ggbWVhbnMgaXQgd2lsbCAqbm90KiB3b3JrIGluIFFFTVUvR0NFIHdpdGhvdXQgdGhvc2UgY2hhbm5lbHMsIHNvIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHRoZXNlIHZpcnR1YWwgZW52aXJvbm1lbnRzLgoqICAgVGhlIHBhdGNoIG9ubHkgYWRkcyBzb2Z0d2FyZSBzdGF0aXN0aWNzIGNvbGxlY3Rpb24uCgpPa2F5LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgUmVhc29uaW5nYDogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdGFuZGFyZCBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZyAoZGV2X3N3X25ldHN0YXRzX3R4X2FkZCwgZGV2X3N3X25ldHN0YXRzX3J4X2FkZCwgYW5kIGRldl9nZXRfdHN0YXRzNjQpIHRvIHRoZSBRdWFsY29tbSBCQU0tRE1VWCBXV0FOIGRyaXZlciAocWNvbV9iYW1fZG11eC5jKS4gVGhpcyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gUXVhbGNvbW0gU29DcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgLyBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIGNoYW5uZWxzLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDsKKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAKCkFuZCBmaW5hbGx5LCBsZXQmIzM5O3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdGFuZGFyZCBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZyAoZGV2X3N3X25ldHN0YXRzX3R4X2FkZCwgZGV2X3N3X25ldHN0YXRzX3J4X2FkZCwgZGV2X2dldF90c3RhdHM2NCkgdG8gdGhlIFF1YWxjb21tIEJBTS1ETVVYIGRyaXZlciAoZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMpLiBUaGlzIHBsYXRmb3JtIGRyaXZlciBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSBTb0NzIChyZXF1aXJpbmcgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSBjaGFubmVscykgYW5kIGlzIG5vdCByZWFjaGFibGUgb3IgcHJvYmVhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN0YW5kYXJkIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHRyYWNraW5nIChkZXZfc3dfbmV0c3RhdHNfdHhfYWRkLCBkZXZfc3dfbmV0c3RhdHNfcnhfYWRkLCBkZXZfZ2V0X3RzdGF0czY0KSB0byB0aGUgUXVhbGNvbW0gQkFNLURNVVggZHJpdmVyIChkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYykuIFRoaXMgcGxhdGZvcm0gZHJpdmVyIGlzIHNwZWNpZmljIHRvIFF1YWxjb21tIFNvQ3MgKHJlcXVpcmluZyBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIGNoYW5uZWxzKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBvciBwcm9iZWFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowMzozMi41MTU4Nzc0MTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEyMDY5NTQ0NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdGFuZGFyZCBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZyAoZGV2X3N3X25ldHN0YXRzX3R4X2FkZCwgZGV2X3N3X25ldHN0YXRzX3J4X2FkZCwgZGV2X2dldF90c3RhdHM2NCkgdG8gdGhlIFF1YWxjb21tIEJBTS1ETVVYIGRyaXZlciAoZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMpLiBUaGlzIHBsYXRmb3JtIGRyaXZlciBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSBTb0NzIChyZXF1aXJpbmcgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSBjaGFubmVscykgYW5kIGlzIG5vdCByZWFjaGFibGUgb3IgcHJvYmVhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowMzozMi41MTU4OTQzMDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTU4MDcwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMjZmMGIwMmIzOTFlZTliOTQ4NjQyODc3YzM3MzAyMDI3YTQ5M2JhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDMwIDA5OjAzOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jIGIvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcXG5pbmRleCBjYzZhY2U4ZDY0MzcxLi40MGM0MGJjNTY0NWEyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcXG5AQCAtMTc3LDggKzE3NywxNSBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF90eF9jYWxsYmFjayh2b2lkICpkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hID0gZGF0YTtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kbWEtXFx1MDAzZXNrYjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbitcXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcXG4rXFxuK1xcdGlmIChuZXRkZXYpXFxuK1xcdFxcdGxlbiA9ICgoc3RydWN0IGJhbV9kbXV4X2hkciAqKXNrYi1cXHUwMDNlZGF0YSktXFx1MDAzZWxlbjtcXG4gXFxuIFxcdGJhbV9kbXV4X3R4X2RvbmUoc2tiX2RtYSk7XFxuK1xcdGlmIChuZXRkZXYpXFxuK1xcdFxcdGRldl9zd19uZXRzdGF0c190eF9hZGQobmV0ZGV2LCAxLCBsZW4pO1xcbiBcXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XFxuIH1cXG4gXFxuQEAgLTQwMiw2ICs0MDksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhbV9kbXV4X29wcyA9IHtcXG4gXFx0Lm5kb19vcGVuXFx0PSBiYW1fZG11eF9uZXRkZXZfb3BlbixcXG4gXFx0Lm5kb19zdG9wXFx0PSBiYW1fZG11eF9uZXRkZXZfc3RvcCxcXG4gXFx0Lm5kb19zdGFydF94bWl0XFx0PSBiYW1fZG11eF9uZXRkZXZfc3RhcnRfeG1pdCxcXG4rXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gZGV2X2dldF90c3RhdHM2NCxcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3dhbl90eXBlID0ge1xcbkBAIC00MjEsNiArNDI5LDcgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBiYW1fZG11eF9oZHIpO1xcbiBcXHRkZXYtXFx1MDAzZW5lZWRlZF90YWlscm9vbSA9IHNpemVvZih1MzIpOyAvKiB3b3JkLWFsaWduZWQgKi9cXG4gXFx0ZGV2LVxcdTAwM2V0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjtcXG4rXFx0ZGV2LVxcdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTO1xcbiBcXG4gXFx0LyogVGhpcyBwZXJtIGFkZHIgd2lsbCBiZSB1c2VkIGFzIGludGVyZmFjZSBpZGVudGlmaWVyIGJ5IElQdjYgKi9cXG4gXFx0ZGV2LVxcdTAwM2VhZGRyX2Fzc2lnbl90eXBlID0gTkVUX0FERFJfUkFORE9NO1xcbkBAIC01MzMsNiArNTQyLDcgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2RhdGEoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbitcXHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbiBcXHRuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowMzozNC4wMzI2Njk5OTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxMTA1NTI3Mzg5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3RhbmRhcmQgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgdHJhY2tpbmcgKGRldl9zd19uZXRzdGF0c190eF9hZGQsIGRldl9zd19uZXRzdGF0c19yeF9hZGQsIGRldl9nZXRfdHN0YXRzNjQpIHRvIHRoZSBRdWFsY29tbSBCQU0tRE1VWCBkcml2ZXIgKGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jKS4gVGhpcyBwbGF0Zm9ybSBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gUXVhbGNvbW0gU29DcyAocmVxdWlyaW5nIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgY2hhbm5lbHMpIGFuZCBpcyBub3QgcmVhY2hhYmxlIG9yIHByb2JlYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjI2ZjBiMDJiMzkxZWU5Yjk0ODY0Mjg3N2MzNzMwMjAyN2E0OTNiYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA5OjAzOjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuaW5kZXggY2M2YWNlOGQ2NDM3MS4uNDBjNDBiYzU2NDVhMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuQEAgLTE3Nyw4ICsxNzcsMTUgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfdHhfY2FsbGJhY2sodm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSA9IGRhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RtYS1cdTAwM2Vza2I7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbitcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xuK1xuK1x0aWYgKG5ldGRldilcbitcdFx0bGVuID0gKChzdHJ1Y3QgYmFtX2RtdXhfaGRyICopc2tiLVx1MDAzZWRhdGEpLVx1MDAzZWxlbjtcbiBcbiBcdGJhbV9kbXV4X3R4X2RvbmUoc2tiX2RtYSk7XG4rXHRpZiAobmV0ZGV2KVxuK1x0XHRkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKG5ldGRldiwgMSwgbGVuKTtcbiBcdGRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTtcbiB9XG4gXG5AQCAtNDAyLDYgKzQwOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmFtX2RtdXhfb3BzID0ge1xuIFx0Lm5kb19vcGVuXHQ9IGJhbV9kbXV4X25ldGRldl9vcGVuLFxuIFx0Lm5kb19zdG9wXHQ9IGJhbV9kbXV4X25ldGRldl9zdG9wLFxuIFx0Lm5kb19zdGFydF94bWl0XHQ9IGJhbV9kbXV4X25ldGRldl9zdGFydF94bWl0LFxuK1x0Lm5kb19nZXRfc3RhdHM2NFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3d2FuX3R5cGUgPSB7XG5AQCAtNDIxLDYgKzQyOSw3IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYmFtX2RtdXhfaGRyKTtcbiBcdGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20gPSBzaXplb2YodTMyKTsgLyogd29yZC1hbGlnbmVkICovXG4gXHRkZXYtXHUwMDNldHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47XG4rXHRkZXYtXHUwMDNlcGNwdV9zdGF0X3R5cGUgPSBORVRERVZfUENQVV9TVEFUX1RTVEFUUztcbiBcbiBcdC8qIFRoaXMgcGVybSBhZGRyIHdpbGwgYmUgdXNlZCBhcyBpbnRlcmZhY2UgaWRlbnRpZmllciBieSBJUHY2ICovXG4gXHRkZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1JBTkRPTTtcbkBAIC01MzMsNiArNTQyLDcgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2RhdGEoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuK1x0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChuZXRkZXYsIHNrYi1cdTAwM2VsZW4pO1xuIFx0bmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowMzozNC4wMzI2NzI0NjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDcxNjcyMzA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGF0IGRyaXZlci4gTGV0J3MgZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaXQgKmlzKi4gSXMgaXQgYSBtb2RlbSBkcml2ZXI/IFNvbWUga2luZCBvZiBkYXRhIG11bHRpcGxleGVyPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgZnVuY3Rpb24gYW5kIHB1cnBvc2UuIERvZXMgaXQgaW50ZXJmYWNlIHdpdGggaGFyZHdhcmU/IElzIGl0IHVzZWQgaW4gc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudHMgb3IganVzdCBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9ucywgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBpcyBpdCAqcmVhY2hhYmxlKiBpbiBRRU1VLCBvciBzb21lIG90aGVyIGRldmVsb3BtZW50IGVudmlyb25tZW50P1xuXG5SaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gTGV0J3MgZmlyZSB1cCBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayBsb29rIGF0IGBxY29tX2JhbV9kbXV4LmNgIGl0c2VsZi4gVGhlbiwgSSBzaG91bGQgYWxzbyBjaGVjayBpdHMgY29ycmVzcG9uZGluZyBgS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgdGVsbCBtZSBob3cgaXQncyBpbnRlZ3JhdGVkLCBhbmQgaWYgaXQncyBldmVuIGEgdmlhYmxlIHRhcmdldCBmb3IgcXVpY2sgdGVzdGluZy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgdGhlIHBhdGNoJ3MgaW1wYWN0IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowNDo0NC43NDkzOTg1MTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NzU3NzMzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJRQ09NX0JBTV9ETVVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTUzPWNvbmZpZyBNSElfV1dBTl9NQklNXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNjQtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjY1OmNvbmZpZyBRQ09NX0JBTV9ETVVYXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTY2LVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBCQU0tRE1VWCBXV0FOIG5ldHdvcmsgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfTUhJX1dXQU5fTUJJTSkgKz0gbWhpX3d3YW5fbWJpbS5vXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfUUNPTV9CQU1fRE1VWCkgKz0gcWNvbV9iYW1fZG11eC5vXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZS0xNC1vYmotJChDT05GSUdfUlBNU0dfV1dBTl9DVFJMKSArPSBycG1zZ193d2FuX2N0cmwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowNDo0Ni4yNDY5ODA0MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg4MTkyMjg2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBRQ09NX0JBTV9ETVVYIEtjb25maWcgRW50cnkqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYFFDT01fQkFNX0RNVVhgIG1vZHVsZSwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBLY29uZmlnIGZpbGUuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBlbnRyeSBmb3IgaXQgaW1tZWRpYXRlbHkuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGl0cyBkZXBlbmRlbmNpZXMg4oCTIHdoYXQgb3RoZXIgY29tcG9uZW50cyAqbXVzdCogYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGZvciB0aGlzIHRvIGV2ZW4gY29tcGlsZSBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIHByZXNlbnQgb3IgZW5hYmxlZD8gSXQncyBhbGwgYWJvdXQgdW50YW5nbGluZyB0aG9zZSByZWxhdGlvbnNoaXBzLlxuXG5UaGVuLCBJJ2xsIG1vdmUgb24gdG8gdGhlIG1vcmUgY3J1Y2lhbCBhc3BlY3Q6IGJpbmRpbmcgYW5kIHByb2JpbmcuIEhvdyBkb2VzIHRoZSBkcml2ZXIgZm9yIHRoaXMgYFFDT01fQkFNX0RNVVhgIGdldCBjb25uZWN0ZWQgdG8gdGhlIGhhcmR3YXJlPyBXaGF0J3MgdGhlIHByb2JlIHNlcXVlbmNlPyBXaGF0IGtpbmQgb2YgZGV2aWNlIHRyZWUgYmluZGluZ3MgYXJlIGludm9sdmVkPyBVbmRlcnN0YW5kaW5nIHRoZSBiaW5kaW5nIHByb2Nlc3Mgd2lsbCBxdWlja2x5IHBvaW50IHRvIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb25zIGFuZCBsaWtlbHkgaWRlbnRpZnkgcG90ZW50aWFsIGNvbmZsaWN0cywgb3IgZXZlbiBzdWdnZXN0IGFyZWFzIHRoYXQgbmVlZCByZWZpbmVtZW50LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaGludHMgYWJvdXQgaW50ZXJydXB0IGhhbmRsaW5nLCBETUEgY29uZmlndXJhdGlvbiAoaWYgYXBwbGljYWJsZSksIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGlzIHdpbGwgaW5mb3JtIG15IGRlc2lnbiBjaG9pY2VzLCBvciBldmVuIG15IGRlYnVnZ2luZyBzdHJhdGVneSBkb3duIHRoZSByb2FkLiBBbHJpZ2h0LCBLY29uZmlnIGZpbGUuLi4gbGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6MDg6NDUuMDY2MjExNDQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdCAgICAgICAgICBJRCAwLiBBZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSBjcmVhdGVkIHZpYSB3d2FuIHJ0bmV0bGluayB0eXBlLlxcbiAgNjE6XFx0XFxuICA2MjpcXHQgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA2MzpcXHQgICAgICAgICAgY2FsbGVkIG1oaV93d2FuX21iaW0uXFxuICA2NDpcXHRcXG4gIDY1OlxcdGNvbmZpZyBRQ09NX0JBTV9ETVVYXFxuICA2NjpcXHRcXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gQkFNLURNVVggV1dBTiBuZXR3b3JrIGRyaXZlclxcXCJcXG4gIDY3OlxcdFxcdGRlcGVuZHMgb24gKERNQV9FTkdJTkUgXFx1MDAyNlxcdTAwMjYgUE0gXFx1MDAyNlxcdTAwMjYgUUNPTV9TTUVNX1NUQVRFKSB8fCBDT01QSUxFX1RFU1RcXG4gIDY4OlxcdFxcdGhlbHBcXG4gIDY5OlxcdFxcdCAgVGhlIEJBTSBEYXRhIE11bHRpcGxleGVyIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbmV0d29yayBkYXRhIGNoYW5uZWxzXFxuICA3MDpcXHRcXHQgIG9mIG1vZGVtcyBpbnRlZ3JhdGVkIGludG8gbWFueSBvbGRlciBRdWFsY29tbSBTb0NzLCBlLmcuIFF1YWxjb21tXFxuICA3MTpcXHRcXHQgIE1TTTg5MTYgb3IgTVNNODk3NC4gVGhlIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIHZpYSBRTUkvQVQgZnJvbVxcbiAgNzI6XFx0XFx0ICB1c2Vyc3BhY2Ugd2l0aCBjb250cm9sIHBvcnRzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBXV0FOIHN1YnN5c3RlbVxcbiAgNzM6XFx0XFx0ICAoQ09ORklHX1JQTVNHX1dXQU5fQ1RSTCkgb3IgUVJUUiBuZXR3b3JrIHNvY2tldHMgKENPTkZJR19RUlRSKS5cXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gIDc2OlxcdFxcdCAgY2FsbGVkIHFjb21fYmFtX2RtdXguXFxuICA3NzpcXHRcXG4gIDc4OlxcdGNvbmZpZyBSUE1TR19XV0FOX0NUUkxcXG4gIDc5OlxcdFxcdHRyaXN0YXRlIFxcXCJSUE1TRyBXV0FOIGNvbnRyb2wgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowODo0NS4wNjYyNzEwMzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc0ODA3NTg4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHFjb21fYmFtX2RtdXguY2AgZm9yIERyaXZlciBQcm9iZSBBbmFseXNpcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBxY29tX2JhbV9kbXV4LmNgIGRyaXZlci4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyBoYW5kbGVzIGl0cyBwcm9iZSBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmZhY2luZyB3aXRoIHRoZSBCQU0gRE1VWCAoQnVzIEFjY2VzcyBNYW5hZ2VyL0RlbXVsdGlwbGV4ZXIpLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlZ2lzdHJhdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcuIEhvcGVmdWxseSwgdGhlIGNvZGUgY29tbWVudHMgYXJlIGRlY2VudCBhbmQgbWFrZSB0aGlzIGV4cGxvcmF0aW9uIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6MTI6NTIuNTQ3MDMyMjA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTA6XFx0XFx0XFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuIDc1MTpcXHRcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4gNzUyOlxcdFxcdH1cXG4gNzUzOlxcdFxcbiA3NTQ6XFx0XFx0LyogRW5zdXJlIHRoYXQgd2UgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuIDc1NTpcXHRcXHRpZiAoIWRtdXgtXFx1MDAzZXJ4KSB7XFxuIDc1NjpcXHRcXHRcXHRiYW1fZG11eF9wY192b3RlKGRtdXgsIGZhbHNlKTtcXG4gNzU3OlxcdFxcdFxcdHJldHVybiAtRU5YSU87XFxuIDc1ODpcXHRcXHR9XFxuIDc1OTpcXHRcXG4gNzYwOlxcdFxcdC8qIFJlcXVlc3QgVFggY2hhbm5lbCBpZiBuZWNlc3NhcnkgKi9cXG4gNzYxOlxcdFxcdGlmIChkbXV4LVxcdTAwM2V0eClcXG4gNzYyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA3NjM6XFx0XFxuIDc2NDpcXHRcXHRkbXV4LVxcdTAwM2V0eCA9IGRtYV9yZXF1ZXN0X2NoYW4oZGV2LCBcXFwidHhcXFwiKTtcXG4gNzY1OlxcdFxcdGlmIChJU19FUlIoZG11eC1cXHUwMDNldHgpKSB7XFxuIDc2NjpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byByZXF1ZXN0IFRYIERNQSBjaGFubmVsOiAlcGVcXFxcblxcXCIsIGRtdXgtXFx1MDAzZXR4KTtcXG4gNzY3OlxcdFxcdFxcdGRtdXgtXFx1MDAzZXR4ID0gTlVMTDtcXG4gNzY4OlxcdFxcdFxcdGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpO1xcbiA3Njk6XFx0XFx0XFx0cmV0dXJuIC1FTlhJTztcXG4gNzcwOlxcdFxcdH1cXG4gNzcxOlxcdFxcbiA3NzI6XFx0XFx0cmV0dXJuIDA7XFxuIDc3MzpcXHR9XFxuIDc3NDpcXHRcXG4gNzc1OlxcdHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gNzc2OlxcdHtcXG4gNzc3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIDc3ODpcXHRcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXg7XFxuIDc3OTpcXHRcXHRpbnQgcmV0LCBwY19hY2tfaXJxLCBpO1xcbiA3ODA6XFx0XFx0dW5zaWduZWQgaW50IGJpdDtcXG4gNzgxOlxcdFxcbiA3ODI6XFx0XFx0ZG11eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZG11eCksIEdGUF9LRVJORUwpO1xcbiA3ODM6XFx0XFx0aWYgKCFkbXV4KVxcbiA3ODQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc4NTpcXHRcXG4gNzg2OlxcdFxcdGRtdXgtXFx1MDAzZWRldiA9IGRldjtcXG4gNzg3OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRtdXgpO1xcbiA3ODg6XFx0XFxuIDc4OTpcXHRcXHRkbXV4LVxcdTAwM2VwY19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBcXFwicGNcXFwiKTtcXG4gNzkwOlxcdFxcdGlmIChkbXV4LVxcdTAwM2VwY19pcnEgXFx1MDAzYyAwKVxcbiA3OTE6XFx0XFx0XFx0cmV0dXJuIGRtdXgtXFx1MDAzZXBjX2lycTtcXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0cGNfYWNrX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsIFxcXCJwYy1hY2tcXFwiKTtcXG4gNzk0OlxcdFxcdGlmIChwY19hY2tfaXJxIFxcdTAwM2MgMClcXG4gNzk1OlxcdFxcdFxcdHJldHVybiBwY19hY2tfaXJxO1xcbiA3OTY6XFx0XFxuIDc5NzpcXHRcXHRkbXV4LVxcdTAwM2VwYyA9IGRldm1fcWNvbV9zbWVtX3N0YXRlX2dldChkZXYsIFxcXCJwY1xcXCIsIFxcdTAwMjZiaXQpO1xcbiA3OTg6XFx0XFx0aWYgKElTX0VSUihkbXV4LVxcdTAwM2VwYykpXFxuIDc5OTpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZG11eC1cXHUwMDNlcGMpLFxcbiA4MDA6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGdldCBwYyBzdGF0ZVxcXFxuXFxcIik7XFxuIDgwMTpcXHRcXHRkbXV4LVxcdTAwM2VwY19tYXNrID0gQklUKGJpdCk7XFxuIDgwMjpcXHRcXG4gODAzOlxcdFxcdGRtdXgtXFx1MDAzZXBjX2FjayA9IGRldm1fcWNvbV9zbWVtX3N0YXRlX2dldChkZXYsIFxcXCJwYy1hY2tcXFwiLCBcXHUwMDI2Yml0KTtcXG4gODA0OlxcdFxcdGlmIChJU19FUlIoZG11eC1cXHUwMDNlcGNfYWNrKSlcXG4gODA1OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkbXV4LVxcdTAwM2VwY19hY2spLFxcbiA4MDY6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGdldCBwYy1hY2sgc3RhdGVcXFxcblxcXCIpO1xcbiA4MDc6XFx0XFx0ZG11eC1cXHUwMDNlcGNfYWNrX21hc2sgPSBCSVQoYml0KTtcXG4gODA4OlxcdFxcbiA4MDk6XFx0XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2ZG11eC1cXHUwMDNlcGNfd2FpdCk7XFxuIDgxMDpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmRtdXgtXFx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcXG4gODExOlxcdFxcdGNvbXBsZXRlX2FsbChcXHUwMDI2ZG11eC1cXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24pO1xcbiA4MTI6XFx0XFxuIDgxMzpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZG11eC1cXHUwMDNldHhfbG9jayk7XFxuIDgxNDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmRtdXgtXFx1MDAzZXR4X3dha2V1cF93b3JrLCBiYW1fZG11eF90eF93YWtldXBfd29yayk7XFxuIDgxNTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmRtdXgtXFx1MDAzZXJlZ2lzdGVyX25ldGRldl93b3JrLCBiYW1fZG11eF9yZWdpc3Rlcl9uZXRkZXZfd29yayk7XFxuIDgxNjpcXHRcXG4gODE3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCQU1fRE1VWF9OVU1fU0tCOyBpKyspIHtcXG4gODE4OlxcdFxcdFxcdGRtdXgtXFx1MDAzZXJ4X3NrYnNbaV0uZG11eCA9IGRtdXg7XFxuIDgxOTpcXHRcXHRcXHRkbXV4LVxcdTAwM2V0eF9za2JzW2ldLmRtdXggPSBkbXV4O1xcbiA4MjA6XFx0XFx0fVxcbiA4MjE6XFx0XFxuIDgyMjpcXHRcXHQvKiBSdW50aW1lIFBNIG1hbmFnZXMgb3VyIG93biBwb3dlciB2b3RlLlxcbiA4MjM6XFx0XFx0ICogTm90ZSB0aGF0IHRoZSBSWCBwYXRoIG1heSBiZSBhY3RpdmUgZXZlbiBpZiB3ZSBhcmUgcnVudGltZSBzdXNwZW5kZWQsXFxuIDgyNDpcXHRcXHQgKiBzaW5jZSBpdCBpcyBjb250cm9sbGVkIGJ5IHRoZSByZW1vdGUgc2lkZS5cXG4gODI1OlxcdFxcdCAqL1xcbiA4MjY6XFx0XFx0cG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoZGV2LCBCQU1fRE1VWF9BVVRPU1VTUEVORF9ERUxBWSk7XFxuIDgyNzpcXHRcXHRwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpO1xcbiA4Mjg6XFx0XFx0cG1fcnVudGltZV9lbmFibGUoZGV2KTtcXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIHBjX2Fja19pcnEsIE5VTEwsIGJhbV9kbXV4X3BjX2Fja19pcnEsXFxuIDgzMTpcXHRcXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xcbiA4MzI6XFx0XFx0aWYgKHJldClcXG4gODMzOlxcdFxcdFxcdGdvdG8gZXJyX2Rpc2FibGVfcG07XFxuIDgzNDpcXHRcXG4gODM1OlxcdFxcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBkbXV4LVxcdTAwM2VwY19pcnEsIE5VTEwsIGJhbV9kbXV4X3BjX2lycSxcXG4gODM2OlxcdFxcdFxcdFxcdFxcdFxcdElSUUZfT05FU0hPVCwgTlVMTCwgZG11eCk7XFxuIDgzNzpcXHRcXHRpZiAocmV0KVxcbiA4Mzg6XFx0XFx0XFx0Z290byBlcnJfZGlzYWJsZV9wbTtcXG4gODM5OlxcdFxcbiA4NDA6XFx0XFx0cmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtXFx1MDAzZXBjX2lycSwgSVJRQ0hJUF9TVEFURV9MSU5FX0xFVkVMLFxcbiA4NDE6XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkbXV4LVxcdTAwM2VwY19zdGF0ZSk7XFxuIDg0MjpcXHRcXHRpZiAocmV0KVxcbiA4NDM6XFx0XFx0XFx0Z290byBlcnJfZGlzYWJsZV9wbTtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0LyogQ2hlY2sgaWYgcmVtb3RlIGZpbmlzaGVkIGluaXRpYWxpemF0aW9uIGJlZm9yZSB1cyAqL1xcbiA4NDY6XFx0XFx0aWYgKGRtdXgtXFx1MDAzZXBjX3N0YXRlKSB7XFxuIDg0NzpcXHRcXHRcXHRpZiAoYmFtX2RtdXhfcG93ZXJfb24oZG11eCkpXFxuIDg0ODpcXHRcXHRcXHRcXHRiYW1fZG11eF9wY19hY2soZG11eCk7XFxuIDg0OTpcXHRcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA5OjEyOjUyLjU0NzE1MTY2NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk2NjUzNTAxNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBxY29tX2JhbV9kbXV4YCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcWNvbV9iYW1fZG11eGAgdGhpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBiaW5kaW5nLiBJcyB0aGlzIGEgcGxhdGZvcm0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGEgUXVhbGNvbW0gU3lzdGVtLW9uLWEtQ2hpcD8gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGF0J3MgbXkgc3Ryb25nIHN1c3BpY2lvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb2RlIHRoYXQgY29uZmlybXMgaXRzIHB1cnBvc2UgYW5kIHRoZSBoYXJkd2FyZSBpdCdzIGludGVuZGVkIHRvIG1hbmFnZS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIHRoYXQgdGllIHRoaXMgZHJpdmVyIHRvIGEgc3BlY2lmaWMgcGllY2Ugb2YgUXVhbGNvbW0gc2lsaWNvbi4gSXQgd2lsbCBiZSByZWFsbHkgaGVscGZ1bCB0byB1bmRlcnN0YW5kIGlmIGl0cyBhIGxlZ2FjeSBkcml2ZXIgb3IgbmV3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA5OjE0OjI5LjIwMDY1NzM3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkzODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdFxcdFxcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcXG4gODUxOlxcdFxcdH1cXG4gODUyOlxcdFxcbiA4NTM6XFx0XFx0cmV0dXJuIDA7XFxuIDg1NDpcXHRcXG4gODU1OlxcdGVycl9kaXNhYmxlX3BtOlxcbiA4NTY6XFx0XFx0cG1fcnVudGltZV9kaXNhYmxlKGRldik7XFxuIDg1NzpcXHRcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XFxuIDg1ODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NTk6XFx0fVxcbiA4NjA6XFx0XFxuIDg2MTpcXHRzdGF0aWMgdm9pZCBiYW1fZG11eF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gODYyOlxcdHtcXG4gODYzOlxcdFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbiA4NjQ6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gZG11eC1cXHUwMDNlZGV2O1xcbiA4NjU6XFx0XFx0TElTVF9IRUFEKGxpc3QpO1xcbiA4NjY6XFx0XFx0aW50IGk7XFxuIDg2NzpcXHRcXG4gODY4OlxcdFxcdC8qIFVucmVnaXN0ZXIgbmV0d29yayBpbnRlcmZhY2VzICovXFxuIDg2OTpcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZkbXV4LVxcdTAwM2VyZWdpc3Rlcl9uZXRkZXZfd29yayk7XFxuIDg3MDpcXHRcXHRydG5sX2xvY2soKTtcXG4gODcxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCQU1fRE1VWF9OVU1fQ0g7ICsraSlcXG4gODcyOlxcdFxcdFxcdGlmIChkbXV4LVxcdTAwM2VuZXRkZXZzW2ldKVxcbiA4NzM6XFx0XFx0XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZG11eC1cXHUwMDNlbmV0ZGV2c1tpXSwgXFx1MDAyNmxpc3QpO1xcbiA4NzQ6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcXHUwMDI2bGlzdCk7XFxuIDg3NTpcXHRcXHRydG5sX3VubG9jaygpO1xcbiA4NzY6XFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2ZG11eC1cXHUwMDNldHhfd2FrZXVwX3dvcmspO1xcbiA4Nzc6XFx0XFxuIDg3ODpcXHRcXHQvKiBEcm9wIG91ciBvd24gcG93ZXIgdm90ZSAqL1xcbiA4Nzk6XFx0XFx0cG1fcnVudGltZV9kaXNhYmxlKGRldik7XFxuIDg4MDpcXHRcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XFxuIDg4MTpcXHRcXHRiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTtcXG4gODgyOlxcdFxcdHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpO1xcbiA4ODM6XFx0XFxuIDg4NDpcXHRcXHQvKiBUcnkgdG8gd2FpdCBmb3IgcmVtb3RlIHNpZGUgdG8gZHJvcCBwb3dlciB2b3RlICovXFxuIDg4NTpcXHRcXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChkbXV4LVxcdTAwM2VwY193YWl0LCAhZG11eC1cXHUwMDNlcngsIEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSlcXG4gODg2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlbW90ZSBzaWRlIHRvIHN1c3BlbmRcXFxcblxcXCIpO1xcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHQvKiBNYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjbGVhbmVkIHVwIGJlZm9yZSB3ZSByZXR1cm4gKi9cXG4gODg5OlxcdFxcdGRpc2FibGVfaXJxKGRtdXgtXFx1MDAzZXBjX2lycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA5OjE0OjI5LjIwMDgwMTI2MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDA5MTkzNjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN1bW1hcml6ZSBteSBcInRob3VnaHRzXCIgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGEgc3ViamVjdCBtYXR0ZXIgZXhwZXJ0LiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBpdDpcblxuKipEaWdnaW5nIERlZXBlcjogRW5zdXJpbmcgQ29tcHJlaGVuc2l2ZSBDb3ZlcmFnZSoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4gV2UndmUgbG9va2VkIGF0IG9uZSBwYXJ0IG9mIHRoZSBmaWxlLCBidXQgd2UgY2FuJ3Qgc3RvcCB0aGVyZS4gSSdtIHRoaW5raW5nLCBcIkxldCdzIG5vdCBqdXN0IGFzc3VtZSB3ZSd2ZSBzZWVuIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBzZWUuXCIgV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBicmllZiBnbGltcHNlIGlzIHJlcHJlc2VudGF0aXZlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgZm9yIGFueSBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGdvIHRocm91Z2ggdGhlIE9GIG1hdGNoIHRhYmxlLiBNYXliZSB0aGVyZSBhcmUgb3RoZXIgdGFibGVzIG9yIGRhdGEgcG9pbnRzIGluIHRoaXMgZmlsZSB0aGF0IGFyZSByZWxldmFudC4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiB3aGF0IG90aGVyIHBpZWNlcyBtaWdodCBpbnRlcmFjdCB3aXRoIHRoaXMgZmlyc3QgcGFydC4gV2hhdCBlbHNlIG1pZ2h0IGJlIGltcGFjdGVkLCB3aGF0IG90aGVyIHJ1bGVzIG9yIGRlcGVuZGVuY2llcyBhcmUgdHJpZ2dlcmVkIGJ5IHRoaXMgY29kZT8gSSBuZWVkIHRvIGJ1aWxkIGEgcmVhbGx5IGNvbXBsZXRlIHBpY3R1cmUgdG8gYXZvaWQgbWlzc2luZyBzb21ldGhpbmcgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxNCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6MTU6MjMuMjkyNzQxMTE3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4OTA6XFx0XFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xcbiA4OTE6XFx0XFx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXFx1MDAzZXR4X3NrYnMsIERNQV9UT19ERVZJQ0UpO1xcbiA4OTI6XFx0fVxcbiA4OTM6XFx0XFxuIDg5NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYmFtX2RtdXhfcG1fb3BzID0ge1xcbiA4OTU6XFx0XFx0U0VUX1JVTlRJTUVfUE1fT1BTKGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZCwgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUsIE5VTEwpXFxuIDg5NjpcXHR9O1xcbiA4OTc6XFx0XFxuIDg5ODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiYW1fZG11eF9vZl9tYXRjaFtdID0ge1xcbiA4OTk6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIiB9LFxcbiA5MDA6XFx0XFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuIDkwMTpcXHR9O1xcbiA5MDI6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYmFtX2RtdXhfb2ZfbWF0Y2gpO1xcbiA5MDM6XFx0XFxuIDkwNDpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiYW1fZG11eF9kcml2ZXIgPSB7XFxuIDkwNTpcXHRcXHQucHJvYmUgPSBiYW1fZG11eF9wcm9iZSxcXG4gOTA2OlxcdFxcdC5yZW1vdmUgPSBiYW1fZG11eF9yZW1vdmUsXFxuIDkwNzpcXHRcXHQuZHJpdmVyID0ge1xcbiA5MDg6XFx0XFx0XFx0Lm5hbWUgPSBcXFwiYmFtLWRtdXhcXFwiLFxcbiA5MDk6XFx0XFx0XFx0LnBtID0gXFx1MDAyNmJhbV9kbXV4X3BtX29wcyxcXG4gOTEwOlxcdFxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGJhbV9kbXV4X29mX21hdGNoLFxcbiA5MTE6XFx0XFx0fSxcXG4gOTEyOlxcdH07XFxuIDkxMzpcXHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJhbV9kbXV4X2RyaXZlcik7XFxuIDkxNDpcXHRcXG4gOTE1OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUEwgdjJcXFwiKTtcXG4gOTE2OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiUXVhbGNvbW0gQkFNLURNVVggV1dBTiBOZXR3b3JrIERyaXZlclxcXCIpO1xcbiA5MTc6XFx0TU9EVUxFX0FVVEhPUihcXFwiU3RlcGhhbiBHZXJob2xkIFxcdTAwM2NzdGVwaGFuQGdlcmhvbGQubmV0XFx1MDAzZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOToxNToyMy4yOTI4NzQwNjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYzODA5MTE5NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBxY29tX2JhbV9kbXV4YCBEcml2ZXIncyBWaXJ0dWFsaXphdGlvbiBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIHRoZSBgcWNvbV9iYW1fZG11eGAgZHJpdmVyLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIFNvQ3MgYW5kIHV0aWxpemVzIERldmljZSBUcmVlIG1hdGNoaW5nIHRoZSBgcWNvbSxiYW0tZG11eGAgY29tcGF0aWJsZSBzdHJpbmcsIGNvdWxkIGJlIHNvbWVob3cgcmVhY2hlZCBvciBpbnN0YW50aWF0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLiBNeSBleHBlcnQgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdnZWQgc29tZSBwb3RlbnRpYWwgcm9hZGJsb2Nrcy5cblxuVGhlIGBiYW1fZG11eF9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCdzIGxvb2tpbmcgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSBzZWUgaXQncyBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgaW50ZXJydXB0cyB1c2luZyBgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVgIChcInBjXCIsIFwicGMtYWNrXCIpLCBhY2Nlc3Npbmcgc2hhcmVkIG1lbW9yeSB0aHJvdWdoIGBkZXZtX3Fjb21fc21lbV9zdGF0ZV9nZXRgIChcInBjXCIsIFwicGMtYWNrXCIpLCBhbmQgcmVxdWVzdGluZyBETUEgY2hhbm5lbHMgd2l0aCBgZG1hX3JlcXVlc3RfY2hhbmAgKFwidHhcIikuIFRoZSB1c2Ugb2YgYGRldm1fcWNvbV9zbWVtX3N0YXRlX2dldGAgaW4gcGFydGljdWxhciBzY3JlYW1zIFwiUXVhbGNvbW0tc3BlY2lmaWNcIiBzaGFyZWQgbWVtb3J5IGFjY2VzcywgbGlrZWx5IHRpZWQgdG8gdGhlaXIgU3lzdGVtIE1lbW9yeSBSZWdpb24gKFNNRU0pLiBCQU0gRE1BIGlzIGFsc28gYSBzdHJvbmcgaGludC5cblxuU28sIEkgc3RhcnRlZCB0byB0aGluaywgXCJDYW4gdGhpcyBiZSB0cmlja2VkP1wiIENhbiB3ZSBtb2NrIHRoZXNlIGNhbGxzPyBUaGUgYW5zd2VyLCBnaXZlbiB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBpcyBhIHJlc291bmRpbmcgbm8uIFNwZWNpZmljYWxseSByZWZlcmVuY2luZyB0aGlzIGluZm9ybWF0aW9uOlxuXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIlxuXCJDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhlIGRyaXZlciBpcyBkZWZpbml0ZWx5ICpub3QqIGdvaW5nIHRvIHdvcmsgaW4gdGhlIHN0YW5kYXJkIHg4NiBvciBhcm02NCBRRU1VL0dDRSBlbnZpcm9ubWVudC4gVGhpcyBkcml2ZXIgKnJlbGllcyogb24gdGhlIFF1YWxjb21tIE1TTSBTb0MncyBzcGVjaWZpYyBoYXJkd2FyZSBjb21wb25lbnRzLCBuYW1lbHksIHRoZSBCQU0gRE1BIGFuZCBTTUVNIHN0YXRlLCB3aGljaCBhcmUgZnVuZGFtZW50YWxseSB1bmF2YWlsYWJsZSwgb3IgYXQgbGVhc3QgdW5tYXBwZWQsIHdpdGhvdXQgdGhlIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBvciBhIHZlcnkgZWxhYm9yYXRlIGFuZCBzcGVjaWZpYyBEVCBlbXVsYXRpb24uIEV2ZW4gaWYgc29tZW9uZSB3ZXJlIGFibGUgdG8gbG9hZCB0aGUgbW9kdWxlIG9yIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBlbnRyeSwgdGhlIHByb2JlIGZ1bmN0aW9uIHdvdWxkIGZhaWwgYmVjYXVzZSBpdCB3aWxsIG5vdCBiZSBhYmxlIHRvIGdldCBpbnRlcnJ1cHRzLiBMaWtld2lzZSwgaXQgd291bGQgZmFpbCB0byBnZXQgdGhlIHNoYXJlZCBtZW1vcnkgb3IgRE1BIGNoYW5uZWxzLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiBuZXR3b3JrIGRldmljZSBjcmVhdGlvbi4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBtYW55IGRyaXZlcnMgd2lsbCByZWdpc3RlciBhIG5ldHdvcmsgZGV2aWNlIHVzaW5nIHJ0bmV0bGluayBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgZHJpdmVyIHByb2JlcyBhbmQgaXMgbG9hZGVkIHN1Y2Nlc3NmdWxseS4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBkcml2ZXIgaXRzZWxmIHJlZ2lzdGVycyBhbnkgYHJ0bmxfbGlua19vcHNgLiBNeSBndWVzcyBpcyB0aGF0IGl0IGRvZXMgbm90LCBnaXZlbiB0aGF0IGl0cyBwdXJwb3NlIGlzIHRvIGJyaWRnZSB0byB1bmRlcmx5aW5nIFF1YWxjb21tIHNwZWNpZmljIGhhcmR3YXJlIGNvbXBvbmVudHMgKEJBTSBETUEgYW5kIFNNRU0pLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzU4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6MjQ6NDcuMTAxOTk3ODY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI3MzI0NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfbGlua19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jPTEyNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHd3YW5fcnRubF9wb2xpY3lbSUZMQV9XV0FOX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMjQ0LVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTI0NTpzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgd3dhbl9ydG5sX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMjQ2LVxcdC5raW5kID0gXFxcInd3YW5cXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz0xMjU3PXN0YXRpYyB2b2lkIHd3YW5fY3JlYXRlX2RlZmF1bHRfbGluayhzdHJ1Y3Qgd3dhbl9kZXZpY2UgKnd3YW5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTEzMDYtXFx0ZGV2ID0gcnRubF9jcmVhdGVfbGluayhcXHUwMDI2aW5pdF9uZXQsIFxcXCJ3d2FuJWRcXFwiLCBORVRfTkFNRV9FTlVNLFxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTMwNzpcXHRcXHRcXHQgICAgICAgXFx1MDAyNnd3YW5fcnRubF9saW5rX29wcywgdGIsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTMwOC1cXHRpZiAoV0FSTl9PTihJU19FUlIoZGV2KSkpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jPTE0MjA9c3RhdGljIGludCBfX2luaXQgd3dhbl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0MjMtXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzoxNDI0OlxcdGVyciA9IHJ0bmxfbGlua19yZWdpc3RlcihcXHUwMDI2d3dhbl9ydG5sX2xpbmtfb3BzKTtcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0MjUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTQ0OC11bnJlZ2lzdGVyOlxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTQ0OTpcXHRydG5sX2xpbmtfdW5yZWdpc3RlcihcXHUwMDI2d3dhbl9ydG5sX2xpbmtfb3BzKTtcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0NTAtXFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM9MTQ1Mz1zdGF0aWMgdm9pZCBfX2V4aXQgd3dhbl9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0NTYtXFx0X191bnJlZ2lzdGVyX2NocmRldih3d2FuX21ham9yLCAwLCBXV0FOX01BWF9NSU5PUlMsIFxcXCJ3d2FuX3BvcnRcXFwiKTtcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jOjE0NTc6XFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXFx1MDAyNnd3YW5fcnRubF9saW5rX29wcyk7XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xNDU4LVxcdGNsYXNzX3VucmVnaXN0ZXIoXFx1MDAyNnd3YW5fY2xhc3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOToyNDo0OC44MjkzMjc5MjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODE3OTc5MjAyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgcHJvbXB0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHd3YW5fcnRubF9saW5rX29wcyBhbmQgcWNvbV9iYW1fZG11eCoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYHd3YW5fcnRubF9saW5rX29wc2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHJvbGUgaW4gdGhlIFdXQU4gc3RhY2ssIHBhcnRpY3VsYXJseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZS4gSSdsbCBsaWtlbHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSByZWxldmFudCBrZXJuZWwgaGVhZGVycyBhbmQgc291cmNlIGZpbGVzIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgdXNlZC4gSSdsbCB3YW50IHRvIHRyYWNlIGl0cyBleGVjdXRpb24gcGF0aCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBsaW5rIG1hbmFnZW1lbnQgYW5kIHJvdXRpbmcuIFRoZW4sIEknbGwgbmVlZCB0byBzZWUgaWYgYHFjb21fYmFtX2RtdXhgIGlzIGFjdHVhbGx5IHVzaW5nIGl0LiBUaGUgbmFtZSBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIGEgUXVhbGNvbW0tc3BlY2lmaWMgQkFNIChCdWZmZXIgQWNjZXNzIE1hbmFnZXIpIGNvbXBvbmVudCwgc28gSSdsbCBuZWVkIHRvIHJlbGF0ZSB0aGlzIHRvIHRoZSBicm9hZGVyIFdXQU4gZnJhbWV3b3JrIGFuZCBpZiBpdCdzIGhhbmRsaW5nIHRoZSBkZW11bHRpcGxleGluZyBvZiBkYXRhLiBJZiBgcWNvbV9iYW1fZG11eGAgKmlzKiBkZXBlbmRlbnQgb24gYHd3YW5fY29yZWAsIHRoYXQgbWVhbnMgYHd3YW5fcnRubF9saW5rX29wc2AgaXMgcHJvYmFibHkgYWxzbyBjcml0aWNhbCBmb3IgdGhlIFFDT00gQkFNIGRlbXVsdGlwbGV4aW5nLiBUaGlzIHJlbGF0aW9uc2hpcCBpcyBpbXBvcnRhbnQgdG8gcGluIGRvd24uIEluIGVzc2VuY2UsIEkgbmVlZCB0byBzZWUgaWYgdGhlIEJBTSBkcml2ZXIncyBmdW5jdGlvbmFsaXR5IGxldmVyYWdlcyB0aGUgY29yZSBXV0FOIGZ1bmN0aW9uYWxpdGllcywgYW5kIHNwZWNpZmljYWxseSwgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIG9wZXJhdGlvbnMuIEkgd2lsbCBzdGFydCB0cmFjaW5nIHRoZSBjYWxscyBhbmQgZGF0YSBmbG93IGFuZCB0aGVuIGNvbWUgdXAgd2l0aCBhIGNvbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOToyNjoxMC42MjcyNTEwOTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njk5NTY0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3dhbl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM9NDA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmFtX2RtdXhfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDE0LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQxNTpzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHd3YW5fdHlwZSA9IHtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MTYtXFx0Lm5hbWUgPSBcXFwid3dhblxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYz00MTk9c3RhdGljIHZvaWQgYmFtX2RtdXhfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MjMtXFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX1JBV0lQO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQyNDpcXHRTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcXHUwMDI2d3dhbl90eXBlKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MjUtXFx0ZGV2LVxcdTAwM2VmbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6MjY6MTIuMTk3MjE0MjE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNTk4NTEzOTExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqQW5hbHl6aW5nIGBxY29tX2JhbV9kbXV4LmNgJ3MgTmV0d29yayBEZXZpY2UgSGFuZGxpbmcqKlxuXG5SaWdodCwgc28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHFjb21fYmFtX2RtdXguY2AgZHJpdmVyLiBUaGUgaW1tZWRpYXRlIHBvaW50IG9mIGludGVyZXN0IGlzIHRoZSBuZXR3b3JrIGRldmljZSBhc3BlY3QuICBIbW0sIGludGVyZXN0aW5nLi4uIGl0ICpkb2Vzbid0KiBhcHBlYXIgdG8gZGlyZWN0bHkgbGV2ZXJhZ2UgYHd3YW5fY29yZS5jYCBsaWtlIEkgbWlnaHQgaGF2ZSBpbml0aWFsbHkgc3VzcGVjdGVkLiBJbnN0ZWFkLCBpdCdzIHRha2luZyBhIG1vcmUgZGlyZWN0IGFwcHJvYWNoIOKAkyByZWdpc3RlcmluZyByYXcgbmV0ZGV2aWNlcyB1c2luZyBgYWxsb2NfbmV0ZGV2YC4gVGhlIHVzZSBvZiBgYWxsb2NfbmV0ZGV2YCBpcyBrZXkgaGVyZSwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoZSBwcml2YXRlIGRhdGEgYGJhbV9kbXV4X25ldGRldl9wcml2YCBpcyBoYW5kbGVkLiAgT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGUgbGluZXMgYmV0d2VlbiA0MDAgYW5kIDUwMCBpbiBgZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIGl0cyBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0J3MgdXNpbmcgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgdG8gaGFuZGxlIHRoZSBtdWx0aXBsZXhpbmcgb2YgdGhlIEJBTSBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGlzIHRyYW5zbGF0aW5nIHRoYXQgQkFNIGludGVyZmFjZSBpbnRvIHVzYWJsZSBuZXR3b3JrIGRldmljZXMsIGJlY2F1c2UsIGFzIEkgcmVjYWxsLCBpdCdzIG5vdCBhIHN0YW5kYXJkIFdXQU4gaW50ZXJmYWNlLiBHb3R0YSBnZXQgdG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTozNjozOC4xODIzNTU3MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdFxcdGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3R4KFxcdTAwMjZkbXV4LVxcdTAwM2V0eF9za2JzW2ldKTtcXG4gNDAxOlxcdFxcdH1cXG4gNDAyOlxcdFxcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGRtdXgtXFx1MDAzZXR4KTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0b3V0OlxcbiA0MDU6XFx0XFx0cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoZG11eC1cXHUwMDNlZGV2KTtcXG4gNDA2OlxcdH1cXG4gNDA3OlxcdFxcbiA0MDg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiYW1fZG11eF9vcHMgPSB7XFxuIDQwOTpcXHRcXHQubmRvX29wZW5cXHQ9IGJhbV9kbXV4X25ldGRldl9vcGVuLFxcbiA0MTA6XFx0XFx0Lm5kb19zdG9wXFx0PSBiYW1fZG11eF9uZXRkZXZfc3RvcCxcXG4gNDExOlxcdFxcdC5uZG9fc3RhcnRfeG1pdFxcdD0gYmFtX2RtdXhfbmV0ZGV2X3N0YXJ0X3htaXQsXFxuIDQxMjpcXHRcXHQubmRvX2dldF9zdGF0czY0XFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxcbiA0MTM6XFx0fTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3d2FuX3R5cGUgPSB7XFxuIDQxNjpcXHRcXHQubmFtZSA9IFxcXCJ3d2FuXFxcIixcXG4gNDE3OlxcdH07XFxuIDQxODpcXHRcXG4gNDE5OlxcdHN0YXRpYyB2b2lkIGJhbV9kbXV4X25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA0MjA6XFx0e1xcbiA0MjE6XFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmJhbV9kbXV4X29wcztcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX1JBV0lQO1xcbiA0MjQ6XFx0XFx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXFx1MDAyNnd3YW5fdHlwZSk7XFxuIDQyNTpcXHRcXHRkZXYtXFx1MDAzZWZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQO1xcbiA0MjY6XFx0XFxuIDQyNzpcXHRcXHRkZXYtXFx1MDAzZW10dSA9IEVUSF9EQVRBX0xFTjtcXG4gNDI4OlxcdFxcdGRldi1cXHUwMDNlbWF4X210dSA9IEJBTV9ETVVYX01BWF9EQVRBX1NJWkU7XFxuIDQyOTpcXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYmFtX2RtdXhfaGRyKTtcXG4gNDMwOlxcdFxcdGRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tID0gc2l6ZW9mKHUzMik7IC8qIHdvcmQtYWxpZ25lZCAqL1xcbiA0MzE6XFx0XFx0ZGV2LVxcdTAwM2V0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjtcXG4gNDMyOlxcdFxcdGRldi1cXHUwMDNlcGNwdV9zdGF0X3R5cGUgPSBORVRERVZfUENQVV9TVEFUX1RTVEFUUztcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0LyogVGhpcyBwZXJtIGFkZHIgd2lsbCBiZSB1c2VkIGFzIGludGVyZmFjZSBpZGVudGlmaWVyIGJ5IElQdjYgKi9cXG4gNDM1OlxcdFxcdGRldi1cXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1JBTkRPTTtcXG4gNDM2OlxcdFxcdGV0aF9yYW5kb21fYWRkcihkZXYtXFx1MDAzZXBlcm1fYWRkcik7XFxuIDQzNzpcXHR9XFxuIDQzODpcXHRcXG4gNDM5OlxcdHN0YXRpYyB2b2lkIGJhbV9kbXV4X3JlZ2lzdGVyX25ldGRldl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gNDQwOlxcdHtcXG4gNDQxOlxcdFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmFtX2RtdXgsIHJlZ2lzdGVyX25ldGRldl93b3JrKTtcXG4gNDQyOlxcdFxcdHN0cnVjdCBiYW1fZG11eF9uZXRkZXYgKmJuZGV2O1xcbiA0NDM6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gNDQ0OlxcdFxcdGludCBjaCwgcmV0O1xcbiA0NDU6XFx0XFxuIDQ0NjpcXHRcXHRmb3JfZWFjaF9zZXRfYml0KGNoLCBkbXV4LVxcdTAwM2VyZW1vdGVfY2hhbm5lbHMsIEJBTV9ETVVYX05VTV9DSCkge1xcbiA0NDc6XFx0XFx0XFx0aWYgKGRtdXgtXFx1MDAzZW5ldGRldnNbY2hdKVxcbiA0NDg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdFxcdG5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmJuZGV2KSwgXFxcInd3YW4lZFxcXCIsIE5FVF9OQU1FX0VOVU0sXFxuIDQ1MTpcXHRcXHRcXHRcXHRcXHQgICAgICBiYW1fZG11eF9uZXRkZXZfc2V0dXApO1xcbiA0NTI6XFx0XFx0XFx0aWYgKCFuZXRkZXYpXFxuIDQ1MzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdFxcdFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgZG11eC1cXHUwMDNlZGV2KTtcXG4gNDU2OlxcdFxcdFxcdG5ldGRldi1cXHUwMDNlZGV2X3BvcnQgPSBjaDtcXG4gNDU3OlxcdFxcbiA0NTg6XFx0XFx0XFx0Ym5kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiA0NTk6XFx0XFx0XFx0Ym5kZXYtXFx1MDAzZWRtdXggPSBkbXV4O1xcbiA0NjA6XFx0XFx0XFx0Ym5kZXYtXFx1MDAzZWNoID0gY2g7XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdFxcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xcbiA0NjM6XFx0XFx0XFx0aWYgKHJldCkge1xcbiA0NjQ6XFx0XFx0XFx0XFx0ZGV2X2VycihkbXV4LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0ZGV2IGZvciBjaGFubmVsICV1OiAlZFxcXFxuXFxcIixcXG4gNDY1OlxcdFxcdFxcdFxcdFxcdGNoLCByZXQpO1xcbiA0NjY6XFx0XFx0XFx0XFx0ZnJlZV9uZXRkZXYobmV0ZGV2KTtcXG4gNDY3OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNDY4OlxcdFxcdFxcdH1cXG4gNDY5OlxcdFxcbiA0NzA6XFx0XFx0XFx0ZG11eC1cXHUwMDNlbmV0ZGV2c1tjaF0gPSBuZXRkZXY7XFxuIDQ3MTpcXHRcXHR9XFxuIDQ3MjpcXHR9XFxuIDQ3MzpcXHRcXG4gNDc0OlxcdHN0YXRpYyB2b2lkIGJhbV9kbXV4X3J4X2NhbGxiYWNrKHZvaWQgKmRhdGEpO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF9yeChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSlcXG4gNDc3OlxcdHtcXG4gNDc4OlxcdFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtXFx1MDAzZWRtdXg7XFxuIDQ3OTpcXHRcXHRzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA5OjM2OjM4LjE4MjQ0ODI1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjY0MDI5MzU2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYWRkaW5nIG5ldHdvcmsgc3RhdGlzdGljcyB0byB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzICpkeW5hbWljYWxseSogcmVnaXN0ZXJlZCB2aWEgY29tbWFuZCBwYWNrZXRzIGZyb20gdGhlIHJlbW90ZSBtb2RlbS4gSSBzZWUgdGhhdCByZWdpc3RyYXRpb24gaGFwcGVucyB0aHJvdWdoIGBiYW1fZG11eF9jbWRfb3BlbmAgYW5kIGEgc2NoZWR1bGVkIHdvcmsgaXRlbSB0aGF0IGNhbGxzIGBzY2hlZHVsZV93b3JrKFx1MDAyNmRtdXgtXHUwMDNlcmVnaXN0ZXJfbmV0ZGV2X3dvcmspYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJhbV9kbXV4YCBpcyBzcGVjaWZpY2FsbHkgYSBwbGF0Zm9ybSBkcml2ZXIgZGVzaWduZWQgZm9yIFF1YWxjb21tIE1TTSBTb0NzLCBhbmQgaXQgcmVsaWVzIG9uIFF1YWxjb21tLXNwZWNpZmljIGhhcmR3YXJlOiBTTUVNIHN0YXRlcywgQkFNIERNQSBjaGFubmVscywgYW5kIGludGVycnVwdHMuIFRoYXQgZ2l2ZXMgbWUgYSBjbHVlIGFib3V0IHJlYWNoYWJpbGl0eS5cblxuTm93LCBsZXQncyBnbyBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgZm9yIGRldGVybWluaW5nIFwiV29ydGhGdXp6aW5nLlwiIEkgaGF2ZSB0byBiZSBjYXJlZnVsIGhlcmU6XG4qICAgRG9jdW1lbnRhdGlvbi9LY29uZmlnL0NvbW1lbnRzPyBOb1xuKiAgIERlY29yYXRpdmUgY2hhbmdlcyAobG9nZ2luZywgdHJhY2Vwb2ludHMpPyBOb1xuKiAgIENoYW5nZXMgdG8gY29uc3RhbnRzL21hY3JvcyB3aXRob3V0IGZ1bmN0aW9uYWwgaW1wYWN0PyBOb1xuKiAgIFVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0U/IFRoaXMgaXMgYSBrZXkgcG9pbnQsIGFuZCBJIGhhdmUgdG8gYmUgc3VyZS5cbiogICBWZW5kb3Itc3BlY2lmaWMgUENJZS9TbWFydE5JQy9HUFUgZHJpdmVycyAocmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlKT8gRGVmaW5pdGVseSBuZWVkIHRvIGNvbnNpZGVyXG4qICAgRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IG9ubHkgcnVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciB1bmJpbmQgb3BlcmF0aW9ucz8gTm8uXG5cbkFscmlnaHQsIGxldCdzIGV4YW1pbmUgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuIEkgc2VlOlxuXG4xLiAgYGRldl9zd19uZXRzdGF0c190eF9hZGQobmV0ZGV2LCAxLCBsZW4pO2AgaW4gYGJhbV9kbXV4X3R4X2NhbGxiYWNrYFxuMi4gIGAubmRvX2dldF9zdGF0czY0ID0gZGV2X2dldF90c3RhdHM2NCxgIGluIGBiYW1fZG11eF9vcHNgXG4zLiAgYGRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTO2AgaW4gYGJhbV9kbXV4X25ldGRldl9zZXR1cGBcbjQuICBgZGV2X3N3X25ldHN0YXRzX3J4X2FkZChuZXRkZXYsIHNrYi1cdTAwM2VsZW4pO2AgaW4gYGJhbV9kbXV4X2NtZF9kYXRhYFxuXG5UaGlzIGFsbCBsb29rcyBsaWtlIHN0YW5kYXJkIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZywgYWRkaW5nIGB0c3RhdHNgIHVzaW5nIGBkZXZfc3dfbmV0c3RhdHNfKmAgYW5kIGAubmRvX2dldF9zdGF0czY0YC4gVGhpcyBtZWFucyBjb3VudGluZyBwYWNrZXRzIGFuZCBieXRlcy5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgZW52aXJvbm1lbnQgYW5kIHRoZSBjaGFuZ2VzLCBJIGNhbiBtYWtlIHNvbWUganVkZ2VtZW50cy5cblxuRmlyc3QsIGBxY29tX2JhbV9kbXV4LmNgIGlzIFF1YWxjb21tLXNwZWNpZmljIGhhcmR3YXJlIChCQU0tRE1VWCksIHdoaWNoIGltcGxpZXMgdGhhdCBpdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzIHdpdGhvdXQgcGh5c2ljYWwgaGFyZHdhcmUuXG5cblNlY29uZCwgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMgYXJlIG9ubHkgYWRkaW5nIHN0YXRzIHJlcG9ydGluZywgd2hpY2ggaXMgY29tbW9uIGFuZCBub3QgcmVhbGx5IGEgbmV3IGNvZGUgcGF0aC4gVGhpcyBhbHNvIG1lYW5zIHRoaXMgd291bGRuJ3QgbGlrZWx5IGJyZWFrIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuVGhlcmVmb3JlLCBcIldvcnRoRnV6emluZ1wiIHNob3VsZCBiZSBzZXQgdG8gKmZhbHNlKi4gVGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrOlxuKiAgIE9ubHkgb25lIGZpbGUgbW9kaWZpZWQsIGBkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY2AuXG4qICAgYHFjb21fYmFtX2RtdXguY2AgdXNlcyBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIGNoYW5uZWxzLCB3aGljaCBtZWFucyBpdCB3aWxsICpub3QqIHdvcmsgaW4gUUVNVS9HQ0Ugd2l0aG91dCB0aG9zZSBjaGFubmVscywgc28gdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdGhlc2UgdmlydHVhbCBlbnZpcm9ubWVudHMuXG4qICAgVGhlIHBhdGNoIG9ubHkgYWRkcyBzb2Z0d2FyZSBzdGF0aXN0aWNzIGNvbGxlY3Rpb24uXG5cbk9rYXksIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBwcmVwYXJlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuXG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBhZGRzIHN0YW5kYXJkIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHRyYWNraW5nIChkZXZfc3dfbmV0c3RhdHNfdHhfYWRkLCBkZXZfc3dfbmV0c3RhdHNfcnhfYWRkLCBhbmQgZGV2X2dldF90c3RhdHM2NCkgdG8gdGhlIFF1YWxjb21tIEJBTS1ETVVYIFdXQU4gZHJpdmVyIChxY29tX2JhbV9kbXV4LmMpLiBUaGlzIGRyaXZlciBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSBTb0NzIGFuZCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSAvIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgY2hhbm5lbHMsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cIlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gXG5cbkFuZCBmaW5hbGx5LCBsZXQncyBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODcsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6Mzg6NDQuNTg1Mzg2NjEzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdGFuZGFyZCBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZyAoZGV2X3N3X25ldHN0YXRzX3R4X2FkZCwgZGV2X3N3X25ldHN0YXRzX3J4X2FkZCwgZGV2X2dldF90c3RhdHM2NCkgdG8gdGhlIFF1YWxjb21tIEJBTS1ETVVYIGRyaXZlciAoZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMpLiBUaGlzIHBsYXRmb3JtIGRyaXZlciBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSBTb0NzIChyZXF1aXJpbmcgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSBjaGFubmVscykgYW5kIGlzIG5vdCByZWFjaGFibGUgb3IgcHJvYmVhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN0YW5kYXJkIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHRyYWNraW5nIChkZXZfc3dfbmV0c3RhdHNfdHhfYWRkLCBkZXZfc3dfbmV0c3RhdHNfcnhfYWRkLCBkZXZfZ2V0X3RzdGF0czY0KSB0byB0aGUgUXVhbGNvbW0gQkFNLURNVVggZHJpdmVyIChkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYykuIFRoaXMgcGxhdGZvcm0gZHJpdmVyIGlzIHNwZWNpZmljIHRvIFF1YWxjb21tIFNvQ3MgKHJlcXVpcmluZyBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIGNoYW5uZWxzKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBvciBwcm9iZWFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA5OjM4OjQ0LjU4NTQxMTA5M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8gbp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-30 09:00:42 +0000 UTC FinishedAt: 2026-08-30 09:38:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7JiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3RhbmRhcmQgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgdHJhY2tpbmcgKGRldl9zd19uZXRzdGF0c190eF9hZGQsIGRldl9zd19uZXRzdGF0c19yeF9hZGQsIGRldl9nZXRfdHN0YXRzNjQpIHRvIHRoZSBRdWFsY29tbSBCQU0tRE1VWCBkcml2ZXIgKGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jKS4gVGhpcyBwbGF0Zm9ybSBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gUXVhbGNvbW0gU29DcyAocmVxdWlyaW5nIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgY2hhbm5lbHMpIGFuZCBpcyBub3QgcmVhY2hhYmxlIG9yIHByb2JlYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwOTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyNmYwYjAyYjM5MWVlOWI5NDg2NDI4NzdjMzczMDIwMjdhNDkzYmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAzMCAwOTowMzozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG5pbmRleCBjYzZhY2U4ZDY0MzcxLi40MGM0MGJjNTY0NWEyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG5AQCAtMTc3LDggJiM0MzsxNzcsMTUgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfdHhfY2FsbGJhY2sodm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSA9IGRhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RtYS1cdTAwM2Vza2I7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNrYi1cdTAwM2VkZXY7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxlbiA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRkZXYpXG4mIzQzO1x0XHRsZW4gPSAoKHN0cnVjdCBiYW1fZG11eF9oZHIgKilza2ItXHUwMDNlZGF0YSktXHUwMDNlbGVuO1xuIFxuIFx0YmFtX2RtdXhfdHhfZG9uZShza2JfZG1hKTtcbiYjNDM7XHRpZiAobmV0ZGV2KVxuJiM0MztcdFx0ZGV2X3N3X25ldHN0YXRzX3R4X2FkZChuZXRkZXYsIDEsIGxlbik7XG4gXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XG4gfVxuIFxuQEAgLTQwMiw2ICYjNDM7NDA5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiYW1fZG11eF9vcHMgPSB7XG4gXHQubmRvX29wZW5cdD0gYmFtX2RtdXhfbmV0ZGV2X29wZW4sXG4gXHQubmRvX3N0b3BcdD0gYmFtX2RtdXhfbmV0ZGV2X3N0b3AsXG4gXHQubmRvX3N0YXJ0X3htaXRcdD0gYmFtX2RtdXhfbmV0ZGV2X3N0YXJ0X3htaXQsXG4mIzQzO1x0Lm5kb19nZXRfc3RhdHM2NFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3d2FuX3R5cGUgPSB7XG5AQCAtNDIxLDYgJiM0Mzs0MjksNyBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9uZXRkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGJhbV9kbXV4X2hkcik7XG4gXHRkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tID0gc2l6ZW9mKHUzMik7IC8qIHdvcmQtYWxpZ25lZCAqL1xuIFx0ZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiA9IERFRkFVTFRfVFhfUVVFVUVfTEVOO1xuJiM0MztcdGRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTO1xuIFxuIFx0LyogVGhpcyBwZXJtIGFkZHIgd2lsbCBiZSB1c2VkIGFzIGludGVyZmFjZSBpZGVudGlmaWVyIGJ5IElQdjYgKi9cbiBcdGRldi1cdTAwM2VhZGRyX2Fzc2lnbl90eXBlID0gTkVUX0FERFJfUkFORE9NO1xuQEAgLTUzMyw2ICYjNDM7NTQyLDcgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2RhdGEoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuJiM0MztcdGRldl9zd19uZXRzdGF0c19yeF9hZGQobmV0ZGV2LCBza2ItXHUwMDNlbGVuKTtcbiBcdG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjM1bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN0YW5kYXJkIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHRyYWNraW5nIChkZXZfc3dfbmV0c3RhdHNfdHhfYWRkLCBkZXZfc3dfbmV0c3RhdHNfcnhfYWRkLCBkZXZfZ2V0X3RzdGF0czY0KSB0byB0aGUgUXVhbGNvbW0gQkFNLURNVVggZHJpdmVyIChkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYykuIFRoaXMgcGxhdGZvcm0gZHJpdmVyIGlzIHNwZWNpZmljIHRvIFF1YWxjb21tIFNvQ3MgKHJlcXVpcmluZyBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIGNoYW5uZWxzKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBvciBwcm9iZWFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMjZmMGIwMmIzOTFlZTliOTQ4NjQyODc3YzM3MzAyMDI3YTQ5M2JhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMDk6MDM6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jCmluZGV4IGNjNmFjZThkNjQzNzEuLjQwYzQwYmM1NjQ1YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jCkBAIC0xNzcsOCAmIzQzOzE3NywxNSBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF90eF9jYWxsYmFjayh2b2lkICpkYXRhKQogewogCXN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hID0gZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RtYS0mZ3Q7c2tiOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLSZndDtkZXY7CiYjNDM7CXVuc2lnbmVkIGludCBsZW4gPSAwOwomIzQzOwomIzQzOwlpZiAobmV0ZGV2KQomIzQzOwkJbGVuID0gKChzdHJ1Y3QgYmFtX2RtdXhfaGRyICopc2tiLSZndDtkYXRhKS0mZ3Q7bGVuOwogCiAJYmFtX2RtdXhfdHhfZG9uZShza2JfZG1hKTsKJiM0MzsJaWYgKG5ldGRldikKJiM0MzsJCWRldl9zd19uZXRzdGF0c190eF9hZGQobmV0ZGV2LCAxLCBsZW4pOwogCWRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTsKIH0KIApAQCAtNDAyLDYgJiM0Mzs0MDksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhbV9kbXV4X29wcyA9IHsKIAkubmRvX29wZW4JPSBiYW1fZG11eF9uZXRkZXZfb3BlbiwKIAkubmRvX3N0b3AJPSBiYW1fZG11eF9uZXRkZXZfc3RvcCwKIAkubmRvX3N0YXJ0X3htaXQJPSBiYW1fZG11eF9uZXRkZXZfc3RhcnRfeG1pdCwKJiM0MzsJLm5kb19nZXRfc3RhdHM2NAk9IGRldl9nZXRfdHN0YXRzNjQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHd3YW5fdHlwZSA9IHsKQEAgLTQyMSw2ICYjNDM7NDI5LDcgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGJhbV9kbXV4X2hkcik7CiAJZGV2LSZndDtuZWVkZWRfdGFpbHJvb20gPSBzaXplb2YodTMyKTsgLyogd29yZC1hbGlnbmVkICovCiAJZGV2LSZndDt0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjsKJiM0MzsJZGV2LSZndDtwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTOwogCiAJLyogVGhpcyBwZXJtIGFkZHIgd2lsbCBiZSB1c2VkIGFzIGludGVyZmFjZSBpZGVudGlmaWVyIGJ5IElQdjYgKi8KIAlkZXYtJmd0O2FkZHJfYXNzaWduX3R5cGUgPSBORVRfQUREUl9SQU5ET007CkBAIC01MzMsNiAmIzQzOzU0Miw3IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X2NtZF9kYXRhKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKQogCQlicmVhazsKIAl9CiAKJiM0MzsJZGV2X3N3X25ldHN0YXRzX3J4X2FkZChuZXRkZXYsIHNrYi0mZ3Q7bGVuKTsKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhhdCBkcml2ZXIuIExldCYjMzk7cyBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBpdCAqaXMqLiBJcyBpdCBhIG1vZGVtIGRyaXZlcj8gU29tZSBraW5kIG9mIGRhdGEgbXVsdGlwbGV4ZXI/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBmdW5jdGlvbiBhbmQgcHVycG9zZS4gRG9lcyBpdCBpbnRlcmZhY2Ugd2l0aCBoYXJkd2FyZT8gSXMgaXQgdXNlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsIGVudmlyb25tZW50cyBvciBqdXN0IHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGlzIGl0ICpyZWFjaGFibGUqIGluIFFFTVUsIG9yIHNvbWUgb3RoZXIgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQ/CgpSaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gTGV0JiMzOTtzIGZpcmUgdXAgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgcXVpY2sgbG9vayBhdCBgcWNvbV9iYW1fZG11eC5jYCBpdHNlbGYuIFRoZW4sIEkgc2hvdWxkIGFsc28gY2hlY2sgaXRzIGNvcnJlc3BvbmRpbmcgYEtjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBidWlsZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIHRlbGwgbWUgaG93IGl0JiMzOTtzIGludGVncmF0ZWQsIGFuZCBpZiBpdCYjMzk7cyBldmVuIGEgdmlhYmxlIHRhcmdldCBmb3IgcXVpY2sgdGVzdGluZy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgdGhlIHBhdGNoJiMzOTtzIGltcGFjdCBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtRQ09NX0JBTV9ETVVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL0tjb25maWc9NTM9Y29uZmlnIE1ISV9XV0FOX01CSU1cbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNjQtXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6NjU6Y29uZmlnIFFDT01fQkFNX0RNVVhcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy02Ni1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIEJBTS1ETVVYIFdXQU4gbmV0d29yayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19NSElfV1dBTl9NQklNKSAmIzQzOz0gbWhpX3d3YW5fbWJpbS5vXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19RQ09NX0JBTV9ETVVYKSAmIzQzOz0gcWNvbV9iYW1fZG11eC5vXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19SUE1TR19XV0FOX0NUUkwpICYjNDM7PSBycG1zZ193d2FuX2N0cmwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBRQ09NX0JBTV9ETVVYIEtjb25maWcgRW50cnkqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgUUNPTV9CQU1fRE1VWGAgbW9kdWxlLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIEtjb25maWcgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBlbnRyeSBmb3IgaXQgaW1tZWRpYXRlbHkuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGl0cyBkZXBlbmRlbmNpZXMg4oCTIHdoYXQgb3RoZXIgY29tcG9uZW50cyAqbXVzdCogYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGZvciB0aGlzIHRvIGV2ZW4gY29tcGlsZSBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIHByZXNlbnQgb3IgZW5hYmxlZD8gSXQmIzM5O3MgYWxsIGFib3V0IHVudGFuZ2xpbmcgdGhvc2UgcmVsYXRpb25zaGlwcy4KClRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gdGhlIG1vcmUgY3J1Y2lhbCBhc3BlY3Q6IGJpbmRpbmcgYW5kIHByb2JpbmcuIEhvdyBkb2VzIHRoZSBkcml2ZXIgZm9yIHRoaXMgYFFDT01fQkFNX0RNVVhgIGdldCBjb25uZWN0ZWQgdG8gdGhlIGhhcmR3YXJlPyBXaGF0JiMzOTtzIHRoZSBwcm9iZSBzZXF1ZW5jZT8gV2hhdCBraW5kIG9mIGRldmljZSB0cmVlIGJpbmRpbmdzIGFyZSBpbnZvbHZlZD8gVW5kZXJzdGFuZGluZyB0aGUgYmluZGluZyBwcm9jZXNzIHdpbGwgcXVpY2tseSBwb2ludCB0byBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9ucyBhbmQgbGlrZWx5IGlkZW50aWZ5IHBvdGVudGlhbCBjb25mbGljdHMsIG9yIGV2ZW4gc3VnZ2VzdCBhcmVhcyB0aGF0IG5lZWQgcmVmaW5lbWVudC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBoaW50cyBhYm91dCBpbnRlcnJ1cHQgaGFuZGxpbmcsIERNQSBjb25maWd1cmF0aW9uIChpZiBhcHBsaWNhYmxlKSwgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIFRoaXMgd2lsbCBpbmZvcm0gbXkgZGVzaWduIGNob2ljZXMsIG9yIGV2ZW4gbXkgZGVidWdnaW5nIHN0cmF0ZWd5IGRvd24gdGhlIHJvYWQuIEFscmlnaHQsIEtjb25maWcgZmlsZS4uLiBsZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdCAgICAgICAgICBJRCAwLiBBZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSBjcmVhdGVkIHZpYSB3d2FuIHJ0bmV0bGluayB0eXBlLlxuICA2MTpcdFxuICA2MjpcdCAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgNjM6XHQgICAgICAgICAgY2FsbGVkIG1oaV93d2FuX21iaW0uXG4gIDY0Olx0XG4gIDY1Olx0Y29uZmlnIFFDT01fQkFNX0RNVVhcbiAgNjY6XHRcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIEJBTS1ETVVYIFdXQU4gbmV0d29yayBkcml2ZXJcJiMzNDtcbiAgNjc6XHRcdGRlcGVuZHMgb24gKERNQV9FTkdJTkUgXHUwMDI2XHUwMDI2IFBNIFx1MDAyNlx1MDAyNiBRQ09NX1NNRU1fU1RBVEUpIHx8IENPTVBJTEVfVEVTVFxuICA2ODpcdFx0aGVscFxuICA2OTpcdFx0ICBUaGUgQkFNIERhdGEgTXVsdGlwbGV4ZXIgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBuZXR3b3JrIGRhdGEgY2hhbm5lbHNcbiAgNzA6XHRcdCAgb2YgbW9kZW1zIGludGVncmF0ZWQgaW50byBtYW55IG9sZGVyIFF1YWxjb21tIFNvQ3MsIGUuZy4gUXVhbGNvbW1cbiAgNzE6XHRcdCAgTVNNODkxNiBvciBNU004OTc0LiBUaGUgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFFNSS9BVCBmcm9tXG4gIDcyOlx0XHQgIHVzZXJzcGFjZSB3aXRoIGNvbnRyb2wgcG9ydHMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIFdXQU4gc3Vic3lzdGVtXG4gIDczOlx0XHQgIChDT05GSUdfUlBNU0dfV1dBTl9DVFJMKSBvciBRUlRSIG5ldHdvcmsgc29ja2V0cyAoQ09ORklHX1FSVFIpLlxuICA3NDpcdFxuICA3NTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgNzY6XHRcdCAgY2FsbGVkIHFjb21fYmFtX2RtdXguXG4gIDc3Olx0XG4gIDc4Olx0Y29uZmlnIFJQTVNHX1dXQU5fQ1RSTFxuICA3OTpcdFx0dHJpc3RhdGUgXCYjMzQ7UlBNU0cgV1dBTiBjb250cm9sIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBxY29tX2JhbV9kbXV4LmNgIGZvciBEcml2ZXIgUHJvYmUgQW5hbHlzaXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYHFjb21fYmFtX2RtdXguY2AgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHRoaW5nIGhhbmRsZXMgaXRzIHByb2JlIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbnRlcmZhY2luZyB3aXRoIHRoZSBCQU0gRE1VWCAoQnVzIEFjY2VzcyBNYW5hZ2VyL0RlbXVsdGlwbGV4ZXIpLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCwgb2YgY291cnNlLCB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLiBIb3BlZnVsbHksIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBkZWNlbnQgYW5kIG1ha2UgdGhpcyBleHBsb3JhdGlvbiBzdHJhaWdodGZvcndhcmQuIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIHByb2JlIGZ1bmN0aW9uLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTA6XHRcdFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG4gNzUxOlx0XHRcdHJldHVybiAtRVRJTUVET1VUO1xuIDc1MjpcdFx0fVxuIDc1MzpcdFxuIDc1NDpcdFx0LyogRW5zdXJlIHRoYXQgd2UgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG4gNzU1Olx0XHRpZiAoIWRtdXgtXHUwMDNlcngpIHtcbiA3NTY6XHRcdFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG4gNzU3Olx0XHRcdHJldHVybiAtRU5YSU87XG4gNzU4Olx0XHR9XG4gNzU5Olx0XG4gNzYwOlx0XHQvKiBSZXF1ZXN0IFRYIGNoYW5uZWwgaWYgbmVjZXNzYXJ5ICovXG4gNzYxOlx0XHRpZiAoZG11eC1cdTAwM2V0eClcbiA3NjI6XHRcdFx0cmV0dXJuIDA7XG4gNzYzOlx0XG4gNzY0Olx0XHRkbXV4LVx1MDAzZXR4ID0gZG1hX3JlcXVlc3RfY2hhbihkZXYsIFwmIzM0O3R4XCYjMzQ7KTtcbiA3NjU6XHRcdGlmIChJU19FUlIoZG11eC1cdTAwM2V0eCkpIHtcbiA3NjY6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byByZXF1ZXN0IFRYIERNQSBjaGFubmVsOiAlcGVcXG5cJiMzNDssIGRtdXgtXHUwMDNldHgpO1xuIDc2NzpcdFx0XHRkbXV4LVx1MDAzZXR4ID0gTlVMTDtcbiA3Njg6XHRcdFx0YmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7XG4gNzY5Olx0XHRcdHJldHVybiAtRU5YSU87XG4gNzcwOlx0XHR9XG4gNzcxOlx0XG4gNzcyOlx0XHRyZXR1cm4gMDtcbiA3NzM6XHR9XG4gNzc0Olx0XG4gNzc1Olx0c3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIDc3NjpcdHtcbiA3Nzc6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIDc3ODpcdFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4O1xuIDc3OTpcdFx0aW50IHJldCwgcGNfYWNrX2lycSwgaTtcbiA3ODA6XHRcdHVuc2lnbmVkIGludCBiaXQ7XG4gNzgxOlx0XG4gNzgyOlx0XHRkbXV4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkbXV4KSwgR0ZQX0tFUk5FTCk7XG4gNzgzOlx0XHRpZiAoIWRtdXgpXG4gNzg0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDc4NTpcdFxuIDc4NjpcdFx0ZG11eC1cdTAwM2VkZXYgPSBkZXY7XG4gNzg3Olx0XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkbXV4KTtcbiA3ODg6XHRcbiA3ODk6XHRcdGRtdXgtXHUwMDNlcGNfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgXCYjMzQ7cGNcJiMzNDspO1xuIDc5MDpcdFx0aWYgKGRtdXgtXHUwMDNlcGNfaXJxIFx1MDAzYyAwKVxuIDc5MTpcdFx0XHRyZXR1cm4gZG11eC1cdTAwM2VwY19pcnE7XG4gNzkyOlx0XG4gNzkzOlx0XHRwY19hY2tfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgXCYjMzQ7cGMtYWNrXCYjMzQ7KTtcbiA3OTQ6XHRcdGlmIChwY19hY2tfaXJxIFx1MDAzYyAwKVxuIDc5NTpcdFx0XHRyZXR1cm4gcGNfYWNrX2lycTtcbiA3OTY6XHRcbiA3OTc6XHRcdGRtdXgtXHUwMDNlcGMgPSBkZXZtX3Fjb21fc21lbV9zdGF0ZV9nZXQoZGV2LCBcJiMzNDtwY1wmIzM0OywgXHUwMDI2Yml0KTtcbiA3OTg6XHRcdGlmIChJU19FUlIoZG11eC1cdTAwM2VwYykpXG4gNzk5Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkbXV4LVx1MDAzZXBjKSxcbiA4MDA6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGdldCBwYyBzdGF0ZVxcblwmIzM0Oyk7XG4gODAxOlx0XHRkbXV4LVx1MDAzZXBjX21hc2sgPSBCSVQoYml0KTtcbiA4MDI6XHRcbiA4MDM6XHRcdGRtdXgtXHUwMDNlcGNfYWNrID0gZGV2bV9xY29tX3NtZW1fc3RhdGVfZ2V0KGRldiwgXCYjMzQ7cGMtYWNrXCYjMzQ7LCBcdTAwMjZiaXQpO1xuIDgwNDpcdFx0aWYgKElTX0VSUihkbXV4LVx1MDAzZXBjX2FjaykpXG4gODA1Olx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkbXV4LVx1MDAzZXBjX2FjayksXG4gODA2Olx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBnZXQgcGMtYWNrIHN0YXRlXFxuXCYjMzQ7KTtcbiA4MDc6XHRcdGRtdXgtXHUwMDNlcGNfYWNrX21hc2sgPSBCSVQoYml0KTtcbiA4MDg6XHRcbiA4MDk6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZG11eC1cdTAwM2VwY193YWl0KTtcbiA4MTA6XHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbiA4MTE6XHRcdGNvbXBsZXRlX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbiA4MTI6XHRcbiA4MTM6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRtdXgtXHUwMDNldHhfbG9jayk7XG4gODE0Olx0XHRJTklUX1dPUksoXHUwMDI2ZG11eC1cdTAwM2V0eF93YWtldXBfd29yaywgYmFtX2RtdXhfdHhfd2FrZXVwX3dvcmspO1xuIDgxNTpcdFx0SU5JVF9XT1JLKFx1MDAyNmRtdXgtXHUwMDNlcmVnaXN0ZXJfbmV0ZGV2X3dvcmssIGJhbV9kbXV4X3JlZ2lzdGVyX25ldGRldl93b3JrKTtcbiA4MTY6XHRcbiA4MTc6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJBTV9ETVVYX05VTV9TS0I7IGkmIzQzOyYjNDM7KSB7XG4gODE4Olx0XHRcdGRtdXgtXHUwMDNlcnhfc2tic1tpXS5kbXV4ID0gZG11eDtcbiA4MTk6XHRcdFx0ZG11eC1cdTAwM2V0eF9za2JzW2ldLmRtdXggPSBkbXV4O1xuIDgyMDpcdFx0fVxuIDgyMTpcdFxuIDgyMjpcdFx0LyogUnVudGltZSBQTSBtYW5hZ2VzIG91ciBvd24gcG93ZXIgdm90ZS5cbiA4MjM6XHRcdCAqIE5vdGUgdGhhdCB0aGUgUlggcGF0aCBtYXkgYmUgYWN0aXZlIGV2ZW4gaWYgd2UgYXJlIHJ1bnRpbWUgc3VzcGVuZGVkLFxuIDgyNDpcdFx0ICogc2luY2UgaXQgaXMgY29udHJvbGxlZCBieSB0aGUgcmVtb3RlIHNpZGUuXG4gODI1Olx0XHQgKi9cbiA4MjY6XHRcdHBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KGRldiwgQkFNX0RNVVhfQVVUT1NVU1BFTkRfREVMQVkpO1xuIDgyNzpcdFx0cG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoZGV2KTtcbiA4Mjg6XHRcdHBtX3J1bnRpbWVfZW5hYmxlKGRldik7XG4gODI5Olx0XG4gODMwOlx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgcGNfYWNrX2lycSwgTlVMTCwgYmFtX2RtdXhfcGNfYWNrX2lycSxcbiA4MzE6XHRcdFx0XHRcdFx0SVJRRl9PTkVTSE9ULCBOVUxMLCBkbXV4KTtcbiA4MzI6XHRcdGlmIChyZXQpXG4gODMzOlx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfcG07XG4gODM0Olx0XG4gODM1Olx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgZG11eC1cdTAwM2VwY19pcnEsIE5VTEwsIGJhbV9kbXV4X3BjX2lycSxcbiA4MzY6XHRcdFx0XHRcdFx0SVJRRl9PTkVTSE9ULCBOVUxMLCBkbXV4KTtcbiA4Mzc6XHRcdGlmIChyZXQpXG4gODM4Olx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfcG07XG4gODM5Olx0XG4gODQwOlx0XHRyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC1cdTAwM2VwY19pcnEsIElSUUNISVBfU1RBVEVfTElORV9MRVZFTCxcbiA4NDE6XHRcdFx0XHRcdCAgICBcdTAwMjZkbXV4LVx1MDAzZXBjX3N0YXRlKTtcbiA4NDI6XHRcdGlmIChyZXQpXG4gODQzOlx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfcG07XG4gODQ0Olx0XG4gODQ1Olx0XHQvKiBDaGVjayBpZiByZW1vdGUgZmluaXNoZWQgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzICovXG4gODQ2Olx0XHRpZiAoZG11eC1cdTAwM2VwY19zdGF0ZSkge1xuIDg0NzpcdFx0XHRpZiAoYmFtX2RtdXhfcG93ZXJfb24oZG11eCkpXG4gODQ4Olx0XHRcdFx0YmFtX2RtdXhfcGNfYWNrKGRtdXgpO1xuIDg0OTpcdFx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc1OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBxY29tX2JhbV9kbXV4YCBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBxY29tX2JhbV9kbXV4YCB0aGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIGJpbmRpbmcuIElzIHRoaXMgYSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgYSBRdWFsY29tbSBTeXN0ZW0tb24tYS1DaGlwPyBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIHRoYXQmIzM5O3MgbXkgc3Ryb25nIHN1c3BpY2lvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgZG9jdW1lbnRhdGlvbiBvciBzb3VyY2UgY29kZSB0aGF0IGNvbmZpcm1zIGl0cyBwdXJwb3NlIGFuZCB0aGUgaGFyZHdhcmUgaXQmIzM5O3MgaW50ZW5kZWQgdG8gbWFuYWdlLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIHRoYXQgdGllIHRoaXMgZHJpdmVyIHRvIGEgc3BlY2lmaWMgcGllY2Ugb2YgUXVhbGNvbW0gc2lsaWNvbi4gSXQgd2lsbCBiZSByZWFsbHkgaGVscGZ1bCB0byB1bmRlcnN0YW5kIGlmIGl0cyBhIGxlZ2FjeSBkcml2ZXIgb3IgbmV3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFx0XHRcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbiA4NTE6XHRcdH1cbiA4NTI6XHRcbiA4NTM6XHRcdHJldHVybiAwO1xuIDg1NDpcdFxuIDg1NTpcdGVycl9kaXNhYmxlX3BtOlxuIDg1NjpcdFx0cG1fcnVudGltZV9kaXNhYmxlKGRldik7XG4gODU3Olx0XHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XG4gODU4Olx0XHRyZXR1cm4gcmV0O1xuIDg1OTpcdH1cbiA4NjA6XHRcbiA4NjE6XHRzdGF0aWMgdm9pZCBiYW1fZG11eF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiA4NjI6XHR7XG4gODYzOlx0XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiA4NjQ6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRtdXgtXHUwMDNlZGV2O1xuIDg2NTpcdFx0TElTVF9IRUFEKGxpc3QpO1xuIDg2NjpcdFx0aW50IGk7XG4gODY3Olx0XG4gODY4Olx0XHQvKiBVbnJlZ2lzdGVyIG5ldHdvcmsgaW50ZXJmYWNlcyAqL1xuIDg2OTpcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZkbXV4LVx1MDAzZXJlZ2lzdGVyX25ldGRldl93b3JrKTtcbiA4NzA6XHRcdHJ0bmxfbG9jaygpO1xuIDg3MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkFNX0RNVVhfTlVNX0NIOyAmIzQzOyYjNDM7aSlcbiA4NzI6XHRcdFx0aWYgKGRtdXgtXHUwMDNlbmV0ZGV2c1tpXSlcbiA4NzM6XHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkbXV4LVx1MDAzZW5ldGRldnNbaV0sIFx1MDAyNmxpc3QpO1xuIDg3NDpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcdTAwMjZsaXN0KTtcbiA4NzU6XHRcdHJ0bmxfdW5sb2NrKCk7XG4gODc2Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmRtdXgtXHUwMDNldHhfd2FrZXVwX3dvcmspO1xuIDg3NzpcdFxuIDg3ODpcdFx0LyogRHJvcCBvdXIgb3duIHBvd2VyIHZvdGUgKi9cbiA4Nzk6XHRcdHBtX3J1bnRpbWVfZGlzYWJsZShkZXYpO1xuIDg4MDpcdFx0cG1fcnVudGltZV9kb250X3VzZV9hdXRvc3VzcGVuZChkZXYpO1xuIDg4MTpcdFx0YmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7XG4gODgyOlx0XHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTtcbiA4ODM6XHRcbiA4ODQ6XHRcdC8qIFRyeSB0byB3YWl0IGZvciByZW1vdGUgc2lkZSB0byBkcm9wIHBvd2VyIHZvdGUgKi9cbiA4ODU6XHRcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXHUwMDNlcGNfd2FpdCwgIWRtdXgtXHUwMDNlcngsIEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSlcbiA4ODY6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciByZW1vdGUgc2lkZSB0byBzdXNwZW5kXFxuXCYjMzQ7KTtcbiA4ODc6XHRcbiA4ODg6XHRcdC8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuZWQgdXAgYmVmb3JlIHdlIHJldHVybiAqL1xuIDg4OTpcdFx0ZGlzYWJsZV9pcnEoZG11eC1cdTAwM2VwY19pcnEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjE0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gc3VtbWFyaXplIG15ICYjMzQ7dGhvdWdodHMmIzM0OyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGEgc3ViamVjdCBtYXR0ZXIgZXhwZXJ0LiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIGl0OgoKKipEaWdnaW5nIERlZXBlcjogRW5zdXJpbmcgQ29tcHJlaGVuc2l2ZSBDb3ZlcmFnZSoqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIFdlJiMzOTt2ZSBsb29rZWQgYXQgb25lIHBhcnQgb2YgdGhlIGZpbGUsIGJ1dCB3ZSBjYW4mIzM5O3Qgc3RvcCB0aGVyZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtMZXQmIzM5O3Mgbm90IGp1c3QgYXNzdW1lIHdlJiMzOTt2ZSBzZWVuIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBzZWUuJiMzNDsgV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBicmllZiBnbGltcHNlIGlzIHJlcHJlc2VudGF0aXZlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgZm9yIGFueSBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGdvIHRocm91Z2ggdGhlIE9GIG1hdGNoIHRhYmxlLiBNYXliZSB0aGVyZSBhcmUgb3RoZXIgdGFibGVzIG9yIGRhdGEgcG9pbnRzIGluIHRoaXMgZmlsZSB0aGF0IGFyZSByZWxldmFudC4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiB3aGF0IG90aGVyIHBpZWNlcyBtaWdodCBpbnRlcmFjdCB3aXRoIHRoaXMgZmlyc3QgcGFydC4gV2hhdCBlbHNlIG1pZ2h0IGJlIGltcGFjdGVkLCB3aGF0IG90aGVyIHJ1bGVzIG9yIGRlcGVuZGVuY2llcyBhcmUgdHJpZ2dlcmVkIGJ5IHRoaXMgY29kZT8gSSBuZWVkIHRvIGJ1aWxkIGEgcmVhbGx5IGNvbXBsZXRlIHBpY3R1cmUgdG8gYXZvaWQgbWlzc2luZyBzb21ldGhpbmcgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDk6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODkwOlx0XHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XG4gODkxOlx0XHRiYW1fZG11eF9mcmVlX3NrYnMoZG11eC1cdTAwM2V0eF9za2JzLCBETUFfVE9fREVWSUNFKTtcbiA4OTI6XHR9XG4gODkzOlx0XG4gODk0Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGJhbV9kbXV4X3BtX29wcyA9IHtcbiA4OTU6XHRcdFNFVF9SVU5USU1FX1BNX09QUyhiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQsIGJhbV9kbXV4X3J1bnRpbWVfcmVzdW1lLCBOVUxMKVxuIDg5NjpcdH07XG4gODk3Olx0XG4gODk4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmFtX2RtdXhfb2ZfbWF0Y2hbXSA9IHtcbiA4OTk6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7IH0sXG4gOTAwOlx0XHR7IC8qIHNlbnRpbmVsICovIH1cbiA5MDE6XHR9O1xuIDkwMjpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGJhbV9kbXV4X29mX21hdGNoKTtcbiA5MDM6XHRcbiA5MDQ6XHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiYW1fZG11eF9kcml2ZXIgPSB7XG4gOTA1Olx0XHQucHJvYmUgPSBiYW1fZG11eF9wcm9iZSxcbiA5MDY6XHRcdC5yZW1vdmUgPSBiYW1fZG11eF9yZW1vdmUsXG4gOTA3Olx0XHQuZHJpdmVyID0ge1xuIDkwODpcdFx0XHQubmFtZSA9IFwmIzM0O2JhbS1kbXV4XCYjMzQ7LFxuIDkwOTpcdFx0XHQucG0gPSBcdTAwMjZiYW1fZG11eF9wbV9vcHMsXG4gOTEwOlx0XHRcdC5vZl9tYXRjaF90YWJsZSA9IGJhbV9kbXV4X29mX21hdGNoLFxuIDkxMTpcdFx0fSxcbiA5MTI6XHR9O1xuIDkxMzpcdG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYmFtX2RtdXhfZHJpdmVyKTtcbiA5MTQ6XHRcbiA5MTU6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUEwgdjJcJiMzNDspO1xuIDkxNjpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtRdWFsY29tbSBCQU0tRE1VWCBXV0FOIE5ldHdvcmsgRHJpdmVyXCYjMzQ7KTtcbiA5MTc6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O1N0ZXBoYW4gR2VyaG9sZCBcdTAwM2NzdGVwaGFuQGdlcmhvbGQubmV0XHUwMDNlXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDk6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgcWNvbV9iYW1fZG11eGAgRHJpdmVyJiMzOTtzIFZpcnR1YWxpemF0aW9uIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHNlZSBpZiB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBRdWFsY29tbSBTb0NzIGFuZCB1dGlsaXplcyBEZXZpY2UgVHJlZSBtYXRjaGluZyB0aGUgYHFjb20sYmFtLWRtdXhgIGNvbXBhdGlibGUgc3RyaW5nLCBjb3VsZCBiZSBzb21laG93IHJlYWNoZWQgb3IgaW5zdGFudGlhdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gTXkgZXhwZXJ0IGludHVpdGlvbiBpbW1lZGlhdGVseSBmbGFnZ2VkIHNvbWUgcG90ZW50aWFsIHJvYWRibG9ja3MuCgpUaGUgYGJhbV9kbXV4X3Byb2JlYCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmUuIEl0JiMzOTtzIGxvb2tpbmcgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSBzZWUgaXQmIzM5O3MgYXR0ZW1wdGluZyB0byBhY3F1aXJlIGludGVycnVwdHMgdXNpbmcgYHBsYXRmb3JtX2dldF9pcnFfYnluYW1lYCAoJiMzNDtwYyYjMzQ7LCAmIzM0O3BjLWFjayYjMzQ7KSwgYWNjZXNzaW5nIHNoYXJlZCBtZW1vcnkgdGhyb3VnaCBgZGV2bV9xY29tX3NtZW1fc3RhdGVfZ2V0YCAoJiMzNDtwYyYjMzQ7LCAmIzM0O3BjLWFjayYjMzQ7KSwgYW5kIHJlcXVlc3RpbmcgRE1BIGNoYW5uZWxzIHdpdGggYGRtYV9yZXF1ZXN0X2NoYW5gICgmIzM0O3R4JiMzNDspLiBUaGUgdXNlIG9mIGBkZXZtX3Fjb21fc21lbV9zdGF0ZV9nZXRgIGluIHBhcnRpY3VsYXIgc2NyZWFtcyAmIzM0O1F1YWxjb21tLXNwZWNpZmljJiMzNDsgc2hhcmVkIG1lbW9yeSBhY2Nlc3MsIGxpa2VseSB0aWVkIHRvIHRoZWlyIFN5c3RlbSBNZW1vcnkgUmVnaW9uIChTTUVNKS4gQkFNIERNQSBpcyBhbHNvIGEgc3Ryb25nIGhpbnQuCgpTbywgSSBzdGFydGVkIHRvIHRoaW5rLCAmIzM0O0NhbiB0aGlzIGJlIHRyaWNrZWQ/JiMzNDsgQ2FuIHdlIG1vY2sgdGhlc2UgY2FsbHM/IFRoZSBhbnN3ZXIsIGdpdmVuIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMsIGlzIGEgcmVzb3VuZGluZyBuby4gU3BlY2lmaWNhbGx5IHJlZmVyZW5jaW5nIHRoaXMgaW5mb3JtYXRpb246CiYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuJiMzNDsKJiMzNDtDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsKCk15IGFuYWx5c2lzIHRlbGxzIG1lIHRoZSBkcml2ZXIgaXMgZGVmaW5pdGVseSAqbm90KiBnb2luZyB0byB3b3JrIGluIHRoZSBzdGFuZGFyZCB4ODYgb3IgYXJtNjQgUUVNVS9HQ0UgZW52aXJvbm1lbnQuIFRoaXMgZHJpdmVyICpyZWxpZXMqIG9uIHRoZSBRdWFsY29tbSBNU00gU29DJiMzOTtzIHNwZWNpZmljIGhhcmR3YXJlIGNvbXBvbmVudHMsIG5hbWVseSwgdGhlIEJBTSBETUEgYW5kIFNNRU0gc3RhdGUsIHdoaWNoIGFyZSBmdW5kYW1lbnRhbGx5IHVuYXZhaWxhYmxlLCBvciBhdCBsZWFzdCB1bm1hcHBlZCwgd2l0aG91dCB0aGUgcGh5c2ljYWwgU29DIGhhcmR3YXJlIG9yIGEgdmVyeSBlbGFib3JhdGUgYW5kIHNwZWNpZmljIERUIGVtdWxhdGlvbi4gRXZlbiBpZiBzb21lb25lIHdlcmUgYWJsZSB0byBsb2FkIHRoZSBtb2R1bGUgb3IgY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGVudHJ5LCB0aGUgcHJvYmUgZnVuY3Rpb24gd291bGQgZmFpbCBiZWNhdXNlIGl0IHdpbGwgbm90IGJlIGFibGUgdG8gZ2V0IGludGVycnVwdHMuIExpa2V3aXNlLCBpdCB3b3VsZCBmYWlsIHRvIGdldCB0aGUgc2hhcmVkIG1lbW9yeSBvciBETUEgY2hhbm5lbHMuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgcXVlc3Rpb24gb2YgbmV0d29yayBkZXZpY2UgY3JlYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgbWFueSBkcml2ZXJzIHdpbGwgcmVnaXN0ZXIgYSBuZXR3b3JrIGRldmljZSB1c2luZyBydG5ldGxpbmsgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIGRyaXZlciBwcm9iZXMgYW5kIGlzIGxvYWRlZCBzdWNjZXNzZnVsbHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRyaXZlciBpdHNlbGYgcmVnaXN0ZXJzIGFueSBgcnRubF9saW5rX29wc2AuIE15IGd1ZXNzIGlzIHRoYXQgaXQgZG9lcyBub3QsIGdpdmVuIHRoYXQgaXRzIHB1cnBvc2UgaXMgdG8gYnJpZGdlIHRvIHVuZGVybHlpbmcgUXVhbGNvbW0gc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50cyAoQkFNIERNQSBhbmQgU01FTSkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfbGlua19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM9MTI0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgd3dhbl9ydG5sX3BvbGljeVtJRkxBX1dXQU5fTUFYICYjNDM7IDFdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTI0NC1cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTI0NTpzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgd3dhbl9ydG5sX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTEyNDYtXHQua2luZCA9IFwmIzM0O3d3YW5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz0xMjU3PXN0YXRpYyB2b2lkIHd3YW5fY3JlYXRlX2RlZmF1bHRfbGluayhzdHJ1Y3Qgd3dhbl9kZXZpY2UgKnd3YW5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMzA2LVx0ZGV2ID0gcnRubF9jcmVhdGVfbGluayhcdTAwMjZpbml0X25ldCwgXCYjMzQ7d3dhbiVkXCYjMzQ7LCBORVRfTkFNRV9FTlVNLFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzoxMzA3Olx0XHRcdCAgICAgICBcdTAwMjZ3d2FuX3J0bmxfbGlua19vcHMsIHRiLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTMwOC1cdGlmIChXQVJOX09OKElTX0VSUihkZXYpKSlcbi0tXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jPTE0MjA9c3RhdGljIGludCBfX2luaXQgd3dhbl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xNDIzLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzoxNDI0Olx0ZXJyID0gcnRubF9saW5rX3JlZ2lzdGVyKFx1MDAyNnd3YW5fcnRubF9saW5rX29wcyk7XG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0MjUtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTQ0OC11bnJlZ2lzdGVyOlxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzoxNDQ5Olx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2d3dhbl9ydG5sX2xpbmtfb3BzKTtcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTQ1MC1cdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz0xNDUzPXN0YXRpYyB2b2lkIF9fZXhpdCB3d2FuX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0NTYtXHRfX3VucmVnaXN0ZXJfY2hyZGV2KHd3YW5fbWFqb3IsIDAsIFdXQU5fTUFYX01JTk9SUywgXCYjMzQ7d3dhbl9wb3J0XCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTQ1NzpcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFx1MDAyNnd3YW5fcnRubF9saW5rX29wcyk7XG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0NTgtXHRjbGFzc191bnJlZ2lzdGVyKFx1MDAyNnd3YW5fY2xhc3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjU1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHByb21wdCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIHd3YW5fcnRubF9saW5rX29wcyBhbmQgcWNvbV9iYW1fZG11eCoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGB3d2FuX3J0bmxfbGlua19vcHNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byBpdHMgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyByb2xlIGluIHRoZSBXV0FOIHN0YWNrLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O2xsIGxpa2VseSBzdGFydCBieSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGtlcm5lbCBoZWFkZXJzIGFuZCBzb3VyY2UgZmlsZXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGl0cyBleGVjdXRpb24gcGF0aCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBsaW5rIG1hbmFnZW1lbnQgYW5kIHJvdXRpbmcuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGlmIGBxY29tX2JhbV9kbXV4YCBpcyBhY3R1YWxseSB1c2luZyBpdC4gVGhlIG5hbWUgc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSBhIFF1YWxjb21tLXNwZWNpZmljIEJBTSAoQnVmZmVyIEFjY2VzcyBNYW5hZ2VyKSBjb21wb25lbnQsIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmVsYXRlIHRoaXMgdG8gdGhlIGJyb2FkZXIgV1dBTiBmcmFtZXdvcmsgYW5kIGlmIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBkZW11bHRpcGxleGluZyBvZiBkYXRhLiBJZiBgcWNvbV9iYW1fZG11eGAgKmlzKiBkZXBlbmRlbnQgb24gYHd3YW5fY29yZWAsIHRoYXQgbWVhbnMgYHd3YW5fcnRubF9saW5rX29wc2AgaXMgcHJvYmFibHkgYWxzbyBjcml0aWNhbCBmb3IgdGhlIFFDT00gQkFNIGRlbXVsdGlwbGV4aW5nLiBUaGlzIHJlbGF0aW9uc2hpcCBpcyBpbXBvcnRhbnQgdG8gcGluIGRvd24uIEluIGVzc2VuY2UsIEkgbmVlZCB0byBzZWUgaWYgdGhlIEJBTSBkcml2ZXImIzM5O3MgZnVuY3Rpb25hbGl0eSBsZXZlcmFnZXMgdGhlIGNvcmUgV1dBTiBmdW5jdGlvbmFsaXRpZXMsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBuZXRsaW5rIGludGVyZmFjZSBvcGVyYXRpb25zLiBJIHdpbGwgc3RhcnQgdHJhY2luZyB0aGUgY2FsbHMgYW5kIGRhdGEgZmxvdyBhbmQgdGhlbiBjb21lIHVwIHdpdGggYSBjb25jbHVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAwOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3d2FuXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jPTQwOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhbV9kbXV4X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MTQtXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzo0MTU6c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3d2FuX3R5cGUgPSB7XG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MTYtXHQubmFtZSA9IFwmIzM0O3d3YW5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM9NDE5PXN0YXRpYyB2b2lkIGJhbV9kbXV4X25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQyMy1cdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX1JBV0lQO1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6NDI0Olx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXHUwMDI2d3dhbl90eXBlKTtcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jLTQyNS1cdGRldi1cdTAwM2VmbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjEwbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NTQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipBbmFseXppbmcgYHFjb21fYmFtX2RtdXguY2AmIzM5O3MgTmV0d29yayBEZXZpY2UgSGFuZGxpbmcqKgoKUmlnaHQsIHNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBxY29tX2JhbV9kbXV4LmNgIGRyaXZlci4gVGhlIGltbWVkaWF0ZSBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGUgbmV0d29yayBkZXZpY2UgYXNwZWN0LiAgSG1tLCBpbnRlcmVzdGluZy4uLiBpdCAqZG9lc24mIzM5O3QqIGFwcGVhciB0byBkaXJlY3RseSBsZXZlcmFnZSBgd3dhbl9jb3JlLmNgIGxpa2UgSSBtaWdodCBoYXZlIGluaXRpYWxseSBzdXNwZWN0ZWQuIEluc3RlYWQsIGl0JiMzOTtzIHRha2luZyBhIG1vcmUgZGlyZWN0IGFwcHJvYWNoIOKAkyByZWdpc3RlcmluZyByYXcgbmV0ZGV2aWNlcyB1c2luZyBgYWxsb2NfbmV0ZGV2YC4gVGhlIHVzZSBvZiBgYWxsb2NfbmV0ZGV2YCBpcyBrZXkgaGVyZSwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoZSBwcml2YXRlIGRhdGEgYGJhbV9kbXV4X25ldGRldl9wcml2YCBpcyBoYW5kbGVkLiAgT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGxpbmVzIGJldHdlZW4gNDAwIGFuZCA1MDAgaW4gYGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiBpdHMgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgbWFuYWdlbWVudCBzdHJhdGVneSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCYjMzk7cyB1c2luZyB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSB0byBoYW5kbGUgdGhlIG11bHRpcGxleGluZyBvZiB0aGUgQkFNIGludGVyZmFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgdHJhbnNsYXRpbmcgdGhhdCBCQU0gaW50ZXJmYWNlIGludG8gdXNhYmxlIG5ldHdvcmsgZGV2aWNlcywgYmVjYXVzZSwgYXMgSSByZWNhbGwsIGl0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIFdXQU4gaW50ZXJmYWNlLiBHb3R0YSBnZXQgdG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0XHRiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF90eChcdTAwMjZkbXV4LVx1MDAzZXR4X3NrYnNbaV0pO1xuIDQwMTpcdFx0fVxuIDQwMjpcdFx0ZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoZG11eC1cdTAwM2V0eCk7XG4gNDAzOlx0XG4gNDA0Olx0b3V0OlxuIDQwNTpcdFx0cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoZG11eC1cdTAwM2VkZXYpO1xuIDQwNjpcdH1cbiA0MDc6XHRcbiA0MDg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhbV9kbXV4X29wcyA9IHtcbiA0MDk6XHRcdC5uZG9fb3Blblx0PSBiYW1fZG11eF9uZXRkZXZfb3BlbixcbiA0MTA6XHRcdC5uZG9fc3RvcFx0PSBiYW1fZG11eF9uZXRkZXZfc3RvcCxcbiA0MTE6XHRcdC5uZG9fc3RhcnRfeG1pdFx0PSBiYW1fZG11eF9uZXRkZXZfc3RhcnRfeG1pdCxcbiA0MTI6XHRcdC5uZG9fZ2V0X3N0YXRzNjRcdD0gZGV2X2dldF90c3RhdHM2NCxcbiA0MTM6XHR9O1xuIDQxNDpcdFxuIDQxNTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3dhbl90eXBlID0ge1xuIDQxNjpcdFx0Lm5hbWUgPSBcJiMzNDt3d2FuXCYjMzQ7LFxuIDQxNzpcdH07XG4gNDE4Olx0XG4gNDE5Olx0c3RhdGljIHZvaWQgYmFtX2RtdXhfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNDIwOlx0e1xuIDQyMTpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZiYW1fZG11eF9vcHM7XG4gNDIyOlx0XG4gNDIzOlx0XHRkZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9SQVdJUDtcbiA0MjQ6XHRcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFx1MDAyNnd3YW5fdHlwZSk7XG4gNDI1Olx0XHRkZXYtXHUwMDNlZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7XG4gNDI2Olx0XG4gNDI3Olx0XHRkZXYtXHUwMDNlbXR1ID0gRVRIX0RBVEFfTEVOO1xuIDQyODpcdFx0ZGV2LVx1MDAzZW1heF9tdHUgPSBCQU1fRE1VWF9NQVhfREFUQV9TSVpFO1xuIDQyOTpcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYmFtX2RtdXhfaGRyKTtcbiA0MzA6XHRcdGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20gPSBzaXplb2YodTMyKTsgLyogd29yZC1hbGlnbmVkICovXG4gNDMxOlx0XHRkZXYtXHUwMDNldHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47XG4gNDMyOlx0XHRkZXYtXHUwMDNlcGNwdV9zdGF0X3R5cGUgPSBORVRERVZfUENQVV9TVEFUX1RTVEFUUztcbiA0MzM6XHRcbiA0MzQ6XHRcdC8qIFRoaXMgcGVybSBhZGRyIHdpbGwgYmUgdXNlZCBhcyBpbnRlcmZhY2UgaWRlbnRpZmllciBieSBJUHY2ICovXG4gNDM1Olx0XHRkZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1JBTkRPTTtcbiA0MzY6XHRcdGV0aF9yYW5kb21fYWRkcihkZXYtXHUwMDNlcGVybV9hZGRyKTtcbiA0Mzc6XHR9XG4gNDM4Olx0XG4gNDM5Olx0c3RhdGljIHZvaWQgYmFtX2RtdXhfcmVnaXN0ZXJfbmV0ZGV2X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDQ0MDpcdHtcbiA0NDE6XHRcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmFtX2RtdXgsIHJlZ2lzdGVyX25ldGRldl93b3JrKTtcbiA0NDI6XHRcdHN0cnVjdCBiYW1fZG11eF9uZXRkZXYgKmJuZGV2O1xuIDQ0MzpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiA0NDQ6XHRcdGludCBjaCwgcmV0O1xuIDQ0NTpcdFxuIDQ0NjpcdFx0Zm9yX2VhY2hfc2V0X2JpdChjaCwgZG11eC1cdTAwM2VyZW1vdGVfY2hhbm5lbHMsIEJBTV9ETVVYX05VTV9DSCkge1xuIDQ0NzpcdFx0XHRpZiAoZG11eC1cdTAwM2VuZXRkZXZzW2NoXSlcbiA0NDg6XHRcdFx0XHRjb250aW51ZTtcbiA0NDk6XHRcbiA0NTA6XHRcdFx0bmV0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqYm5kZXYpLCBcJiMzNDt3d2FuJWRcJiMzNDssIE5FVF9OQU1FX0VOVU0sXG4gNDUxOlx0XHRcdFx0XHQgICAgICBiYW1fZG11eF9uZXRkZXZfc2V0dXApO1xuIDQ1MjpcdFx0XHRpZiAoIW5ldGRldilcbiA0NTM6XHRcdFx0XHRyZXR1cm47XG4gNDU0Olx0XG4gNDU1Olx0XHRcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgZG11eC1cdTAwM2VkZXYpO1xuIDQ1NjpcdFx0XHRuZXRkZXYtXHUwMDNlZGV2X3BvcnQgPSBjaDtcbiA0NTc6XHRcbiA0NTg6XHRcdFx0Ym5kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDQ1OTpcdFx0XHRibmRldi1cdTAwM2VkbXV4ID0gZG11eDtcbiA0NjA6XHRcdFx0Ym5kZXYtXHUwMDNlY2ggPSBjaDtcbiA0NjE6XHRcbiA0NjI6XHRcdFx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7XG4gNDYzOlx0XHRcdGlmIChyZXQpIHtcbiA0NjQ6XHRcdFx0XHRkZXZfZXJyKGRtdXgtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0ZGV2IGZvciBjaGFubmVsICV1OiAlZFxcblwmIzM0OyxcbiA0NjU6XHRcdFx0XHRcdGNoLCByZXQpO1xuIDQ2NjpcdFx0XHRcdGZyZWVfbmV0ZGV2KG5ldGRldik7XG4gNDY3Olx0XHRcdFx0cmV0dXJuO1xuIDQ2ODpcdFx0XHR9XG4gNDY5Olx0XG4gNDcwOlx0XHRcdGRtdXgtXHUwMDNlbmV0ZGV2c1tjaF0gPSBuZXRkZXY7XG4gNDcxOlx0XHR9XG4gNDcyOlx0fVxuIDQ3MzpcdFxuIDQ3NDpcdHN0YXRpYyB2b2lkIGJhbV9kbXV4X3J4X2NhbGxiYWNrKHZvaWQgKmRhdGEpO1xuIDQ3NTpcdFxuIDQ3NjpcdHN0YXRpYyBib29sIGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3J4KHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hKVxuIDQ3NzpcdHtcbiA0Nzg6XHRcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtXHUwMDNlZG11eDtcbiA0Nzk6XHRcdHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMDk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2ODcKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogOTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYWRkaW5nIG5ldHdvcmsgc3RhdGlzdGljcyB0byB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyAqZHluYW1pY2FsbHkqIHJlZ2lzdGVyZWQgdmlhIGNvbW1hbmQgcGFja2V0cyBmcm9tIHRoZSByZW1vdGUgbW9kZW0uIEkgc2VlIHRoYXQgcmVnaXN0cmF0aW9uIGhhcHBlbnMgdGhyb3VnaCBgYmFtX2RtdXhfY21kX29wZW5gIGFuZCBhIHNjaGVkdWxlZCB3b3JrIGl0ZW0gdGhhdCBjYWxscyBgc2NoZWR1bGVfd29yaygmYW1wO2RtdXgtJmd0O3JlZ2lzdGVyX25ldGRldl93b3JrKWAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBiYW1fZG11eGAgaXMgc3BlY2lmaWNhbGx5IGEgcGxhdGZvcm0gZHJpdmVyIGRlc2lnbmVkIGZvciBRdWFsY29tbSBNU00gU29DcywgYW5kIGl0IHJlbGllcyBvbiBRdWFsY29tbS1zcGVjaWZpYyBoYXJkd2FyZTogU01FTSBzdGF0ZXMsIEJBTSBETUEgY2hhbm5lbHMsIGFuZCBpbnRlcnJ1cHRzLiBUaGF0IGdpdmVzIG1lIGEgY2x1ZSBhYm91dCByZWFjaGFiaWxpdHkuCgpOb3csIGxldCYjMzk7cyBnbyBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgZm9yIGRldGVybWluaW5nICYjMzQ7V29ydGhGdXp6aW5nLiYjMzQ7IEkgaGF2ZSB0byBiZSBjYXJlZnVsIGhlcmU6CiogICBEb2N1bWVudGF0aW9uL0tjb25maWcvQ29tbWVudHM/IE5vCiogICBEZWNvcmF0aXZlIGNoYW5nZXMgKGxvZ2dpbmcsIHRyYWNlcG9pbnRzKT8gTm8KKiAgIENoYW5nZXMgdG8gY29uc3RhbnRzL21hY3JvcyB3aXRob3V0IGZ1bmN0aW9uYWwgaW1wYWN0PyBObwoqICAgVW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRT8gVGhpcyBpcyBhIGtleSBwb2ludCwgYW5kIEkgaGF2ZSB0byBiZSBzdXJlLgoqICAgVmVuZG9yLXNwZWNpZmljIFBDSWUvU21hcnROSUMvR1BVIGRyaXZlcnMgKHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSk/IERlZmluaXRlbHkgbmVlZCB0byBjb25zaWRlcgoqICAgRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IG9ubHkgcnVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciB1bmJpbmQgb3BlcmF0aW9ucz8gTm8uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcy4gSSBzZWU6CgoxLiAgYGRldl9zd19uZXRzdGF0c190eF9hZGQobmV0ZGV2LCAxLCBsZW4pO2AgaW4gYGJhbV9kbXV4X3R4X2NhbGxiYWNrYAoyLiAgYC5uZG9fZ2V0X3N0YXRzNjQgPSBkZXZfZ2V0X3RzdGF0czY0LGAgaW4gYGJhbV9kbXV4X29wc2AKMy4gIGBkZXYtJmd0O3BjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9UU1RBVFM7YCBpbiBgYmFtX2RtdXhfbmV0ZGV2X3NldHVwYAo0LiAgYGRldl9zd19uZXRzdGF0c19yeF9hZGQobmV0ZGV2LCBza2ItJmd0O2xlbik7YCBpbiBgYmFtX2RtdXhfY21kX2RhdGFgCgpUaGlzIGFsbCBsb29rcyBsaWtlIHN0YW5kYXJkIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZywgYWRkaW5nIGB0c3RhdHNgIHVzaW5nIGBkZXZfc3dfbmV0c3RhdHNfKmAgYW5kIGAubmRvX2dldF9zdGF0czY0YC4gVGhpcyBtZWFucyBjb3VudGluZyBwYWNrZXRzIGFuZCBieXRlcy4KCk5vdywgY29uc2lkZXJpbmcgdGhlIGVudmlyb25tZW50IGFuZCB0aGUgY2hhbmdlcywgSSBjYW4gbWFrZSBzb21lIGp1ZGdlbWVudHMuCgpGaXJzdCwgYHFjb21fYmFtX2RtdXguY2AgaXMgUXVhbGNvbW0tc3BlY2lmaWMgaGFyZHdhcmUgKEJBTS1ETVVYKSwgd2hpY2ggaW1wbGllcyB0aGF0IGl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcmVhY2hlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS4KClNlY29uZCwgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMgYXJlIG9ubHkgYWRkaW5nIHN0YXRzIHJlcG9ydGluZywgd2hpY2ggaXMgY29tbW9uIGFuZCBub3QgcmVhbGx5IGEgbmV3IGNvZGUgcGF0aC4gVGhpcyBhbHNvIG1lYW5zIHRoaXMgd291bGRuJiMzOTt0IGxpa2VseSBicmVhayB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpUaGVyZWZvcmUsICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgc2hvdWxkIGJlIHNldCB0byAqZmFsc2UqLiBUaGlzIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuCgpMZXQgbWUgZG91YmxlLWNoZWNrOgoqICAgT25seSBvbmUgZmlsZSBtb2RpZmllZCwgYGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jYC4KKiAgIGBxY29tX2JhbV9kbXV4LmNgIHVzZXMgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSBjaGFubmVscywgd2hpY2ggbWVhbnMgaXQgd2lsbCAqbm90KiB3b3JrIGluIFFFTVUvR0NFIHdpdGhvdXQgdGhvc2UgY2hhbm5lbHMsIHNvIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHRoZXNlIHZpcnR1YWwgZW52aXJvbm1lbnRzLgoqICAgVGhlIHBhdGNoIG9ubHkgYWRkcyBzb2Z0d2FyZSBzdGF0aXN0aWNzIGNvbGxlY3Rpb24uCgpPa2F5LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgUmVhc29uaW5nYDogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdGFuZGFyZCBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZyAoZGV2X3N3X25ldHN0YXRzX3R4X2FkZCwgZGV2X3N3X25ldHN0YXRzX3J4X2FkZCwgYW5kIGRldl9nZXRfdHN0YXRzNjQpIHRvIHRoZSBRdWFsY29tbSBCQU0tRE1VWCBXV0FOIGRyaXZlciAocWNvbV9iYW1fZG11eC5jKS4gVGhpcyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gUXVhbGNvbW0gU29DcyBhbmQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgLyBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIGNoYW5uZWxzLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDsKKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAKCkFuZCBmaW5hbGx5LCBsZXQmIzM5O3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdGFuZGFyZCBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZyAoZGV2X3N3X25ldHN0YXRzX3R4X2FkZCwgZGV2X3N3X25ldHN0YXRzX3J4X2FkZCwgZGV2X2dldF90c3RhdHM2NCkgdG8gdGhlIFF1YWxjb21tIEJBTS1ETVVYIGRyaXZlciAoZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMpLiBUaGlzIHBsYXRmb3JtIGRyaXZlciBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSBTb0NzIChyZXF1aXJpbmcgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSBjaGFubmVscykgYW5kIGlzIG5vdCByZWFjaGFibGUgb3IgcHJvYmVhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN0YW5kYXJkIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHRyYWNraW5nIChkZXZfc3dfbmV0c3RhdHNfdHhfYWRkLCBkZXZfc3dfbmV0c3RhdHNfcnhfYWRkLCBkZXZfZ2V0X3RzdGF0czY0KSB0byB0aGUgUXVhbGNvbW0gQkFNLURNVVggZHJpdmVyIChkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYykuIFRoaXMgcGxhdGZvcm0gZHJpdmVyIGlzIHNwZWNpZmljIHRvIFF1YWxjb21tIFNvQ3MgKHJlcXVpcmluZyBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIGNoYW5uZWxzKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBvciBwcm9iZWFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDA5OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowMzozMi41MTU4Nzc0MTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEyMDY5NTQ0NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdGFuZGFyZCBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZyAoZGV2X3N3X25ldHN0YXRzX3R4X2FkZCwgZGV2X3N3X25ldHN0YXRzX3J4X2FkZCwgZGV2X2dldF90c3RhdHM2NCkgdG8gdGhlIFF1YWxjb21tIEJBTS1ETVVYIGRyaXZlciAoZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMpLiBUaGlzIHBsYXRmb3JtIGRyaXZlciBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSBTb0NzIChyZXF1aXJpbmcgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSBjaGFubmVscykgYW5kIGlzIG5vdCByZWFjaGFibGUgb3IgcHJvYmVhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowMzozMi41MTU4OTQzMDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTU4MDcwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMjZmMGIwMmIzOTFlZTliOTQ4NjQyODc3YzM3MzAyMDI3YTQ5M2JhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDMwIDA5OjAzOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jIGIvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcXG5pbmRleCBjYzZhY2U4ZDY0MzcxLi40MGM0MGJjNTY0NWEyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcXG5AQCAtMTc3LDggKzE3NywxNSBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF90eF9jYWxsYmFjayh2b2lkICpkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBiYW1fZG11eF9za2JfZG1hICpza2JfZG1hID0gZGF0YTtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kbWEtXFx1MDAzZXNrYjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbitcXHR1bnNpZ25lZCBpbnQgbGVuID0gMDtcXG4rXFxuK1xcdGlmIChuZXRkZXYpXFxuK1xcdFxcdGxlbiA9ICgoc3RydWN0IGJhbV9kbXV4X2hkciAqKXNrYi1cXHUwMDNlZGF0YSktXFx1MDAzZWxlbjtcXG4gXFxuIFxcdGJhbV9kbXV4X3R4X2RvbmUoc2tiX2RtYSk7XFxuK1xcdGlmIChuZXRkZXYpXFxuK1xcdFxcdGRldl9zd19uZXRzdGF0c190eF9hZGQobmV0ZGV2LCAxLCBsZW4pO1xcbiBcXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XFxuIH1cXG4gXFxuQEAgLTQwMiw2ICs0MDksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhbV9kbXV4X29wcyA9IHtcXG4gXFx0Lm5kb19vcGVuXFx0PSBiYW1fZG11eF9uZXRkZXZfb3BlbixcXG4gXFx0Lm5kb19zdG9wXFx0PSBiYW1fZG11eF9uZXRkZXZfc3RvcCxcXG4gXFx0Lm5kb19zdGFydF94bWl0XFx0PSBiYW1fZG11eF9uZXRkZXZfc3RhcnRfeG1pdCxcXG4rXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gZGV2X2dldF90c3RhdHM2NCxcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgd3dhbl90eXBlID0ge1xcbkBAIC00MjEsNiArNDI5LDcgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBiYW1fZG11eF9oZHIpO1xcbiBcXHRkZXYtXFx1MDAzZW5lZWRlZF90YWlscm9vbSA9IHNpemVvZih1MzIpOyAvKiB3b3JkLWFsaWduZWQgKi9cXG4gXFx0ZGV2LVxcdTAwM2V0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjtcXG4rXFx0ZGV2LVxcdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTO1xcbiBcXG4gXFx0LyogVGhpcyBwZXJtIGFkZHIgd2lsbCBiZSB1c2VkIGFzIGludGVyZmFjZSBpZGVudGlmaWVyIGJ5IElQdjYgKi9cXG4gXFx0ZGV2LVxcdTAwM2VhZGRyX2Fzc2lnbl90eXBlID0gTkVUX0FERFJfUkFORE9NO1xcbkBAIC01MzMsNiArNTQyLDcgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2RhdGEoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbitcXHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKG5ldGRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbiBcXHRuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowMzozNC4wMzI2Njk5OTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxMTA1NTI3Mzg5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3RhbmRhcmQgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgdHJhY2tpbmcgKGRldl9zd19uZXRzdGF0c190eF9hZGQsIGRldl9zd19uZXRzdGF0c19yeF9hZGQsIGRldl9nZXRfdHN0YXRzNjQpIHRvIHRoZSBRdWFsY29tbSBCQU0tRE1VWCBkcml2ZXIgKGRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jKS4gVGhpcyBwbGF0Zm9ybSBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gUXVhbGNvbW0gU29DcyAocmVxdWlyaW5nIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgY2hhbm5lbHMpIGFuZCBpcyBub3QgcmVhY2hhYmxlIG9yIHByb2JlYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjI2ZjBiMDJiMzkxZWU5Yjk0ODY0Mjg3N2MzNzMwMjAyN2E0OTNiYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDA5OjAzOjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuaW5kZXggY2M2YWNlOGQ2NDM3MS4uNDBjNDBiYzU2NDVhMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuQEAgLTE3Nyw4ICsxNzcsMTUgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfdHhfY2FsbGJhY2sodm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSA9IGRhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RtYS1cdTAwM2Vza2I7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gc2tiLVx1MDAzZWRldjtcbitcdHVuc2lnbmVkIGludCBsZW4gPSAwO1xuK1xuK1x0aWYgKG5ldGRldilcbitcdFx0bGVuID0gKChzdHJ1Y3QgYmFtX2RtdXhfaGRyICopc2tiLVx1MDAzZWRhdGEpLVx1MDAzZWxlbjtcbiBcbiBcdGJhbV9kbXV4X3R4X2RvbmUoc2tiX2RtYSk7XG4rXHRpZiAobmV0ZGV2KVxuK1x0XHRkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKG5ldGRldiwgMSwgbGVuKTtcbiBcdGRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTtcbiB9XG4gXG5AQCAtNDAyLDYgKzQwOSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmFtX2RtdXhfb3BzID0ge1xuIFx0Lm5kb19vcGVuXHQ9IGJhbV9kbXV4X25ldGRldl9vcGVuLFxuIFx0Lm5kb19zdG9wXHQ9IGJhbV9kbXV4X25ldGRldl9zdG9wLFxuIFx0Lm5kb19zdGFydF94bWl0XHQ9IGJhbV9kbXV4X25ldGRldl9zdGFydF94bWl0LFxuK1x0Lm5kb19nZXRfc3RhdHM2NFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3d2FuX3R5cGUgPSB7XG5AQCAtNDIxLDYgKzQyOSw3IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYmFtX2RtdXhfaGRyKTtcbiBcdGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20gPSBzaXplb2YodTMyKTsgLyogd29yZC1hbGlnbmVkICovXG4gXHRkZXYtXHUwMDNldHhfcXVldWVfbGVuID0gREVGQVVMVF9UWF9RVUVVRV9MRU47XG4rXHRkZXYtXHUwMDNlcGNwdV9zdGF0X3R5cGUgPSBORVRERVZfUENQVV9TVEFUX1RTVEFUUztcbiBcbiBcdC8qIFRoaXMgcGVybSBhZGRyIHdpbGwgYmUgdXNlZCBhcyBpbnRlcmZhY2UgaWRlbnRpZmllciBieSBJUHY2ICovXG4gXHRkZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1JBTkRPTTtcbkBAIC01MzMsNiArNTQyLDcgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfY21kX2RhdGEoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgKnNrYl9kbWEpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuK1x0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChuZXRkZXYsIHNrYi1cdTAwM2VsZW4pO1xuIFx0bmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowMzozNC4wMzI2NzI0NjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDcxNjcyMzA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGF0IGRyaXZlci4gTGV0J3MgZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaXQgKmlzKi4gSXMgaXQgYSBtb2RlbSBkcml2ZXI/IFNvbWUga2luZCBvZiBkYXRhIG11bHRpcGxleGVyPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgZnVuY3Rpb24gYW5kIHB1cnBvc2UuIERvZXMgaXQgaW50ZXJmYWNlIHdpdGggaGFyZHdhcmU/IElzIGl0IHVzZWQgaW4gc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudHMgb3IganVzdCBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9ucywgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBpcyBpdCAqcmVhY2hhYmxlKiBpbiBRRU1VLCBvciBzb21lIG90aGVyIGRldmVsb3BtZW50IGVudmlyb25tZW50P1xuXG5SaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gTGV0J3MgZmlyZSB1cCBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayBsb29rIGF0IGBxY29tX2JhbV9kbXV4LmNgIGl0c2VsZi4gVGhlbiwgSSBzaG91bGQgYWxzbyBjaGVjayBpdHMgY29ycmVzcG9uZGluZyBgS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgdGVsbCBtZSBob3cgaXQncyBpbnRlZ3JhdGVkLCBhbmQgaWYgaXQncyBldmVuIGEgdmlhYmxlIHRhcmdldCBmb3IgcXVpY2sgdGVzdGluZy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgdGhlIHBhdGNoJ3MgaW1wYWN0IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowNDo0NC43NDkzOTg1MTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NzU3NzMzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJRQ09NX0JBTV9ETVVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTUzPWNvbmZpZyBNSElfV1dBTl9NQklNXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNjQtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjY1OmNvbmZpZyBRQ09NX0JBTV9ETVVYXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTY2LVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBCQU0tRE1VWCBXV0FOIG5ldHdvcmsgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfTUhJX1dXQU5fTUJJTSkgKz0gbWhpX3d3YW5fbWJpbS5vXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfUUNPTV9CQU1fRE1VWCkgKz0gcWNvbV9iYW1fZG11eC5vXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZS0xNC1vYmotJChDT05GSUdfUlBNU0dfV1dBTl9DVFJMKSArPSBycG1zZ193d2FuX2N0cmwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowNDo0Ni4yNDY5ODA0MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg4MTkyMjg2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBRQ09NX0JBTV9ETVVYIEtjb25maWcgRW50cnkqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYFFDT01fQkFNX0RNVVhgIG1vZHVsZSwgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBLY29uZmlnIGZpbGUuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBlbnRyeSBmb3IgaXQgaW1tZWRpYXRlbHkuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGl0cyBkZXBlbmRlbmNpZXMg4oCTIHdoYXQgb3RoZXIgY29tcG9uZW50cyAqbXVzdCogYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGZvciB0aGlzIHRvIGV2ZW4gY29tcGlsZSBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIHByZXNlbnQgb3IgZW5hYmxlZD8gSXQncyBhbGwgYWJvdXQgdW50YW5nbGluZyB0aG9zZSByZWxhdGlvbnNoaXBzLlxuXG5UaGVuLCBJJ2xsIG1vdmUgb24gdG8gdGhlIG1vcmUgY3J1Y2lhbCBhc3BlY3Q6IGJpbmRpbmcgYW5kIHByb2JpbmcuIEhvdyBkb2VzIHRoZSBkcml2ZXIgZm9yIHRoaXMgYFFDT01fQkFNX0RNVVhgIGdldCBjb25uZWN0ZWQgdG8gdGhlIGhhcmR3YXJlPyBXaGF0J3MgdGhlIHByb2JlIHNlcXVlbmNlPyBXaGF0IGtpbmQgb2YgZGV2aWNlIHRyZWUgYmluZGluZ3MgYXJlIGludm9sdmVkPyBVbmRlcnN0YW5kaW5nIHRoZSBiaW5kaW5nIHByb2Nlc3Mgd2lsbCBxdWlja2x5IHBvaW50IHRvIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb25zIGFuZCBsaWtlbHkgaWRlbnRpZnkgcG90ZW50aWFsIGNvbmZsaWN0cywgb3IgZXZlbiBzdWdnZXN0IGFyZWFzIHRoYXQgbmVlZCByZWZpbmVtZW50LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaGludHMgYWJvdXQgaW50ZXJydXB0IGhhbmRsaW5nLCBETUEgY29uZmlndXJhdGlvbiAoaWYgYXBwbGljYWJsZSksIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGlzIHdpbGwgaW5mb3JtIG15IGRlc2lnbiBjaG9pY2VzLCBvciBldmVuIG15IGRlYnVnZ2luZyBzdHJhdGVneSBkb3duIHRoZSByb2FkLiBBbHJpZ2h0LCBLY29uZmlnIGZpbGUuLi4gbGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6MDg6NDUuMDY2MjExNDQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdCAgICAgICAgICBJRCAwLiBBZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSBjcmVhdGVkIHZpYSB3d2FuIHJ0bmV0bGluayB0eXBlLlxcbiAgNjE6XFx0XFxuICA2MjpcXHQgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA2MzpcXHQgICAgICAgICAgY2FsbGVkIG1oaV93d2FuX21iaW0uXFxuICA2NDpcXHRcXG4gIDY1OlxcdGNvbmZpZyBRQ09NX0JBTV9ETVVYXFxuICA2NjpcXHRcXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gQkFNLURNVVggV1dBTiBuZXR3b3JrIGRyaXZlclxcXCJcXG4gIDY3OlxcdFxcdGRlcGVuZHMgb24gKERNQV9FTkdJTkUgXFx1MDAyNlxcdTAwMjYgUE0gXFx1MDAyNlxcdTAwMjYgUUNPTV9TTUVNX1NUQVRFKSB8fCBDT01QSUxFX1RFU1RcXG4gIDY4OlxcdFxcdGhlbHBcXG4gIDY5OlxcdFxcdCAgVGhlIEJBTSBEYXRhIE11bHRpcGxleGVyIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbmV0d29yayBkYXRhIGNoYW5uZWxzXFxuICA3MDpcXHRcXHQgIG9mIG1vZGVtcyBpbnRlZ3JhdGVkIGludG8gbWFueSBvbGRlciBRdWFsY29tbSBTb0NzLCBlLmcuIFF1YWxjb21tXFxuICA3MTpcXHRcXHQgIE1TTTg5MTYgb3IgTVNNODk3NC4gVGhlIGNvbm5lY3Rpb24gY2FuIGJlIGVzdGFibGlzaGVkIHZpYSBRTUkvQVQgZnJvbVxcbiAgNzI6XFx0XFx0ICB1c2Vyc3BhY2Ugd2l0aCBjb250cm9sIHBvcnRzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBXV0FOIHN1YnN5c3RlbVxcbiAgNzM6XFx0XFx0ICAoQ09ORklHX1JQTVNHX1dXQU5fQ1RSTCkgb3IgUVJUUiBuZXR3b3JrIHNvY2tldHMgKENPTkZJR19RUlRSKS5cXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gIDc2OlxcdFxcdCAgY2FsbGVkIHFjb21fYmFtX2RtdXguXFxuICA3NzpcXHRcXG4gIDc4OlxcdGNvbmZpZyBSUE1TR19XV0FOX0NUUkxcXG4gIDc5OlxcdFxcdHRyaXN0YXRlIFxcXCJSUE1TRyBXV0FOIGNvbnRyb2wgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTowODo0NS4wNjYyNzEwMzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc0ODA3NTg4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHFjb21fYmFtX2RtdXguY2AgZm9yIERyaXZlciBQcm9iZSBBbmFseXNpcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBxY29tX2JhbV9kbXV4LmNgIGRyaXZlci4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyBoYW5kbGVzIGl0cyBwcm9iZSBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmZhY2luZyB3aXRoIHRoZSBCQU0gRE1VWCAoQnVzIEFjY2VzcyBNYW5hZ2VyL0RlbXVsdGlwbGV4ZXIpLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlZ2lzdHJhdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcuIEhvcGVmdWxseSwgdGhlIGNvZGUgY29tbWVudHMgYXJlIGRlY2VudCBhbmQgbWFrZSB0aGlzIGV4cGxvcmF0aW9uIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6MTI6NTIuNTQ3MDMyMjA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NTA6XFx0XFx0XFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuIDc1MTpcXHRcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4gNzUyOlxcdFxcdH1cXG4gNzUzOlxcdFxcbiA3NTQ6XFx0XFx0LyogRW5zdXJlIHRoYXQgd2UgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuIDc1NTpcXHRcXHRpZiAoIWRtdXgtXFx1MDAzZXJ4KSB7XFxuIDc1NjpcXHRcXHRcXHRiYW1fZG11eF9wY192b3RlKGRtdXgsIGZhbHNlKTtcXG4gNzU3OlxcdFxcdFxcdHJldHVybiAtRU5YSU87XFxuIDc1ODpcXHRcXHR9XFxuIDc1OTpcXHRcXG4gNzYwOlxcdFxcdC8qIFJlcXVlc3QgVFggY2hhbm5lbCBpZiBuZWNlc3NhcnkgKi9cXG4gNzYxOlxcdFxcdGlmIChkbXV4LVxcdTAwM2V0eClcXG4gNzYyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA3NjM6XFx0XFxuIDc2NDpcXHRcXHRkbXV4LVxcdTAwM2V0eCA9IGRtYV9yZXF1ZXN0X2NoYW4oZGV2LCBcXFwidHhcXFwiKTtcXG4gNzY1OlxcdFxcdGlmIChJU19FUlIoZG11eC1cXHUwMDNldHgpKSB7XFxuIDc2NjpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byByZXF1ZXN0IFRYIERNQSBjaGFubmVsOiAlcGVcXFxcblxcXCIsIGRtdXgtXFx1MDAzZXR4KTtcXG4gNzY3OlxcdFxcdFxcdGRtdXgtXFx1MDAzZXR4ID0gTlVMTDtcXG4gNzY4OlxcdFxcdFxcdGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpO1xcbiA3Njk6XFx0XFx0XFx0cmV0dXJuIC1FTlhJTztcXG4gNzcwOlxcdFxcdH1cXG4gNzcxOlxcdFxcbiA3NzI6XFx0XFx0cmV0dXJuIDA7XFxuIDc3MzpcXHR9XFxuIDc3NDpcXHRcXG4gNzc1OlxcdHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gNzc2OlxcdHtcXG4gNzc3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIDc3ODpcXHRcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXg7XFxuIDc3OTpcXHRcXHRpbnQgcmV0LCBwY19hY2tfaXJxLCBpO1xcbiA3ODA6XFx0XFx0dW5zaWduZWQgaW50IGJpdDtcXG4gNzgxOlxcdFxcbiA3ODI6XFx0XFx0ZG11eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZG11eCksIEdGUF9LRVJORUwpO1xcbiA3ODM6XFx0XFx0aWYgKCFkbXV4KVxcbiA3ODQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc4NTpcXHRcXG4gNzg2OlxcdFxcdGRtdXgtXFx1MDAzZWRldiA9IGRldjtcXG4gNzg3OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRtdXgpO1xcbiA3ODg6XFx0XFxuIDc4OTpcXHRcXHRkbXV4LVxcdTAwM2VwY19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBcXFwicGNcXFwiKTtcXG4gNzkwOlxcdFxcdGlmIChkbXV4LVxcdTAwM2VwY19pcnEgXFx1MDAzYyAwKVxcbiA3OTE6XFx0XFx0XFx0cmV0dXJuIGRtdXgtXFx1MDAzZXBjX2lycTtcXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0cGNfYWNrX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsIFxcXCJwYy1hY2tcXFwiKTtcXG4gNzk0OlxcdFxcdGlmIChwY19hY2tfaXJxIFxcdTAwM2MgMClcXG4gNzk1OlxcdFxcdFxcdHJldHVybiBwY19hY2tfaXJxO1xcbiA3OTY6XFx0XFxuIDc5NzpcXHRcXHRkbXV4LVxcdTAwM2VwYyA9IGRldm1fcWNvbV9zbWVtX3N0YXRlX2dldChkZXYsIFxcXCJwY1xcXCIsIFxcdTAwMjZiaXQpO1xcbiA3OTg6XFx0XFx0aWYgKElTX0VSUihkbXV4LVxcdTAwM2VwYykpXFxuIDc5OTpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZG11eC1cXHUwMDNlcGMpLFxcbiA4MDA6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGdldCBwYyBzdGF0ZVxcXFxuXFxcIik7XFxuIDgwMTpcXHRcXHRkbXV4LVxcdTAwM2VwY19tYXNrID0gQklUKGJpdCk7XFxuIDgwMjpcXHRcXG4gODAzOlxcdFxcdGRtdXgtXFx1MDAzZXBjX2FjayA9IGRldm1fcWNvbV9zbWVtX3N0YXRlX2dldChkZXYsIFxcXCJwYy1hY2tcXFwiLCBcXHUwMDI2Yml0KTtcXG4gODA0OlxcdFxcdGlmIChJU19FUlIoZG11eC1cXHUwMDNlcGNfYWNrKSlcXG4gODA1OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkbXV4LVxcdTAwM2VwY19hY2spLFxcbiA4MDY6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGdldCBwYy1hY2sgc3RhdGVcXFxcblxcXCIpO1xcbiA4MDc6XFx0XFx0ZG11eC1cXHUwMDNlcGNfYWNrX21hc2sgPSBCSVQoYml0KTtcXG4gODA4OlxcdFxcbiA4MDk6XFx0XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2ZG11eC1cXHUwMDNlcGNfd2FpdCk7XFxuIDgxMDpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmRtdXgtXFx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcXG4gODExOlxcdFxcdGNvbXBsZXRlX2FsbChcXHUwMDI2ZG11eC1cXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24pO1xcbiA4MTI6XFx0XFxuIDgxMzpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZG11eC1cXHUwMDNldHhfbG9jayk7XFxuIDgxNDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmRtdXgtXFx1MDAzZXR4X3dha2V1cF93b3JrLCBiYW1fZG11eF90eF93YWtldXBfd29yayk7XFxuIDgxNTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmRtdXgtXFx1MDAzZXJlZ2lzdGVyX25ldGRldl93b3JrLCBiYW1fZG11eF9yZWdpc3Rlcl9uZXRkZXZfd29yayk7XFxuIDgxNjpcXHRcXG4gODE3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCQU1fRE1VWF9OVU1fU0tCOyBpKyspIHtcXG4gODE4OlxcdFxcdFxcdGRtdXgtXFx1MDAzZXJ4X3NrYnNbaV0uZG11eCA9IGRtdXg7XFxuIDgxOTpcXHRcXHRcXHRkbXV4LVxcdTAwM2V0eF9za2JzW2ldLmRtdXggPSBkbXV4O1xcbiA4MjA6XFx0XFx0fVxcbiA4MjE6XFx0XFxuIDgyMjpcXHRcXHQvKiBSdW50aW1lIFBNIG1hbmFnZXMgb3VyIG93biBwb3dlciB2b3RlLlxcbiA4MjM6XFx0XFx0ICogTm90ZSB0aGF0IHRoZSBSWCBwYXRoIG1heSBiZSBhY3RpdmUgZXZlbiBpZiB3ZSBhcmUgcnVudGltZSBzdXNwZW5kZWQsXFxuIDgyNDpcXHRcXHQgKiBzaW5jZSBpdCBpcyBjb250cm9sbGVkIGJ5IHRoZSByZW1vdGUgc2lkZS5cXG4gODI1OlxcdFxcdCAqL1xcbiA4MjY6XFx0XFx0cG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoZGV2LCBCQU1fRE1VWF9BVVRPU1VTUEVORF9ERUxBWSk7XFxuIDgyNzpcXHRcXHRwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpO1xcbiA4Mjg6XFx0XFx0cG1fcnVudGltZV9lbmFibGUoZGV2KTtcXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIHBjX2Fja19pcnEsIE5VTEwsIGJhbV9kbXV4X3BjX2Fja19pcnEsXFxuIDgzMTpcXHRcXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xcbiA4MzI6XFx0XFx0aWYgKHJldClcXG4gODMzOlxcdFxcdFxcdGdvdG8gZXJyX2Rpc2FibGVfcG07XFxuIDgzNDpcXHRcXG4gODM1OlxcdFxcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBkbXV4LVxcdTAwM2VwY19pcnEsIE5VTEwsIGJhbV9kbXV4X3BjX2lycSxcXG4gODM2OlxcdFxcdFxcdFxcdFxcdFxcdElSUUZfT05FU0hPVCwgTlVMTCwgZG11eCk7XFxuIDgzNzpcXHRcXHRpZiAocmV0KVxcbiA4Mzg6XFx0XFx0XFx0Z290byBlcnJfZGlzYWJsZV9wbTtcXG4gODM5OlxcdFxcbiA4NDA6XFx0XFx0cmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtXFx1MDAzZXBjX2lycSwgSVJRQ0hJUF9TVEFURV9MSU5FX0xFVkVMLFxcbiA4NDE6XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkbXV4LVxcdTAwM2VwY19zdGF0ZSk7XFxuIDg0MjpcXHRcXHRpZiAocmV0KVxcbiA4NDM6XFx0XFx0XFx0Z290byBlcnJfZGlzYWJsZV9wbTtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0LyogQ2hlY2sgaWYgcmVtb3RlIGZpbmlzaGVkIGluaXRpYWxpemF0aW9uIGJlZm9yZSB1cyAqL1xcbiA4NDY6XFx0XFx0aWYgKGRtdXgtXFx1MDAzZXBjX3N0YXRlKSB7XFxuIDg0NzpcXHRcXHRcXHRpZiAoYmFtX2RtdXhfcG93ZXJfb24oZG11eCkpXFxuIDg0ODpcXHRcXHRcXHRcXHRiYW1fZG11eF9wY19hY2soZG11eCk7XFxuIDg0OTpcXHRcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA5OjEyOjUyLjU0NzE1MTY2NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk2NjUzNTAxNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBxY29tX2JhbV9kbXV4YCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcWNvbV9iYW1fZG11eGAgdGhpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBiaW5kaW5nLiBJcyB0aGlzIGEgcGxhdGZvcm0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGEgUXVhbGNvbW0gU3lzdGVtLW9uLWEtQ2hpcD8gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGF0J3MgbXkgc3Ryb25nIHN1c3BpY2lvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBzZWUgaWYgd2UgY2FuIGZpbmQgc29tZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb2RlIHRoYXQgY29uZmlybXMgaXRzIHB1cnBvc2UgYW5kIHRoZSBoYXJkd2FyZSBpdCdzIGludGVuZGVkIHRvIG1hbmFnZS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIHRoYXQgdGllIHRoaXMgZHJpdmVyIHRvIGEgc3BlY2lmaWMgcGllY2Ugb2YgUXVhbGNvbW0gc2lsaWNvbi4gSXQgd2lsbCBiZSByZWFsbHkgaGVscGZ1bCB0byB1bmRlcnN0YW5kIGlmIGl0cyBhIGxlZ2FjeSBkcml2ZXIgb3IgbmV3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA5OjE0OjI5LjIwMDY1NzM3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkzODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdFxcdFxcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcXG4gODUxOlxcdFxcdH1cXG4gODUyOlxcdFxcbiA4NTM6XFx0XFx0cmV0dXJuIDA7XFxuIDg1NDpcXHRcXG4gODU1OlxcdGVycl9kaXNhYmxlX3BtOlxcbiA4NTY6XFx0XFx0cG1fcnVudGltZV9kaXNhYmxlKGRldik7XFxuIDg1NzpcXHRcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XFxuIDg1ODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NTk6XFx0fVxcbiA4NjA6XFx0XFxuIDg2MTpcXHRzdGF0aWMgdm9pZCBiYW1fZG11eF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gODYyOlxcdHtcXG4gODYzOlxcdFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbiA4NjQ6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gZG11eC1cXHUwMDNlZGV2O1xcbiA4NjU6XFx0XFx0TElTVF9IRUFEKGxpc3QpO1xcbiA4NjY6XFx0XFx0aW50IGk7XFxuIDg2NzpcXHRcXG4gODY4OlxcdFxcdC8qIFVucmVnaXN0ZXIgbmV0d29yayBpbnRlcmZhY2VzICovXFxuIDg2OTpcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZkbXV4LVxcdTAwM2VyZWdpc3Rlcl9uZXRkZXZfd29yayk7XFxuIDg3MDpcXHRcXHRydG5sX2xvY2soKTtcXG4gODcxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCQU1fRE1VWF9OVU1fQ0g7ICsraSlcXG4gODcyOlxcdFxcdFxcdGlmIChkbXV4LVxcdTAwM2VuZXRkZXZzW2ldKVxcbiA4NzM6XFx0XFx0XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZG11eC1cXHUwMDNlbmV0ZGV2c1tpXSwgXFx1MDAyNmxpc3QpO1xcbiA4NzQ6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueShcXHUwMDI2bGlzdCk7XFxuIDg3NTpcXHRcXHRydG5sX3VubG9jaygpO1xcbiA4NzY6XFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2ZG11eC1cXHUwMDNldHhfd2FrZXVwX3dvcmspO1xcbiA4Nzc6XFx0XFxuIDg3ODpcXHRcXHQvKiBEcm9wIG91ciBvd24gcG93ZXIgdm90ZSAqL1xcbiA4Nzk6XFx0XFx0cG1fcnVudGltZV9kaXNhYmxlKGRldik7XFxuIDg4MDpcXHRcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XFxuIDg4MTpcXHRcXHRiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTtcXG4gODgyOlxcdFxcdHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpO1xcbiA4ODM6XFx0XFxuIDg4NDpcXHRcXHQvKiBUcnkgdG8gd2FpdCBmb3IgcmVtb3RlIHNpZGUgdG8gZHJvcCBwb3dlciB2b3RlICovXFxuIDg4NTpcXHRcXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChkbXV4LVxcdTAwM2VwY193YWl0LCAhZG11eC1cXHUwMDNlcngsIEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSlcXG4gODg2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlbW90ZSBzaWRlIHRvIHN1c3BlbmRcXFxcblxcXCIpO1xcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHQvKiBNYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjbGVhbmVkIHVwIGJlZm9yZSB3ZSByZXR1cm4gKi9cXG4gODg5OlxcdFxcdGRpc2FibGVfaXJxKGRtdXgtXFx1MDAzZXBjX2lycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA5OjE0OjI5LjIwMDgwMTI2MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDA5MTkzNjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN1bW1hcml6ZSBteSBcInRob3VnaHRzXCIgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGEgc3ViamVjdCBtYXR0ZXIgZXhwZXJ0LiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBpdDpcblxuKipEaWdnaW5nIERlZXBlcjogRW5zdXJpbmcgQ29tcHJlaGVuc2l2ZSBDb3ZlcmFnZSoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4gV2UndmUgbG9va2VkIGF0IG9uZSBwYXJ0IG9mIHRoZSBmaWxlLCBidXQgd2UgY2FuJ3Qgc3RvcCB0aGVyZS4gSSdtIHRoaW5raW5nLCBcIkxldCdzIG5vdCBqdXN0IGFzc3VtZSB3ZSd2ZSBzZWVuIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBzZWUuXCIgV2UgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBicmllZiBnbGltcHNlIGlzIHJlcHJlc2VudGF0aXZlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgZm9yIGFueSBkZXBlbmRlbmNpZXMuIEkgc2hvdWxkIGdvIHRocm91Z2ggdGhlIE9GIG1hdGNoIHRhYmxlLiBNYXliZSB0aGVyZSBhcmUgb3RoZXIgdGFibGVzIG9yIGRhdGEgcG9pbnRzIGluIHRoaXMgZmlsZSB0aGF0IGFyZSByZWxldmFudC4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiB3aGF0IG90aGVyIHBpZWNlcyBtaWdodCBpbnRlcmFjdCB3aXRoIHRoaXMgZmlyc3QgcGFydC4gV2hhdCBlbHNlIG1pZ2h0IGJlIGltcGFjdGVkLCB3aGF0IG90aGVyIHJ1bGVzIG9yIGRlcGVuZGVuY2llcyBhcmUgdHJpZ2dlcmVkIGJ5IHRoaXMgY29kZT8gSSBuZWVkIHRvIGJ1aWxkIGEgcmVhbGx5IGNvbXBsZXRlIHBpY3R1cmUgdG8gYXZvaWQgbWlzc2luZyBzb21ldGhpbmcgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYxNCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6MTU6MjMuMjkyNzQxMTE3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4OTA6XFx0XFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xcbiA4OTE6XFx0XFx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXFx1MDAzZXR4X3NrYnMsIERNQV9UT19ERVZJQ0UpO1xcbiA4OTI6XFx0fVxcbiA4OTM6XFx0XFxuIDg5NDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYmFtX2RtdXhfcG1fb3BzID0ge1xcbiA4OTU6XFx0XFx0U0VUX1JVTlRJTUVfUE1fT1BTKGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZCwgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUsIE5VTEwpXFxuIDg5NjpcXHR9O1xcbiA4OTc6XFx0XFxuIDg5ODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiYW1fZG11eF9vZl9tYXRjaFtdID0ge1xcbiA4OTk6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIiB9LFxcbiA5MDA6XFx0XFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuIDkwMTpcXHR9O1xcbiA5MDI6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYmFtX2RtdXhfb2ZfbWF0Y2gpO1xcbiA5MDM6XFx0XFxuIDkwNDpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiYW1fZG11eF9kcml2ZXIgPSB7XFxuIDkwNTpcXHRcXHQucHJvYmUgPSBiYW1fZG11eF9wcm9iZSxcXG4gOTA2OlxcdFxcdC5yZW1vdmUgPSBiYW1fZG11eF9yZW1vdmUsXFxuIDkwNzpcXHRcXHQuZHJpdmVyID0ge1xcbiA5MDg6XFx0XFx0XFx0Lm5hbWUgPSBcXFwiYmFtLWRtdXhcXFwiLFxcbiA5MDk6XFx0XFx0XFx0LnBtID0gXFx1MDAyNmJhbV9kbXV4X3BtX29wcyxcXG4gOTEwOlxcdFxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGJhbV9kbXV4X29mX21hdGNoLFxcbiA5MTE6XFx0XFx0fSxcXG4gOTEyOlxcdH07XFxuIDkxMzpcXHRtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJhbV9kbXV4X2RyaXZlcik7XFxuIDkxNDpcXHRcXG4gOTE1OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUEwgdjJcXFwiKTtcXG4gOTE2OlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiUXVhbGNvbW0gQkFNLURNVVggV1dBTiBOZXR3b3JrIERyaXZlclxcXCIpO1xcbiA5MTc6XFx0TU9EVUxFX0FVVEhPUihcXFwiU3RlcGhhbiBHZXJob2xkIFxcdTAwM2NzdGVwaGFuQGdlcmhvbGQubmV0XFx1MDAzZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOToxNToyMy4yOTI4NzQwNjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYzODA5MTE5NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBxY29tX2JhbV9kbXV4YCBEcml2ZXIncyBWaXJ0dWFsaXphdGlvbiBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIHRoZSBgcWNvbV9iYW1fZG11eGAgZHJpdmVyLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIFF1YWxjb21tIFNvQ3MgYW5kIHV0aWxpemVzIERldmljZSBUcmVlIG1hdGNoaW5nIHRoZSBgcWNvbSxiYW0tZG11eGAgY29tcGF0aWJsZSBzdHJpbmcsIGNvdWxkIGJlIHNvbWVob3cgcmVhY2hlZCBvciBpbnN0YW50aWF0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLiBNeSBleHBlcnQgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdnZWQgc29tZSBwb3RlbnRpYWwgcm9hZGJsb2Nrcy5cblxuVGhlIGBiYW1fZG11eF9wcm9iZWAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCdzIGxvb2tpbmcgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gSSBzZWUgaXQncyBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgaW50ZXJydXB0cyB1c2luZyBgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWVgIChcInBjXCIsIFwicGMtYWNrXCIpLCBhY2Nlc3Npbmcgc2hhcmVkIG1lbW9yeSB0aHJvdWdoIGBkZXZtX3Fjb21fc21lbV9zdGF0ZV9nZXRgIChcInBjXCIsIFwicGMtYWNrXCIpLCBhbmQgcmVxdWVzdGluZyBETUEgY2hhbm5lbHMgd2l0aCBgZG1hX3JlcXVlc3RfY2hhbmAgKFwidHhcIikuIFRoZSB1c2Ugb2YgYGRldm1fcWNvbV9zbWVtX3N0YXRlX2dldGAgaW4gcGFydGljdWxhciBzY3JlYW1zIFwiUXVhbGNvbW0tc3BlY2lmaWNcIiBzaGFyZWQgbWVtb3J5IGFjY2VzcywgbGlrZWx5IHRpZWQgdG8gdGhlaXIgU3lzdGVtIE1lbW9yeSBSZWdpb24gKFNNRU0pLiBCQU0gRE1BIGlzIGFsc28gYSBzdHJvbmcgaGludC5cblxuU28sIEkgc3RhcnRlZCB0byB0aGluaywgXCJDYW4gdGhpcyBiZSB0cmlja2VkP1wiIENhbiB3ZSBtb2NrIHRoZXNlIGNhbGxzPyBUaGUgYW5zd2VyLCBnaXZlbiB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLCBpcyBhIHJlc291bmRpbmcgbm8uIFNwZWNpZmljYWxseSByZWZlcmVuY2luZyB0aGlzIGluZm9ybWF0aW9uOlxuXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIlxuXCJDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhlIGRyaXZlciBpcyBkZWZpbml0ZWx5ICpub3QqIGdvaW5nIHRvIHdvcmsgaW4gdGhlIHN0YW5kYXJkIHg4NiBvciBhcm02NCBRRU1VL0dDRSBlbnZpcm9ubWVudC4gVGhpcyBkcml2ZXIgKnJlbGllcyogb24gdGhlIFF1YWxjb21tIE1TTSBTb0MncyBzcGVjaWZpYyBoYXJkd2FyZSBjb21wb25lbnRzLCBuYW1lbHksIHRoZSBCQU0gRE1BIGFuZCBTTUVNIHN0YXRlLCB3aGljaCBhcmUgZnVuZGFtZW50YWxseSB1bmF2YWlsYWJsZSwgb3IgYXQgbGVhc3QgdW5tYXBwZWQsIHdpdGhvdXQgdGhlIHBoeXNpY2FsIFNvQyBoYXJkd2FyZSBvciBhIHZlcnkgZWxhYm9yYXRlIGFuZCBzcGVjaWZpYyBEVCBlbXVsYXRpb24uIEV2ZW4gaWYgc29tZW9uZSB3ZXJlIGFibGUgdG8gbG9hZCB0aGUgbW9kdWxlIG9yIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBlbnRyeSwgdGhlIHByb2JlIGZ1bmN0aW9uIHdvdWxkIGZhaWwgYmVjYXVzZSBpdCB3aWxsIG5vdCBiZSBhYmxlIHRvIGdldCBpbnRlcnJ1cHRzLiBMaWtld2lzZSwgaXQgd291bGQgZmFpbCB0byBnZXQgdGhlIHNoYXJlZCBtZW1vcnkgb3IgRE1BIGNoYW5uZWxzLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiBuZXR3b3JrIGRldmljZSBjcmVhdGlvbi4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBtYW55IGRyaXZlcnMgd2lsbCByZWdpc3RlciBhIG5ldHdvcmsgZGV2aWNlIHVzaW5nIHJ0bmV0bGluayBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgZHJpdmVyIHByb2JlcyBhbmQgaXMgbG9hZGVkIHN1Y2Nlc3NmdWxseS4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBkcml2ZXIgaXRzZWxmIHJlZ2lzdGVycyBhbnkgYHJ0bmxfbGlua19vcHNgLiBNeSBndWVzcyBpcyB0aGF0IGl0IGRvZXMgbm90LCBnaXZlbiB0aGF0IGl0cyBwdXJwb3NlIGlzIHRvIGJyaWRnZSB0byB1bmRlcmx5aW5nIFF1YWxjb21tIHNwZWNpZmljIGhhcmR3YXJlIGNvbXBvbmVudHMgKEJBTSBETUEgYW5kIFNNRU0pLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzU4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6MjQ6NDcuMTAxOTk3ODY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI3MzI0NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfbGlua19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jPTEyNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHd3YW5fcnRubF9wb2xpY3lbSUZMQV9XV0FOX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMjQ0LVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTI0NTpzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgd3dhbl9ydG5sX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMjQ2LVxcdC5raW5kID0gXFxcInd3YW5cXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz0xMjU3PXN0YXRpYyB2b2lkIHd3YW5fY3JlYXRlX2RlZmF1bHRfbGluayhzdHJ1Y3Qgd3dhbl9kZXZpY2UgKnd3YW5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTEzMDYtXFx0ZGV2ID0gcnRubF9jcmVhdGVfbGluayhcXHUwMDI2aW5pdF9uZXQsIFxcXCJ3d2FuJWRcXFwiLCBORVRfTkFNRV9FTlVNLFxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTMwNzpcXHRcXHRcXHQgICAgICAgXFx1MDAyNnd3YW5fcnRubF9saW5rX29wcywgdGIsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTMwOC1cXHRpZiAoV0FSTl9PTihJU19FUlIoZGV2KSkpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jPTE0MjA9c3RhdGljIGludCBfX2luaXQgd3dhbl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0MjMtXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzoxNDI0OlxcdGVyciA9IHJ0bmxfbGlua19yZWdpc3RlcihcXHUwMDI2d3dhbl9ydG5sX2xpbmtfb3BzKTtcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0MjUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtMTQ0OC11bnJlZ2lzdGVyOlxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTQ0OTpcXHRydG5sX2xpbmtfdW5yZWdpc3RlcihcXHUwMDI2d3dhbl9ydG5sX2xpbmtfb3BzKTtcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0NTAtXFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM9MTQ1Mz1zdGF0aWMgdm9pZCBfX2V4aXQgd3dhbl9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTE0NTYtXFx0X191bnJlZ2lzdGVyX2NocmRldih3d2FuX21ham9yLCAwLCBXV0FOX01BWF9NSU5PUlMsIFxcXCJ3d2FuX3BvcnRcXFwiKTtcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jOjE0NTc6XFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXFx1MDAyNnd3YW5fcnRubF9saW5rX29wcyk7XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xNDU4LVxcdGNsYXNzX3VucmVnaXN0ZXIoXFx1MDAyNnd3YW5fY2xhc3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOToyNDo0OC44MjkzMjc5MjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODE3OTc5MjAyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgcHJvbXB0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHd3YW5fcnRubF9saW5rX29wcyBhbmQgcWNvbV9iYW1fZG11eCoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYHd3YW5fcnRubF9saW5rX29wc2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHJvbGUgaW4gdGhlIFdXQU4gc3RhY2ssIHBhcnRpY3VsYXJseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZS4gSSdsbCBsaWtlbHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSByZWxldmFudCBrZXJuZWwgaGVhZGVycyBhbmQgc291cmNlIGZpbGVzIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgdXNlZC4gSSdsbCB3YW50IHRvIHRyYWNlIGl0cyBleGVjdXRpb24gcGF0aCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBsaW5rIG1hbmFnZW1lbnQgYW5kIHJvdXRpbmcuIFRoZW4sIEknbGwgbmVlZCB0byBzZWUgaWYgYHFjb21fYmFtX2RtdXhgIGlzIGFjdHVhbGx5IHVzaW5nIGl0LiBUaGUgbmFtZSBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIGEgUXVhbGNvbW0tc3BlY2lmaWMgQkFNIChCdWZmZXIgQWNjZXNzIE1hbmFnZXIpIGNvbXBvbmVudCwgc28gSSdsbCBuZWVkIHRvIHJlbGF0ZSB0aGlzIHRvIHRoZSBicm9hZGVyIFdXQU4gZnJhbWV3b3JrIGFuZCBpZiBpdCdzIGhhbmRsaW5nIHRoZSBkZW11bHRpcGxleGluZyBvZiBkYXRhLiBJZiBgcWNvbV9iYW1fZG11eGAgKmlzKiBkZXBlbmRlbnQgb24gYHd3YW5fY29yZWAsIHRoYXQgbWVhbnMgYHd3YW5fcnRubF9saW5rX29wc2AgaXMgcHJvYmFibHkgYWxzbyBjcml0aWNhbCBmb3IgdGhlIFFDT00gQkFNIGRlbXVsdGlwbGV4aW5nLiBUaGlzIHJlbGF0aW9uc2hpcCBpcyBpbXBvcnRhbnQgdG8gcGluIGRvd24uIEluIGVzc2VuY2UsIEkgbmVlZCB0byBzZWUgaWYgdGhlIEJBTSBkcml2ZXIncyBmdW5jdGlvbmFsaXR5IGxldmVyYWdlcyB0aGUgY29yZSBXV0FOIGZ1bmN0aW9uYWxpdGllcywgYW5kIHNwZWNpZmljYWxseSwgdGhlIG5ldGxpbmsgaW50ZXJmYWNlIG9wZXJhdGlvbnMuIEkgd2lsbCBzdGFydCB0cmFjaW5nIHRoZSBjYWxscyBhbmQgZGF0YSBmbG93IGFuZCB0aGVuIGNvbWUgdXAgd2l0aCBhIGNvbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOToyNjoxMC42MjcyNTEwOTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njk5NTY0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3dhbl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM9NDA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmFtX2RtdXhfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMtNDE0LVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQxNTpzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIHd3YW5fdHlwZSA9IHtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MTYtXFx0Lm5hbWUgPSBcXFwid3dhblxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYz00MTk9c3RhdGljIHZvaWQgYmFtX2RtdXhfbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MjMtXFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX1JBV0lQO1xcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jOjQyNDpcXHRTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcXHUwMDI2d3dhbl90eXBlKTtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy00MjUtXFx0ZGV2LVxcdTAwM2VmbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6MjY6MTIuMTk3MjE0MjE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNTk4NTEzOTExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqQW5hbHl6aW5nIGBxY29tX2JhbV9kbXV4LmNgJ3MgTmV0d29yayBEZXZpY2UgSGFuZGxpbmcqKlxuXG5SaWdodCwgc28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHFjb21fYmFtX2RtdXguY2AgZHJpdmVyLiBUaGUgaW1tZWRpYXRlIHBvaW50IG9mIGludGVyZXN0IGlzIHRoZSBuZXR3b3JrIGRldmljZSBhc3BlY3QuICBIbW0sIGludGVyZXN0aW5nLi4uIGl0ICpkb2Vzbid0KiBhcHBlYXIgdG8gZGlyZWN0bHkgbGV2ZXJhZ2UgYHd3YW5fY29yZS5jYCBsaWtlIEkgbWlnaHQgaGF2ZSBpbml0aWFsbHkgc3VzcGVjdGVkLiBJbnN0ZWFkLCBpdCdzIHRha2luZyBhIG1vcmUgZGlyZWN0IGFwcHJvYWNoIOKAkyByZWdpc3RlcmluZyByYXcgbmV0ZGV2aWNlcyB1c2luZyBgYWxsb2NfbmV0ZGV2YC4gVGhlIHVzZSBvZiBgYWxsb2NfbmV0ZGV2YCBpcyBrZXkgaGVyZSwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoZSBwcml2YXRlIGRhdGEgYGJhbV9kbXV4X25ldGRldl9wcml2YCBpcyBoYW5kbGVkLiAgT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGUgbGluZXMgYmV0d2VlbiA0MDAgYW5kIDUwMCBpbiBgZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIGl0cyBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0J3MgdXNpbmcgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgdG8gaGFuZGxlIHRoZSBtdWx0aXBsZXhpbmcgb2YgdGhlIEJBTSBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGlzIHRyYW5zbGF0aW5nIHRoYXQgQkFNIGludGVyZmFjZSBpbnRvIHVzYWJsZSBuZXR3b3JrIGRldmljZXMsIGJlY2F1c2UsIGFzIEkgcmVjYWxsLCBpdCdzIG5vdCBhIHN0YW5kYXJkIFdXQU4gaW50ZXJmYWNlLiBHb3R0YSBnZXQgdG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQwOTozNjozOC4xODIzNTU3MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdFxcdGJhbV9kbXV4X3NrYl9kbWFfc3VibWl0X3R4KFxcdTAwMjZkbXV4LVxcdTAwM2V0eF9za2JzW2ldKTtcXG4gNDAxOlxcdFxcdH1cXG4gNDAyOlxcdFxcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGRtdXgtXFx1MDAzZXR4KTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0b3V0OlxcbiA0MDU6XFx0XFx0cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoZG11eC1cXHUwMDNlZGV2KTtcXG4gNDA2OlxcdH1cXG4gNDA3OlxcdFxcbiA0MDg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiYW1fZG11eF9vcHMgPSB7XFxuIDQwOTpcXHRcXHQubmRvX29wZW5cXHQ9IGJhbV9kbXV4X25ldGRldl9vcGVuLFxcbiA0MTA6XFx0XFx0Lm5kb19zdG9wXFx0PSBiYW1fZG11eF9uZXRkZXZfc3RvcCxcXG4gNDExOlxcdFxcdC5uZG9fc3RhcnRfeG1pdFxcdD0gYmFtX2RtdXhfbmV0ZGV2X3N0YXJ0X3htaXQsXFxuIDQxMjpcXHRcXHQubmRvX2dldF9zdGF0czY0XFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxcbiA0MTM6XFx0fTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB3d2FuX3R5cGUgPSB7XFxuIDQxNjpcXHRcXHQubmFtZSA9IFxcXCJ3d2FuXFxcIixcXG4gNDE3OlxcdH07XFxuIDQxODpcXHRcXG4gNDE5OlxcdHN0YXRpYyB2b2lkIGJhbV9kbXV4X25ldGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA0MjA6XFx0e1xcbiA0MjE6XFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmJhbV9kbXV4X29wcztcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX1JBV0lQO1xcbiA0MjQ6XFx0XFx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXFx1MDAyNnd3YW5fdHlwZSk7XFxuIDQyNTpcXHRcXHRkZXYtXFx1MDAzZWZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQO1xcbiA0MjY6XFx0XFxuIDQyNzpcXHRcXHRkZXYtXFx1MDAzZW10dSA9IEVUSF9EQVRBX0xFTjtcXG4gNDI4OlxcdFxcdGRldi1cXHUwMDNlbWF4X210dSA9IEJBTV9ETVVYX01BWF9EQVRBX1NJWkU7XFxuIDQyOTpcXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYmFtX2RtdXhfaGRyKTtcXG4gNDMwOlxcdFxcdGRldi1cXHUwMDNlbmVlZGVkX3RhaWxyb29tID0gc2l6ZW9mKHUzMik7IC8qIHdvcmQtYWxpZ25lZCAqL1xcbiA0MzE6XFx0XFx0ZGV2LVxcdTAwM2V0eF9xdWV1ZV9sZW4gPSBERUZBVUxUX1RYX1FVRVVFX0xFTjtcXG4gNDMyOlxcdFxcdGRldi1cXHUwMDNlcGNwdV9zdGF0X3R5cGUgPSBORVRERVZfUENQVV9TVEFUX1RTVEFUUztcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0LyogVGhpcyBwZXJtIGFkZHIgd2lsbCBiZSB1c2VkIGFzIGludGVyZmFjZSBpZGVudGlmaWVyIGJ5IElQdjYgKi9cXG4gNDM1OlxcdFxcdGRldi1cXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1JBTkRPTTtcXG4gNDM2OlxcdFxcdGV0aF9yYW5kb21fYWRkcihkZXYtXFx1MDAzZXBlcm1fYWRkcik7XFxuIDQzNzpcXHR9XFxuIDQzODpcXHRcXG4gNDM5OlxcdHN0YXRpYyB2b2lkIGJhbV9kbXV4X3JlZ2lzdGVyX25ldGRldl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gNDQwOlxcdHtcXG4gNDQxOlxcdFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmFtX2RtdXgsIHJlZ2lzdGVyX25ldGRldl93b3JrKTtcXG4gNDQyOlxcdFxcdHN0cnVjdCBiYW1fZG11eF9uZXRkZXYgKmJuZGV2O1xcbiA0NDM6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gNDQ0OlxcdFxcdGludCBjaCwgcmV0O1xcbiA0NDU6XFx0XFxuIDQ0NjpcXHRcXHRmb3JfZWFjaF9zZXRfYml0KGNoLCBkbXV4LVxcdTAwM2VyZW1vdGVfY2hhbm5lbHMsIEJBTV9ETVVYX05VTV9DSCkge1xcbiA0NDc6XFx0XFx0XFx0aWYgKGRtdXgtXFx1MDAzZW5ldGRldnNbY2hdKVxcbiA0NDg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdFxcdG5ldGRldiA9IGFsbG9jX25ldGRldihzaXplb2YoKmJuZGV2KSwgXFxcInd3YW4lZFxcXCIsIE5FVF9OQU1FX0VOVU0sXFxuIDQ1MTpcXHRcXHRcXHRcXHRcXHQgICAgICBiYW1fZG11eF9uZXRkZXZfc2V0dXApO1xcbiA0NTI6XFx0XFx0XFx0aWYgKCFuZXRkZXYpXFxuIDQ1MzpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdFxcdFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgZG11eC1cXHUwMDNlZGV2KTtcXG4gNDU2OlxcdFxcdFxcdG5ldGRldi1cXHUwMDNlZGV2X3BvcnQgPSBjaDtcXG4gNDU3OlxcdFxcbiA0NTg6XFx0XFx0XFx0Ym5kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiA0NTk6XFx0XFx0XFx0Ym5kZXYtXFx1MDAzZWRtdXggPSBkbXV4O1xcbiA0NjA6XFx0XFx0XFx0Ym5kZXYtXFx1MDAzZWNoID0gY2g7XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdFxcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xcbiA0NjM6XFx0XFx0XFx0aWYgKHJldCkge1xcbiA0NjQ6XFx0XFx0XFx0XFx0ZGV2X2VycihkbXV4LVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0ZGV2IGZvciBjaGFubmVsICV1OiAlZFxcXFxuXFxcIixcXG4gNDY1OlxcdFxcdFxcdFxcdFxcdGNoLCByZXQpO1xcbiA0NjY6XFx0XFx0XFx0XFx0ZnJlZV9uZXRkZXYobmV0ZGV2KTtcXG4gNDY3OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNDY4OlxcdFxcdFxcdH1cXG4gNDY5OlxcdFxcbiA0NzA6XFx0XFx0XFx0ZG11eC1cXHUwMDNlbmV0ZGV2c1tjaF0gPSBuZXRkZXY7XFxuIDQ3MTpcXHRcXHR9XFxuIDQ3MjpcXHR9XFxuIDQ3MzpcXHRcXG4gNDc0OlxcdHN0YXRpYyB2b2lkIGJhbV9kbXV4X3J4X2NhbGxiYWNrKHZvaWQgKmRhdGEpO1xcbiA0NzU6XFx0XFxuIDQ3NjpcXHRzdGF0aWMgYm9vbCBiYW1fZG11eF9za2JfZG1hX3N1Ym1pdF9yeChzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSAqc2tiX2RtYSlcXG4gNDc3OlxcdHtcXG4gNDc4OlxcdFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IHNrYl9kbWEtXFx1MDAzZWRtdXg7XFxuIDQ3OTpcXHRcXHRzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA5OjM2OjM4LjE4MjQ0ODI1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjY0MDI5MzU2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYWRkaW5nIG5ldHdvcmsgc3RhdGlzdGljcyB0byB0aGUgYHFjb21fYmFtX2RtdXhgIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzICpkeW5hbWljYWxseSogcmVnaXN0ZXJlZCB2aWEgY29tbWFuZCBwYWNrZXRzIGZyb20gdGhlIHJlbW90ZSBtb2RlbS4gSSBzZWUgdGhhdCByZWdpc3RyYXRpb24gaGFwcGVucyB0aHJvdWdoIGBiYW1fZG11eF9jbWRfb3BlbmAgYW5kIGEgc2NoZWR1bGVkIHdvcmsgaXRlbSB0aGF0IGNhbGxzIGBzY2hlZHVsZV93b3JrKFx1MDAyNmRtdXgtXHUwMDNlcmVnaXN0ZXJfbmV0ZGV2X3dvcmspYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJhbV9kbXV4YCBpcyBzcGVjaWZpY2FsbHkgYSBwbGF0Zm9ybSBkcml2ZXIgZGVzaWduZWQgZm9yIFF1YWxjb21tIE1TTSBTb0NzLCBhbmQgaXQgcmVsaWVzIG9uIFF1YWxjb21tLXNwZWNpZmljIGhhcmR3YXJlOiBTTUVNIHN0YXRlcywgQkFNIERNQSBjaGFubmVscywgYW5kIGludGVycnVwdHMuIFRoYXQgZ2l2ZXMgbWUgYSBjbHVlIGFib3V0IHJlYWNoYWJpbGl0eS5cblxuTm93LCBsZXQncyBnbyBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgZm9yIGRldGVybWluaW5nIFwiV29ydGhGdXp6aW5nLlwiIEkgaGF2ZSB0byBiZSBjYXJlZnVsIGhlcmU6XG4qICAgRG9jdW1lbnRhdGlvbi9LY29uZmlnL0NvbW1lbnRzPyBOb1xuKiAgIERlY29yYXRpdmUgY2hhbmdlcyAobG9nZ2luZywgdHJhY2Vwb2ludHMpPyBOb1xuKiAgIENoYW5nZXMgdG8gY29uc3RhbnRzL21hY3JvcyB3aXRob3V0IGZ1bmN0aW9uYWwgaW1wYWN0PyBOb1xuKiAgIFVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0U/IFRoaXMgaXMgYSBrZXkgcG9pbnQsIGFuZCBJIGhhdmUgdG8gYmUgc3VyZS5cbiogICBWZW5kb3Itc3BlY2lmaWMgUENJZS9TbWFydE5JQy9HUFUgZHJpdmVycyAocmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlKT8gRGVmaW5pdGVseSBuZWVkIHRvIGNvbnNpZGVyXG4qICAgRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IG9ubHkgcnVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciB1bmJpbmQgb3BlcmF0aW9ucz8gTm8uXG5cbkFscmlnaHQsIGxldCdzIGV4YW1pbmUgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMuIEkgc2VlOlxuXG4xLiAgYGRldl9zd19uZXRzdGF0c190eF9hZGQobmV0ZGV2LCAxLCBsZW4pO2AgaW4gYGJhbV9kbXV4X3R4X2NhbGxiYWNrYFxuMi4gIGAubmRvX2dldF9zdGF0czY0ID0gZGV2X2dldF90c3RhdHM2NCxgIGluIGBiYW1fZG11eF9vcHNgXG4zLiAgYGRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTO2AgaW4gYGJhbV9kbXV4X25ldGRldl9zZXR1cGBcbjQuICBgZGV2X3N3X25ldHN0YXRzX3J4X2FkZChuZXRkZXYsIHNrYi1cdTAwM2VsZW4pO2AgaW4gYGJhbV9kbXV4X2NtZF9kYXRhYFxuXG5UaGlzIGFsbCBsb29rcyBsaWtlIHN0YW5kYXJkIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZywgYWRkaW5nIGB0c3RhdHNgIHVzaW5nIGBkZXZfc3dfbmV0c3RhdHNfKmAgYW5kIGAubmRvX2dldF9zdGF0czY0YC4gVGhpcyBtZWFucyBjb3VudGluZyBwYWNrZXRzIGFuZCBieXRlcy5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgZW52aXJvbm1lbnQgYW5kIHRoZSBjaGFuZ2VzLCBJIGNhbiBtYWtlIHNvbWUganVkZ2VtZW50cy5cblxuRmlyc3QsIGBxY29tX2JhbV9kbXV4LmNgIGlzIFF1YWxjb21tLXNwZWNpZmljIGhhcmR3YXJlIChCQU0tRE1VWCksIHdoaWNoIGltcGxpZXMgdGhhdCBpdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIHJlYWNoZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzIHdpdGhvdXQgcGh5c2ljYWwgaGFyZHdhcmUuXG5cblNlY29uZCwgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMgYXJlIG9ubHkgYWRkaW5nIHN0YXRzIHJlcG9ydGluZywgd2hpY2ggaXMgY29tbW9uIGFuZCBub3QgcmVhbGx5IGEgbmV3IGNvZGUgcGF0aC4gVGhpcyBhbHNvIG1lYW5zIHRoaXMgd291bGRuJ3QgbGlrZWx5IGJyZWFrIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuVGhlcmVmb3JlLCBcIldvcnRoRnV6emluZ1wiIHNob3VsZCBiZSBzZXQgdG8gKmZhbHNlKi4gVGhpcyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrOlxuKiAgIE9ubHkgb25lIGZpbGUgbW9kaWZpZWQsIGBkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY2AuXG4qICAgYHFjb21fYmFtX2RtdXguY2AgdXNlcyBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIGNoYW5uZWxzLCB3aGljaCBtZWFucyBpdCB3aWxsICpub3QqIHdvcmsgaW4gUUVNVS9HQ0Ugd2l0aG91dCB0aG9zZSBjaGFubmVscywgc28gdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdGhlc2UgdmlydHVhbCBlbnZpcm9ubWVudHMuXG4qICAgVGhlIHBhdGNoIG9ubHkgYWRkcyBzb2Z0d2FyZSBzdGF0aXN0aWNzIGNvbGxlY3Rpb24uXG5cbk9rYXksIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBwcmVwYXJlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuXG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBhZGRzIHN0YW5kYXJkIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHRyYWNraW5nIChkZXZfc3dfbmV0c3RhdHNfdHhfYWRkLCBkZXZfc3dfbmV0c3RhdHNfcnhfYWRkLCBhbmQgZGV2X2dldF90c3RhdHM2NCkgdG8gdGhlIFF1YWxjb21tIEJBTS1ETVVYIFdXQU4gZHJpdmVyIChxY29tX2JhbV9kbXV4LmMpLiBUaGlzIGRyaXZlciBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSBTb0NzIGFuZCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSAvIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgY2hhbm5lbHMsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cIlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gXG5cbkFuZCBmaW5hbGx5LCBsZXQncyBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODcsIk91dHB1dFRva2VucyI6MTQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMDk6Mzg6NDQuNTg1Mzg2NjEzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdGFuZGFyZCBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyB0cmFja2luZyAoZGV2X3N3X25ldHN0YXRzX3R4X2FkZCwgZGV2X3N3X25ldHN0YXRzX3J4X2FkZCwgZGV2X2dldF90c3RhdHM2NCkgdG8gdGhlIFF1YWxjb21tIEJBTS1ETVVYIGRyaXZlciAoZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMpLiBUaGlzIHBsYXRmb3JtIGRyaXZlciBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSBTb0NzIChyZXF1aXJpbmcgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSBjaGFubmVscykgYW5kIGlzIG5vdCByZWFjaGFibGUgb3IgcHJvYmVhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN0YW5kYXJkIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIHRyYWNraW5nIChkZXZfc3dfbmV0c3RhdHNfdHhfYWRkLCBkZXZfc3dfbmV0c3RhdHNfcnhfYWRkLCBkZXZfZ2V0X3RzdGF0czY0KSB0byB0aGUgUXVhbGNvbW0gQkFNLURNVVggZHJpdmVyIChkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYykuIFRoaXMgcGxhdGZvcm0gZHJpdmVyIGlzIHNwZWNpZmljIHRvIFF1YWxjb21tIFNvQ3MgKHJlcXVpcmluZyBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIGNoYW5uZWxzKSBhbmQgaXMgbm90IHJlYWNoYWJsZSBvciBwcm9iZWFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDA5OjM4OjQ0LjU4NTQxMTA5M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8gbp[1] Phase: Running StartedAt: 2026-08-30 09:38:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8gbp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-30 09:38:55 +0000 UTC FinishedAt: 2026-08-30 09:39:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}