Name: series-workflowvm72j Phase: Failed StartedAt: 2026-09-08 01:24:16 +0000 UTC FinishedAt: 2026-09-08 01:26:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm72j[0] Phase: Succeeded StartedAt: 2026-09-08 01:24:16 +0000 UTC FinishedAt: 2026-09-08 01:26:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm72j[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 01:24:16 +0000 UTC FinishedAt: 2026-09-08 01:26:37 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jKSwgZml4aW5nIGEgZGV2aWNlIHRyZWUgbm9kZSByZWZlcmVuY2UgbGVhayBpbiBtYWNiX21paV9pbml0KCkgYW5kIGFkZGluZyBhIG1pc3NpbmcgcGh5bGlua19kZXN0cm95KCkgaW4gdGhlIG1hY2JfcHJvYmUoKSBlcnJvciB1bndpbmRpbmcgcGF0aC4gVGhpcyBkcml2ZXIgaXMgZm9yIFNvQy1zcGVjaWZpYyBFdGhlcm5ldCBoYXJkd2FyZSAocHJpbWFyaWx5IEF0bWVsL01pY3JvY2hpcCBBVDkxIGFuZCBYaWxpbnggWnlucSkgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBhbWQ2NCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5OGNjYjkxYWI3NmRmOWNiNDdhODI4MjdhYjhlZTQxMjI5ZjBjOWZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMToyNjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggODQ2OWRmMGQ4OWMzZS4uYjFkYzU4NDBkNzU2OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbkBAIC0xMTY0LDYgJiM0MzsxMTY0LDggQEAgc3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1cztcbiBcbiYjNDM7XHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfb3V0X3VucmVnaXN0ZXJfYnVzOlxuQEAgLTU5ODAsNiAmIzQzOzU5ODIsNyBAQCBzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMpO1xuIFx0XHRtZGlvYnVzX2ZyZWUoYnAtXHUwMDNlbWlpX2J1cyk7XG4gXHR9XG4mIzQzO1x0cGh5bGlua19kZXN0cm95KGJwLVx1MDAzZXBoeWxpbmspO1xuIFxuIGVycl9vdXRfcGh5X2V4aXQ6XG4gXHRwaHlfZXhpdChicC1cdTAwM2VwaHkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyksIGZpeGluZyBhIGRldmljZSB0cmVlIG5vZGUgcmVmZXJlbmNlIGxlYWsgaW4gbWFjYl9taWlfaW5pdCgpIGFuZCBhZGRpbmcgYSBtaXNzaW5nIHBoeWxpbmtfZGVzdHJveSgpIGluIHRoZSBtYWNiX3Byb2JlKCkgZXJyb3IgdW53aW5kaW5nIHBhdGguIFRoaXMgZHJpdmVyIGlzIGZvciBTb0Mtc3BlY2lmaWMgRXRoZXJuZXQgaGFyZHdhcmUgKHByaW1hcmlseSBBdG1lbC9NaWNyb2NoaXAgQVQ5MSBhbmQgWGlsaW54IFp5bnEpIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOThjY2I5MWFiNzZkZjljYjQ3YTgyODI3YWI4ZWU0MTIyOWYwYzlmYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDE6MjY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwppbmRleCA4NDY5ZGYwZDg5YzNlLi5iMWRjNTg0MGQ3NTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKQEAgLTExNjQsNiAmIzQzOzExNjQsOCBAQCBzdGF0aWMgaW50IG1hY2JfbWlpX2luaXQoc3RydWN0IG1hY2IgKmJwKQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1czsKIAomIzQzOwlvZl9ub2RlX3B1dChtZGlvX25wKTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogZXJyX291dF91bnJlZ2lzdGVyX2J1czoKQEAgLTU5ODAsNiAmIzQzOzU5ODIsNyBAQCBzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJbWRpb2J1c191bnJlZ2lzdGVyKGJwLSZndDttaWlfYnVzKTsKIAkJbWRpb2J1c19mcmVlKGJwLSZndDttaWlfYnVzKTsKIAl9CiYjNDM7CXBoeWxpbmtfZGVzdHJveShicC0mZ3Q7cGh5bGluayk7CiAKIGVycl9vdXRfcGh5X2V4aXQ6CiAJcGh5X2V4aXQoYnAtJmd0O3BoeSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgQU1ENjQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGV2ZW4gcmVsZXZhbnQgZm9yIGZ1enppbmcgb24gYW4gYW1kNjQgYXJjaGl0ZWN0dXJlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgc2NhbiB0aGUgZmlsZXMgdGhhdCB3ZXJlIG1vZGlmaWVkLiBBaCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgIOKAkyBpbnRlcmVzdGluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBgbWFjYmAgZHJpdmVyIGFjdHVhbGx5ICppcyouIFdoYXQgaGFyZHdhcmUgaXMgaXQgdGllZCB0bz8gV2hhdCBwbGF0Zm9ybXMgZG9lcyBpdCBydW4gb24/IFRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIEkgcmVhbGlzdGljYWxseSByZWFjaCB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb24gYW1kNjQ/IFRoaXMgZGV0ZXJtaW5lcyBpZiBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIHRlc3QgaXQgdXNpbmcgc3RhbmRhcmQgdG9vbHMuCgpUaW1lIHRvIGNvbnN1bHQgdGhlIHVzdWFsIHNvdXJjZXMuIEnigJlsbCBmaXJlIHVwIGBncmVwcGVyYCwgb3IgbWF5YmUganVzdCBhIHF1aWNrIGByZWFkLWZpbGVgIGNvbW1hbmQsIGFuZCBpbnNwZWN0IGJvdGggYG1hY2JfbWFpbi5jYCBpdHNlbGYgYW5kIHRoZSBhc3NvY2lhdGVkIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdgIGZpbGUuIFRoZSBLY29uZmlnIHdpbGwgb2Z0ZW4gZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGFyZHdhcmUgc3VwcG9ydC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgaW4gbXkgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDYWRlbmNlIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX0NBREVOQ0VcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7Q2FkZW5jZSBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuICAgOTpcdFx0ZGVmYXVsdCB5XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMjpcdFxuICAxMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAxNDpcdFxuICAxNTpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTY6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTc6XHRcdCAgcmVtYWluaW5nIENhZGVuY2UgbmV0d29yayBjYXJkIHF1ZXN0aW9ucy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxOTpcdFxuICAyMDpcdGlmIE5FVF9WRU5ET1JfQ0FERU5DRVxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBNQUNCXG4gIDIzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gSEFTX0RNQSBcdTAwMjZcdTAwMjYgQ09NTU9OX0NMS1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyNjpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMjc6XHRcdHNlbGVjdCBDUkMzMlxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGludGVyZmFjZSBpcyBmb3VuZCBvbiBtYW55IEF0bWVsIEFUMzIgYW5kXG4gIDMwOlx0XHQgIEFUOTEgcGFydHMuICBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBDYWRlbmNlIEdFTSAoR2lnYWJpdFxuICAzMTpcdFx0ICBFdGhlcm5ldCBNQUMgZm91bmQgaW4gc29tZSBBUk0gU29DIGRldmljZXMpLiAgU2F5IFkgdG8gaW5jbHVkZVxuICAzMjpcdFx0ICBzdXBwb3J0IGZvciB0aGUgTUFDQi9HRU0gY2hpcC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzNTpcdFx0ICB3aWxsIGJlIG1hY2IuXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbiAgMzg6XHRcdGJvb2wgXCYjMzQ7VXNlIElFRUUgMTU4OCBod3N0YW1wXCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1BQ0JcbiAgNDA6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAgNDE6XHRcdGRlZmF1bHQgeVxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIE1BQ0JfUENJXG4gIDQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIE1BQ0IgXHUwMDI2XHUwMDI2IFBDSVxuICA0ODpcdFx0aGVscFxuICA0OTpcdFx0ICBUaGlzIGlzIFBDSSB3cmFwcGVyIGZvciBNQUNCIGRyaXZlci5cbiAgNTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQ1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBtYWNiX21haW4uY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHNwZWNpZmljLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIHNvbWUgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1hY2JfbWFpbi5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmVzIDExNjQgYW5kIDU5ODAuIFRob3NlIGxpbmUgbnVtYmVycyBwcm9iYWJseSByZXByZXNlbnQgcG9pbnRzIG9mIGludGVyZXN0IHRoYXQgSSBwcmV2aW91c2x5IGlkZW50aWZpZWQgZHVyaW5nIGRlYnVnZ2luZyBvciBjb2RlIHJldmlldywgb3IgcGVyaGFwcyB0aGV5JiMzOTtyZSBhc3NvY2lhdGVkIHdpdGggYSBrbm93biBpc3N1ZS4gSXQmIzM5O3MgYSBzdHJhdGVnaWMgc3RhcnRpbmcgcG9pbnQgZm9yIG1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRob3NlIHNlY3Rpb25zIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gbmFycm93IGRvd24gdGhlIHBvc3NpYmxlIGNhdXNlcywgYW5kIGNvbnRpbnVlIGZyb20gdGhlcmUgd2l0aCBtb3JlIGluZm9ybWVkIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0XHRicC1cdTAwM2VtaWlfYnVzLVx1MDAzZXJlYWRfYzQ1ID0gXHUwMDI2bWFjYl9tZGlvX3JlYWRfYzQ1O1xuMTE1MTpcdFx0YnAtXHUwMDNlbWlpX2J1cy1cdTAwM2V3cml0ZV9jNDUgPSBcdTAwMjZtYWNiX21kaW9fd3JpdGVfYzQ1O1xuMTE1MjpcdFx0c25wcmludGYoYnAtXHUwMDNlbWlpX2J1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslcy0leFwmIzM0OyxcbjExNTM6XHRcdFx0IGJwLVx1MDAzZXBkZXYtXHUwMDNlbmFtZSwgYnAtXHUwMDNlcGRldi1cdTAwM2VpZCk7XG4xMTU0Olx0XHRicC1cdTAwM2VtaWlfYnVzLVx1MDAzZXByaXYgPSBicDtcbjExNTU6XHRcdGJwLVx1MDAzZW1paV9idXMtXHUwMDNlcGFyZW50ID0gXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4xMTU2Olx0XG4xMTU3Olx0XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2YnAtXHUwMDNlbmV0ZGV2LVx1MDAzZWRldiwgYnAtXHUwMDNlbWlpX2J1cyk7XG4xMTU4Olx0XG4xMTU5Olx0XHRlcnIgPSBtYWNiX21kaW9idXNfcmVnaXN0ZXIoYnAsIG1kaW9fbnApO1xuMTE2MDpcdFx0aWYgKGVycilcbjExNjE6XHRcdFx0Z290byBlcnJfb3V0X2ZyZWVfbWRpb2J1cztcbjExNjI6XHRcbjExNjM6XHRcdGVyciA9IG1hY2JfbWlpX3Byb2JlKGJwLVx1MDAzZW5ldGRldik7XG4xMTY0Olx0XHRpZiAoZXJyKVxuMTE2NTpcdFx0XHRnb3RvIGVycl9vdXRfdW5yZWdpc3Rlcl9idXM7XG4xMTY2Olx0XG4xMTY3Olx0XHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbjExNjg6XHRcbjExNjk6XHRcdHJldHVybiAwO1xuMTE3MDpcdFxuMTE3MTpcdGVycl9vdXRfdW5yZWdpc3Rlcl9idXM6XG4xMTcyOlx0XHRtZGlvYnVzX3VucmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cyk7XG4xMTczOlx0ZXJyX291dF9mcmVlX21kaW9idXM6XG4xMTc0Olx0XHRtZGlvYnVzX2ZyZWUoYnAtXHUwMDNlbWlpX2J1cyk7XG4xMTc1Olx0ZXJyX291dDpcbjExNzY6XHRcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuMTE3NzpcdFxuMTE3ODpcdFx0cmV0dXJuIGVycjtcbjExNzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc3NAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBJc3N1ZXMgaW4gdGhlIGBtYWNiX3Byb2JlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgdGhpcyBpc3N1ZSBhbmQgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhlIHBvdGVudGlhbCBwcm9ibGVtIG1pZ2h0IGxpZS4gQmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYnVnIHJlcG9ydCwgSSBzaG91bGQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgbWFjYl9wcm9iZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIHpvb20gaW4gYXJvdW5kIGxpbmUgNTk4MCBpbiB0aGF0IGZ1bmN0aW9uLiBJdCYjMzk7cyBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUgYmVjYXVzZSBvZiBYLCBZIGFuZCBaLi4uIGFuZCBiZWNhdXNlIG9mIHRoZSBwYXR0ZXJuIHdpdGggdGhlIHJlbGF0ZWQgZHJpdmVycy4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIHRoZXJlIGZvciBhbnkgcG90ZW50aWFsIGxvZ2ljIGVycm9ycywgcmFjZSBjb25kaXRpb25zLCBvciBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBiZSBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgc29tZXRoaW5nIGlzIGdvaW5nIHdyb25nIGR1cmluZyB0aGlzIHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTk2MDpcdFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7XG41OTYxOlx0XHRpZiAoZXJyKSB7XG41OTYyOlx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0Nhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cXG5cJiMzNDspO1xuNTk2MzpcdFx0XHRnb3RvIGVycl9vdXRfZnJlZV90aWVvZmY7XG41OTY0Olx0XHR9XG41OTY1Olx0XG41OTY2Olx0XHRJTklUX1dPUksoXHUwMDI2YnAtXHUwMDNlaHJlc3BfZXJyX2JoX3dvcmssIG1hY2JfaHJlc3BfZXJyb3JfdGFzayk7XG41OTY3Olx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZicC1cdTAwM2V0eF9scGlfd29yaywgbWFjYl90eF9scGlfd29ya19mbik7XG41OTY4Olx0XG41OTY5Olx0XHRuZXRkZXZfaW5mbyhuZXRkZXYsIFwmIzM0O0NhZGVuY2UgJXMgcmV2IDB4JTA4eCBhdCAweCUwOGx4IGlycSAlZCAoJXBNKVxcblwmIzM0OyxcbjU5NzA6XHRcdFx0ICAgIG1hY2JfaXNfZ2VtKGJwKSA/IFwmIzM0O0dFTVwmIzM0OyA6IFwmIzM0O01BQ0JcJiMzNDssIG1hY2JfcmVhZGwoYnAsIE1JRCksXG41OTcxOlx0XHRcdCAgICBuZXRkZXYtXHUwMDNlYmFzZV9hZGRyLCBuZXRkZXYtXHUwMDNlaXJxLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuNTk3MjpcdFxuNTk3MzpcdFx0cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuNTk3NDpcdFxuNTk3NTpcdFx0cmV0dXJuIDA7XG41OTc2Olx0XG41OTc3Olx0ZXJyX291dF9mcmVlX3RpZW9mZjpcbjU5Nzg6XHRcdG1hY2JfZnJlZV90aWVvZmYoYnApO1xuNTk3OTpcdFxuNTk4MDpcdGVycl9vdXRfdW5yZWdpc3Rlcl9tZGlvOlxuNTk4MTpcdFx0aWYgKGJwLVx1MDAzZW1paV9idXMpIHtcbjU5ODI6XHRcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMpO1xuNTk4MzpcdFx0XHRtZGlvYnVzX2ZyZWUoYnAtXHUwMDNlbWlpX2J1cyk7XG41OTg0Olx0XHR9XG41OTg1Olx0XHRwaHlsaW5rX2Rlc3Ryb3koYnAtXHUwMDNlcGh5bGluayk7XG41OTg2Olx0XG41OTg3Olx0ZXJyX291dF9waHlfZXhpdDpcbjU5ODg6XHRcdHBoeV9leGl0KGJwLVx1MDAzZXBoeSk7XG41OTg5Olx0XG41OTkwOlx0ZXJyX291dF9mcmVlX25ldGRldjpcbjU5OTE6XHRcdGZyZWVfbmV0ZGV2KG5ldGRldik7XG41OTkyOlx0XG41OTkzOlx0ZXJyX2Rpc2FibGVfY2xvY2tzOlxuNTk5NDpcdFx0bWFjYl9jbGtzX2Rpc2FibGUocGNsaywgaGNsaywgdHhfY2xrLCByeF9jbGssIHRzdV9jbGspO1xuNTk5NTpcdFx0cG1fcnVudGltZV9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjU5OTY6XHRcdHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChcdTAwMjZwZGV2LVx1MDAzZWRldik7XG41OTk3Olx0XHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjU5OTg6XHRcbjU5OTk6XHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY5NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgQ29udHJvbGxlciBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgYG1hY2JfbWFpbi5jYCwgd2hpY2ggSSBrbm93IGlzIHRoZSBjb3JlIGRyaXZlciBmb3IgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgY29udHJvbGxlciwgc3BlY2lmaWNhbGx5IGZvciBwbGF0Zm9ybSBkZXZpY2VzLiBSaWdodCwgYW5kIHRoZXJlJiMzOTtzIGEgUENJIHdyYXBwZXIgaW4gYG1hY2JfcGNpLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGlzIGluaXRpYWxpemVkLCBzbyBJJiMzOTtsbCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGBtYWNiX3Byb2JlYC4gSXQmIzM5O3MgdGhlIGBwbGF0Zm9ybV9kcml2ZXJgJiMzOTtzIHByb2JlIGZ1bmN0aW9uIGZvciB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBTb0MgZGV2aWNlcywgYXMgZXhwZWN0ZWQuCgpOb3csIGxldCYjMzk7cyBlaXRoZXIgYW5hbHl6ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1hY2JfcHJvYmVgIGRpcmVjdGx5IG9yIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIHJlZmVyZW5jZXMgdG8gaXQgd2l0aGluIHRoZSBjb2RlYmFzZSB0aGF0IG1pZ2h0IHByb3ZpZGUgdXNlZnVsIGNvbnRleHQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtYWNiX3BtX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjYyNzU6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjYl9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNzYtXHQucHJvYmVcdFx0PSBtYWNiX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI4Njptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1hY2JfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI4Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzOQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBQQ0kgV3JhcHBlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBtYWNiX3BjaS5jYCBjb2RlIHRvIGdyYXNwIHRoZSBQQ0kgd3JhcHBlciBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHByZWNpc2VseSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgUENJIGludGVyZmFjZSB3aXRoaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpbmdzIGxpa2UgcmVzb3VyY2UgYWxsb2NhdGlvbiwgY29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3MsIGFuZCBpbnRlcnJ1cHQgcm91dGluZy4gVGhlIGRyaXZlciYjMzk7cyBhcmNoaXRlY3R1cmUgc2hvdWxkIGJlIGFwcGFyZW50IGFzIEkgZGlzc2VjdCB0aGUgUENJLXNwZWNpZmljIGludGVyYWN0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qXG4gICAzOlx0ICogRE9DOiBDYWRlbmNlIEdFTSBQQ0kgd3JhcHBlci5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAxNiBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIC0gaHR0cHM6Ly93d3cuY2FkZW5jZS5jb21cbiAgIDY6XHQgKlxuICAgNzpcdCAqIEF1dGhvcnM6IFJhZmFsIE96aWVibG8gXHUwMDNjcmFmYWxvQGNhZGVuY2UuY29tXHUwMDNlXG4gICA4Olx0ICpcdCAgICBCYXJ0b3N6IEZvbHRhIFx1MDAzY2Jmb2x0YUBjYWRlbmNlLmNvbVx1MDAzZVxuICAgOTpcdCAqL1xuICAxMDpcdFxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLXByb3ZpZGVyLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXCYjMzQ7bWFjYi5oXCYjMzQ7XG4gIDE4Olx0XG4gIDE5Olx0I2RlZmluZSBQQ0lfRFJJVkVSX05BTUUgXCYjMzQ7bWFjYl9wY2lcJiMzNDtcbiAgMjA6XHQjZGVmaW5lIFBMQVRfRFJJVkVSX05BTUUgXCYjMzQ7bWFjYlwmIzM0O1xuICAyMTpcdFxuICAyMjpcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9DRE5TX01BQ0IgMHhlMDA3XG4gIDIzOlx0XG4gIDI0Olx0I2RlZmluZSBHRU1fUENMS19SQVRFIDUwMDAwMDAwXG4gIDI1Olx0I2RlZmluZSBHRU1fSENMS19SQVRFIDUwMDAwMDAwXG4gIDI2Olx0XG4gIDI3Olx0c3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiAgMjg6XHR7XG4gIDI5Olx0XHRpbnQgZXJyO1xuICAzMDpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcbiAgMzE6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwbGF0X2luZm87XG4gIDMyOlx0XHRzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHBsYXRfZGF0YTtcbiAgMzM6XHRcdHN0cnVjdCByZXNvdXJjZSByZXNbMl07XG4gIDM0Olx0XG4gIDM1Olx0XHQvKiBlbmFibGUgcGNpIGRldmljZSAqL1xuICAzNjpcdFx0ZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBjaSk7XG4gIDM3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gIDM4Olx0XHRcdGRldl9lcnIoXHUwMDI2cGNpLVx1MDAzZWRldiwgXCYjMzQ7RW5hYmxpbmcgUENJIGRldmljZSBoYXMgZmFpbGVkOiAlZFwmIzM0OywgZXJyKTtcbiAgMzk6XHRcdFx0cmV0dXJuIGVycjtcbiAgNDA6XHRcdH1cbiAgNDE6XHRcbiAgNDI6XHRcdHBjaV9zZXRfbWFzdGVyKHBjaSk7XG4gIDQzOlx0XG4gIDQ0Olx0XHQvKiBzZXQgdXAgcmVzb3VyY2VzICovXG4gIDQ1Olx0XHRtZW1zZXQocmVzLCAweDAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIEFSUkFZX1NJWkUocmVzKSk7XG4gIDQ2Olx0XHRyZXNbMF0uc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTtcbiAgNDc6XHRcdHJlc1swXS5lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKHBjaSwgMCk7XG4gIDQ4Olx0XHRyZXNbMF0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcbiAgNDk6XHRcdHJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNO1xuICA1MDpcdFx0cmVzWzFdLnN0YXJ0ID0gcGNpX2lycV92ZWN0b3IocGNpLCAwKTtcbiAgNTE6XHRcdHJlc1sxXS5uYW1lID0gUENJX0RSSVZFUl9OQU1FO1xuICA1MjpcdFx0cmVzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7XG4gIDUzOlx0XG4gIDU0Olx0XHRkZXZfaW5mbyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBcJiMzNDtFTUFDIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXFxuXCYjMzQ7LFxuICA1NTpcdFx0XHQgXHUwMDI2cmVzWzBdLnN0YXJ0KTtcbiAgNTY6XHRcbiAgNTc6XHRcdC8qIHNldCB1cCBtYWNiIHBsYXRmb3JtIGRhdGEgKi9cbiAgNTg6XHRcdG1lbXNldChcdTAwMjZwbGF0X2RhdGEsIDAsIHNpemVvZihwbGF0X2RhdGEpKTtcbiAgNTk6XHRcbiAgNjA6XHRcdC8qIGluaXRpYWxpemUgY2xvY2tzICovXG4gIDYxOlx0XHRwbGF0X2RhdGEucGNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKFx1MDAyNnBjaS1cdTAwM2VkZXYsIFwmIzM0O3BjbGtcJiMzNDssIE5VTEwsIDAsXG4gIDYyOlx0XHRcdFx0XHRcdFx0IEdFTV9QQ0xLX1JBVEUpO1xuICA2MzpcdFx0aWYgKElTX0VSUihwbGF0X2RhdGEucGNsaykpIHtcbiAgNjQ6XHRcdFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEucGNsayk7XG4gIDY1Olx0XHRcdGdvdG8gZXJyX3BjbGtfcmVnaXN0ZXI7XG4gIDY2Olx0XHR9XG4gIDY3Olx0XG4gIDY4Olx0XHRwbGF0X2RhdGEuaGNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKFx1MDAyNnBjaS1cdTAwM2VkZXYsIFwmIzM0O2hjbGtcJiMzNDssIE5VTEwsIDAsXG4gIDY5Olx0XHRcdFx0XHRcdFx0IEdFTV9IQ0xLX1JBVEUpO1xuICA3MDpcdFx0aWYgKElTX0VSUihwbGF0X2RhdGEuaGNsaykpIHtcbiAgNzE6XHRcdFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEuaGNsayk7XG4gIDcyOlx0XHRcdGdvdG8gZXJyX2hjbGtfcmVnaXN0ZXI7XG4gIDczOlx0XHR9XG4gIDc0Olx0XG4gIDc1Olx0XHQvKiBzZXQgdXAgcGxhdGZvcm0gZGV2aWNlIGluZm8gKi9cbiAgNzY6XHRcdG1lbXNldChcdTAwMjZwbGF0X2luZm8sIDAsIHNpemVvZihwbGF0X2luZm8pKTtcbiAgNzc6XHRcdHBsYXRfaW5mby5wYXJlbnQgPSBcdTAwMjZwY2ktXHUwMDNlZGV2O1xuICA3ODpcdFx0cGxhdF9pbmZvLmZ3bm9kZSA9IHBjaS1cdTAwM2VkZXYuZndub2RlO1xuICA3OTpcdFx0cGxhdF9pbmZvLm5hbWUgPSBQTEFUX0RSSVZFUl9OQU1FO1xuICA4MDpcdFx0cGxhdF9pbmZvLmlkID0gcGNpLVx1MDAzZWRldmZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjcxCgkJCQkJCQlvdXRwdXQ6IDEzOQoJCQkJCQkJdGhvdWdodHM6IDEwMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQ2FkZW5jZSBNQUNCL0dFTSBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgRmVhc2liaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYG1hY2JfbWFpbi5jYCwgd2hpY2ggaXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIuIEZpcnN0LCBhIHF1aWNrIHNhbml0eSBjaGVjazogaXMgdGhpcyBoYXJkd2FyZSBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIGFuZCBvbiBhbWQ2ND8gTGV0JiMzOTtzIHJ1bGUgb3V0IHRoZSBvYnZpb3VzIG5lZ2F0aXZlIGNyaXRlcmlhLgoKV2Uga25vdyBzb21lIGhhcmR3YXJlIGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgaW4gdGhlc2UgZW52aXJvbm1lbnRzOiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgc3BlY2lhbGl6ZWQgTklDcywgR1BVIGRyaXZlcnMgKHRoaW5rIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KS4gVGhlc2UgcmVxdWlyZSBhY3R1YWwgQVNJQ3Mgb3IgcGh5c2ljYWwgUENJZSBjYXJkcyB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlbiB0aGVyZSYjMzk7cyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBhbmQgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmAgdGhhdCBhcmUgb25seSBoaXQgZHVyaW5nIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIGEgbWFudWFsIGRyaXZlciB1bmJpbmRpbmcgdmlhIHN5c2ZzLiBGaW5hbGx5LCBjb2RlIHBhdGhzIHNwZWNpZmljIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiBhbWQ2NC4KCkJ1dCwgaG1tLCBkb2VzIFFFTVUgZXZlbiAqZW11bGF0ZSogdGhlIENhZGVuY2UgR0VNPyBJdCAqZG9lcyogaGF2ZSBgY2FkZW5jZV9nZW0uY2AsIGJ1dCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZm9yIEFSTSBtYWNoaW5lcywgbGlrZSB0aGUgWGlsaW54IFp5bnEgYW5kIFp5bnFNUC4gQW5kIHRoYXTigJlzIGEgcHJvYmxlbSBiZWNhdXNlIG91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBXYWl0IGEgbWludXRlLCBpcyBDYWRlbmNlIE1BQ0IvR0VNIHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2IFFFTVU/IE5vLiBTdGFuZGFyZCBRRU1VIHg4Nl82NCByZWxpZXMgb24gdGhlIGUxMDAwLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCBldGMuIEV2ZW4gaWYgd2UgY2hlY2sgdGhlIFBDSSBJRCBgUENJX0RFVklDRV9JRF9DRE5TX01BQ0JgICgweDE3Y2QgLyAweGUwMDcgLSBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIEdFTSksIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgY2FyZC4KCkxldCYjMzk7cyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgaW4gYG1hY2JfbWlpX2luaXRgOiBhZGRpbmcgYG9mX25vZGVfcHV0KG1kaW9fbnApYC4gVGhlIGBtZGlvX25wYCBjb21lcyBmcm9tIGBvZl9nZXRfY29tcGF0aWJsZV9jaGlsZChicC0mZ3Q7cGRldi0mZ3Q7ZGV2Lm9mX25vZGUsICYjMzQ7Y2RucyxtYWNiLW1kaW8mIzM0OylgLiBUaGF0JiMzOTtzIE9wZW4gRmlybXdhcmUvRGV2aWNlIFRyZWUgc3R1ZmYsIHVzZWQgb24gRFQtYmFzZWQgcGxhdGZvcm1zLCBsaWtlIEFSTSBhbmQgc3BlY2lmaWMgY2hpcHMuCgpUaGVuLCBpbiBgbWFjYl9wcm9iZWA6IHdlJiMzOTt2ZSBhZGRlZCBgcGh5bGlua19kZXN0cm95KGJwLSZndDtwaHlsaW5rKWAgaW4gYW4gZXJyb3IgY2xlYW51cCBwYXRoLCBgZXJyX291dF91bnJlZ2lzdGVyX21kaW9gLiBJbXBvcnRhbnQhIGBtYWNiX21paV9pbml0YCBpcyBjYWxsZWQgZHVyaW5nIHByb2JlIHdoZW4gYSBEVCBub2RlIGlzIHByZXNlbnQgb3IgaWYgTURJTyBpcyBpbml0aWFsaXplZCwgYW5kIGBvZl9ub2RlX3B1dGAgaXMgdmVyeSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBEZXZpY2UgVHJlZS4gRGV2aWNlIFRyZWUgbm9kZXMgYXJlIG5vdCBwcmVzZW50IG9uIGFtZDY0IFFFTVUvR0NFIFN5emthbGxlciBpbnN0YW5jZXMuIEFuZCBNQUNCIGlzIGEgaGFyZHdhcmUgZHJpdmVyIGZvciBhIHBhcnRpY3VsYXIgaGFyZHdhcmUuCgpTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBDYWRlbmNlIE1BQ0IgaXMgYSB2ZW5kb3Itc3BlY2lmaWMsIGhhcmR3YXJlLWRlcGVuZGVudCBFdGhlcm5ldCBjb250cm9sbGVyLCB1c3VhbGx5IGZvdW5kIGluIFNvQ3MgYW5kIEFTSUNzLiBTcGVjaWZpY2FsbHksIEF0bWVsIEFUOTEgLyBNaWNyb2NoaXAgU0FNIC8gWGlsaW54IFp5bnEgU29Dcy4gQW5kIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NCBTeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCByZXZpZXcuIFRoaXMgcGF0Y2ggYWZmZWN0cyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AuIEl0IHRvdWNoZXMgYG1hY2JfbWlpX2luaXRgLCBhZGRpbmcgYW4gYG9mX25vZGVfcHV0KG1kaW9fbnApYCBjYWxsIHRvIGZpeCBhIERUIG5vZGUgcmVmY291bnQgbGVhaywgYW5kIGBtYWNiX3Byb2JlYCB3aGVyZSBgcGh5bGlua19kZXN0cm95KGJwLSZndDtwaHlsaW5rKWAgaGFzIGJlZW4gYWRkZWQgaW4gdGhlIGVycm9yIGNsZWFudXAgcGF0aC4gVGhpcyBkcml2ZXIgc3BlY2lmaWNhbGx5IHRhcmdldHMgdGhlIENhZGVuY2UgTUFDQi9HRU0gZXRoZXJuZXQgY29udHJvbGxlciwgd2hpY2ggd2UgZmluZCBvbiBBUk0tYmFzZWQgQXRtZWwvTWljcm9jaGlwL1hpbGlueCBTb0NzLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NC4gQW5kLCB0aGUgaGFyZHdhcmUgaXMgbm90IHJlYWNoYWJsZSBpbiBvdXIgZW52aXJvbm1lbnQsIHNvIGl0IGlzIHVucmVhY2hhYmxlLgoKT2theSwgbGV0JiMzOTtzIGdlbmVyYXRlIHRoZSByZXNwb25zZSB1c2luZyBgc2V0LXJlc3VsdHNgOgpgYGAKV29ydGhGdXp6aW5nOiBmYWxzZQpFbmFibGVDb25maWdzOiBbXQpGb2N1c1N5bWJvbHM6IFtdClJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgKSwgZml4aW5nIGEgZGV2aWNlIHRyZWUgT0Ygbm9kZSBsZWFrIGluIGBtYWNiX21paV9pbml0KClgIGFuZCBhZGRpbmcgbWlzc2luZyBgcGh5bGlua19kZXN0cm95KClgIGluIHRoZSBgbWFjYl9wcm9iZSgpYCBlcnJvciBwYXRoLiBUaGlzIGhhcmR3YXJlIGRyaXZlciB0YXJnZXRzIHNwZWNpZmljIEFSTS9Tb0MgcGxhdGZvcm1zIChBdG1lbC9NaWNyb2NoaXAvWGlsaW54KSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Ni9hbWQ2NCBmdXp6aW5nIGVudmlyb25tZW50cy4KYGBgCmBgYApgYGAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLCBmaXhpbmcgYSBkZXZpY2UgdHJlZSBub2RlIHJlZmVyZW5jZSBsZWFrIGluIG1hY2JfbWlpX2luaXQoKSBhbmQgYWRkaW5nIGEgbWlzc2luZyBwaHlsaW5rX2Rlc3Ryb3koKSBpbiB0aGUgbWFjYl9wcm9iZSgpIGVycm9yIHVud2luZGluZyBwYXRoLiBUaGlzIGRyaXZlciBpcyBmb3IgU29DLXNwZWNpZmljIEV0aGVybmV0IGhhcmR3YXJlIChwcmltYXJpbHkgQXRtZWwvTWljcm9jaGlwIEFUOTEgYW5kIFhpbGlueCBaeW5xKSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGFtZDY0IHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jKSwgZml4aW5nIGEgZGV2aWNlIHRyZWUgbm9kZSByZWZlcmVuY2UgbGVhayBpbiBtYWNiX21paV9pbml0KCkgYW5kIGFkZGluZyBhIG1pc3NpbmcgcGh5bGlua19kZXN0cm95KCkgaW4gdGhlIG1hY2JfcHJvYmUoKSBlcnJvciB1bndpbmRpbmcgcGF0aC4gVGhpcyBkcml2ZXIgaXMgZm9yIFNvQy1zcGVjaWZpYyBFdGhlcm5ldCBoYXJkd2FyZSAocHJpbWFyaWx5IEF0bWVsL01pY3JvY2hpcCBBVDkxIGFuZCBYaWxpbnggWnlucSkgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBhbWQ2NCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjowMy4yMjgwODQ2NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU2OTM1MTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyksIGZpeGluZyBhIGRldmljZSB0cmVlIG5vZGUgcmVmZXJlbmNlIGxlYWsgaW4gbWFjYl9taWlfaW5pdCgpIGFuZCBhZGRpbmcgYSBtaXNzaW5nIHBoeWxpbmtfZGVzdHJveSgpIGluIHRoZSBtYWNiX3Byb2JlKCkgZXJyb3IgdW53aW5kaW5nIHBhdGguIFRoaXMgZHJpdmVyIGlzIGZvciBTb0Mtc3BlY2lmaWMgRXRoZXJuZXQgaGFyZHdhcmUgKHByaW1hcmlseSBBdG1lbC9NaWNyb2NoaXAgQVQ5MSBhbmQgWGlsaW54IFp5bnEpIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjowMy4yMjgwOTA1NzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTEwNTM3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5OGNjYjkxYWI3NmRmOWNiNDdhODI4MjdhYjhlZTQxMjI5ZjBjOWZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDE6MjY6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5pbmRleCA4NDY5ZGYwZDg5YzNlLi5iMWRjNTg0MGQ3NTY5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuQEAgLTExNjQsNiArMTE2NCw4IEBAIHN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1cztcXG4gXFxuK1xcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfb3V0X3VucmVnaXN0ZXJfYnVzOlxcbkBAIC01OTgwLDYgKzU5ODIsNyBAQCBzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzKTtcXG4gXFx0XFx0bWRpb2J1c19mcmVlKGJwLVxcdTAwM2VtaWlfYnVzKTtcXG4gXFx0fVxcbitcXHRwaHlsaW5rX2Rlc3Ryb3koYnAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXG4gZXJyX291dF9waHlfZXhpdDpcXG4gXFx0cGh5X2V4aXQoYnAtXFx1MDAzZXBoeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjI2OjA0Ljc0MDA1ODk4MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjYwNTczNjAyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyksIGZpeGluZyBhIGRldmljZSB0cmVlIG5vZGUgcmVmZXJlbmNlIGxlYWsgaW4gbWFjYl9taWlfaW5pdCgpIGFuZCBhZGRpbmcgYSBtaXNzaW5nIHBoeWxpbmtfZGVzdHJveSgpIGluIHRoZSBtYWNiX3Byb2JlKCkgZXJyb3IgdW53aW5kaW5nIHBhdGguIFRoaXMgZHJpdmVyIGlzIGZvciBTb0Mtc3BlY2lmaWMgRXRoZXJuZXQgaGFyZHdhcmUgKHByaW1hcmlseSBBdG1lbC9NaWNyb2NoaXAgQVQ5MSBhbmQgWGlsaW54IFp5bnEpIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk4Y2NiOTFhYjc2ZGY5Y2I0N2E4MjgyN2FiOGVlNDEyMjlmMGM5ZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAxOjI2OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbmluZGV4IDg0NjlkZjBkODljM2UuLmIxZGM1ODQwZDc1NjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5AQCAtMTE2NCw2ICsxMTY0LDggQEAgc3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1cztcbiBcbitcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX291dF91bnJlZ2lzdGVyX2J1czpcbkBAIC01OTgwLDYgKzU5ODIsNyBAQCBzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMpO1xuIFx0XHRtZGlvYnVzX2ZyZWUoYnAtXHUwMDNlbWlpX2J1cyk7XG4gXHR9XG4rXHRwaHlsaW5rX2Rlc3Ryb3koYnAtXHUwMDNlcGh5bGluayk7XG4gXG4gZXJyX291dF9waHlfZXhpdDpcbiBcdHBoeV9leGl0KGJwLVx1MDAzZXBoeSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjowNC43NDAwNjExMjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTc0OTEzNjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEFNRDY0IEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyBldmVuIHJlbGV2YW50IGZvciBmdXp6aW5nIG9uIGFuIGFtZDY0IGFyY2hpdGVjdHVyZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IHNjYW4gdGhlIGZpbGVzIHRoYXQgd2VyZSBtb2RpZmllZC4gQWgsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYCDigJMgaW50ZXJlc3RpbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYG1hY2JgIGRyaXZlciBhY3R1YWxseSAqaXMqLiBXaGF0IGhhcmR3YXJlIGlzIGl0IHRpZWQgdG8/IFdoYXQgcGxhdGZvcm1zIGRvZXMgaXQgcnVuIG9uPyBUaGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiBJIHJlYWxpc3RpY2FsbHkgcmVhY2ggdGhpcyBjb2RlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9uIGFtZDY0PyBUaGlzIGRldGVybWluZXMgaWYgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byB0ZXN0IGl0IHVzaW5nIHN0YW5kYXJkIHRvb2xzLlxuXG5UaW1lIHRvIGNvbnN1bHQgdGhlIHVzdWFsIHNvdXJjZXMuIEnigJlsbCBmaXJlIHVwIGBncmVwcGVyYCwgb3IgbWF5YmUganVzdCBhIHF1aWNrIGByZWFkLWZpbGVgIGNvbW1hbmQsIGFuZCBpbnNwZWN0IGJvdGggYG1hY2JfbWFpbi5jYCBpdHNlbGYgYW5kIHRoZSBhc3NvY2lhdGVkIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdgIGZpbGUuIFRoZSBLY29uZmlnIHdpbGwgb2Z0ZW4gZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGFyZHdhcmUgc3VwcG9ydC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgaW4gbXkgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoxMC4zMTQ5Nzc3NjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENhZGVuY2UgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiQ2FkZW5jZSBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gICA5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxNjpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxNzpcXHRcXHQgIHJlbWFpbmluZyBDYWRlbmNlIG5ldHdvcmsgY2FyZCBxdWVzdGlvbnMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBNQUNCXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDI2OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAyNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgVGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgZm91bmQgb24gbWFueSBBdG1lbCBBVDMyIGFuZFxcbiAgMzA6XFx0XFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcXG4gIDMxOlxcdFxcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcXG4gIDMyOlxcdFxcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjI2OjEwLjMxNTA5NzE1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjI2OTU4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbWFjYl9tYWluLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHNwZWNpZmljLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGlzIHRvIHN0YXJ0IHdpdGggc29tZSB0YXJnZXRlZCBpbnZlc3RpZ2F0aW9uLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBtYWNiX21haW4uY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lcyAxMTY0IGFuZCA1OTgwLiBUaG9zZSBsaW5lIG51bWJlcnMgcHJvYmFibHkgcmVwcmVzZW50IHBvaW50cyBvZiBpbnRlcmVzdCB0aGF0IEkgcHJldmlvdXNseSBpZGVudGlmaWVkIGR1cmluZyBkZWJ1Z2dpbmcgb3IgY29kZSByZXZpZXcsIG9yIHBlcmhhcHMgdGhleSdyZSBhc3NvY2lhdGVkIHdpdGggYSBrbm93biBpc3N1ZS4gSXQncyBhIHN0cmF0ZWdpYyBzdGFydGluZyBwb2ludCBmb3IgbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBpbiB0aG9zZSBzZWN0aW9ucyBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIG5hcnJvdyBkb3duIHRoZSBwb3NzaWJsZSBjYXVzZXMsIGFuZCBjb250aW51ZSBmcm9tIHRoZXJlIHdpdGggbW9yZSBpbmZvcm1lZCBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoxMi41Mzc3OTYwMjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTYwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdFxcdGJwLVxcdTAwM2VtaWlfYnVzLVxcdTAwM2VyZWFkX2M0NSA9IFxcdTAwMjZtYWNiX21kaW9fcmVhZF9jNDU7XFxuMTE1MTpcXHRcXHRicC1cXHUwMDNlbWlpX2J1cy1cXHUwMDNld3JpdGVfYzQ1ID0gXFx1MDAyNm1hY2JfbWRpb193cml0ZV9jNDU7XFxuMTE1MjpcXHRcXHRzbnByaW50ZihicC1cXHUwMDNlbWlpX2J1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzLSV4XFxcIixcXG4xMTUzOlxcdFxcdFxcdCBicC1cXHUwMDNlcGRldi1cXHUwMDNlbmFtZSwgYnAtXFx1MDAzZXBkZXYtXFx1MDAzZWlkKTtcXG4xMTU0OlxcdFxcdGJwLVxcdTAwM2VtaWlfYnVzLVxcdTAwM2Vwcml2ID0gYnA7XFxuMTE1NTpcXHRcXHRicC1cXHUwMDNlbWlpX2J1cy1cXHUwMDNlcGFyZW50ID0gXFx1MDAyNmJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuMTE1NjpcXHRcXG4xMTU3OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2YnAtXFx1MDAzZW5ldGRldi1cXHUwMDNlZGV2LCBicC1cXHUwMDNlbWlpX2J1cyk7XFxuMTE1ODpcXHRcXG4xMTU5OlxcdFxcdGVyciA9IG1hY2JfbWRpb2J1c19yZWdpc3RlcihicCwgbWRpb19ucCk7XFxuMTE2MDpcXHRcXHRpZiAoZXJyKVxcbjExNjE6XFx0XFx0XFx0Z290byBlcnJfb3V0X2ZyZWVfbWRpb2J1cztcXG4xMTYyOlxcdFxcbjExNjM6XFx0XFx0ZXJyID0gbWFjYl9taWlfcHJvYmUoYnAtXFx1MDAzZW5ldGRldik7XFxuMTE2NDpcXHRcXHRpZiAoZXJyKVxcbjExNjU6XFx0XFx0XFx0Z290byBlcnJfb3V0X3VucmVnaXN0ZXJfYnVzO1xcbjExNjY6XFx0XFxuMTE2NzpcXHRcXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0cmV0dXJuIDA7XFxuMTE3MDpcXHRcXG4xMTcxOlxcdGVycl9vdXRfdW5yZWdpc3Rlcl9idXM6XFxuMTE3MjpcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMpO1xcbjExNzM6XFx0ZXJyX291dF9mcmVlX21kaW9idXM6XFxuMTE3NDpcXHRcXHRtZGlvYnVzX2ZyZWUoYnAtXFx1MDAzZW1paV9idXMpO1xcbjExNzU6XFx0ZXJyX291dDpcXG4xMTc2OlxcdFxcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbjExNzc6XFx0XFxuMTE3ODpcXHRcXHRyZXR1cm4gZXJyO1xcbjExNzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoxMi41MzgwNTUxNjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzEyNzMwOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgSXNzdWVzIGluIHRoZSBgbWFjYl9wcm9iZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gcmV2aXNpdGluZyB0aGlzIGlzc3VlIGFuZCB0aGlua2luZyBhYm91dCB3aGVyZSB0aGUgcG90ZW50aWFsIHByb2JsZW0gbWlnaHQgbGllLiBCYXNlZCBvbiB3aGF0IEkndmUgc2VlbiBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGJ1ZyByZXBvcnQsIEkgc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYG1hY2JfcHJvYmVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGxldCdzIHpvb20gaW4gYXJvdW5kIGxpbmUgNTk4MCBpbiB0aGF0IGZ1bmN0aW9uLiBJdCdzIGEga2V5IGFyZWEgdG8gc2NydXRpbml6ZSBiZWNhdXNlIG9mIFgsIFkgYW5kIFouLi4gYW5kIGJlY2F1c2Ugb2YgdGhlIHBhdHRlcm4gd2l0aCB0aGUgcmVsYXRlZCBkcml2ZXJzLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgY29kZSB0aGVyZSBmb3IgYW55IHBvdGVudGlhbCBsb2dpYyBlcnJvcnMsIHJhY2UgY29uZGl0aW9ucywgb3IgaW5jb3JyZWN0IGFzc3VtcHRpb25zIHRoYXQgY291bGQgYmUgY29udHJpYnV0aW5nIHRvIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHNvbWV0aGluZyBpcyBnb2luZyB3cm9uZyBkdXJpbmcgdGhpcyBwYXJ0IG9mIHRoZSBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjY6MTUuODUwNzg4OTQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk2MDpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG41OTYxOlxcdFxcdGlmIChlcnIpIHtcXG41OTYyOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cXFxcblxcXCIpO1xcbjU5NjM6XFx0XFx0XFx0Z290byBlcnJfb3V0X2ZyZWVfdGllb2ZmO1xcbjU5NjQ6XFx0XFx0fVxcbjU5NjU6XFx0XFxuNTk2NjpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmJwLVxcdTAwM2VocmVzcF9lcnJfYmhfd29yaywgbWFjYl9ocmVzcF9lcnJvcl90YXNrKTtcXG41OTY3OlxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZicC1cXHUwMDNldHhfbHBpX3dvcmssIG1hY2JfdHhfbHBpX3dvcmtfZm4pO1xcbjU5Njg6XFx0XFxuNTk2OTpcXHRcXHRuZXRkZXZfaW5mbyhuZXRkZXYsIFxcXCJDYWRlbmNlICVzIHJldiAweCUwOHggYXQgMHglMDhseCBpcnEgJWQgKCVwTSlcXFxcblxcXCIsXFxuNTk3MDpcXHRcXHRcXHQgICAgbWFjYl9pc19nZW0oYnApID8gXFxcIkdFTVxcXCIgOiBcXFwiTUFDQlxcXCIsIG1hY2JfcmVhZGwoYnAsIE1JRCksXFxuNTk3MTpcXHRcXHRcXHQgICAgbmV0ZGV2LVxcdTAwM2ViYXNlX2FkZHIsIG5ldGRldi1cXHUwMDNlaXJxLCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG41OTcyOlxcdFxcbjU5NzM6XFx0XFx0cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoXFx1MDAyNmJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbjU5NzQ6XFx0XFxuNTk3NTpcXHRcXHRyZXR1cm4gMDtcXG41OTc2OlxcdFxcbjU5Nzc6XFx0ZXJyX291dF9mcmVlX3RpZW9mZjpcXG41OTc4OlxcdFxcdG1hY2JfZnJlZV90aWVvZmYoYnApO1xcbjU5Nzk6XFx0XFxuNTk4MDpcXHRlcnJfb3V0X3VucmVnaXN0ZXJfbWRpbzpcXG41OTgxOlxcdFxcdGlmIChicC1cXHUwMDNlbWlpX2J1cykge1xcbjU5ODI6XFx0XFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzKTtcXG41OTgzOlxcdFxcdFxcdG1kaW9idXNfZnJlZShicC1cXHUwMDNlbWlpX2J1cyk7XFxuNTk4NDpcXHRcXHR9XFxuNTk4NTpcXHRcXHRwaHlsaW5rX2Rlc3Ryb3koYnAtXFx1MDAzZXBoeWxpbmspO1xcbjU5ODY6XFx0XFxuNTk4NzpcXHRlcnJfb3V0X3BoeV9leGl0OlxcbjU5ODg6XFx0XFx0cGh5X2V4aXQoYnAtXFx1MDAzZXBoeSk7XFxuNTk4OTpcXHRcXG41OTkwOlxcdGVycl9vdXRfZnJlZV9uZXRkZXY6XFxuNTk5MTpcXHRcXHRmcmVlX25ldGRldihuZXRkZXYpO1xcbjU5OTI6XFx0XFxuNTk5MzpcXHRlcnJfZGlzYWJsZV9jbG9ja3M6XFxuNTk5NDpcXHRcXHRtYWNiX2Nsa3NfZGlzYWJsZShwY2xrLCBoY2xrLCB0eF9jbGssIHJ4X2NsaywgdHN1X2Nsayk7XFxuNTk5NTpcXHRcXHRwbV9ydW50aW1lX2Rpc2FibGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuNTk5NjpcXHRcXHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuNTk5NzpcXHRcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbjU5OTg6XFx0XFxuNTk5OTpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoxNS44NTEwOTI4OTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjQ2ODQxMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBDb250cm9sbGVyIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gbG9va2luZyBhdCBgbWFjYl9tYWluLmNgLCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgZHJpdmVyIGZvciB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVyLCBzcGVjaWZpY2FsbHkgZm9yIHBsYXRmb3JtIGRldmljZXMuIFJpZ2h0LCBhbmQgdGhlcmUncyBhIFBDSSB3cmFwcGVyIGluIGBtYWNiX3BjaS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBpcyBpbml0aWFsaXplZCwgc28gSSdsbCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGBtYWNiX3Byb2JlYC4gSXQncyB0aGUgYHBsYXRmb3JtX2RyaXZlcmAncyBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIENhZGVuY2UgTUFDQi9HRU0gU29DIGRldmljZXMsIGFzIGV4cGVjdGVkLlxuXG5Ob3csIGxldCdzIGVpdGhlciBhbmFseXplIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWFjYl9wcm9iZWAgZGlyZWN0bHkgb3Igc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgcmVmZXJlbmNlcyB0byBpdCB3aXRoaW4gdGhlIGNvZGViYXNlIHRoYXQgbWlnaHQgcHJvdmlkZSB1c2VmdWwgY29udGV4dC4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoyMC4wOTc5MzY5NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjUyODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2JfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtYWNiX3BtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjYyNzU6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjYl9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02Mjc2LVxcdC5wcm9iZVxcdFxcdD0gbWFjYl9wcm9iZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjYyODY6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtYWNiX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02Mjg3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoyMC4xODIxOTQ2MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY1NTE3OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgUENJIFdyYXBwZXIqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBtYWNiX3BjaS5jYCBjb2RlIHRvIGdyYXNwIHRoZSBQQ0kgd3JhcHBlciBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgcHJlY2lzZWx5IGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhlIFBDSSBpbnRlcmZhY2Ugd2l0aGluIHRoaXMgY29udGV4dC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBoYW5kbGluZyB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2VzcywgYW5kIGludGVycnVwdCByb3V0aW5nLiBUaGUgZHJpdmVyJ3MgYXJjaGl0ZWN0dXJlIHNob3VsZCBiZSBhcHBhcmVudCBhcyBJIGRpc3NlY3QgdGhlIFBDSS1zcGVjaWZpYyBpbnRlcmFjdGlvbnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjY6MjIuMjQ3NzE2NTQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogRE9DOiBDYWRlbmNlIEdFTSBQQ0kgd3JhcHBlci5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2FkZW5jZSBEZXNpZ24gU3lzdGVtcyAtIGh0dHBzOi8vd3d3LmNhZGVuY2UuY29tXFxuICAgNjpcXHQgKlxcbiAgIDc6XFx0ICogQXV0aG9yczogUmFmYWwgT3ppZWJsbyBcXHUwMDNjcmFmYWxvQGNhZGVuY2UuY29tXFx1MDAzZVxcbiAgIDg6XFx0ICpcXHQgICAgQmFydG9zeiBGb2x0YSBcXHUwMDNjYmZvbHRhQGNhZGVuY2UuY29tXFx1MDAzZVxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGstcHJvdmlkZXIuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFxcIm1hY2IuaFxcXCJcXG4gIDE4OlxcdFxcbiAgMTk6XFx0I2RlZmluZSBQQ0lfRFJJVkVSX05BTUUgXFxcIm1hY2JfcGNpXFxcIlxcbiAgMjA6XFx0I2RlZmluZSBQTEFUX0RSSVZFUl9OQU1FIFxcXCJtYWNiXFxcIlxcbiAgMjE6XFx0XFxuICAyMjpcXHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0ROU19NQUNCIDB4ZTAwN1xcbiAgMjM6XFx0XFxuICAyNDpcXHQjZGVmaW5lIEdFTV9QQ0xLX1JBVEUgNTAwMDAwMDBcXG4gIDI1OlxcdCNkZWZpbmUgR0VNX0hDTEtfUkFURSA1MDAwMDAwMFxcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiAgMjg6XFx0e1xcbiAgMjk6XFx0XFx0aW50IGVycjtcXG4gIDMwOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XFxuICAzMTpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gcGxhdF9pbmZvO1xcbiAgMzI6XFx0XFx0c3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBwbGF0X2RhdGE7XFxuICAzMzpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgcmVzWzJdO1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRcXHQvKiBlbmFibGUgcGNpIGRldmljZSAqL1xcbiAgMzY6XFx0XFx0ZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBjaSk7XFxuICAzNzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAgMzg6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIFxcXCJFbmFibGluZyBQQ0kgZGV2aWNlIGhhcyBmYWlsZWQ6ICVkXFxcIiwgZXJyKTtcXG4gIDM5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuICA0MDpcXHRcXHR9XFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdHBjaV9zZXRfbWFzdGVyKHBjaSk7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdC8qIHNldCB1cCByZXNvdXJjZXMgKi9cXG4gIDQ1OlxcdFxcdG1lbXNldChyZXMsIDB4MDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogQVJSQVlfU0laRShyZXMpKTtcXG4gIDQ2OlxcdFxcdHJlc1swXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApO1xcbiAgNDc6XFx0XFx0cmVzWzBdLmVuZCA9IHBjaV9yZXNvdXJjZV9lbmQocGNpLCAwKTtcXG4gIDQ4OlxcdFxcdHJlc1swXS5uYW1lID0gUENJX0RSSVZFUl9OQU1FO1xcbiAgNDk6XFx0XFx0cmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07XFxuICA1MDpcXHRcXHRyZXNbMV0uc3RhcnQgPSBwY2lfaXJxX3ZlY3RvcihwY2ksIDApO1xcbiAgNTE6XFx0XFx0cmVzWzFdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XFxuICA1MjpcXHRcXHRyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTtcXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBcXFwiRU1BQyBwaHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxcXFxuXFxcIixcXG4gIDU1OlxcdFxcdFxcdCBcXHUwMDI2cmVzWzBdLnN0YXJ0KTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0Lyogc2V0IHVwIG1hY2IgcGxhdGZvcm0gZGF0YSAqL1xcbiAgNTg6XFx0XFx0bWVtc2V0KFxcdTAwMjZwbGF0X2RhdGEsIDAsIHNpemVvZihwbGF0X2RhdGEpKTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0LyogaW5pdGlhbGl6ZSBjbG9ja3MgKi9cXG4gIDYxOlxcdFxcdHBsYXRfZGF0YS5wY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBcXFwicGNsa1xcXCIsIE5VTEwsIDAsXFxuICA2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0VNX1BDTEtfUkFURSk7XFxuICA2MzpcXHRcXHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5wY2xrKSkge1xcbiAgNjQ6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEucGNsayk7XFxuICA2NTpcXHRcXHRcXHRnb3RvIGVycl9wY2xrX3JlZ2lzdGVyO1xcbiAgNjY6XFx0XFx0fVxcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHRwbGF0X2RhdGEuaGNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgXFxcImhjbGtcXFwiLCBOVUxMLCAwLFxcbiAgNjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdFTV9IQ0xLX1JBVEUpO1xcbiAgNzA6XFx0XFx0aWYgKElTX0VSUihwbGF0X2RhdGEuaGNsaykpIHtcXG4gIDcxOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocGxhdF9kYXRhLmhjbGspO1xcbiAgNzI6XFx0XFx0XFx0Z290byBlcnJfaGNsa19yZWdpc3RlcjtcXG4gIDczOlxcdFxcdH1cXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0Lyogc2V0IHVwIHBsYXRmb3JtIGRldmljZSBpbmZvICovXFxuICA3NjpcXHRcXHRtZW1zZXQoXFx1MDAyNnBsYXRfaW5mbywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpO1xcbiAgNzc6XFx0XFx0cGxhdF9pbmZvLnBhcmVudCA9IFxcdTAwMjZwY2ktXFx1MDAzZWRldjtcXG4gIDc4OlxcdFxcdHBsYXRfaW5mby5md25vZGUgPSBwY2ktXFx1MDAzZWRldi5md25vZGU7XFxuICA3OTpcXHRcXHRwbGF0X2luZm8ubmFtZSA9IFBMQVRfRFJJVkVSX05BTUU7XFxuICA4MDpcXHRcXHRwbGF0X2luZm8uaWQgPSBwY2ktXFx1MDAzZWRldmZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoyMi4yNDc4ODI0NThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU0OTUwMjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBDYWRlbmNlIE1BQ0IvR0VNIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBgbWFjYl9tYWluLmNgLCB3aGljaCBpcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlci4gRmlyc3QsIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBpcyB0aGlzIGhhcmR3YXJlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIGZ1enppbmcgc2V0dXAgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgYW5kIG9uIGFtZDY0PyBMZXQncyBydWxlIG91dCB0aGUgb2J2aW91cyBuZWdhdGl2ZSBjcml0ZXJpYS5cblxuV2Uga25vdyBzb21lIGhhcmR3YXJlIGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgaW4gdGhlc2UgZW52aXJvbm1lbnRzOiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgc3BlY2lhbGl6ZWQgTklDcywgR1BVIGRyaXZlcnMgKHRoaW5rIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KS4gVGhlc2UgcmVxdWlyZSBhY3R1YWwgQVNJQ3Mgb3IgcGh5c2ljYWwgUENJZSBjYXJkcyB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVuIHRoZXJlJ3MgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgYW5kIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRoYXQgYXJlIG9ubHkgaGl0IGR1cmluZyBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBhIG1hbnVhbCBkcml2ZXIgdW5iaW5kaW5nIHZpYSBzeXNmcy4gRmluYWxseSwgY29kZSBwYXRocyBzcGVjaWZpYyB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gYW1kNjQuXG5cbkJ1dCwgaG1tLCBkb2VzIFFFTVUgZXZlbiAqZW11bGF0ZSogdGhlIENhZGVuY2UgR0VNPyBJdCAqZG9lcyogaGF2ZSBgY2FkZW5jZV9nZW0uY2AsIGJ1dCBpdCdzIHNwZWNpZmljYWxseSBmb3IgQVJNIG1hY2hpbmVzLCBsaWtlIHRoZSBYaWxpbnggWnlucSBhbmQgWnlucU1QLiBBbmQgdGhhdOKAmXMgYSBwcm9ibGVtIGJlY2F1c2Ugb3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQuIFdhaXQgYSBtaW51dGUsIGlzIENhZGVuY2UgTUFDQi9HRU0gcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYgUUVNVT8gTm8uIFN0YW5kYXJkIFFFTVUgeDg2XzY0IHJlbGllcyBvbiB0aGUgZTEwMDAsIHJ0bDgxMzksIHZpcnRpby1uZXQsIGV0Yy4gRXZlbiBpZiB3ZSBjaGVjayB0aGUgUENJIElEIGBQQ0lfREVWSUNFX0lEX0NETlNfTUFDQmAgKDB4MTdjZCAvIDB4ZTAwNyAtIENhZGVuY2UgRGVzaWduIFN5c3RlbXMgR0VNKSwgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhlIGNhcmQuXG5cbkxldCdzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBwYXRjaCBpdHNlbGYuIFdlJ3JlIHNlZWluZyBjaGFuZ2VzIGluIGBtYWNiX21paV9pbml0YDogYWRkaW5nIGBvZl9ub2RlX3B1dChtZGlvX25wKWAuIFRoZSBgbWRpb19ucGAgY29tZXMgZnJvbSBgb2ZfZ2V0X2NvbXBhdGlibGVfY2hpbGQoYnAtXHUwMDNlcGRldi1cdTAwM2VkZXYub2Zfbm9kZSwgXCJjZG5zLG1hY2ItbWRpb1wiKWAuIFRoYXQncyBPcGVuIEZpcm13YXJlL0RldmljZSBUcmVlIHN0dWZmLCB1c2VkIG9uIERULWJhc2VkIHBsYXRmb3JtcywgbGlrZSBBUk0gYW5kIHNwZWNpZmljIGNoaXBzLlxuXG5UaGVuLCBpbiBgbWFjYl9wcm9iZWA6IHdlJ3ZlIGFkZGVkIGBwaHlsaW5rX2Rlc3Ryb3koYnAtXHUwMDNlcGh5bGluaylgIGluIGFuIGVycm9yIGNsZWFudXAgcGF0aCwgYGVycl9vdXRfdW5yZWdpc3Rlcl9tZGlvYC4gSW1wb3J0YW50ISBgbWFjYl9taWlfaW5pdGAgaXMgY2FsbGVkIGR1cmluZyBwcm9iZSB3aGVuIGEgRFQgbm9kZSBpcyBwcmVzZW50IG9yIGlmIE1ESU8gaXMgaW5pdGlhbGl6ZWQsIGFuZCBgb2Zfbm9kZV9wdXRgIGlzIHZlcnkgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gRGV2aWNlIFRyZWUuIERldmljZSBUcmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBvbiBhbWQ2NCBRRU1VL0dDRSBTeXprYWxsZXIgaW5zdGFuY2VzLiBBbmQgTUFDQiBpcyBhIGhhcmR3YXJlIGRyaXZlciBmb3IgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlLlxuXG5TbywgaXQncyBwcmV0dHkgY2xlYXI6IENhZGVuY2UgTUFDQiBpcyBhIHZlbmRvci1zcGVjaWZpYywgaGFyZHdhcmUtZGVwZW5kZW50IEV0aGVybmV0IGNvbnRyb2xsZXIsIHVzdWFsbHkgZm91bmQgaW4gU29DcyBhbmQgQVNJQ3MuIFNwZWNpZmljYWxseSwgQXRtZWwgQVQ5MSAvIE1pY3JvY2hpcCBTQU0gLyBYaWxpbnggWnlucSBTb0NzLiBBbmQgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0IFN5emthbGxlciBmdXp6aW5nIGVudmlyb25tZW50cy5cblxuTGV0J3MgZG8gYSBmaW5hbCByZXZpZXcuIFRoaXMgcGF0Y2ggYWZmZWN0cyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AuIEl0IHRvdWNoZXMgYG1hY2JfbWlpX2luaXRgLCBhZGRpbmcgYW4gYG9mX25vZGVfcHV0KG1kaW9fbnApYCBjYWxsIHRvIGZpeCBhIERUIG5vZGUgcmVmY291bnQgbGVhaywgYW5kIGBtYWNiX3Byb2JlYCB3aGVyZSBgcGh5bGlua19kZXN0cm95KGJwLVx1MDAzZXBoeWxpbmspYCBoYXMgYmVlbiBhZGRlZCBpbiB0aGUgZXJyb3IgY2xlYW51cCBwYXRoLiBUaGlzIGRyaXZlciBzcGVjaWZpY2FsbHkgdGFyZ2V0cyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBldGhlcm5ldCBjb250cm9sbGVyLCB3aGljaCB3ZSBmaW5kIG9uIEFSTS1iYXNlZCBBdG1lbC9NaWNyb2NoaXAvWGlsaW54IFNvQ3MuIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBBbmQsIHRoZSBoYXJkd2FyZSBpcyBub3QgcmVhY2hhYmxlIGluIG91ciBlbnZpcm9ubWVudCwgc28gaXQgaXMgdW5yZWFjaGFibGUuXG5cbk9rYXksIGxldCdzIGdlbmVyYXRlIHRoZSByZXNwb25zZSB1c2luZyBgc2V0LXJlc3VsdHNgOlxuYGBgXG5Xb3J0aEZ1enppbmc6IGZhbHNlXG5FbmFibGVDb25maWdzOiBbXVxuRm9jdXNTeW1ib2xzOiBbXVxuUmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2ApLCBmaXhpbmcgYSBkZXZpY2UgdHJlZSBPRiBub2RlIGxlYWsgaW4gYG1hY2JfbWlpX2luaXQoKWAgYW5kIGFkZGluZyBtaXNzaW5nIGBwaHlsaW5rX2Rlc3Ryb3koKWAgaW4gdGhlIGBtYWNiX3Byb2JlKClgIGVycm9yIHBhdGguIFRoaXMgaGFyZHdhcmUgZHJpdmVyIHRhcmdldHMgc3BlY2lmaWMgQVJNL1NvQyBwbGF0Zm9ybXMgKEF0bWVsL01pY3JvY2hpcC9YaWxpbngpIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2L2FtZDY0IGZ1enppbmcgZW52aXJvbm1lbnRzLlxuYGBgXG5gYGBcbmBgYFxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjcxLCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjozMC43OTczODg4NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLCBmaXhpbmcgYSBkZXZpY2UgdHJlZSBub2RlIHJlZmVyZW5jZSBsZWFrIGluIG1hY2JfbWlpX2luaXQoKSBhbmQgYWRkaW5nIGEgbWlzc2luZyBwaHlsaW5rX2Rlc3Ryb3koKSBpbiB0aGUgbWFjYl9wcm9iZSgpIGVycm9yIHVud2luZGluZyBwYXRoLiBUaGlzIGRyaXZlciBpcyBmb3IgU29DLXNwZWNpZmljIEV0aGVybmV0IGhhcmR3YXJlIChwcmltYXJpbHkgQXRtZWwvTWljcm9jaGlwIEFUOTEgYW5kIFhpbGlueCBaeW5xKSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGFtZDY0IHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jKSwgZml4aW5nIGEgZGV2aWNlIHRyZWUgbm9kZSByZWZlcmVuY2UgbGVhayBpbiBtYWNiX21paV9pbml0KCkgYW5kIGFkZGluZyBhIG1pc3NpbmcgcGh5bGlua19kZXN0cm95KCkgaW4gdGhlIG1hY2JfcHJvYmUoKSBlcnJvciB1bndpbmRpbmcgcGF0aC4gVGhpcyBkcml2ZXIgaXMgZm9yIFNvQy1zcGVjaWZpYyBFdGhlcm5ldCBoYXJkd2FyZSAocHJpbWFyaWx5IEF0bWVsL01pY3JvY2hpcCBBVDkxIGFuZCBYaWxpbnggWnlucSkgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBhbWQ2NCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjI2OjMwLjc5NzQyMTY3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvm72j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 01:24:16 +0000 UTC FinishedAt: 2026-09-08 01:26:32 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jKSwgZml4aW5nIGEgZGV2aWNlIHRyZWUgbm9kZSByZWZlcmVuY2UgbGVhayBpbiBtYWNiX21paV9pbml0KCkgYW5kIGFkZGluZyBhIG1pc3NpbmcgcGh5bGlua19kZXN0cm95KCkgaW4gdGhlIG1hY2JfcHJvYmUoKSBlcnJvciB1bndpbmRpbmcgcGF0aC4gVGhpcyBkcml2ZXIgaXMgZm9yIFNvQy1zcGVjaWZpYyBFdGhlcm5ldCBoYXJkd2FyZSAocHJpbWFyaWx5IEF0bWVsL01pY3JvY2hpcCBBVDkxIGFuZCBYaWxpbnggWnlucSkgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBhbWQ2NCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5OGNjYjkxYWI3NmRmOWNiNDdhODI4MjdhYjhlZTQxMjI5ZjBjOWZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMToyNjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggODQ2OWRmMGQ4OWMzZS4uYjFkYzU4NDBkNzU2OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbkBAIC0xMTY0LDYgJiM0MzsxMTY0LDggQEAgc3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1cztcbiBcbiYjNDM7XHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfb3V0X3VucmVnaXN0ZXJfYnVzOlxuQEAgLTU5ODAsNiAmIzQzOzU5ODIsNyBAQCBzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMpO1xuIFx0XHRtZGlvYnVzX2ZyZWUoYnAtXHUwMDNlbWlpX2J1cyk7XG4gXHR9XG4mIzQzO1x0cGh5bGlua19kZXN0cm95KGJwLVx1MDAzZXBoeWxpbmspO1xuIFxuIGVycl9vdXRfcGh5X2V4aXQ6XG4gXHRwaHlfZXhpdChicC1cdTAwM2VwaHkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyksIGZpeGluZyBhIGRldmljZSB0cmVlIG5vZGUgcmVmZXJlbmNlIGxlYWsgaW4gbWFjYl9taWlfaW5pdCgpIGFuZCBhZGRpbmcgYSBtaXNzaW5nIHBoeWxpbmtfZGVzdHJveSgpIGluIHRoZSBtYWNiX3Byb2JlKCkgZXJyb3IgdW53aW5kaW5nIHBhdGguIFRoaXMgZHJpdmVyIGlzIGZvciBTb0Mtc3BlY2lmaWMgRXRoZXJuZXQgaGFyZHdhcmUgKHByaW1hcmlseSBBdG1lbC9NaWNyb2NoaXAgQVQ5MSBhbmQgWGlsaW54IFp5bnEpIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOThjY2I5MWFiNzZkZjljYjQ3YTgyODI3YWI4ZWU0MTIyOWYwYzlmYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDE6MjY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwppbmRleCA4NDY5ZGYwZDg5YzNlLi5iMWRjNTg0MGQ3NTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKQEAgLTExNjQsNiAmIzQzOzExNjQsOCBAQCBzdGF0aWMgaW50IG1hY2JfbWlpX2luaXQoc3RydWN0IG1hY2IgKmJwKQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1czsKIAomIzQzOwlvZl9ub2RlX3B1dChtZGlvX25wKTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogZXJyX291dF91bnJlZ2lzdGVyX2J1czoKQEAgLTU5ODAsNiAmIzQzOzU5ODIsNyBAQCBzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJbWRpb2J1c191bnJlZ2lzdGVyKGJwLSZndDttaWlfYnVzKTsKIAkJbWRpb2J1c19mcmVlKGJwLSZndDttaWlfYnVzKTsKIAl9CiYjNDM7CXBoeWxpbmtfZGVzdHJveShicC0mZ3Q7cGh5bGluayk7CiAKIGVycl9vdXRfcGh5X2V4aXQ6CiAJcGh5X2V4aXQoYnAtJmd0O3BoeSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgQU1ENjQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGV2ZW4gcmVsZXZhbnQgZm9yIGZ1enppbmcgb24gYW4gYW1kNjQgYXJjaGl0ZWN0dXJlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgc2NhbiB0aGUgZmlsZXMgdGhhdCB3ZXJlIG1vZGlmaWVkLiBBaCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgIOKAkyBpbnRlcmVzdGluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBgbWFjYmAgZHJpdmVyIGFjdHVhbGx5ICppcyouIFdoYXQgaGFyZHdhcmUgaXMgaXQgdGllZCB0bz8gV2hhdCBwbGF0Zm9ybXMgZG9lcyBpdCBydW4gb24/IFRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIEkgcmVhbGlzdGljYWxseSByZWFjaCB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb24gYW1kNjQ/IFRoaXMgZGV0ZXJtaW5lcyBpZiBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIHRlc3QgaXQgdXNpbmcgc3RhbmRhcmQgdG9vbHMuCgpUaW1lIHRvIGNvbnN1bHQgdGhlIHVzdWFsIHNvdXJjZXMuIEnigJlsbCBmaXJlIHVwIGBncmVwcGVyYCwgb3IgbWF5YmUganVzdCBhIHF1aWNrIGByZWFkLWZpbGVgIGNvbW1hbmQsIGFuZCBpbnNwZWN0IGJvdGggYG1hY2JfbWFpbi5jYCBpdHNlbGYgYW5kIHRoZSBhc3NvY2lhdGVkIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdgIGZpbGUuIFRoZSBLY29uZmlnIHdpbGwgb2Z0ZW4gZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGFyZHdhcmUgc3VwcG9ydC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgaW4gbXkgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDYWRlbmNlIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX0NBREVOQ0VcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7Q2FkZW5jZSBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuICAgOTpcdFx0ZGVmYXVsdCB5XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMjpcdFxuICAxMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAxNDpcdFxuICAxNTpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTY6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTc6XHRcdCAgcmVtYWluaW5nIENhZGVuY2UgbmV0d29yayBjYXJkIHF1ZXN0aW9ucy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxOTpcdFxuICAyMDpcdGlmIE5FVF9WRU5ET1JfQ0FERU5DRVxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBNQUNCXG4gIDIzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gSEFTX0RNQSBcdTAwMjZcdTAwMjYgQ09NTU9OX0NMS1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyNjpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMjc6XHRcdHNlbGVjdCBDUkMzMlxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGludGVyZmFjZSBpcyBmb3VuZCBvbiBtYW55IEF0bWVsIEFUMzIgYW5kXG4gIDMwOlx0XHQgIEFUOTEgcGFydHMuICBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBDYWRlbmNlIEdFTSAoR2lnYWJpdFxuICAzMTpcdFx0ICBFdGhlcm5ldCBNQUMgZm91bmQgaW4gc29tZSBBUk0gU29DIGRldmljZXMpLiAgU2F5IFkgdG8gaW5jbHVkZVxuICAzMjpcdFx0ICBzdXBwb3J0IGZvciB0aGUgTUFDQi9HRU0gY2hpcC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzNTpcdFx0ICB3aWxsIGJlIG1hY2IuXG4gIDM2Olx0XG4gIDM3Olx0Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbiAgMzg6XHRcdGJvb2wgXCYjMzQ7VXNlIElFRUUgMTU4OCBod3N0YW1wXCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1BQ0JcbiAgNDA6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbiAgNDE6XHRcdGRlZmF1bHQgeVxuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIE1BQ0JfUENJXG4gIDQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIE1BQ0IgXHUwMDI2XHUwMDI2IFBDSVxuICA0ODpcdFx0aGVscFxuICA0OTpcdFx0ICBUaGlzIGlzIFBDSSB3cmFwcGVyIGZvciBNQUNCIGRyaXZlci5cbiAgNTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQ1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBtYWNiX21haW4uY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHNwZWNpZmljLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIHNvbWUgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1hY2JfbWFpbi5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmVzIDExNjQgYW5kIDU5ODAuIFRob3NlIGxpbmUgbnVtYmVycyBwcm9iYWJseSByZXByZXNlbnQgcG9pbnRzIG9mIGludGVyZXN0IHRoYXQgSSBwcmV2aW91c2x5IGlkZW50aWZpZWQgZHVyaW5nIGRlYnVnZ2luZyBvciBjb2RlIHJldmlldywgb3IgcGVyaGFwcyB0aGV5JiMzOTtyZSBhc3NvY2lhdGVkIHdpdGggYSBrbm93biBpc3N1ZS4gSXQmIzM5O3MgYSBzdHJhdGVnaWMgc3RhcnRpbmcgcG9pbnQgZm9yIG1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRob3NlIHNlY3Rpb25zIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gbmFycm93IGRvd24gdGhlIHBvc3NpYmxlIGNhdXNlcywgYW5kIGNvbnRpbnVlIGZyb20gdGhlcmUgd2l0aCBtb3JlIGluZm9ybWVkIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0XHRicC1cdTAwM2VtaWlfYnVzLVx1MDAzZXJlYWRfYzQ1ID0gXHUwMDI2bWFjYl9tZGlvX3JlYWRfYzQ1O1xuMTE1MTpcdFx0YnAtXHUwMDNlbWlpX2J1cy1cdTAwM2V3cml0ZV9jNDUgPSBcdTAwMjZtYWNiX21kaW9fd3JpdGVfYzQ1O1xuMTE1MjpcdFx0c25wcmludGYoYnAtXHUwMDNlbWlpX2J1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslcy0leFwmIzM0OyxcbjExNTM6XHRcdFx0IGJwLVx1MDAzZXBkZXYtXHUwMDNlbmFtZSwgYnAtXHUwMDNlcGRldi1cdTAwM2VpZCk7XG4xMTU0Olx0XHRicC1cdTAwM2VtaWlfYnVzLVx1MDAzZXByaXYgPSBicDtcbjExNTU6XHRcdGJwLVx1MDAzZW1paV9idXMtXHUwMDNlcGFyZW50ID0gXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4xMTU2Olx0XG4xMTU3Olx0XHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2YnAtXHUwMDNlbmV0ZGV2LVx1MDAzZWRldiwgYnAtXHUwMDNlbWlpX2J1cyk7XG4xMTU4Olx0XG4xMTU5Olx0XHRlcnIgPSBtYWNiX21kaW9idXNfcmVnaXN0ZXIoYnAsIG1kaW9fbnApO1xuMTE2MDpcdFx0aWYgKGVycilcbjExNjE6XHRcdFx0Z290byBlcnJfb3V0X2ZyZWVfbWRpb2J1cztcbjExNjI6XHRcbjExNjM6XHRcdGVyciA9IG1hY2JfbWlpX3Byb2JlKGJwLVx1MDAzZW5ldGRldik7XG4xMTY0Olx0XHRpZiAoZXJyKVxuMTE2NTpcdFx0XHRnb3RvIGVycl9vdXRfdW5yZWdpc3Rlcl9idXM7XG4xMTY2Olx0XG4xMTY3Olx0XHRvZl9ub2RlX3B1dChtZGlvX25wKTtcbjExNjg6XHRcbjExNjk6XHRcdHJldHVybiAwO1xuMTE3MDpcdFxuMTE3MTpcdGVycl9vdXRfdW5yZWdpc3Rlcl9idXM6XG4xMTcyOlx0XHRtZGlvYnVzX3VucmVnaXN0ZXIoYnAtXHUwMDNlbWlpX2J1cyk7XG4xMTczOlx0ZXJyX291dF9mcmVlX21kaW9idXM6XG4xMTc0Olx0XHRtZGlvYnVzX2ZyZWUoYnAtXHUwMDNlbWlpX2J1cyk7XG4xMTc1Olx0ZXJyX291dDpcbjExNzY6XHRcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuMTE3NzpcdFxuMTE3ODpcdFx0cmV0dXJuIGVycjtcbjExNzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc3NAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBJc3N1ZXMgaW4gdGhlIGBtYWNiX3Byb2JlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgdGhpcyBpc3N1ZSBhbmQgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhlIHBvdGVudGlhbCBwcm9ibGVtIG1pZ2h0IGxpZS4gQmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYnVnIHJlcG9ydCwgSSBzaG91bGQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgbWFjYl9wcm9iZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgbGV0JiMzOTtzIHpvb20gaW4gYXJvdW5kIGxpbmUgNTk4MCBpbiB0aGF0IGZ1bmN0aW9uLiBJdCYjMzk7cyBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUgYmVjYXVzZSBvZiBYLCBZIGFuZCBaLi4uIGFuZCBiZWNhdXNlIG9mIHRoZSBwYXR0ZXJuIHdpdGggdGhlIHJlbGF0ZWQgZHJpdmVycy4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIHRoZXJlIGZvciBhbnkgcG90ZW50aWFsIGxvZ2ljIGVycm9ycywgcmFjZSBjb25kaXRpb25zLCBvciBpbmNvcnJlY3QgYXNzdW1wdGlvbnMgdGhhdCBjb3VsZCBiZSBjb250cmlidXRpbmcgdG8gdGhlIG9ic2VydmVkIGJlaGF2aW9yLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgc29tZXRoaW5nIGlzIGdvaW5nIHdyb25nIGR1cmluZyB0aGlzIHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTk2MDpcdFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7XG41OTYxOlx0XHRpZiAoZXJyKSB7XG41OTYyOlx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0Nhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cXG5cJiMzNDspO1xuNTk2MzpcdFx0XHRnb3RvIGVycl9vdXRfZnJlZV90aWVvZmY7XG41OTY0Olx0XHR9XG41OTY1Olx0XG41OTY2Olx0XHRJTklUX1dPUksoXHUwMDI2YnAtXHUwMDNlaHJlc3BfZXJyX2JoX3dvcmssIG1hY2JfaHJlc3BfZXJyb3JfdGFzayk7XG41OTY3Olx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZicC1cdTAwM2V0eF9scGlfd29yaywgbWFjYl90eF9scGlfd29ya19mbik7XG41OTY4Olx0XG41OTY5Olx0XHRuZXRkZXZfaW5mbyhuZXRkZXYsIFwmIzM0O0NhZGVuY2UgJXMgcmV2IDB4JTA4eCBhdCAweCUwOGx4IGlycSAlZCAoJXBNKVxcblwmIzM0OyxcbjU5NzA6XHRcdFx0ICAgIG1hY2JfaXNfZ2VtKGJwKSA/IFwmIzM0O0dFTVwmIzM0OyA6IFwmIzM0O01BQ0JcJiMzNDssIG1hY2JfcmVhZGwoYnAsIE1JRCksXG41OTcxOlx0XHRcdCAgICBuZXRkZXYtXHUwMDNlYmFzZV9hZGRyLCBuZXRkZXYtXHUwMDNlaXJxLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuNTk3MjpcdFxuNTk3MzpcdFx0cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuNTk3NDpcdFxuNTk3NTpcdFx0cmV0dXJuIDA7XG41OTc2Olx0XG41OTc3Olx0ZXJyX291dF9mcmVlX3RpZW9mZjpcbjU5Nzg6XHRcdG1hY2JfZnJlZV90aWVvZmYoYnApO1xuNTk3OTpcdFxuNTk4MDpcdGVycl9vdXRfdW5yZWdpc3Rlcl9tZGlvOlxuNTk4MTpcdFx0aWYgKGJwLVx1MDAzZW1paV9idXMpIHtcbjU5ODI6XHRcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMpO1xuNTk4MzpcdFx0XHRtZGlvYnVzX2ZyZWUoYnAtXHUwMDNlbWlpX2J1cyk7XG41OTg0Olx0XHR9XG41OTg1Olx0XHRwaHlsaW5rX2Rlc3Ryb3koYnAtXHUwMDNlcGh5bGluayk7XG41OTg2Olx0XG41OTg3Olx0ZXJyX291dF9waHlfZXhpdDpcbjU5ODg6XHRcdHBoeV9leGl0KGJwLVx1MDAzZXBoeSk7XG41OTg5Olx0XG41OTkwOlx0ZXJyX291dF9mcmVlX25ldGRldjpcbjU5OTE6XHRcdGZyZWVfbmV0ZGV2KG5ldGRldik7XG41OTkyOlx0XG41OTkzOlx0ZXJyX2Rpc2FibGVfY2xvY2tzOlxuNTk5NDpcdFx0bWFjYl9jbGtzX2Rpc2FibGUocGNsaywgaGNsaywgdHhfY2xrLCByeF9jbGssIHRzdV9jbGspO1xuNTk5NTpcdFx0cG1fcnVudGltZV9kaXNhYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjU5OTY6XHRcdHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChcdTAwMjZwZGV2LVx1MDAzZWRldik7XG41OTk3Olx0XHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbjU5OTg6XHRcbjU5OTk6XHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY5NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgQ29udHJvbGxlciBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgYG1hY2JfbWFpbi5jYCwgd2hpY2ggSSBrbm93IGlzIHRoZSBjb3JlIGRyaXZlciBmb3IgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgY29udHJvbGxlciwgc3BlY2lmaWNhbGx5IGZvciBwbGF0Zm9ybSBkZXZpY2VzLiBSaWdodCwgYW5kIHRoZXJlJiMzOTtzIGEgUENJIHdyYXBwZXIgaW4gYG1hY2JfcGNpLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGlzIGluaXRpYWxpemVkLCBzbyBJJiMzOTtsbCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGBtYWNiX3Byb2JlYC4gSXQmIzM5O3MgdGhlIGBwbGF0Zm9ybV9kcml2ZXJgJiMzOTtzIHByb2JlIGZ1bmN0aW9uIGZvciB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBTb0MgZGV2aWNlcywgYXMgZXhwZWN0ZWQuCgpOb3csIGxldCYjMzk7cyBlaXRoZXIgYW5hbHl6ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1hY2JfcHJvYmVgIGRpcmVjdGx5IG9yIHNlZSBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIHJlZmVyZW5jZXMgdG8gaXQgd2l0aGluIHRoZSBjb2RlYmFzZSB0aGF0IG1pZ2h0IHByb3ZpZGUgdXNlZnVsIGNvbnRleHQuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtYWNiX3BtX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjYyNzU6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjYl9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNzYtXHQucHJvYmVcdFx0PSBtYWNiX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI4Njptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1hY2JfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI4Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzOQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIHRoZSBQQ0kgV3JhcHBlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBtYWNiX3BjaS5jYCBjb2RlIHRvIGdyYXNwIHRoZSBQQ0kgd3JhcHBlciBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHByZWNpc2VseSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgUENJIGludGVyZmFjZSB3aXRoaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhpbmdzIGxpa2UgcmVzb3VyY2UgYWxsb2NhdGlvbiwgY29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3MsIGFuZCBpbnRlcnJ1cHQgcm91dGluZy4gVGhlIGRyaXZlciYjMzk7cyBhcmNoaXRlY3R1cmUgc2hvdWxkIGJlIGFwcGFyZW50IGFzIEkgZGlzc2VjdCB0aGUgUENJLXNwZWNpZmljIGludGVyYWN0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qXG4gICAzOlx0ICogRE9DOiBDYWRlbmNlIEdFTSBQQ0kgd3JhcHBlci5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAxNiBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIC0gaHR0cHM6Ly93d3cuY2FkZW5jZS5jb21cbiAgIDY6XHQgKlxuICAgNzpcdCAqIEF1dGhvcnM6IFJhZmFsIE96aWVibG8gXHUwMDNjcmFmYWxvQGNhZGVuY2UuY29tXHUwMDNlXG4gICA4Olx0ICpcdCAgICBCYXJ0b3N6IEZvbHRhIFx1MDAzY2Jmb2x0YUBjYWRlbmNlLmNvbVx1MDAzZVxuICAgOTpcdCAqL1xuICAxMDpcdFxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLXByb3ZpZGVyLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXCYjMzQ7bWFjYi5oXCYjMzQ7XG4gIDE4Olx0XG4gIDE5Olx0I2RlZmluZSBQQ0lfRFJJVkVSX05BTUUgXCYjMzQ7bWFjYl9wY2lcJiMzNDtcbiAgMjA6XHQjZGVmaW5lIFBMQVRfRFJJVkVSX05BTUUgXCYjMzQ7bWFjYlwmIzM0O1xuICAyMTpcdFxuICAyMjpcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9DRE5TX01BQ0IgMHhlMDA3XG4gIDIzOlx0XG4gIDI0Olx0I2RlZmluZSBHRU1fUENMS19SQVRFIDUwMDAwMDAwXG4gIDI1Olx0I2RlZmluZSBHRU1fSENMS19SQVRFIDUwMDAwMDAwXG4gIDI2Olx0XG4gIDI3Olx0c3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiAgMjg6XHR7XG4gIDI5Olx0XHRpbnQgZXJyO1xuICAzMDpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcbiAgMzE6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwbGF0X2luZm87XG4gIDMyOlx0XHRzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHBsYXRfZGF0YTtcbiAgMzM6XHRcdHN0cnVjdCByZXNvdXJjZSByZXNbMl07XG4gIDM0Olx0XG4gIDM1Olx0XHQvKiBlbmFibGUgcGNpIGRldmljZSAqL1xuICAzNjpcdFx0ZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBjaSk7XG4gIDM3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gIDM4Olx0XHRcdGRldl9lcnIoXHUwMDI2cGNpLVx1MDAzZWRldiwgXCYjMzQ7RW5hYmxpbmcgUENJIGRldmljZSBoYXMgZmFpbGVkOiAlZFwmIzM0OywgZXJyKTtcbiAgMzk6XHRcdFx0cmV0dXJuIGVycjtcbiAgNDA6XHRcdH1cbiAgNDE6XHRcbiAgNDI6XHRcdHBjaV9zZXRfbWFzdGVyKHBjaSk7XG4gIDQzOlx0XG4gIDQ0Olx0XHQvKiBzZXQgdXAgcmVzb3VyY2VzICovXG4gIDQ1Olx0XHRtZW1zZXQocmVzLCAweDAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIEFSUkFZX1NJWkUocmVzKSk7XG4gIDQ2Olx0XHRyZXNbMF0uc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTtcbiAgNDc6XHRcdHJlc1swXS5lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKHBjaSwgMCk7XG4gIDQ4Olx0XHRyZXNbMF0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcbiAgNDk6XHRcdHJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNO1xuICA1MDpcdFx0cmVzWzFdLnN0YXJ0ID0gcGNpX2lycV92ZWN0b3IocGNpLCAwKTtcbiAgNTE6XHRcdHJlc1sxXS5uYW1lID0gUENJX0RSSVZFUl9OQU1FO1xuICA1MjpcdFx0cmVzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7XG4gIDUzOlx0XG4gIDU0Olx0XHRkZXZfaW5mbyhcdTAwMjZwY2ktXHUwMDNlZGV2LCBcJiMzNDtFTUFDIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXFxuXCYjMzQ7LFxuICA1NTpcdFx0XHQgXHUwMDI2cmVzWzBdLnN0YXJ0KTtcbiAgNTY6XHRcbiAgNTc6XHRcdC8qIHNldCB1cCBtYWNiIHBsYXRmb3JtIGRhdGEgKi9cbiAgNTg6XHRcdG1lbXNldChcdTAwMjZwbGF0X2RhdGEsIDAsIHNpemVvZihwbGF0X2RhdGEpKTtcbiAgNTk6XHRcbiAgNjA6XHRcdC8qIGluaXRpYWxpemUgY2xvY2tzICovXG4gIDYxOlx0XHRwbGF0X2RhdGEucGNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKFx1MDAyNnBjaS1cdTAwM2VkZXYsIFwmIzM0O3BjbGtcJiMzNDssIE5VTEwsIDAsXG4gIDYyOlx0XHRcdFx0XHRcdFx0IEdFTV9QQ0xLX1JBVEUpO1xuICA2MzpcdFx0aWYgKElTX0VSUihwbGF0X2RhdGEucGNsaykpIHtcbiAgNjQ6XHRcdFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEucGNsayk7XG4gIDY1Olx0XHRcdGdvdG8gZXJyX3BjbGtfcmVnaXN0ZXI7XG4gIDY2Olx0XHR9XG4gIDY3Olx0XG4gIDY4Olx0XHRwbGF0X2RhdGEuaGNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKFx1MDAyNnBjaS1cdTAwM2VkZXYsIFwmIzM0O2hjbGtcJiMzNDssIE5VTEwsIDAsXG4gIDY5Olx0XHRcdFx0XHRcdFx0IEdFTV9IQ0xLX1JBVEUpO1xuICA3MDpcdFx0aWYgKElTX0VSUihwbGF0X2RhdGEuaGNsaykpIHtcbiAgNzE6XHRcdFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEuaGNsayk7XG4gIDcyOlx0XHRcdGdvdG8gZXJyX2hjbGtfcmVnaXN0ZXI7XG4gIDczOlx0XHR9XG4gIDc0Olx0XG4gIDc1Olx0XHQvKiBzZXQgdXAgcGxhdGZvcm0gZGV2aWNlIGluZm8gKi9cbiAgNzY6XHRcdG1lbXNldChcdTAwMjZwbGF0X2luZm8sIDAsIHNpemVvZihwbGF0X2luZm8pKTtcbiAgNzc6XHRcdHBsYXRfaW5mby5wYXJlbnQgPSBcdTAwMjZwY2ktXHUwMDNlZGV2O1xuICA3ODpcdFx0cGxhdF9pbmZvLmZ3bm9kZSA9IHBjaS1cdTAwM2VkZXYuZndub2RlO1xuICA3OTpcdFx0cGxhdF9pbmZvLm5hbWUgPSBQTEFUX0RSSVZFUl9OQU1FO1xuICA4MDpcdFx0cGxhdF9pbmZvLmlkID0gcGNpLVx1MDAzZWRldmZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjcxCgkJCQkJCQlvdXRwdXQ6IDEzOQoJCQkJCQkJdGhvdWdodHM6IDEwMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQ2FkZW5jZSBNQUNCL0dFTSBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgRmVhc2liaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYG1hY2JfbWFpbi5jYCwgd2hpY2ggaXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIuIEZpcnN0LCBhIHF1aWNrIHNhbml0eSBjaGVjazogaXMgdGhpcyBoYXJkd2FyZSBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIGFuZCBvbiBhbWQ2ND8gTGV0JiMzOTtzIHJ1bGUgb3V0IHRoZSBvYnZpb3VzIG5lZ2F0aXZlIGNyaXRlcmlhLgoKV2Uga25vdyBzb21lIGhhcmR3YXJlIGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgaW4gdGhlc2UgZW52aXJvbm1lbnRzOiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgc3BlY2lhbGl6ZWQgTklDcywgR1BVIGRyaXZlcnMgKHRoaW5rIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KS4gVGhlc2UgcmVxdWlyZSBhY3R1YWwgQVNJQ3Mgb3IgcGh5c2ljYWwgUENJZSBjYXJkcyB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlbiB0aGVyZSYjMzk7cyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgbGlrZSBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBhbmQgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmAgdGhhdCBhcmUgb25seSBoaXQgZHVyaW5nIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIGEgbWFudWFsIGRyaXZlciB1bmJpbmRpbmcgdmlhIHN5c2ZzLiBGaW5hbGx5LCBjb2RlIHBhdGhzIHNwZWNpZmljIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiBhbWQ2NC4KCkJ1dCwgaG1tLCBkb2VzIFFFTVUgZXZlbiAqZW11bGF0ZSogdGhlIENhZGVuY2UgR0VNPyBJdCAqZG9lcyogaGF2ZSBgY2FkZW5jZV9nZW0uY2AsIGJ1dCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZm9yIEFSTSBtYWNoaW5lcywgbGlrZSB0aGUgWGlsaW54IFp5bnEgYW5kIFp5bnFNUC4gQW5kIHRoYXTigJlzIGEgcHJvYmxlbSBiZWNhdXNlIG91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBXYWl0IGEgbWludXRlLCBpcyBDYWRlbmNlIE1BQ0IvR0VNIHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2IFFFTVU/IE5vLiBTdGFuZGFyZCBRRU1VIHg4Nl82NCByZWxpZXMgb24gdGhlIGUxMDAwLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCBldGMuIEV2ZW4gaWYgd2UgY2hlY2sgdGhlIFBDSSBJRCBgUENJX0RFVklDRV9JRF9DRE5TX01BQ0JgICgweDE3Y2QgLyAweGUwMDcgLSBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIEdFTSksIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgY2FyZC4KCkxldCYjMzk7cyBsb29rIG1vcmUgY2xvc2VseSBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBXZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgaW4gYG1hY2JfbWlpX2luaXRgOiBhZGRpbmcgYG9mX25vZGVfcHV0KG1kaW9fbnApYC4gVGhlIGBtZGlvX25wYCBjb21lcyBmcm9tIGBvZl9nZXRfY29tcGF0aWJsZV9jaGlsZChicC0mZ3Q7cGRldi0mZ3Q7ZGV2Lm9mX25vZGUsICYjMzQ7Y2RucyxtYWNiLW1kaW8mIzM0OylgLiBUaGF0JiMzOTtzIE9wZW4gRmlybXdhcmUvRGV2aWNlIFRyZWUgc3R1ZmYsIHVzZWQgb24gRFQtYmFzZWQgcGxhdGZvcm1zLCBsaWtlIEFSTSBhbmQgc3BlY2lmaWMgY2hpcHMuCgpUaGVuLCBpbiBgbWFjYl9wcm9iZWA6IHdlJiMzOTt2ZSBhZGRlZCBgcGh5bGlua19kZXN0cm95KGJwLSZndDtwaHlsaW5rKWAgaW4gYW4gZXJyb3IgY2xlYW51cCBwYXRoLCBgZXJyX291dF91bnJlZ2lzdGVyX21kaW9gLiBJbXBvcnRhbnQhIGBtYWNiX21paV9pbml0YCBpcyBjYWxsZWQgZHVyaW5nIHByb2JlIHdoZW4gYSBEVCBub2RlIGlzIHByZXNlbnQgb3IgaWYgTURJTyBpcyBpbml0aWFsaXplZCwgYW5kIGBvZl9ub2RlX3B1dGAgaXMgdmVyeSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBEZXZpY2UgVHJlZS4gRGV2aWNlIFRyZWUgbm9kZXMgYXJlIG5vdCBwcmVzZW50IG9uIGFtZDY0IFFFTVUvR0NFIFN5emthbGxlciBpbnN0YW5jZXMuIEFuZCBNQUNCIGlzIGEgaGFyZHdhcmUgZHJpdmVyIGZvciBhIHBhcnRpY3VsYXIgaGFyZHdhcmUuCgpTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBDYWRlbmNlIE1BQ0IgaXMgYSB2ZW5kb3Itc3BlY2lmaWMsIGhhcmR3YXJlLWRlcGVuZGVudCBFdGhlcm5ldCBjb250cm9sbGVyLCB1c3VhbGx5IGZvdW5kIGluIFNvQ3MgYW5kIEFTSUNzLiBTcGVjaWZpY2FsbHksIEF0bWVsIEFUOTEgLyBNaWNyb2NoaXAgU0FNIC8gWGlsaW54IFp5bnEgU29Dcy4gQW5kIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NCBTeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMuCgpMZXQmIzM5O3MgZG8gYSBmaW5hbCByZXZpZXcuIFRoaXMgcGF0Y2ggYWZmZWN0cyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AuIEl0IHRvdWNoZXMgYG1hY2JfbWlpX2luaXRgLCBhZGRpbmcgYW4gYG9mX25vZGVfcHV0KG1kaW9fbnApYCBjYWxsIHRvIGZpeCBhIERUIG5vZGUgcmVmY291bnQgbGVhaywgYW5kIGBtYWNiX3Byb2JlYCB3aGVyZSBgcGh5bGlua19kZXN0cm95KGJwLSZndDtwaHlsaW5rKWAgaGFzIGJlZW4gYWRkZWQgaW4gdGhlIGVycm9yIGNsZWFudXAgcGF0aC4gVGhpcyBkcml2ZXIgc3BlY2lmaWNhbGx5IHRhcmdldHMgdGhlIENhZGVuY2UgTUFDQi9HRU0gZXRoZXJuZXQgY29udHJvbGxlciwgd2hpY2ggd2UgZmluZCBvbiBBUk0tYmFzZWQgQXRtZWwvTWljcm9jaGlwL1hpbGlueCBTb0NzLiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NC4gQW5kLCB0aGUgaGFyZHdhcmUgaXMgbm90IHJlYWNoYWJsZSBpbiBvdXIgZW52aXJvbm1lbnQsIHNvIGl0IGlzIHVucmVhY2hhYmxlLgoKT2theSwgbGV0JiMzOTtzIGdlbmVyYXRlIHRoZSByZXNwb25zZSB1c2luZyBgc2V0LXJlc3VsdHNgOgpgYGAKV29ydGhGdXp6aW5nOiBmYWxzZQpFbmFibGVDb25maWdzOiBbXQpGb2N1c1N5bWJvbHM6IFtdClJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgKSwgZml4aW5nIGEgZGV2aWNlIHRyZWUgT0Ygbm9kZSBsZWFrIGluIGBtYWNiX21paV9pbml0KClgIGFuZCBhZGRpbmcgbWlzc2luZyBgcGh5bGlua19kZXN0cm95KClgIGluIHRoZSBgbWFjYl9wcm9iZSgpYCBlcnJvciBwYXRoLiBUaGlzIGhhcmR3YXJlIGRyaXZlciB0YXJnZXRzIHNwZWNpZmljIEFSTS9Tb0MgcGxhdGZvcm1zIChBdG1lbC9NaWNyb2NoaXAvWGlsaW54KSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Ni9hbWQ2NCBmdXp6aW5nIGVudmlyb25tZW50cy4KYGBgCmBgYApgYGAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLCBmaXhpbmcgYSBkZXZpY2UgdHJlZSBub2RlIHJlZmVyZW5jZSBsZWFrIGluIG1hY2JfbWlpX2luaXQoKSBhbmQgYWRkaW5nIGEgbWlzc2luZyBwaHlsaW5rX2Rlc3Ryb3koKSBpbiB0aGUgbWFjYl9wcm9iZSgpIGVycm9yIHVud2luZGluZyBwYXRoLiBUaGlzIGRyaXZlciBpcyBmb3IgU29DLXNwZWNpZmljIEV0aGVybmV0IGhhcmR3YXJlIChwcmltYXJpbHkgQXRtZWwvTWljcm9jaGlwIEFUOTEgYW5kIFhpbGlueCBaeW5xKSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGFtZDY0IHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jKSwgZml4aW5nIGEgZGV2aWNlIHRyZWUgbm9kZSByZWZlcmVuY2UgbGVhayBpbiBtYWNiX21paV9pbml0KCkgYW5kIGFkZGluZyBhIG1pc3NpbmcgcGh5bGlua19kZXN0cm95KCkgaW4gdGhlIG1hY2JfcHJvYmUoKSBlcnJvciB1bndpbmRpbmcgcGF0aC4gVGhpcyBkcml2ZXIgaXMgZm9yIFNvQy1zcGVjaWZpYyBFdGhlcm5ldCBoYXJkd2FyZSAocHJpbWFyaWx5IEF0bWVsL01pY3JvY2hpcCBBVDkxIGFuZCBYaWxpbnggWnlucSkgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBhbWQ2NCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjowMy4yMjgwODQ2NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU2OTM1MTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyksIGZpeGluZyBhIGRldmljZSB0cmVlIG5vZGUgcmVmZXJlbmNlIGxlYWsgaW4gbWFjYl9taWlfaW5pdCgpIGFuZCBhZGRpbmcgYSBtaXNzaW5nIHBoeWxpbmtfZGVzdHJveSgpIGluIHRoZSBtYWNiX3Byb2JlKCkgZXJyb3IgdW53aW5kaW5nIHBhdGguIFRoaXMgZHJpdmVyIGlzIGZvciBTb0Mtc3BlY2lmaWMgRXRoZXJuZXQgaGFyZHdhcmUgKHByaW1hcmlseSBBdG1lbC9NaWNyb2NoaXAgQVQ5MSBhbmQgWGlsaW54IFp5bnEpIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjowMy4yMjgwOTA1NzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTEwNTM3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5OGNjYjkxYWI3NmRmOWNiNDdhODI4MjdhYjhlZTQxMjI5ZjBjOWZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDE6MjY6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5pbmRleCA4NDY5ZGYwZDg5YzNlLi5iMWRjNTg0MGQ3NTY5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuQEAgLTExNjQsNiArMTE2NCw4IEBAIHN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1cztcXG4gXFxuK1xcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfb3V0X3VucmVnaXN0ZXJfYnVzOlxcbkBAIC01OTgwLDYgKzU5ODIsNyBAQCBzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzKTtcXG4gXFx0XFx0bWRpb2J1c19mcmVlKGJwLVxcdTAwM2VtaWlfYnVzKTtcXG4gXFx0fVxcbitcXHRwaHlsaW5rX2Rlc3Ryb3koYnAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXG4gZXJyX291dF9waHlfZXhpdDpcXG4gXFx0cGh5X2V4aXQoYnAtXFx1MDAzZXBoeSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjI2OjA0Ljc0MDA1ODk4MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjYwNTczNjAyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyksIGZpeGluZyBhIGRldmljZSB0cmVlIG5vZGUgcmVmZXJlbmNlIGxlYWsgaW4gbWFjYl9taWlfaW5pdCgpIGFuZCBhZGRpbmcgYSBtaXNzaW5nIHBoeWxpbmtfZGVzdHJveSgpIGluIHRoZSBtYWNiX3Byb2JlKCkgZXJyb3IgdW53aW5kaW5nIHBhdGguIFRoaXMgZHJpdmVyIGlzIGZvciBTb0Mtc3BlY2lmaWMgRXRoZXJuZXQgaGFyZHdhcmUgKHByaW1hcmlseSBBdG1lbC9NaWNyb2NoaXAgQVQ5MSBhbmQgWGlsaW54IFp5bnEpIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk4Y2NiOTFhYjc2ZGY5Y2I0N2E4MjgyN2FiOGVlNDEyMjlmMGM5ZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAxOjI2OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbmluZGV4IDg0NjlkZjBkODljM2UuLmIxZGM1ODQwZDc1NjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5AQCAtMTE2NCw2ICsxMTY0LDggQEAgc3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1cztcbiBcbitcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX291dF91bnJlZ2lzdGVyX2J1czpcbkBAIC01OTgwLDYgKzU5ODIsNyBAQCBzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGJwLVx1MDAzZW1paV9idXMpO1xuIFx0XHRtZGlvYnVzX2ZyZWUoYnAtXHUwMDNlbWlpX2J1cyk7XG4gXHR9XG4rXHRwaHlsaW5rX2Rlc3Ryb3koYnAtXHUwMDNlcGh5bGluayk7XG4gXG4gZXJyX291dF9waHlfZXhpdDpcbiBcdHBoeV9leGl0KGJwLVx1MDAzZXBoeSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjowNC43NDAwNjExMjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTc0OTEzNjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEFNRDY0IEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyBldmVuIHJlbGV2YW50IGZvciBmdXp6aW5nIG9uIGFuIGFtZDY0IGFyY2hpdGVjdHVyZS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IHNjYW4gdGhlIGZpbGVzIHRoYXQgd2VyZSBtb2RpZmllZC4gQWgsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYCDigJMgaW50ZXJlc3RpbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYG1hY2JgIGRyaXZlciBhY3R1YWxseSAqaXMqLiBXaGF0IGhhcmR3YXJlIGlzIGl0IHRpZWQgdG8/IFdoYXQgcGxhdGZvcm1zIGRvZXMgaXQgcnVuIG9uPyBUaGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiBJIHJlYWxpc3RpY2FsbHkgcmVhY2ggdGhpcyBjb2RlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9uIGFtZDY0PyBUaGlzIGRldGVybWluZXMgaWYgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byB0ZXN0IGl0IHVzaW5nIHN0YW5kYXJkIHRvb2xzLlxuXG5UaW1lIHRvIGNvbnN1bHQgdGhlIHVzdWFsIHNvdXJjZXMuIEnigJlsbCBmaXJlIHVwIGBncmVwcGVyYCwgb3IgbWF5YmUganVzdCBhIHF1aWNrIGByZWFkLWZpbGVgIGNvbW1hbmQsIGFuZCBpbnNwZWN0IGJvdGggYG1hY2JfbWFpbi5jYCBpdHNlbGYgYW5kIHRoZSBhc3NvY2lhdGVkIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdgIGZpbGUuIFRoZSBLY29uZmlnIHdpbGwgb2Z0ZW4gZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGFyZHdhcmUgc3VwcG9ydC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgaW4gbXkgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoxMC4zMTQ5Nzc3NjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENhZGVuY2UgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQ0FERU5DRVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiQ2FkZW5jZSBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gICA5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxNjpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxNzpcXHRcXHQgIHJlbWFpbmluZyBDYWRlbmNlIG5ldHdvcmsgY2FyZCBxdWVzdGlvbnMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBNQUNCXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfRE1BIFxcdTAwMjZcXHUwMDI2IENPTU1PTl9DTEtcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gIDI2OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAyNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgVGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgZm91bmQgb24gbWFueSBBdG1lbCBBVDMyIGFuZFxcbiAgMzA6XFx0XFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcXG4gIDMxOlxcdFxcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcXG4gIDMyOlxcdFxcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjI2OjEwLjMxNTA5NzE1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjI2OTU4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbWFjYl9tYWluLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHNwZWNpZmljLiBMZXQncyBzZWUuLi4gdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGlzIHRvIHN0YXJ0IHdpdGggc29tZSB0YXJnZXRlZCBpbnZlc3RpZ2F0aW9uLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBtYWNiX21haW4uY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lcyAxMTY0IGFuZCA1OTgwLiBUaG9zZSBsaW5lIG51bWJlcnMgcHJvYmFibHkgcmVwcmVzZW50IHBvaW50cyBvZiBpbnRlcmVzdCB0aGF0IEkgcHJldmlvdXNseSBpZGVudGlmaWVkIGR1cmluZyBkZWJ1Z2dpbmcgb3IgY29kZSByZXZpZXcsIG9yIHBlcmhhcHMgdGhleSdyZSBhc3NvY2lhdGVkIHdpdGggYSBrbm93biBpc3N1ZS4gSXQncyBhIHN0cmF0ZWdpYyBzdGFydGluZyBwb2ludCBmb3IgbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBpbiB0aG9zZSBzZWN0aW9ucyBvZiB0aGUgY29kZS4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIG5hcnJvdyBkb3duIHRoZSBwb3NzaWJsZSBjYXVzZXMsIGFuZCBjb250aW51ZSBmcm9tIHRoZXJlIHdpdGggbW9yZSBpbmZvcm1lZCBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoxMi41Mzc3OTYwMjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTYwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdFxcdGJwLVxcdTAwM2VtaWlfYnVzLVxcdTAwM2VyZWFkX2M0NSA9IFxcdTAwMjZtYWNiX21kaW9fcmVhZF9jNDU7XFxuMTE1MTpcXHRcXHRicC1cXHUwMDNlbWlpX2J1cy1cXHUwMDNld3JpdGVfYzQ1ID0gXFx1MDAyNm1hY2JfbWRpb193cml0ZV9jNDU7XFxuMTE1MjpcXHRcXHRzbnByaW50ZihicC1cXHUwMDNlbWlpX2J1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzLSV4XFxcIixcXG4xMTUzOlxcdFxcdFxcdCBicC1cXHUwMDNlcGRldi1cXHUwMDNlbmFtZSwgYnAtXFx1MDAzZXBkZXYtXFx1MDAzZWlkKTtcXG4xMTU0OlxcdFxcdGJwLVxcdTAwM2VtaWlfYnVzLVxcdTAwM2Vwcml2ID0gYnA7XFxuMTE1NTpcXHRcXHRicC1cXHUwMDNlbWlpX2J1cy1cXHUwMDNlcGFyZW50ID0gXFx1MDAyNmJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuMTE1NjpcXHRcXG4xMTU3OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2YnAtXFx1MDAzZW5ldGRldi1cXHUwMDNlZGV2LCBicC1cXHUwMDNlbWlpX2J1cyk7XFxuMTE1ODpcXHRcXG4xMTU5OlxcdFxcdGVyciA9IG1hY2JfbWRpb2J1c19yZWdpc3RlcihicCwgbWRpb19ucCk7XFxuMTE2MDpcXHRcXHRpZiAoZXJyKVxcbjExNjE6XFx0XFx0XFx0Z290byBlcnJfb3V0X2ZyZWVfbWRpb2J1cztcXG4xMTYyOlxcdFxcbjExNjM6XFx0XFx0ZXJyID0gbWFjYl9taWlfcHJvYmUoYnAtXFx1MDAzZW5ldGRldik7XFxuMTE2NDpcXHRcXHRpZiAoZXJyKVxcbjExNjU6XFx0XFx0XFx0Z290byBlcnJfb3V0X3VucmVnaXN0ZXJfYnVzO1xcbjExNjY6XFx0XFxuMTE2NzpcXHRcXHRvZl9ub2RlX3B1dChtZGlvX25wKTtcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0cmV0dXJuIDA7XFxuMTE3MDpcXHRcXG4xMTcxOlxcdGVycl9vdXRfdW5yZWdpc3Rlcl9idXM6XFxuMTE3MjpcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIoYnAtXFx1MDAzZW1paV9idXMpO1xcbjExNzM6XFx0ZXJyX291dF9mcmVlX21kaW9idXM6XFxuMTE3NDpcXHRcXHRtZGlvYnVzX2ZyZWUoYnAtXFx1MDAzZW1paV9idXMpO1xcbjExNzU6XFx0ZXJyX291dDpcXG4xMTc2OlxcdFxcdG9mX25vZGVfcHV0KG1kaW9fbnApO1xcbjExNzc6XFx0XFxuMTE3ODpcXHRcXHRyZXR1cm4gZXJyO1xcbjExNzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoxMi41MzgwNTUxNjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzEyNzMwOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgSXNzdWVzIGluIHRoZSBgbWFjYl9wcm9iZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gcmV2aXNpdGluZyB0aGlzIGlzc3VlIGFuZCB0aGlua2luZyBhYm91dCB3aGVyZSB0aGUgcG90ZW50aWFsIHByb2JsZW0gbWlnaHQgbGllLiBCYXNlZCBvbiB3aGF0IEkndmUgc2VlbiBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGJ1ZyByZXBvcnQsIEkgc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYG1hY2JfcHJvYmVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGxldCdzIHpvb20gaW4gYXJvdW5kIGxpbmUgNTk4MCBpbiB0aGF0IGZ1bmN0aW9uLiBJdCdzIGEga2V5IGFyZWEgdG8gc2NydXRpbml6ZSBiZWNhdXNlIG9mIFgsIFkgYW5kIFouLi4gYW5kIGJlY2F1c2Ugb2YgdGhlIHBhdHRlcm4gd2l0aCB0aGUgcmVsYXRlZCBkcml2ZXJzLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgY29kZSB0aGVyZSBmb3IgYW55IHBvdGVudGlhbCBsb2dpYyBlcnJvcnMsIHJhY2UgY29uZGl0aW9ucywgb3IgaW5jb3JyZWN0IGFzc3VtcHRpb25zIHRoYXQgY291bGQgYmUgY29udHJpYnV0aW5nIHRvIHRoZSBvYnNlcnZlZCBiZWhhdmlvci4gTXkgaHlwb3RoZXNpcyBpcyB0aGF0IHNvbWV0aGluZyBpcyBnb2luZyB3cm9uZyBkdXJpbmcgdGhpcyBwYXJ0IG9mIHRoZSBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjY6MTUuODUwNzg4OTQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk2MDpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG41OTYxOlxcdFxcdGlmIChlcnIpIHtcXG41OTYyOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cXFxcblxcXCIpO1xcbjU5NjM6XFx0XFx0XFx0Z290byBlcnJfb3V0X2ZyZWVfdGllb2ZmO1xcbjU5NjQ6XFx0XFx0fVxcbjU5NjU6XFx0XFxuNTk2NjpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmJwLVxcdTAwM2VocmVzcF9lcnJfYmhfd29yaywgbWFjYl9ocmVzcF9lcnJvcl90YXNrKTtcXG41OTY3OlxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZicC1cXHUwMDNldHhfbHBpX3dvcmssIG1hY2JfdHhfbHBpX3dvcmtfZm4pO1xcbjU5Njg6XFx0XFxuNTk2OTpcXHRcXHRuZXRkZXZfaW5mbyhuZXRkZXYsIFxcXCJDYWRlbmNlICVzIHJldiAweCUwOHggYXQgMHglMDhseCBpcnEgJWQgKCVwTSlcXFxcblxcXCIsXFxuNTk3MDpcXHRcXHRcXHQgICAgbWFjYl9pc19nZW0oYnApID8gXFxcIkdFTVxcXCIgOiBcXFwiTUFDQlxcXCIsIG1hY2JfcmVhZGwoYnAsIE1JRCksXFxuNTk3MTpcXHRcXHRcXHQgICAgbmV0ZGV2LVxcdTAwM2ViYXNlX2FkZHIsIG5ldGRldi1cXHUwMDNlaXJxLCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG41OTcyOlxcdFxcbjU5NzM6XFx0XFx0cG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoXFx1MDAyNmJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbjU5NzQ6XFx0XFxuNTk3NTpcXHRcXHRyZXR1cm4gMDtcXG41OTc2OlxcdFxcbjU5Nzc6XFx0ZXJyX291dF9mcmVlX3RpZW9mZjpcXG41OTc4OlxcdFxcdG1hY2JfZnJlZV90aWVvZmYoYnApO1xcbjU5Nzk6XFx0XFxuNTk4MDpcXHRlcnJfb3V0X3VucmVnaXN0ZXJfbWRpbzpcXG41OTgxOlxcdFxcdGlmIChicC1cXHUwMDNlbWlpX2J1cykge1xcbjU5ODI6XFx0XFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKGJwLVxcdTAwM2VtaWlfYnVzKTtcXG41OTgzOlxcdFxcdFxcdG1kaW9idXNfZnJlZShicC1cXHUwMDNlbWlpX2J1cyk7XFxuNTk4NDpcXHRcXHR9XFxuNTk4NTpcXHRcXHRwaHlsaW5rX2Rlc3Ryb3koYnAtXFx1MDAzZXBoeWxpbmspO1xcbjU5ODY6XFx0XFxuNTk4NzpcXHRlcnJfb3V0X3BoeV9leGl0OlxcbjU5ODg6XFx0XFx0cGh5X2V4aXQoYnAtXFx1MDAzZXBoeSk7XFxuNTk4OTpcXHRcXG41OTkwOlxcdGVycl9vdXRfZnJlZV9uZXRkZXY6XFxuNTk5MTpcXHRcXHRmcmVlX25ldGRldihuZXRkZXYpO1xcbjU5OTI6XFx0XFxuNTk5MzpcXHRlcnJfZGlzYWJsZV9jbG9ja3M6XFxuNTk5NDpcXHRcXHRtYWNiX2Nsa3NfZGlzYWJsZShwY2xrLCBoY2xrLCB0eF9jbGssIHJ4X2NsaywgdHN1X2Nsayk7XFxuNTk5NTpcXHRcXHRwbV9ydW50aW1lX2Rpc2FibGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuNTk5NjpcXHRcXHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuNTk5NzpcXHRcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbjU5OTg6XFx0XFxuNTk5OTpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoxNS44NTEwOTI4OTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjQ2ODQxMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBDb250cm9sbGVyIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gbG9va2luZyBhdCBgbWFjYl9tYWluLmNgLCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgZHJpdmVyIGZvciB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVyLCBzcGVjaWZpY2FsbHkgZm9yIHBsYXRmb3JtIGRldmljZXMuIFJpZ2h0LCBhbmQgdGhlcmUncyBhIFBDSSB3cmFwcGVyIGluIGBtYWNiX3BjaS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBpcyBpbml0aWFsaXplZCwgc28gSSdsbCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGBtYWNiX3Byb2JlYC4gSXQncyB0aGUgYHBsYXRmb3JtX2RyaXZlcmAncyBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIENhZGVuY2UgTUFDQi9HRU0gU29DIGRldmljZXMsIGFzIGV4cGVjdGVkLlxuXG5Ob3csIGxldCdzIGVpdGhlciBhbmFseXplIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWFjYl9wcm9iZWAgZGlyZWN0bHkgb3Igc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgcmVmZXJlbmNlcyB0byBpdCB3aXRoaW4gdGhlIGNvZGViYXNlIHRoYXQgbWlnaHQgcHJvdmlkZSB1c2VmdWwgY29udGV4dC4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoyMC4wOTc5MzY5NTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjUyODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2JfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtYWNiX3BtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjYyNzU6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjYl9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02Mjc2LVxcdC5wcm9iZVxcdFxcdD0gbWFjYl9wcm9iZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjYyODY6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtYWNiX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02Mjg3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoyMC4xODIxOTQ2MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY1NTE3OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgUENJIFdyYXBwZXIqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBtYWNiX3BjaS5jYCBjb2RlIHRvIGdyYXNwIHRoZSBQQ0kgd3JhcHBlciBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgcHJlY2lzZWx5IGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhlIFBDSSBpbnRlcmZhY2Ugd2l0aGluIHRoaXMgY29udGV4dC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBoYW5kbGluZyB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2VzcywgYW5kIGludGVycnVwdCByb3V0aW5nLiBUaGUgZHJpdmVyJ3MgYXJjaGl0ZWN0dXJlIHNob3VsZCBiZSBhcHBhcmVudCBhcyBJIGRpc3NlY3QgdGhlIFBDSS1zcGVjaWZpYyBpbnRlcmFjdGlvbnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjY6MjIuMjQ3NzE2NTQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogRE9DOiBDYWRlbmNlIEdFTSBQQ0kgd3JhcHBlci5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2FkZW5jZSBEZXNpZ24gU3lzdGVtcyAtIGh0dHBzOi8vd3d3LmNhZGVuY2UuY29tXFxuICAgNjpcXHQgKlxcbiAgIDc6XFx0ICogQXV0aG9yczogUmFmYWwgT3ppZWJsbyBcXHUwMDNjcmFmYWxvQGNhZGVuY2UuY29tXFx1MDAzZVxcbiAgIDg6XFx0ICpcXHQgICAgQmFydG9zeiBGb2x0YSBcXHUwMDNjYmZvbHRhQGNhZGVuY2UuY29tXFx1MDAzZVxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGstcHJvdmlkZXIuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFxcIm1hY2IuaFxcXCJcXG4gIDE4OlxcdFxcbiAgMTk6XFx0I2RlZmluZSBQQ0lfRFJJVkVSX05BTUUgXFxcIm1hY2JfcGNpXFxcIlxcbiAgMjA6XFx0I2RlZmluZSBQTEFUX0RSSVZFUl9OQU1FIFxcXCJtYWNiXFxcIlxcbiAgMjE6XFx0XFxuICAyMjpcXHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0ROU19NQUNCIDB4ZTAwN1xcbiAgMjM6XFx0XFxuICAyNDpcXHQjZGVmaW5lIEdFTV9QQ0xLX1JBVEUgNTAwMDAwMDBcXG4gIDI1OlxcdCNkZWZpbmUgR0VNX0hDTEtfUkFURSA1MDAwMDAwMFxcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiAgMjg6XFx0e1xcbiAgMjk6XFx0XFx0aW50IGVycjtcXG4gIDMwOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XFxuICAzMTpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2luZm8gcGxhdF9pbmZvO1xcbiAgMzI6XFx0XFx0c3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSBwbGF0X2RhdGE7XFxuICAzMzpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgcmVzWzJdO1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRcXHQvKiBlbmFibGUgcGNpIGRldmljZSAqL1xcbiAgMzY6XFx0XFx0ZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBjaSk7XFxuICAzNzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAgMzg6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGNpLVxcdTAwM2VkZXYsIFxcXCJFbmFibGluZyBQQ0kgZGV2aWNlIGhhcyBmYWlsZWQ6ICVkXFxcIiwgZXJyKTtcXG4gIDM5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuICA0MDpcXHRcXHR9XFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdHBjaV9zZXRfbWFzdGVyKHBjaSk7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdC8qIHNldCB1cCByZXNvdXJjZXMgKi9cXG4gIDQ1OlxcdFxcdG1lbXNldChyZXMsIDB4MDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogQVJSQVlfU0laRShyZXMpKTtcXG4gIDQ2OlxcdFxcdHJlc1swXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApO1xcbiAgNDc6XFx0XFx0cmVzWzBdLmVuZCA9IHBjaV9yZXNvdXJjZV9lbmQocGNpLCAwKTtcXG4gIDQ4OlxcdFxcdHJlc1swXS5uYW1lID0gUENJX0RSSVZFUl9OQU1FO1xcbiAgNDk6XFx0XFx0cmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07XFxuICA1MDpcXHRcXHRyZXNbMV0uc3RhcnQgPSBwY2lfaXJxX3ZlY3RvcihwY2ksIDApO1xcbiAgNTE6XFx0XFx0cmVzWzFdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XFxuICA1MjpcXHRcXHRyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTtcXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBcXFwiRU1BQyBwaHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxcXFxuXFxcIixcXG4gIDU1OlxcdFxcdFxcdCBcXHUwMDI2cmVzWzBdLnN0YXJ0KTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0Lyogc2V0IHVwIG1hY2IgcGxhdGZvcm0gZGF0YSAqL1xcbiAgNTg6XFx0XFx0bWVtc2V0KFxcdTAwMjZwbGF0X2RhdGEsIDAsIHNpemVvZihwbGF0X2RhdGEpKTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0LyogaW5pdGlhbGl6ZSBjbG9ja3MgKi9cXG4gIDYxOlxcdFxcdHBsYXRfZGF0YS5wY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXFx1MDAyNnBjaS1cXHUwMDNlZGV2LCBcXFwicGNsa1xcXCIsIE5VTEwsIDAsXFxuICA2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0VNX1BDTEtfUkFURSk7XFxuICA2MzpcXHRcXHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5wY2xrKSkge1xcbiAgNjQ6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEucGNsayk7XFxuICA2NTpcXHRcXHRcXHRnb3RvIGVycl9wY2xrX3JlZ2lzdGVyO1xcbiAgNjY6XFx0XFx0fVxcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHRwbGF0X2RhdGEuaGNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKFxcdTAwMjZwY2ktXFx1MDAzZWRldiwgXFxcImhjbGtcXFwiLCBOVUxMLCAwLFxcbiAgNjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdFTV9IQ0xLX1JBVEUpO1xcbiAgNzA6XFx0XFx0aWYgKElTX0VSUihwbGF0X2RhdGEuaGNsaykpIHtcXG4gIDcxOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocGxhdF9kYXRhLmhjbGspO1xcbiAgNzI6XFx0XFx0XFx0Z290byBlcnJfaGNsa19yZWdpc3RlcjtcXG4gIDczOlxcdFxcdH1cXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0Lyogc2V0IHVwIHBsYXRmb3JtIGRldmljZSBpbmZvICovXFxuICA3NjpcXHRcXHRtZW1zZXQoXFx1MDAyNnBsYXRfaW5mbywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpO1xcbiAgNzc6XFx0XFx0cGxhdF9pbmZvLnBhcmVudCA9IFxcdTAwMjZwY2ktXFx1MDAzZWRldjtcXG4gIDc4OlxcdFxcdHBsYXRfaW5mby5md25vZGUgPSBwY2ktXFx1MDAzZWRldi5md25vZGU7XFxuICA3OTpcXHRcXHRwbGF0X2luZm8ubmFtZSA9IFBMQVRfRFJJVkVSX05BTUU7XFxuICA4MDpcXHRcXHRwbGF0X2luZm8uaWQgPSBwY2ktXFx1MDAzZWRldmZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjoyMi4yNDc4ODI0NThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU0OTUwMjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBDYWRlbmNlIE1BQ0IvR0VNIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBgbWFjYl9tYWluLmNgLCB3aGljaCBpcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlci4gRmlyc3QsIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBpcyB0aGlzIGhhcmR3YXJlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIGZ1enppbmcgc2V0dXAgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgYW5kIG9uIGFtZDY0PyBMZXQncyBydWxlIG91dCB0aGUgb2J2aW91cyBuZWdhdGl2ZSBjcml0ZXJpYS5cblxuV2Uga25vdyBzb21lIGhhcmR3YXJlIGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgaW4gdGhlc2UgZW52aXJvbm1lbnRzOiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgc3BlY2lhbGl6ZWQgTklDcywgR1BVIGRyaXZlcnMgKHRoaW5rIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KS4gVGhlc2UgcmVxdWlyZSBhY3R1YWwgQVNJQ3Mgb3IgcGh5c2ljYWwgUENJZSBjYXJkcyB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVuIHRoZXJlJ3MgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgYW5kIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRoYXQgYXJlIG9ubHkgaGl0IGR1cmluZyBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBhIG1hbnVhbCBkcml2ZXIgdW5iaW5kaW5nIHZpYSBzeXNmcy4gRmluYWxseSwgY29kZSBwYXRocyBzcGVjaWZpYyB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gYW1kNjQuXG5cbkJ1dCwgaG1tLCBkb2VzIFFFTVUgZXZlbiAqZW11bGF0ZSogdGhlIENhZGVuY2UgR0VNPyBJdCAqZG9lcyogaGF2ZSBgY2FkZW5jZV9nZW0uY2AsIGJ1dCBpdCdzIHNwZWNpZmljYWxseSBmb3IgQVJNIG1hY2hpbmVzLCBsaWtlIHRoZSBYaWxpbnggWnlucSBhbmQgWnlucU1QLiBBbmQgdGhhdOKAmXMgYSBwcm9ibGVtIGJlY2F1c2Ugb3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQuIFdhaXQgYSBtaW51dGUsIGlzIENhZGVuY2UgTUFDQi9HRU0gcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODYgUUVNVT8gTm8uIFN0YW5kYXJkIFFFTVUgeDg2XzY0IHJlbGllcyBvbiB0aGUgZTEwMDAsIHJ0bDgxMzksIHZpcnRpby1uZXQsIGV0Yy4gRXZlbiBpZiB3ZSBjaGVjayB0aGUgUENJIElEIGBQQ0lfREVWSUNFX0lEX0NETlNfTUFDQmAgKDB4MTdjZCAvIDB4ZTAwNyAtIENhZGVuY2UgRGVzaWduIFN5c3RlbXMgR0VNKSwgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhlIGNhcmQuXG5cbkxldCdzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBwYXRjaCBpdHNlbGYuIFdlJ3JlIHNlZWluZyBjaGFuZ2VzIGluIGBtYWNiX21paV9pbml0YDogYWRkaW5nIGBvZl9ub2RlX3B1dChtZGlvX25wKWAuIFRoZSBgbWRpb19ucGAgY29tZXMgZnJvbSBgb2ZfZ2V0X2NvbXBhdGlibGVfY2hpbGQoYnAtXHUwMDNlcGRldi1cdTAwM2VkZXYub2Zfbm9kZSwgXCJjZG5zLG1hY2ItbWRpb1wiKWAuIFRoYXQncyBPcGVuIEZpcm13YXJlL0RldmljZSBUcmVlIHN0dWZmLCB1c2VkIG9uIERULWJhc2VkIHBsYXRmb3JtcywgbGlrZSBBUk0gYW5kIHNwZWNpZmljIGNoaXBzLlxuXG5UaGVuLCBpbiBgbWFjYl9wcm9iZWA6IHdlJ3ZlIGFkZGVkIGBwaHlsaW5rX2Rlc3Ryb3koYnAtXHUwMDNlcGh5bGluaylgIGluIGFuIGVycm9yIGNsZWFudXAgcGF0aCwgYGVycl9vdXRfdW5yZWdpc3Rlcl9tZGlvYC4gSW1wb3J0YW50ISBgbWFjYl9taWlfaW5pdGAgaXMgY2FsbGVkIGR1cmluZyBwcm9iZSB3aGVuIGEgRFQgbm9kZSBpcyBwcmVzZW50IG9yIGlmIE1ESU8gaXMgaW5pdGlhbGl6ZWQsIGFuZCBgb2Zfbm9kZV9wdXRgIGlzIHZlcnkgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gRGV2aWNlIFRyZWUuIERldmljZSBUcmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBvbiBhbWQ2NCBRRU1VL0dDRSBTeXprYWxsZXIgaW5zdGFuY2VzLiBBbmQgTUFDQiBpcyBhIGhhcmR3YXJlIGRyaXZlciBmb3IgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlLlxuXG5TbywgaXQncyBwcmV0dHkgY2xlYXI6IENhZGVuY2UgTUFDQiBpcyBhIHZlbmRvci1zcGVjaWZpYywgaGFyZHdhcmUtZGVwZW5kZW50IEV0aGVybmV0IGNvbnRyb2xsZXIsIHVzdWFsbHkgZm91bmQgaW4gU29DcyBhbmQgQVNJQ3MuIFNwZWNpZmljYWxseSwgQXRtZWwgQVQ5MSAvIE1pY3JvY2hpcCBTQU0gLyBYaWxpbnggWnlucSBTb0NzLiBBbmQgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGFtZDY0IFN5emthbGxlciBmdXp6aW5nIGVudmlyb25tZW50cy5cblxuTGV0J3MgZG8gYSBmaW5hbCByZXZpZXcuIFRoaXMgcGF0Y2ggYWZmZWN0cyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AuIEl0IHRvdWNoZXMgYG1hY2JfbWlpX2luaXRgLCBhZGRpbmcgYW4gYG9mX25vZGVfcHV0KG1kaW9fbnApYCBjYWxsIHRvIGZpeCBhIERUIG5vZGUgcmVmY291bnQgbGVhaywgYW5kIGBtYWNiX3Byb2JlYCB3aGVyZSBgcGh5bGlua19kZXN0cm95KGJwLVx1MDAzZXBoeWxpbmspYCBoYXMgYmVlbiBhZGRlZCBpbiB0aGUgZXJyb3IgY2xlYW51cCBwYXRoLiBUaGlzIGRyaXZlciBzcGVjaWZpY2FsbHkgdGFyZ2V0cyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBldGhlcm5ldCBjb250cm9sbGVyLCB3aGljaCB3ZSBmaW5kIG9uIEFSTS1iYXNlZCBBdG1lbC9NaWNyb2NoaXAvWGlsaW54IFNvQ3MuIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBBbmQsIHRoZSBoYXJkd2FyZSBpcyBub3QgcmVhY2hhYmxlIGluIG91ciBlbnZpcm9ubWVudCwgc28gaXQgaXMgdW5yZWFjaGFibGUuXG5cbk9rYXksIGxldCdzIGdlbmVyYXRlIHRoZSByZXNwb25zZSB1c2luZyBgc2V0LXJlc3VsdHNgOlxuYGBgXG5Xb3J0aEZ1enppbmc6IGZhbHNlXG5FbmFibGVDb25maWdzOiBbXVxuRm9jdXNTeW1ib2xzOiBbXVxuUmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2ApLCBmaXhpbmcgYSBkZXZpY2UgdHJlZSBPRiBub2RlIGxlYWsgaW4gYG1hY2JfbWlpX2luaXQoKWAgYW5kIGFkZGluZyBtaXNzaW5nIGBwaHlsaW5rX2Rlc3Ryb3koKWAgaW4gdGhlIGBtYWNiX3Byb2JlKClgIGVycm9yIHBhdGguIFRoaXMgaGFyZHdhcmUgZHJpdmVyIHRhcmdldHMgc3BlY2lmaWMgQVJNL1NvQyBwbGF0Zm9ybXMgKEF0bWVsL01pY3JvY2hpcC9YaWxpbngpIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2L2FtZDY0IGZ1enppbmcgZW52aXJvbm1lbnRzLlxuYGBgXG5gYGBcbmBgYFxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjcxLCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNjozMC43OTczODg4NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMpLCBmaXhpbmcgYSBkZXZpY2UgdHJlZSBub2RlIHJlZmVyZW5jZSBsZWFrIGluIG1hY2JfbWlpX2luaXQoKSBhbmQgYWRkaW5nIGEgbWlzc2luZyBwaHlsaW5rX2Rlc3Ryb3koKSBpbiB0aGUgbWFjYl9wcm9iZSgpIGVycm9yIHVud2luZGluZyBwYXRoLiBUaGlzIGRyaXZlciBpcyBmb3IgU29DLXNwZWNpZmljIEV0aGVybmV0IGhhcmR3YXJlIChwcmltYXJpbHkgQXRtZWwvTWljcm9jaGlwIEFUOTEgYW5kIFhpbGlueCBaeW5xKSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGFtZDY0IHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jKSwgZml4aW5nIGEgZGV2aWNlIHRyZWUgbm9kZSByZWZlcmVuY2UgbGVhayBpbiBtYWNiX21paV9pbml0KCkgYW5kIGFkZGluZyBhIG1pc3NpbmcgcGh5bGlua19kZXN0cm95KCkgaW4gdGhlIG1hY2JfcHJvYmUoKSBlcnJvciB1bndpbmRpbmcgcGF0aC4gVGhpcyBkcml2ZXIgaXMgZm9yIFNvQy1zcGVjaWZpYyBFdGhlcm5ldCBoYXJkd2FyZSAocHJpbWFyaWx5IEF0bWVsL01pY3JvY2hpcCBBVDkxIGFuZCBYaWxpbnggWnlucSkgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBhbWQ2NCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjI2OjMwLjc5NzQyMTY3NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvm72j[1] Phase: Running StartedAt: 2026-09-08 01:26:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm72j[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 01:26:37 +0000 UTC FinishedAt: 2026-09-08 01:26:43 +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,}