Name: series-workflow2z2pc Phase: Succeeded StartedAt: 2026-07-08 11:33:19 +0000 UTC FinishedAt: 2026-07-08 16:19:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[0] Phase: Succeeded StartedAt: 2026-07-08 11:33:19 +0000 UTC FinishedAt: 2026-07-08 11:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 11:33:19 +0000 UTC FinishedAt: 2026-07-08 11:46:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE" ], "series_id": "a70121b8-5502-4566-8f4e-486426402a37" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_vma_collect_pmd", "migrate_vma_setup", "migrate_vma_collect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfc2V0dXAmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNTE0MWJlODBhZjM1OTE0NTQ5ODAyNzY1NzE1OGZjMmFiZDcxODQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMTo0MTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggMmZmZmViMWY5OTY5NGEuLjZjZWI0N2VjMWRhMjQ1IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuQEAgLTI1Nyw3ICYjNDM7MjU3LDEyIEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4gXHRwdGVfdCAqcHRlcDtcbiBcbiBhZ2Fpbjpcbi1cdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBjaGVjayBwbWQgd2hlbiBhZGRyIGlzIGF0IHN0YXJ0LCBuYW1lbHkgbm8gcHRlIGlzIGNvbGxlY3RlZC5cbiYjNDM7XHQgKiBJdCBhdm9pZHMgY29sbGVjdGluZyB0aGUgc2FtZSBhZGRyZXNzIHJhbmdlIFtzdGFydCwgYWRkcikgdHdpY2VcbiYjNDM7XHQgKiBhbmQgb3ZlcmZsb3dpbmcgdGhlIGNvbGxlY3Rpb24gYXJyYXlzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhZGRyID09IHN0YXJ0IFx1MDAyNlx1MDAyNiAocG1kX3RyYW5zX2h1Z2UoKnBtZHApIHx8ICFwbWRfcHJlc2VudCgqcG1kcCkpKSB7XG4gXHRcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTtcbiBcbiBcdFx0aWYgKHJldCA9PSAtRUFHQUlOKVxuQEAgLTI2Nyw4ICYjNDM7MjcyLDE4IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4gXHR9XG4gXG4gXHRwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgc3RhcnQsIFx1MDAyNnB0bCk7XG4tXHRpZiAoIXB0ZXApXG4mIzQzO1x0aWYgKCFwdGVwKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2tpcCB0aGUgcmVzdCBpZiBwbWQgYmVjb21lcyBodWdlIG9yIGNsZWFyZWQuIEZsdXNoIGlmIGFueVxuJiM0MztcdFx0ICogcHRlIGlzIG1vZGlmaWVkXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChhZGRyICE9IHN0YXJ0KSB7XG4mIzQzO1x0XHRcdGlmICh1bm1hcHBlZClcbiYjNDM7XHRcdFx0XHRmbHVzaF90bGJfcmFuZ2Uod2Fsay1cdTAwM2V2bWEsIHN0YXJ0LCBlbmQpO1xuJiM0MztcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKGFkZHIsIGVuZCwgd2Fsayk7XG4mIzQzO1x0XHR9XG4gXHRcdGdvdG8gYWdhaW47XG4mIzQzO1x0fVxuIFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiBcdHB0ZXAgJiM0Mzs9IChhZGRyIC0gc3RhcnQpIC8gUEFHRV9TSVpFO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfc2V0dXAmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU1MTQxYmU4MGFmMzU5MTQ1NDk4MDI3NjU3MTU4ZmMyYWJkNzE4NDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCA4IDExOjQxOjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggMmZmZmViMWY5OTY5NGEuLjZjZWI0N2VjMWRhMjQ1IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTI1Nyw3ICYjNDM7MjU3LDEyIEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsCiAJcHRlX3QgKnB0ZXA7CiAKIGFnYWluOgotCWlmIChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkgewomIzQzOwkvKgomIzQzOwkgKiBPbmx5IGNoZWNrIHBtZCB3aGVuIGFkZHIgaXMgYXQgc3RhcnQsIG5hbWVseSBubyBwdGUgaXMgY29sbGVjdGVkLgomIzQzOwkgKiBJdCBhdm9pZHMgY29sbGVjdGluZyB0aGUgc2FtZSBhZGRyZXNzIHJhbmdlIFtzdGFydCwgYWRkcikgdHdpY2UKJiM0MzsJICogYW5kIG92ZXJmbG93aW5nIHRoZSBjb2xsZWN0aW9uIGFycmF5cy4KJiM0MzsJICovCiYjNDM7CWlmIChhZGRyID09IHN0YXJ0ICZhbXA7JmFtcDsgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSkgewogCQlpbnQgcmV0ID0gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRwLCBzdGFydCwgZW5kLCB3YWxrLCBmYXVsdF9mb2xpbyk7CiAKIAkJaWYgKHJldCA9PSAtRUFHQUlOKQpAQCAtMjY3LDggJiM0MzsyNzIsMTggQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCwKIAl9CiAKIAlwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgc3RhcnQsICZhbXA7cHRsKTsKLQlpZiAoIXB0ZXApCiYjNDM7CWlmICghcHRlcCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFNraXAgdGhlIHJlc3QgaWYgcG1kIGJlY29tZXMgaHVnZSBvciBjbGVhcmVkLiBGbHVzaCBpZiBhbnkKJiM0MzsJCSAqIHB0ZSBpcyBtb2RpZmllZAomIzQzOwkJICovCiYjNDM7CQlpZiAoYWRkciAhPSBzdGFydCkgewomIzQzOwkJCWlmICh1bm1hcHBlZCkKJiM0MzsJCQkJZmx1c2hfdGxiX3JhbmdlKHdhbGstJmd0O3ZtYSwgc3RhcnQsIGVuZCk7CiYjNDM7CQkJcmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspOwomIzQzOwkJfQogCQlnb3RvIGFnYWluOwomIzQzOwl9CiAJbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKIAlwdGVwICYjNDM7PSAoYWRkciAtIHN0YXJ0KSAvIFBBR0VfU0laRTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGV2aWNlIE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHR3ZWFraW5nIHRoZSBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IHRoZSBjb25kaXRpb24gZGV0ZXJtaW5pbmcgaWYgd2UgY2hlY2sgZm9yIGEgdHJhbnNwYXJlbnQgaHVnZSBwYWdlIChgcG1kX3RyYW5zX2h1Z2UoKnBtZHApYCkgb3Igbm9uLXByZXNlbnQgcGFnZSAoYCFwbWRfcHJlc2VudCgqcG1kcClgKSBpcyBub3cgY29uZGl0aW9uYWwuIEl0JiMzOTtzIG9ubHkgZXZhbHVhdGVkIGlmIHRoZSBjdXJyZW50IGFkZHJlc3MgKGBhZGRyYCkgaXMgZXF1YWwgdG8gdGhlIHN0YXJ0aW5nIGFkZHJlc3MgKGBzdGFydGApLiBUaGF0IGZlZWxzIGxpa2UgYSBzdWJ0bGUgY2hhbmdlLCBsaWtlbHkgYWltZWQgYXQgYSB2ZXJ5IHNwZWNpZmljIHNjZW5hcmlvIHdpdGhpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjb25kaXRpb25hbCBjaGVjay4KClRoZSBvdGhlciBiaXQgaXMgbW9yZSBpbnRlcmVzdGluZy4gSXQgZGVhbHMgd2l0aCBhIGZhaWx1cmUgc2NlbmFyaW8gd2l0aGluIGBwdGVfb2Zmc2V0X21hcF9sb2NrYC4gSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIE5VTEwsIHRoZSBwYXRjaCBub3cgaW50cm9kdWNlcyBhIGNoZWNrLiBJZiB3ZSYjMzk7cmUgbm90IGF0IHRoZSBzdGFydCBhZGRyZXNzLCB3aGljaCBwcmVzdW1hYmx5IG1lYW5zIHdlJiMzOTt2ZSBtYWRlIHNvbWUgcHJvZ3Jlc3MsIGFuZCBpZiBgdW5tYXBwZWRgIGlzIHRydWUsIHRoZW4gd2UgZmx1c2ggdGhlIFRMQi4gVGhlIGxvZ2ljIGhlcmUgaXMgbWFraW5nIGFzc3VtcHRpb25zIGFib3V0IHdoYXQgaGFwcGVucyBpZiBgcHRlX29mZnNldF9tYXBfbG9ja2AgZmFpbHMuIEl0JiMzOTtzIHNheWluZyB0aGF0LCBpbiBzb21lIGNhc2VzLCB0aGUgc3lzdGVtIHNob3VsZCBzdG9wIHByb2Nlc3NpbmcgdGhlIG1pZ3JhdGlvbiBvbiBhbiBpbmRpdmlkdWFsIFBURSBhbmQgY29udGludWUgdG8gdGhlIG5leHQgb25lLCB3aXRoIHRoZSBwb3RlbnRpYWwgb2YgZmx1c2hpbmcgdGhlIFRMQiB0byBkZWFsIHdpdGggcGFydGlhbGx5IHVubWFwcGVkIFZNQSByYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoaXMgc3BlY2lmaWMgY29kZXBhdGggYW5kIHdoeS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHNhZmUgYXNzdW1wdGlvbiwgc28gYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoaXMgY2hhbmdlIGlzIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jPTEzNz1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDQtXG5tbS9taWdyYXRlX2RldmljZS5jOjI0NTpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDYtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NTE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbWlncmF0ZV92bWFfd2Fsa19vcHMgPSB7XG5tbS9taWdyYXRlX2RldmljZS5jOjUxNTpcdC5wbWRfZW50cnlcdFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTE2LVx0LnB0ZV9ob2xlXHRcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdpdGhpbiB0aGUgTWlncmF0aW9uIEZyYW1ld29yayoqCgpBbHJpZ2h0LCBzbyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGlzIGNsZWFybHkgYSBjb21wb25lbnQgb2YgYG1pZ3JhdGVfdm1hX3dhbGtfb3BzYC4gTWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgY29sbGVjdGluZyBvciBoYW5kbGluZyBwYWdlIG1hcCBlbnRyaWVzIChQTURzKSBkdXJpbmcgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgKFZNQSkgbWlncmF0aW9uIHByb2Nlc3MuIFRoZSAmIzM0O3dhbGsmIzM0OyBpbXBsaWVzIHNvbWUgc29ydCBvZiBpdGVyYXRpb24sIHBlcmhhcHMgb3ZlciBwYWdlIHRhYmxlcy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGFuZCB3aGF0IEkgcmVhbGx5IHdhbnQgdG8gdW5kZXJzdGFuZCwgaXMgd2hlcmUgdGhpcyBgbWlncmF0ZV92bWFfd2Fsa19vcHNgIGFic3RyYWN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIG1pZ3JhdGlvbiBtYWNoaW5lcnkuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdG8gZ3Jhc3AgaG93IHRoZXNlIGNvbGxlY3RlZCBQTURzIGFyZSB1c2VkLCB3aGV0aGVyIHRoZXkmIzM5O3JlIG1vdmVkLCBjb3BpZWQsIGludmFsaWRhdGVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgYG1pZ3JhdGVfdm1hX3dhbGtfb3BzYCBpcyBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV93YWxrX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz0yNDU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTUxMy1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTE0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbWlncmF0ZV92bWFfd2Fsa19vcHMgPSB7XG5tbS9taWdyYXRlX2RldmljZS5jLTUxNS1cdC5wbWRfZW50cnlcdFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTUyOD1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9jb2xsZWN0KHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTU0Mi1cdHdhbGtfcGFnZV9yYW5nZV92bWEobWlncmF0ZS1cdTAwM2V2bWEsIG1pZ3JhdGUtXHUwMDNlc3RhcnQsIG1pZ3JhdGUtXHUwMDNlZW5kLFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1NDM6XHRcdFx0XHUwMDI2bWlncmF0ZV92bWFfd2Fsa19vcHMsIG1pZ3JhdGUpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy01NDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBNaWdyYXRpb24gUHJvY2VzczogQSBQcm9jZWR1cmFsIEJyZWFrZG93bioqCgpSaWdodCwgc28gYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgbWlncmF0ZV92bWFfc2V0dXBgLiBUaGF0JiMzOTtzIHRoZSBrZXkgcmVsYXRpb25zaGlwIGhlcmUuIGBtaWdyYXRlX3ZtYV9zZXR1cGAgaXMgY2xlYXJseSB0aGUgcGFyZW50IGZ1bmN0aW9uLCB0aGUgb3JjaGVzdHJhdG9yLCBhbmQgaXQmIzM5O3MgdXNpbmcgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGFzIGEgc3Vib3JkaW5hdGUgdGFzay4gIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgd2VsbC1kZWZpbmVkIHByb2NlZHVyYWwgZmxvdyBpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIHRoZW4sIHdoZXJlIG9uZSBmdW5jdGlvbiBzZXRzIHRoaW5ncyB1cCBhbmQgYW5vdGhlciB0aGVuIGZvbGxvd3MgdG8gZ2F0aGVyIGRldGFpbHMgZm9yIHRoYXQgc2V0dXAuIFRoaXMgaW1wbGllcyBhIHZlcnkgc3BlY2lmaWMgc3RhZ2UgaW4gdGhlIHByb2Nlc3MuIEkgd291bGQgZXhwZWN0IGBtaWdyYXRlX3ZtYV9zZXR1cGAgdG8gYmUgdGhlIHBoYXNlIG9mIHRoZSBtaWdyYXRpb24gd2hpY2ggcHJlcGFyZXMgdGhlIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgZm9yIGNvcHlpbmcuIEl0IHNldHMgdXAgdGhlIGdyb3VuZHdvcmsg4oCTIHBlcmhhcHMgYWxsb2NhdGluZyByZXNvdXJjZXMsIGRldGVybWluaW5nIHJhbmdlcywgb3IgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsIG1lbW9yeSByZWdpb24gd2UmIzM5O3JlIGFib3V0IHRvIG1vdmUuICBgbWlncmF0ZV92bWFfY29sbGVjdGAsIHRoZXJlZm9yZSwgaXMgbGlrZWx5IHRoZSBuZXh0IHN0ZXAgaW4gd2hpY2ggaXQgY29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBWTUEgZm9yIHRoZSBtaWdyYXRpb24uIFRoaXMgY291bGQgYmUgY29sbGVjdGluZyBwb2ludGVycywgcGFnZSBmbGFncywgb3IgYW55IG90aGVyIG1ldGFkYXRhIHRoYXQgaXMgbmVlZGVkIGxhdGVyIG9uIGR1cmluZyB0aGUgYWN0dWFsIG1pZ3JhdGlvbi4gVGhpcyBtYWtlcyBhIGxvdCBvZiBzZW5zZS4gVGhlIHNldHVwIHBoYXNlIGRvZXNuJiMzOTt0IG5lZWQgdG8gaG9sZCBvbnRvIHRoaXMgZGF0YSwgc28gd2UgY2FuIHVzZSBhIHdvcmtlciBwcm9jZXNzIGZvciBpdC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aHkgaXQmIzM5O3Mgc3RydWN0dXJlZCB0aGlzIHdheSwgd2hhdCB0aGUgYWR2YW50YWdlcyBhcmUsIGFuZCBpZiB0aGUgYnJlYWtkb3duIGlzIGluIGxpbmUgd2l0aCBiZXN0IHByYWN0aWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz02ODU9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjkxLS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo2OTI6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxubW0vbWlncmF0ZV9kZXZpY2UuYy02OTMtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTc1NC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzU1OmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG5tbS9taWdyYXRlX2RldmljZS5jLTc1Ni17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03OTQtfVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3OTU6RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTc5Ni1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzODE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MDM6ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDA0LSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQxMC0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDExOiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQxMi0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJiMzOTt0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDgxPWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5My1cdCAqIHRoZSBzb3VyY2UgZm9saW8uIFNvIGNhbGwgbWlncmF0ZV92bWFfdW5tYXAoKSBkaXJlY3RseSB0byB1bm1hcCB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ5NDpcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTUtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjkzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgbWlncmF0ZV92bWFfc2V0dXBgIEV4cG9ydCoqCgpBbHJpZ2h0LCBzbyBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UuIE5vdyB0aGUga2V5IHF1ZXN0aW9uIGlzOiB3aG8mIzM5O3MgYWN0dWFsbHkgKnVzaW5nKiBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgdG8gcHJvcGVybHkgZ3JvayB0aGUgaW50ZW50IGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgbGV2ZXJhZ2VkIGluIHRoZSBzeXN0ZW0uIFRoaXMgZXhwb3J0IGltbWVkaWF0ZWx5IGZsYWdzIGFzIGEgcG90ZW50aWFsIGludGVncmF0aW9uIHBvaW50IGFuZCBwcm9iYWJseSBtZXJpdHMgYSBkZWVwIGRpdmUgaW50byB0aGUgY2FsbGluZyBjb250ZXh0cy4gS25vd2luZyB0aGUgY29uc3VtZXJzIHdpbGwgcHJvdmlkZSBhIG11Y2ggbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzdWJzeXN0ZW0mIzM5O3MgYmVoYXZpb3VyLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZXhwb3J0IHRvIGZpbmQgd2hhdCBmdW5jdGlvbnMgYW5kIG1vZHVsZXMgZGVwZW5kIG9uIGl0IHRvIGJlIGFibGUgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjY0PXVzZSBoYXJkd2FyZSBETUEgb3IgZGV2aWNlIHNwZWNpZmljIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHRvIG1pZ3JhdGUgZGF0YS5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNjU6VGhlIG1pZ3JhdGVfdm1hX3NldHVwKCksIG1pZ3JhdGVfdm1hX3BhZ2VzKCksIGFuZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjY2LWZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gbWFrZSBkcml2ZXJzIGVhc2llciB0byB3cml0ZSBhbmQgdG8gY2VudHJhbGl6ZSBjb21tb25cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjk3PWJldHdlZW4gZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjb2RlIGFuZCBzaGFyZWQgY29tbW9uIGNvZGU6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMS0gICBUaGUgZGV2aWNlIGRyaXZlciBoYXMgdG8gcGFzcyBhIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAgdG9cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDI6ICAgbWlncmF0ZV92bWFfc2V0dXAoKSBzbyB0aGUgbW1hcF9yZWFkX2xvY2soKSBvciBtbWFwX3dyaXRlX2xvY2soKSBuZWVkcyB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMy0gICBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG1pZ3JhdGlvbi5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDQtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA1OjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA2LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNy0gICBUaGUgZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgYGBzdHJ1Y3QgbWlncmF0ZV92bWFgYCBmaWVsZHMgYW5kIHBhc3Nlc1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwODogICB0aGUgcG9pbnRlciB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGUgYGBhcmdzLVx1MDAzZWZsYWdzYGAgZmllbGQgaXMgdXNlZCB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwOS0gICBmaWx0ZXIgd2hpY2ggc291cmNlIHBhZ2VzIHNob3VsZCBiZSBtaWdyYXRlZC4gRm9yIGV4YW1wbGUsIHNldHRpbmdcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE3LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMxODogICBPbmUgb2YgdGhlIGZpcnN0IHN0ZXBzIG1pZ3JhdGVfdm1hX3NldHVwKCkgZG9lcyBpcyB0byBpbnZhbGlkYXRlIG90aGVyXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE5LSAgIGRldmljZSYjMzk7cyBNTVVzIHdpdGggdGhlIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKClgYCBhbmRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI0LSAgIGBgTU1VX05PVElGWV9NSUdSQVRFYGAgYW5kIHRoZSBgYG93bmVyYGAgZmllbGQgc2V0IHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzI1OiAgIHRoZSBgYGFyZ3MtXHUwMDNlcGdtYXBfb3duZXJgYCBmaWVsZCBwYXNzZWQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKS4gVGhpc1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyNi0gICBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gc2tpcCB0aGUgaW52YWxpZGF0aW9uIGNhbGxiYWNrIGFuZCBvbmx5XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMzNy0gICBpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgUFRFLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMzODogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIGFsc28gY2xlYXJzIHRoZSBgYGFyZ3MtXHUwMDNlZHN0YGAgYXJyYXkuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM5LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjEyPUhNTSDliIfmjaLliLDnm7TmjqXkvb/nlKggc3RydWN0IHBhZ2Ug55So5LqO6K6+5aSH5YaF5a2Y77yM6L+Z5L2/5b6X5aSn5aSa5pWw5YaF5qC45Luj56CB6Lev5b6E5LiN55+l6YGT5beu5byC44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMTgt55Sx5LqOIENQVSDml6Dms5Xnm7TmjqXorr/pl67orr7lpIflhoXlrZjvvIzlm6DmraTorr7lpIfpqbHliqjnqIvluo/lv4Xpobvkvb/nlKjnoazku7YgRE1BIOaIluiuvuWkh+eJueWumueahOWKoOi9vS/lrZhcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjE5OuWCqOaMh+S7pOadpei/geenu+aVsOaNruOAgm1pZ3JhdGVfdm1hX3NldHVwKCnjgIFtaWdyYXRlX3ZtYV9wYWdlcygpIOWSjFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMjAtbWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTI0Mz1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQ5LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTA6ICAg6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75bCGIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAg5Lyg6YCS57uZbWlncmF0ZV92bWFfc2V0dXAoKe+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTEtICAg5Zug5q2k6ZyA6KaB5Zyo6L+B56e75pyf6Ze05L+d55WZIG1tYXBfcmVhZF9sb2NrKCkg5oiWIG1tYXBfd3JpdGVfbG9jaygp44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Mi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUzOjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1NC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU1LSAgIOiuvuWkh+mpseWKqOWIneWni+WMluS6hiBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIOeahOWtl+aute+8jOW5tuWwhuivpeaMh+mSiOS8oOmAkue7mVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTY6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeOAgmBgYXJncy1cdTAwM2VmbGFnc2BgIOWtl+auteaYr+eUqOadpei/h+a7pOWTquS6m+a6kOmhtemdouW6lOivpeiiq+i/geenu+OAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTctICAg5L6L5aaC77yM6K6+572uIGBgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTWBgIOWwhuWPqui/geenu+ezu+e7n+WGheWtmO+8jOiuvue9rlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjYyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjM6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeaJgOWBmueahOesrOS4gOatpeaYr+eUqCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KClgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjQtICAg5ZKMIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKClgYCDosIPnlKjmnaXpgY3ljoborr7lpIflkajlm7TnmoTpobXooajvvIzkvb9cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Ny0gICDlhbYgYGBldmVudGBgIOWtl+auteiuvue9ruS4uk1NVV9OT1RJRllfTUlHUkFURe+8jCBgYG93bmVyYGAg5a2X5q616K6+572u5Li65Lyg6YCS57uZXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2ODogICBtaWdyYXRlX3ZtYV9zZXR1cCgp55qEIGBgYXJncy1cdTAwM2VwZ21hcF9vd25lcmBgIOWtl+auteOAgui/meWFgeiuuOiuvuWkh+mpseWKqOi3s+i/h+aXoFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjktICAg5pWI5YyW5Zue6LCD77yM5Y+q5peg5pWI5YyW6YKj5Lqb5a6e6ZmF5q2j5Zyo6L+B56e755qE6K6+5aSH56eB5pyJTU1V5pig5bCE44CC6L+Z5LiA54K55bCG5Zyo5LiL5LiA6IqC6K+m57uG6Kej6YeK44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzUtICAgYGBsb2NrX3BhZ2UoKWBg6ZSB5a6a77yM5LiOTFJV6ZqU56a777yI5aaC5p6c57O757uf5YaF5a2Y5ZKM6K6+5aSH56eB5pyJ6aG15LiN5ZyoTFJV5LiK77yJ77yM5LuO6L+bXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI3NjogICDnqIvkuK3lj5bmtojmmKDlsITvvIzlubbmj5LlhaXkuIDkuKrnibnmrornmoTov4Hnp7tQVEXmnaXku6Pmm7/ljp/mnaXnmoRQVEXjgIIgbWlncmF0ZV92bWFfc2V0dXAoKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzctICAg6L+Y5riF6Zmk5LqGIGBgYXJncy1cdTAwM2Vkc3RgYCDmlbDnu4TjgIJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUzOC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTM5Olx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlnKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTQwLVx0aWYgKHJldClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTc0MD1zdGF0aWMgaW50IGt2bXBwY19zdm1fcGFnZV9pbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2MC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NzYxOlx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlnKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTM5ND1zdm1fbWlncmF0ZV92bWFfdG9fdnJhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NDMyOlx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNm1pZ3JhdGUpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00MzMtXHRpZiAocikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkzPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzQtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjczNTpcdHIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzM2LVx0aWYgKHIpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MzUxNT1zdm1fcmFuZ2VfYmVzdF9wcmVmZXRjaF9sb2NhdGlvbihzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODItICogYW5kIHJlc3RvcmUgd29yazpcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTgzOiAqIDEuIG1pZ3JhdGVfdm1hX3NldHVwIGludmFsaWRhdGUgcGFnZXMsIE1NVSBub3RpZmllciBjYWxsYmFjayBzdm1fcmFuZ2VfZXZpY3RcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNTg0LSAqICAgIHN0b3BzIGFsbCBxdWV1ZXMsIHNjaGVkdWxlIHJlc3RvcmUgd29ya1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTYxNj1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjgzLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Njg0Olx0ZXJyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODUtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEyMTE9c3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyNjQtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjY1Olx0ZXJyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjY2LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTIzNS1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjM2Olx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpIFx1MDAzYyAwKVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM3LVx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTgyMj1ub3V2ZWF1X2RtZW1fbWlncmF0ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODcxLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6ODcyOlx0XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTg3My1cdFx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNjA9c3RydWN0IG1pZ3JhdGVfdm1hIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjYtXHQgKiBUaGUgc3JjIGFycmF5IG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIgYWZ0ZXJcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE2NzpcdCAqIG1pZ3JhdGVfdm1hX3NldHVwKCksIGFuZCBtdXN0IG5vdCBjaGFuZ2UgdGhlIGRzdCBhcnJheSBhZnRlclxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY4LVx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5NC1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5NTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5Ni12b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XG4tLVxubGliL3Rlc3RfaG1tLmM9MTEyMD1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4tLVxubGliL3Rlc3RfaG1tLmMtMTE2NC1cbmxpYi90ZXN0X2htbS5jOjExNjU6XHRcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpO1xubGliL3Rlc3RfaG1tLmMtMTE2Ni1cdFx0aWYgKHJldClcbi0tXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMjQyLVx0XHRcdFx0TUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EO1xubGliL3Rlc3RfaG1tLmM6MTI0MzpcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG5saWIvdGVzdF9obW0uYy0xMjQ0LVx0XHRpZiAocmV0KVxuLS1cbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTcwNS1cdC8qXG5saWIvdGVzdF9obW0uYzoxNzA2Olx0ICogSW4gcHJhY3RpY2UgbWlncmF0ZV92bWFfc2V0dXAoKSBzaG91bGQgbmV2ZXIgZmFpbCB1bmxlc3MgdGhlXG5saWIvdGVzdF9obW0uYy0xNzA3LVx0ICogdGVzdCBpcyB3cm9uZyBhcyBpdCBqdXN0IHRlc3RzIHNvbWUgc3RhdGljIFZNQSBwcm9wZXJ0aWVzLlxubGliL3Rlc3RfaG1tLmMtMTcwOC1cdCAqL1xubGliL3Rlc3RfaG1tLmM6MTcwOTpcdGlmIChtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKSkge1xubGliL3Rlc3RfaG1tLmMtMTcxMC1cdFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9Njg1PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTY5MS0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NjkyOiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgLSBwcmVwYXJlIHRvIG1pZ3JhdGUgYSByYW5nZSBvZiBtZW1vcnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjkzLSAqIEBhcmdzOiBjb250YWlucyB0aGUgdm1hLCBzdGFydCwgYW5kIHBmbnMgYXJyYXlzIGZvciB0aGUgbWlncmF0aW9uXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NTQtICovXG5tbS9taWdyYXRlX2RldmljZS5jOjc1NTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NTYte1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzk0LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6Nzk1OkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xubW0vbWlncmF0ZV9kZXZpY2UuYy03OTYtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzgxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMi0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDAzOiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkgZXhjZXB0IHRoYXRcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwNC0gKiBpbnN0ZWFkIG9mIGxvb2tpbmcgdXAgcGFnZXMgYmFzZWQgb24gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzIGEgcmFuZ2Ugb2Zcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MTAtICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQxMTogKiBMaWtlIG1pZ3JhdGVfdm1hX3NldHVwKCkgdGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYSByZWZlcmVuY2UgYW5kIGxvY2sgYW55XG5tbS9taWdyYXRlX2RldmljZS5jLTE0MTItICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbiYjMzk7dCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ4MT1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTMtXHQgKiB0aGUgc291cmNlIGZvbGlvLiBTbyBjYWxsIG1pZ3JhdGVfdm1hX3VubWFwKCkgZGlyZWN0bHkgdG8gdW5tYXAgdGhlXG5tbS9taWdyYXRlX2RldmljZS5jOjE0OTQ6XHQgKiBmb2xpbyBhcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIHdpbGwgZmFpbCBpZiBhcmdzLnZtYSA9PSBOVUxMLlxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk1LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbWlncmF0ZV92bWFfc2V0dXBgIEZ1bmN0aW9uIGFuZCB0aGUgQnVnIEZpeCoqCgpPa2F5LCBzbyBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIHBvcHBpbmcgdXAgaW4gYSBmZXcgcGxhY2VzIOKAkyBgbGliL3Rlc3RfaG1tLmNgLCBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmNgLCBhbmQgZXZlbiBvdmVyIGluIHRoZSBBTUQgYW5kIFBvd2VyUEMgY29kZSB3aXRoIGBrZmRfbWlncmF0ZS5jYCBhbmQgYGJvb2szc19odl91dm1lbS5jYC4gVGhhdCB0ZXN0IG1vZHVsZSBpbiBgbGliL3Rlc3RfaG1tLmNgIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBITU0sIEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQsIHdoaWNoIEkmIzM5O20gZmFtaWxpYXIgd2l0aCBpbiB0aGUgY29udGV4dCBvZiBkZXZpY2UgbWVtb3J5IGFuZCBzaGFyaW5nLgoKTm93LCB0aGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgY2hhbmdlLi4uIHRoZSBjb21taXQgbWVzc2FnZSBpcyBrZXkgaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgYnVnIHdhcyByZWxhdGVkIHRvIHRoZSBjb25kaXRpb24gYGFkZHIgIT0gc3RhcnRgIGNhdXNpbmcgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIHRvIGZhaWwuIFRoaXMgd291bGQgbGVhZCB0byBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciBza2lwcGluZyBvZiBhZGRyZXNzZXMsIHdoaWNoIGlzIGNsZWFybHkgcHJvYmxlbWF0aWMuIFRoZSBmaXggZXhwbGljaXRseSBtZW50aW9ucyBvbmx5IGNoZWNraW5nIHRoZSBQTUQgKFBhZ2UgTWFwIERpcmVjdG9yeSkgd2hlbiB0aGUgYWRkcmVzcyBpcyB0aGUgc3RhcnRpbmcgYWRkcmVzcyBhbmQgKm5vKiBQVEVzIGhhdmUgYmVlbiBjb2xsZWN0ZWQsIGF2b2lkaW5nIHJlZHVuZGFudCBjb2xsZWN0aW9uIGFuZCBvdmVyZmxvd2luZyB0aG9zZSBhcnJheXMuIEFsc28sIGl04oCZcyBza2lwcGluZyBpZiB0aGUgUE1EIGJlY29tZXMgaHVnZSBvciBjbGVhcmVkIGFuZCBmbHVzaGluZyBpZiBhbnkgUFRFcyBhcmUgbW9kaWZpZWQuIEnigJltIGd1ZXNzaW5nIHRoaXMgaXMgYWxsIGFib3V0IHBlcmZvcm1hbmNlIGFuZCBhdm9pZGluZyBkb3VibGUtY29sbGVjdGluZyBvZiByZWdpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbWlncmF0ZWQuIEkgY2FuIHNlZSBob3cgdGhhdOKAmXMgYSB0cmlja3kgcmFjZSB0byBnZXQgcmlnaHQsIGVzcGVjaWFsbHkgd2l0aCBtdWx0aXBsZSBkZXZpY2VzIGluIHBsYXkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtbS9taWdyYXRlX2RldmljZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4gMjQ2Olx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIDI0NzpcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlbmQsXG4gMjQ4Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiAyNDk6XHR7XG4gMjUwOlx0XHRzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gMjUxOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuIDI1MjpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4gMjUzOlx0XHR1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydCwgdW5tYXBwZWQgPSAwO1xuIDI1NDpcdFx0c3BpbmxvY2tfdCAqcHRsO1xuIDI1NTpcdFx0c3RydWN0IGZvbGlvICpmYXVsdF9mb2xpbyA9IG1pZ3JhdGUtXHUwMDNlZmF1bHRfcGFnZSA/XG4gMjU2Olx0XHRcdHBhZ2VfZm9saW8obWlncmF0ZS1cdTAwM2VmYXVsdF9wYWdlKSA6IE5VTEw7XG4gMjU3Olx0XHRwdGVfdCAqcHRlcDtcbiAyNTg6XHRcbiAyNTk6XHRhZ2FpbjpcbiAyNjA6XHRcdC8qXG4gMjYxOlx0XHQgKiBPbmx5IGNoZWNrIHBtZCB3aGVuIGFkZHIgaXMgYXQgc3RhcnQsIG5hbWVseSBubyBwdGUgaXMgY29sbGVjdGVkLlxuIDI2MjpcdFx0ICogSXQgYXZvaWRzIGNvbGxlY3RpbmcgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSBbc3RhcnQsIGFkZHIpIHR3aWNlXG4gMjYzOlx0XHQgKiBhbmQgb3ZlcmZsb3dpbmcgdGhlIGNvbGxlY3Rpb24gYXJyYXlzLlxuIDI2NDpcdFx0ICovXG4gMjY1Olx0XHRpZiAoYWRkciA9PSBzdGFydCBcdTAwMjZcdTAwMjYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSkge1xuIDI2NjpcdFx0XHRpbnQgcmV0ID0gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRwLCBzdGFydCwgZW5kLCB3YWxrLCBmYXVsdF9mb2xpbyk7XG4gMjY3Olx0XG4gMjY4Olx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTilcbiAyNjk6XHRcdFx0XHRnb3RvIGFnYWluO1xuIDI3MDpcdFx0XHRpZiAocmV0ID09IDApXG4gMjcxOlx0XHRcdFx0cmV0dXJuIDA7XG4gMjcyOlx0XHR9XG4gMjczOlx0XG4gMjc0Olx0XHRwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgc3RhcnQsIFx1MDAyNnB0bCk7XG4gMjc1Olx0XHRpZiAoIXB0ZXApIHtcbiAyNzY6XHRcdFx0LypcbiAyNzc6XHRcdFx0ICogU2tpcCB0aGUgcmVzdCBpZiBwbWQgYmVjb21lcyBodWdlIG9yIGNsZWFyZWQuIEZsdXNoIGlmIGFueVxuIDI3ODpcdFx0XHQgKiBwdGUgaXMgbW9kaWZpZWRcbiAyNzk6XHRcdFx0ICovXG4gMjgwOlx0XHRcdGlmIChhZGRyICE9IHN0YXJ0KSB7XG4gMjgxOlx0XHRcdFx0aWYgKHVubWFwcGVkKVxuIDI4MjpcdFx0XHRcdFx0Zmx1c2hfdGxiX3JhbmdlKHdhbGstXHUwMDNldm1hLCBzdGFydCwgZW5kKTtcbiAyODM6XHRcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKGFkZHIsIGVuZCwgd2Fsayk7XG4gMjg0Olx0XHRcdH1cbiAyODU6XHRcdFx0Z290byBhZ2FpbjtcbiAyODY6XHRcdH1cbiAyODc6XHRcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4gMjg4Olx0XHRwdGVwICYjNDM7PSAoYWRkciAtIHN0YXJ0KSAvIFBBR0VfU0laRTtcbiAyODk6XHRcbiAyOTA6XHRcdGZvciAoOyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgJiM0Mzs9IFBBR0VfU0laRSwgcHRlcCYjNDM7JiM0MzspIHtcbiAyOTE6XHRcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcbiAyOTI6XHRcdFx0dW5zaWduZWQgbG9uZyBtcGZuID0gMCwgcGZuO1xuIDI5MzpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIDI5NDpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiAyOTU6XHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiAyOTY6XHRcdFx0cHRlX3QgcHRlO1xuIDI5NzpcdFxuIDI5ODpcdFx0XHRwdGUgPSBwdGVwX2dldChwdGVwKTtcbiAyOTk6XHRcbiAzMDA6XHRcdFx0aWYgKHB0ZV9ub25lKHB0ZSkpIHtcbiAzMDE6XHRcdFx0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKSB7XG4gMzAyOlx0XHRcdFx0XHRtcGZuID0gTUlHUkFURV9QRk5fTUlHUkFURTtcbiAzMDM6XHRcdFx0XHRcdG1pZ3JhdGUtXHUwMDNlY3BhZ2VzJiM0MzsmIzQzOztcbiAzMDQ6XHRcdFx0XHR9XG4gMzA1Olx0XHRcdFx0Z290byBuZXh0O1xuIDMwNjpcdFx0XHR9XG4gMzA3Olx0XG4gMzA4Olx0XHRcdGlmICghcHRlX3ByZXNlbnQocHRlKSkge1xuIDMwOTpcdFx0XHRcdC8qXG4gMzEwOlx0XHRcdFx0ICogT25seSBjYXJlIGFib3V0IHVuYWRkcmVzc2FibGUgZGV2aWNlIHBhZ2Ugc3BlY2lhbFxuIDMxMTpcdFx0XHRcdCAqIHBhZ2UgdGFibGUgZW50cnkuIE90aGVyIHNwZWNpYWwgc3dhcCBlbnRyaWVzIGFyZSBub3RcbiAzMTI6XHRcdFx0XHQgKiBtaWdyYXRhYmxlLCBhbmQgd2UgaWdub3JlIHJlZ3VsYXIgc3dhcHBlZCBwYWdlLlxuIDMxMzpcdFx0XHRcdCAqL1xuIDMxNDpcdFx0XHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcbiAzMTU6XHRcdFx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbiAzMTY6XHRcdFx0XHRcdGdvdG8gbmV4dDtcbiAzMTc6XHRcbiAzMTg6XHRcdFx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4gMzE5Olx0XHRcdFx0cGdtYXAgPSBwYWdlX3BnbWFwKHBhZ2UpO1xuIDMyMDpcdFx0XHRcdGlmICghKG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2XG4gMzIxOlx0XHRcdFx0XHRNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpIHx8XG4gMzIyOlx0XHRcdFx0ICAgIHBnbWFwLVx1MDAzZW93bmVyICE9IG1pZ3JhdGUtXHUwMDNlcGdtYXBfb3duZXIpXG4gMzIzOlx0XHRcdFx0XHRnb3RvIG5leHQ7XG4gMzI0Olx0XG4gMzI1Olx0XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIDMyNjpcdFx0XHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuIDMyNzpcdFx0XHRcdFx0aW50IHJldDtcbiAzMjg6XHRcbiAzMjk6XHRcdFx0XHRcdC8qIG1pZ3JhdGVfdm1hX3NwbGl0X2ZvbGlvKCkgY29uc3VtZXMgdGhpcyByZWZlcmVuY2UgKi9cbiAzMzA6XHRcdFx0XHRcdGlmIChmb2xpbyAhPSBmYXVsdF9mb2xpbylcbiAzMzE6XHRcdFx0XHRcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiAzMzI6XHRcdFx0XHRcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIDMzMzpcdFx0XHRcdFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xuIDMzNDpcdFx0XHRcdFx0cmV0ID0gbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oZm9saW8sXG4gMzM1Olx0XHRcdFx0XHRcdFx0XHQgIG1pZ3JhdGUtXHUwMDNlZmF1bHRfcGFnZSk7XG4gMzM2Olx0XG4gMzM3Olx0XHRcdFx0XHRpZiAocmV0KSB7XG4gMzM4Olx0XHRcdFx0XHRcdGlmICh1bm1hcHBlZClcbiAzMzk6XHRcdFx0XHRcdFx0XHRmbHVzaF90bGJfcmFuZ2Uod2Fsay1cdTAwM2V2bWEsIHN0YXJ0LCBlbmQpO1xuIDM0MDpcdFxuIDM0MTpcdFx0XHRcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKGFkZHIsIGVuZCwgd2Fsayk7XG4gMzQyOlx0XHRcdFx0XHR9XG4gMzQzOlx0XG4gMzQ0Olx0XHRcdFx0XHRnb3RvIGFnYWluO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBgbWlncmF0ZV92bWFfc2V0dXBgLiBUaGF0JiMzOTtzIGdvb2QsIGJlY2F1c2UgYG1pZ3JhdGVfdm1hX3NldHVwYCBpcyBhY3R1YWxseSB1c2VkIGluIGEgZmV3IHBsYWNlcy4gSSBrbm93IGl0JiMzOTtzIHVzZWQgYnkgdGhlIEhNTSB0ZXN0cywgc3BlY2lmaWNhbGx5IGluIGBsaWIvdGVzdF9obW0uY2AsIHdoaWNoLCBiYXNlZCBvbiB0aGUgY29uZmlnIEkga25vdywgaXMgY29udHJvbGxlZCBieSBgQ09ORklHX1RFU1RfSE1NYC4gQmV5b25kIHRoYXQsIGl0JiMzOTtzIGFsc28gdXRpbGl6ZWQgYnkgdGhvc2UgRFJNIGRyaXZlcnMsIG5vdXZlYXUgYW5kIGFtZGdwdSwgYW5kIGFsc28gS1ZNIG9uIHBvd2VycGMuCgpJZiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhpcyBwcm9wZXJseSwgZW5hYmxpbmcgYENPTkZJR19URVNUX0hNTWAgc2VlbXMgbGlrZSBhIHNvbGlkIGZpcnN0IHN0ZXAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBjb250cm9sbGVkIGVudmlyb25tZW50IHRvIGZvY3VzIG9uIGVpdGhlciBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGRpcmVjdGx5LCBvciBpdHMgcGFyZW50LCBgbWlncmF0ZV92bWFfc2V0dXBgLiBJIG5lZWQgdG8gZGlnIGludG8gYGxpYi90ZXN0X2htbS5jYCB0aG91Z2gsIGFuZCBzZWUgaWYgaXQgZXhwb3NlcyBhbnkgdXNhYmxlIGludGVyZmFjZSB0byB1c2VyIHNwYWNlLiBUaGF0IHdvdWxkIG1ha2UgdGhpbmdzICptdWNoKiBlYXNpZXIgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmM9MTg2MD1zdGF0aWMgdm9pZCBfX2V4aXQgaG1tX2RtaXJyb3JfZXhpdCh2b2lkKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE4NjktXG5saWIvdGVzdF9obW0uYzoxODcwOm1vZHVsZV9pbml0KGhtbV9kbWlycm9yX2luaXQpO1xubGliL3Rlc3RfaG1tLmMtMTg3MS1tb2R1bGVfZXhpdChobW1fZG1pcnJvcl9leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGhtbV9kbWlycm9yX2luaXRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBobW1fZG1pcnJvcl9pbml0YC4mIzM0OyBObyBwcmVhbWJsZSwganVzdCBzdHJhaWdodCB0byB0aGUgcG9pbnQuIFdlJiMzOTtyZSBhc3N1bWluZyB3ZSBib3RoIGtub3cgdGhlIGNvbnRleHQsIGFuZCBJJiMzOTttIG1lbnRhbGx5IGZpbGluZyB0aGlzIHVuZGVyIHNvbWV0aGluZyB0aGF0IG5lZWRzIGF0dGVudGlvbiwgcmVxdWlyZXMgdmVyaWZpY2F0aW9uLCBvciBwZXJoYXBzIGhhcyByYWlzZWQgYSBxdWVzdGlvbi4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGEgZGlzdHJpYnV0ZWQgbWlycm9yaW5nIHN5c3RlbSB0byBhIGRpYWdub3N0aWMgZnVuY3Rpb24uIFRoZSBzcGVjaWZpY3MgYXJlIGlycmVsZXZhbnQsIHRoZSBrZXkgaXMgZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MzA6XHRcdFx0Z290byBlcnJfdW5yZWc7XG4xODMxOlx0XG4xODMyOlx0XHRtZW1zZXQoZG1pcnJvcl9kZXZpY2VzLCAwLCBETUlSUk9SX05ERVZJQ0VTICogc2l6ZW9mKGRtaXJyb3JfZGV2aWNlc1swXSkpO1xuMTgzMzpcdFx0ZG1pcnJvcl9kZXZpY2VzW25kZXZpY2VzJiM0MzsmIzQzO10uem9uZV9kZXZpY2VfdHlwZSA9XG4xODM0Olx0XHRcdFx0XHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEU7XG4xODM1Olx0XHRkbWlycm9yX2RldmljZXNbbmRldmljZXMmIzQzOyYjNDM7XS56b25lX2RldmljZV90eXBlID1cbjE4MzY6XHRcdFx0XHRcdEhNTV9ETUlSUk9SX01FTU9SWV9ERVZJQ0VfUFJJVkFURTtcbjE4Mzc6XHRcdGlmIChzcG1fYWRkcl9kZXYwIFx1MDAyNlx1MDAyNiBzcG1fYWRkcl9kZXYxKSB7XG4xODM4Olx0XHRcdGRtaXJyb3JfZGV2aWNlc1tuZGV2aWNlcyYjNDM7JiM0MztdLnpvbmVfZGV2aWNlX3R5cGUgPVxuMTgzOTpcdFx0XHRcdFx0XHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX0NPSEVSRU5UO1xuMTg0MDpcdFx0XHRkbWlycm9yX2RldmljZXNbbmRldmljZXMmIzQzOyYjNDM7XS56b25lX2RldmljZV90eXBlID1cbjE4NDE6XHRcdFx0XHRcdFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9DT0hFUkVOVDtcbjE4NDI6XHRcdH1cbjE4NDM6XHRcdGZvciAoaWQgPSAwOyBpZCBcdTAwM2MgbmRldmljZXM7IGlkJiM0MzsmIzQzOykge1xuMTg0NDpcdFx0XHRyZXQgPSBkbWlycm9yX2RldmljZV9pbml0KGRtaXJyb3JfZGV2aWNlcyAmIzQzOyBpZCwgaWQpO1xuMTg0NTpcdFx0XHRpZiAocmV0KVxuMTg0NjpcdFx0XHRcdGdvdG8gZXJyX2NocmRldjtcbjE4NDc6XHRcdH1cbjE4NDg6XHRcbjE4NDk6XHRcdHByX2luZm8oXCYjMzQ7SE1NIHRlc3QgbW9kdWxlIGxvYWRlZC4gVGhpcyBpcyBvbmx5IGZvciB0ZXN0aW5nIEhNTS5cXG5cJiMzNDspO1xuMTg1MDpcdFx0cmV0dXJuIDA7XG4xODUxOlx0XG4xODUyOlx0ZXJyX2NocmRldjpcbjE4NTM6XHRcdHdoaWxlICgtLWlkIFx1MDAzZT0gMClcbjE4NTQ6XHRcdFx0ZG1pcnJvcl9kZXZpY2VfcmVtb3ZlKGRtaXJyb3JfZGV2aWNlcyAmIzQzOyBpZCk7XG4xODU1Olx0XHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZG1pcnJvcl9kZXYsIERNSVJST1JfTkRFVklDRVMpO1xuMTg1NjpcdGVycl91bnJlZzpcbjE4NTc6XHRcdHJldHVybiByZXQ7XG4xODU4Olx0fVxuMTg1OTpcdFxuMTg2MDpcdHN0YXRpYyB2b2lkIF9fZXhpdCBobW1fZG1pcnJvcl9leGl0KHZvaWQpXG4xODYxOlx0e1xuMTg2MjpcdFx0aW50IGlkO1xuMTg2MzpcdFxuMTg2NDpcdFx0Zm9yIChpZCA9IDA7IGlkIFx1MDAzYyBETUlSUk9SX05ERVZJQ0VTOyBpZCYjNDM7JiM0MzspXG4xODY1Olx0XHRcdGlmIChkbWlycm9yX2RldmljZXNbaWRdLnpvbmVfZGV2aWNlX3R5cGUpXG4xODY2Olx0XHRcdFx0ZG1pcnJvcl9kZXZpY2VfcmVtb3ZlKGRtaXJyb3JfZGV2aWNlcyAmIzQzOyBpZCk7XG4xODY3Olx0XHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZG1pcnJvcl9kZXYsIERNSVJST1JfTkRFVklDRVMpO1xuMTg2ODpcdH1cbjE4Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4OTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgTW9kdWxlIEluaXRpYWxpemF0aW9uIC0gRGl2aW5nIERlZXAqKgoKT2theSwgc28gdGhlIHN5c3RlbSBoYXMgcmVjb2duaXplZCBteSBwcmVzZW5jZTsgaXQmIzM5O3MgcmVnaXN0ZXJlZCBhIGNoYXJhY3RlciBkZXZpY2UsIHdoaWNoIGlzIHRoZSBmaXJzdCBzdGVwLiBOb3csIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB3aGF0IHRoZSBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFdoYXQgZG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIGVudGFpbD8gSXMgaXQgc2V0dGluZyB1cCBtZW1vcnkgc3RydWN0dXJlcywgYWxsb2NhdGluZyByZXNvdXJjZXMsIHJlZ2lzdGVyaW5nIGludGVycnVwdCBoYW5kbGVycywgb3IgcGVyaGFwcyBjb25maWd1cmluZyBETUEgY2hhbm5lbHM/IEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWwgc3RhdGUgZXN0YWJsaXNoZWQgYnkgdGhpcyBmdW5jdGlvbiwgYmVjYXVzZSB0aGF0IGluaXRpYWwgc3RhdGUgd2lsbCBkZWZpbmUgdGhlIG1vZHVsZSYjMzk7cyBmdXR1cmUgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2RldmljZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmM9MTc3Mj1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5saWIvdGVzdF9obW0uYy0xNzc4LVxubGliL3Rlc3RfaG1tLmM6MTc3OTpzdGF0aWMgaW50IGRtaXJyb3JfZGV2aWNlX2luaXQoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLCBpbnQgaWQpXG5saWIvdGVzdF9obW0uYy0xNzgwLXtcbi0tXG5saWIvdGVzdF9obW0uYz0xODIxPXN0YXRpYyBpbnQgX19pbml0IGhtbV9kbWlycm9yX2luaXQodm9pZClcbi0tXG5saWIvdGVzdF9obW0uYy0xODQzLVx0Zm9yIChpZCA9IDA7IGlkIFx1MDAzYyBuZGV2aWNlczsgaWQmIzQzOyYjNDM7KSB7XG5saWIvdGVzdF9obW0uYzoxODQ0Olx0XHRyZXQgPSBkbWlycm9yX2RldmljZV9pbml0KGRtaXJyb3JfZGV2aWNlcyAmIzQzOyBpZCwgaWQpO1xubGliL3Rlc3RfaG1tLmMtMTg0NS1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgZG1pcnJvcl9kZXZpY2VfaW5pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gdGhpcyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBpcyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeSwgYnV0IEkgd2FudCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGZvciB0aGUgaGlnaC1sZXZlbCBjb250cm9sIGZsb3c6IFdoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50PyBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBpbml0aWFsaXplZD8gQW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBvciBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQ/IEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIHRoZSBkZXZpY2UgbWlycm9yIGRyaXZlciwgc28gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHJlc291cmNlIGFsbG9jYXRpb24sIHJlZ2lzdGVyIG1hcHBpbmcsIGFuZCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaGFyZHdhcmUtc3BlY2lmaWMgcGFyYW1ldGVycyBpdCYjMzk7cyB0YWtpbmcgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgZGV2aWNlIGluaXQgZnVuY3Rpb24sIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB3aGF0IHJlc291cmNlcyBpdCYjMzk7cyB0cnlpbmcgdG8gbWFuYWdlLiBJIGFsc28gZXhwZWN0IGEgbnVtYmVyIG9mIGNoZWNrcy4gQXJlIHdlIGRvaW5nIGEgY2hlY2sgdG8gc2VlIGlmIHdlJiMzOTt2ZSBhbHJlYWR5IGRvbmUgYW4gaW5pdGlhbGl6YXRpb24/IFRoYXQmIzM5O3MgY29tbW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBoZXJlLiBJJiMzOTtsbCBhbHNvIGJlIHNjYW5uaW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgbG9va2luZyBmb3Igd2hlcmUgaXQgaXMgd3JpdGluZyBhbmQgcmVhZGluZyBkYXRhIGZyb20gcmVnaXN0ZXJzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIHZlcnNpb25zIG9mIHRoZSB0YXJnZXQgZGV2aWNlLiBBcmUgdGhlcmUgY29uZGl0aW9uYWwgYmxvY2tzIGJhc2VkIG9uIGRldmljZSBJRHMgb3IgY2FwYWJpbGl0aWVzPyBBbnkgdXNlIG9mIHBsYXRmb3JtLXNwZWNpZmljIG1hY3Jvcz8gSSBhbHNvIHdhbnQgdG8gcGF5IGNhcmVmdWwgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IGlzIGhhbmRsZWQgY29ycmVjdGx5LCBzaW5jZSB0aGlzIGlzIGEga2VybmVsIGZ1bmN0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWZlcmVuY2VzIHRvIG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBBbmQgb2YgY291cnNlLCBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG93ZXIgbWFuYWdlbWVudC4gSXMgaXQgc2V0dGluZyB1cCBhbnkgY2xvY2tzIG9yIHBvd2VyIGRvbWFpbnM/IEFueSBzbGVlcCBvciB3YWtlLXVwIGNhbGxzPyBXaGF0IGlzIHRoZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gVGhlIG92ZXJhbGwgZ29hbCBpcyB0byBmb3JtIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb24sIGFuZCBob3cgcm9idXN0IGFuZCBlZmZpY2llbnQgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3Nzk6XHRzdGF0aWMgaW50IGRtaXJyb3JfZGV2aWNlX2luaXQoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLCBpbnQgaWQpXG4xNzgwOlx0e1xuMTc4MTpcdFx0ZGV2X3QgZGV2O1xuMTc4MjpcdFx0aW50IHJldDtcbjE3ODM6XHRcbjE3ODQ6XHRcdGRldiA9IE1LREVWKE1BSk9SKGRtaXJyb3JfZGV2KSwgaWQpO1xuMTc4NTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZtZGV2aWNlLVx1MDAzZWRldm1lbV9sb2NrKTtcbjE3ODY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1kZXZpY2UtXHUwMDNlbG9jayk7XG4xNzg3Olx0XG4xNzg4Olx0XHRjZGV2X2luaXQoXHUwMDI2bWRldmljZS1cdTAwM2VjZGV2aWNlLCBcdTAwMjZkbWlycm9yX2ZvcHMpO1xuMTc4OTpcdFx0bWRldmljZS1cdTAwM2VjZGV2aWNlLm93bmVyID0gVEhJU19NT0RVTEU7XG4xNzkwOlx0XHRtZGV2aWNlLVx1MDAzZWRldmljZS5yZWxlYXNlID0gZG1pcnJvcl9kZXZpY2VfcmVsZWFzZTtcbjE3OTE6XHRcbjE3OTI6XHRcdGRldmljZV9pbml0aWFsaXplKFx1MDAyNm1kZXZpY2UtXHUwMDNlZGV2aWNlKTtcbjE3OTM6XHRcdG1kZXZpY2UtXHUwMDNlZGV2aWNlLmRldnQgPSBkZXY7XG4xNzk0Olx0XG4xNzk1Olx0XHRyZXQgPSBkZXZfc2V0X25hbWUoXHUwMDI2bWRldmljZS1cdTAwM2VkZXZpY2UsIFwmIzM0O2htbV9kbWlycm9yJXVcJiMzNDssIGlkKTtcbjE3OTY6XHRcdGlmIChyZXQpXG4xNzk3Olx0XHRcdGdvdG8gcHV0X2RldmljZTtcbjE3OTg6XHRcbjE3OTk6XHRcdC8qIEJ1aWxkIGEgbGlzdCBvZiBmcmVlIFpPTkVfREVWSUNFIHN0cnVjdCBwYWdlcyAqL1xuMTgwMDpcdFx0cmV0ID0gZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhtZGV2aWNlLCBOVUxMLCBmYWxzZSk7XG4xODAxOlx0XHRpZiAocmV0KVxuMTgwMjpcdFx0XHRnb3RvIHB1dF9kZXZpY2U7XG4xODAzOlx0XG4xODA0Olx0XHRyZXQgPSBjZGV2X2RldmljZV9hZGQoXHUwMDI2bWRldmljZS1cdTAwM2VjZGV2aWNlLCBcdTAwMjZtZGV2aWNlLVx1MDAzZWRldmljZSk7XG4xODA1Olx0XHRpZiAocmV0KVxuMTgwNjpcdFx0XHRnb3RvIHB1dF9kZXZpY2U7XG4xODA3Olx0XG4xODA4Olx0XHRyZXR1cm4gMDtcbjE4MDk6XHRcbjE4MTA6XHRwdXRfZGV2aWNlOlxuMTgxMTpcdFx0cHV0X2RldmljZShcdTAwMjZtZGV2aWNlLVx1MDAzZWRldmljZSk7XG4xODEyOlx0XHRyZXR1cm4gcmV0O1xuMTgxMzpcdH1cbjE4MTQ6XHRcbjE4MTU6XHRzdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmUoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlKVxuMTgxNjpcdHtcbjE4MTc6XHRcdGNkZXZfZGV2aWNlX2RlbChcdTAwMjZtZGV2aWNlLVx1MDAzZWNkZXZpY2UsIFx1MDAyNm1kZXZpY2UtXHUwMDNlZGV2aWNlKTtcbjE4MTg6XHRcdHB1dF9kZXZpY2UoXHUwMDI2bWRldmljZS1cdTAwM2VkZXZpY2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQyNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTZXR1cCBvZiBgZG1pcnJvcl9mb3BzYCoqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBqdW1waW5nIHJpZ2h0IGludG8gc2V0dGluZyB1cCBgZG1pcnJvcl9mb3BzYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkga25vdyBgZG1pcnJvcmAgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gZGF0YSBtaXJyb3Jpbmcgb3IgcmVwbGljYXRpb24sIGFuZCB0aGUgJiMzNDtmb3BzJiMzNDsgc3VmZml4IGFsbW9zdCBjZXJ0YWlubHkgaW5kaWNhdGVzIGZpbGUgb3BlcmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZHMgdW5kZXJzdGFuZGluZyB0aGUgc3RydWN0dXJlIHRoYXQmIzM5O3MgYmVpbmcgc2V0IHVwIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBkYXRhIHJlcGxpY2F0aW9uIHN0cmF0ZWd5LiBMZXQmIzM5O3MgZGlnIGludG8gd2hhdCBgZG1pcnJvcl9mb3BzYCAqYWN0dWFsbHkqIGlzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlIGBkbWlycm9yX2ZvcHNgIGRhdGEgc3RydWN0dXJlLiBJJiMzOTttIGV4cGVjdGluZyBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb24gcG9pbnRlcnMsIGltcGxlbWVudGluZyB0aGUgY29yZSBmaWxlLXN5c3RlbSBsZXZlbCBpbnRlcmFjdGlvbiBmb3IgdGhlIG1pcnJvcmluZyBwcm9jZXNzLiBTcGVjaWZpYyB0aGluZ3MgSSYjMzk7bSBhbnRpY2lwYXRpbmcgYXJlIG9wZXJhdGlvbnMgbGlrZSBgb3BlbmAsIGByZWFkYCwgYHdyaXRlYCwgYGNsb3NlYCwgYGdldGF0dHJgLCBgbWtkaXJgLCBgcm1kaXJgLCBldGMuLCB0aGF0IG5lZWQgdG8gYmUgaW50ZXJjZXB0ZWQgb3IgY3VzdG9taXplZCBmb3IgZGF0YSBjb25zaXN0ZW5jeSBhbmQgY29uZmxpY3QgcmVzb2x1dGlvbiBpbiBhIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBJJiMzOTttIGFsc28gcmVhZHkgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBob3cgdGhpcyBzdHJ1Y3R1cmUgbWlnaHQgaW50ZXJhY3Qgd2l0aCB1bmRlcmx5aW5nIGJsb2NrIGRldmljZXMsIG5ldHdvcmsgcHJvdG9jb2xzLCBvciBvdGhlciBzdG9yYWdlIGxheWVycy4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2ZvcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz0xNTc9c3RhdGljIHZvaWQgZG1pcnJvcl9ib3VuY2VfZmluaShzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgKmJvdW5jZSlcbi0tXG5saWIvdGVzdF9obW0uYy0xNjEtXG5saWIvdGVzdF9obW0uYzoxNjI6c3RhdGljIGludCBkbWlycm9yX2ZvcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbmxpYi90ZXN0X2htbS5jLTE2My17XG4tLVxubGliL3Rlc3RfaG1tLmM9MTg4PXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX2V2aWN0X2NodW5rKHN0cnVjdCBkbWlycm9yX2NodW5rICpjaHVuaylcbi0tXG5saWIvdGVzdF9obW0uYy0yMzctXG5saWIvdGVzdF9obW0uYzoyMzg6c3RhdGljIGludCBkbWlycm9yX2ZvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbmxpYi90ZXN0X2htbS5jLTIzOS17XG4tLVxubGliL3Rlc3RfaG1tLmM9MTQ4MT1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmVfY2h1bmtzKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcbi0tXG5saWIvdGVzdF9obW0uYy0xNTEyLVxubGliL3Rlc3RfaG1tLmM6MTUxMzpzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG5saWIvdGVzdF9obW0uYy0xNTE0LVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgY29tbWFuZCxcbi0tXG5saWIvdGVzdF9obW0uYy0xNTg3LVxubGliL3Rlc3RfaG1tLmM6MTU4ODpzdGF0aWMgaW50IGRtaXJyb3JfZm9wc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmxpYi90ZXN0X2htbS5jLTE1ODkte1xuLS1cbmxpYi90ZXN0X2htbS5jLTE2MTAtXG5saWIvdGVzdF9obW0uYzoxNjExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRtaXJyb3JfZm9wcyA9IHtcbmxpYi90ZXN0X2htbS5jOjE2MTI6XHQub3Blblx0XHQ9IGRtaXJyb3JfZm9wc19vcGVuLFxubGliL3Rlc3RfaG1tLmM6MTYxMzpcdC5yZWxlYXNlXHQ9IGRtaXJyb3JfZm9wc19yZWxlYXNlLFxubGliL3Rlc3RfaG1tLmM6MTYxNDpcdC5tbWFwXHRcdD0gZG1pcnJvcl9mb3BzX21tYXAsXG5saWIvdGVzdF9obW0uYzoxNjE1Olx0LnVubG9ja2VkX2lvY3RsID0gZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsLFxubGliL3Rlc3RfaG1tLmMtMTYxNi1cdC5sbHNlZWtcdFx0PSBkZWZhdWx0X2xsc2Vlayxcbi0tXG5saWIvdGVzdF9obW0uYz0xNzc5PXN0YXRpYyBpbnQgZG1pcnJvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsIGludCBpZClcbi0tXG5saWIvdGVzdF9obW0uYy0xNzg3LVxubGliL3Rlc3RfaG1tLmM6MTc4ODpcdGNkZXZfaW5pdChcdTAwMjZtZGV2aWNlLVx1MDAzZWNkZXZpY2UsIFx1MDAyNmRtaXJyb3JfZm9wcyk7XG5saWIvdGVzdF9obW0uYy0xNzg5LVx0bWRldmljZS1cdTAwM2VjZGV2aWNlLm93bmVyID0gVEhJU19NT0RVTEU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCBIYW5kbGVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGNvbW1hbmQgaGFuZGxpbmcsIHdoaWNoIG1lYW5zIGl04oCZcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRtLW1pcnJvciBkZXZpY2UgaW50ZXJhY3RzIHdpdGggdXNlcnNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgdmFyaWV0eSBvZiBjb21tYW5kcyBpdCBwcm9jZXNzZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzdXBwb3J0ZWQgb3BlcmF0aW9ucy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IGFsbG93IG1lIHRvIHN0YXJ0IGNvbnNpZGVyaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgYW55IGludGVyZXN0aW5nIGNvbnRyb2wgZmxvd3Mgd2l0aGluIHRoZSBtaXJyb3IgaW1wbGVtZW50YXRpb24uIExldOKAmXMgc3RhcnQgcGlja2luZyBpdCBhcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUxMzpcdHN0YXRpYyBsb25nIGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbjE1MTQ6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGNvbW1hbmQsXG4xNTE1Olx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuMTUxNjpcdHtcbjE1MTc6XHRcdHZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnO1xuMTUxODpcdFx0c3RydWN0IGhtbV9kbWlycm9yX2NtZCBjbWQ7XG4xNTE5Olx0XHRzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcjtcbjE1MjA6XHRcdGludCByZXQ7XG4xNTIxOlx0XG4xNTIyOlx0XHRkbWlycm9yID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4xNTIzOlx0XHRpZiAoIWRtaXJyb3IpXG4xNTI0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTUyNTpcdFxuMTUyNjpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmNtZCwgdWFyZywgc2l6ZW9mKGNtZCkpKVxuMTUyNzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE1Mjg6XHRcbjE1Mjk6XHRcdGlmIChjbWQuYWRkciBcdTAwMjYgflBBR0VfTUFTSylcbjE1MzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTMxOlx0XHRpZiAoY21kLmFkZHIgXHUwMDNlPSAoY21kLmFkZHIgJiM0MzsgKGNtZC5ucGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKSlcbjE1MzI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTMzOlx0XG4xNTM0Olx0XHRjbWQuY3BhZ2VzID0gMDtcbjE1MzU6XHRcdGNtZC5mYXVsdHMgPSAwO1xuMTUzNjpcdFxuMTUzNzpcdFx0c3dpdGNoIChjb21tYW5kKSB7XG4xNTM4Olx0XHRjYXNlIEhNTV9ETUlSUk9SX1JFQUQ6XG4xNTM5Olx0XHRcdHJldCA9IGRtaXJyb3JfcmVhZChkbWlycm9yLCBcdTAwMjZjbWQpO1xuMTU0MDpcdFx0XHRicmVhaztcbjE1NDE6XHRcbjE1NDI6XHRcdGNhc2UgSE1NX0RNSVJST1JfV1JJVEU6XG4xNTQzOlx0XHRcdHJldCA9IGRtaXJyb3Jfd3JpdGUoZG1pcnJvciwgXHUwMDI2Y21kKTtcbjE1NDQ6XHRcdFx0YnJlYWs7XG4xNTQ1Olx0XG4xNTQ2Olx0XHRjYXNlIEhNTV9ETUlSUk9SX01JR1JBVEVfVE9fREVWOlxuMTU0NzpcdFx0XHRyZXQgPSBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKGRtaXJyb3IsIFx1MDAyNmNtZCk7XG4xNTQ4Olx0XHRcdGJyZWFrO1xuMTU0OTpcdFxuMTU1MDpcdFx0Y2FzZSBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZUzpcbjE1NTE6XHRcdFx0cmV0ID0gZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShkbWlycm9yLCBcdTAwMjZjbWQpO1xuMTU1MjpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMTMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYGhtbV9kbWlycm9yYCBDaGFyYWN0ZXIgRGV2aWNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVZgIGFuZCBgSE1NX0RNSVJST1JfTUlHUkFURV9UT19TWVNgLiBUaG9zZSBjYWxscywgd2hpY2ggYXJlIGltcG9ydGFudCBiZWNhdXNlIHRoZXkmIzM5O3JlIGxpbmtlZCB0byB1c2VyIHNwYWNlLCBhcmUgY2FsbGluZyBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAgYW5kIGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYC4gVGhvc2UsIGluIHR1cm4sIGFyZSBjYWxsaW5nIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIEltbWVkaWF0ZWx5LCB0aGlzIHNjcmVhbXMgJiMzNDtmdXp6YWJsZSEmIzM0OyBJdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgaG1tX2RtaXJyb3JgIGNoYXJhY3RlciBkZXZpY2UuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGFjY2Vzc2libGUgaW4gdGhlIGN1cnJlbnQgc3l6a2FsbGVyIGNvbmZpZz8KCkkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19URVNUX0hNTWAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgYSB0ZXN0IG1vZHVsZSwgc28gaXQgY291bGQgdmVyeSB3ZWxsIGJlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIOKAkyBlaXRoZXIgYGxpYi9LY29uZmlnLmRlYnVnYCBvciBgbW0vS2NvbmZpZ2Ag4oCTIHRvIGJlIGNlcnRhaW4gaWYgaXQmIzM5O3MgdGhlcmUuIFRoYXQmIzM5O2xsIGJlIHRoZSBuZXh0IHN0ZXAgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLiBJZiBpdCBpcyBlbmFibGVkLCB0aGlzIGNvdWxkIGJlIGEgcHJvbWlzaW5nIGF2ZW51ZSBmb3IgZGlzY292ZXJpbmcgc29tZSBrZXJuZWwgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MzMxOD1jb25maWcgVEVTVF9NRU1JTklUXG4tLVxubGliL0tjb25maWcuZGVidWctMzMyNS1cbmxpYi9LY29uZmlnLmRlYnVnOjMzMjY6Y29uZmlnIFRFU1RfSE1NXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI3LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4tLVxubGliL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfVEVTVF9MT0NLVVApICYjNDM7PSB0ZXN0X2xvY2t1cC5vXG5saWIvTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19URVNUX0hNTSkgJiM0Mzs9IHRlc3RfaG1tLm9cbmxpYi9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vXG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaC02LSAqL1xubGliL3Rlc3RfaG1tX3VhcGkuaDo3OiNpZm5kZWYgX0xJQl9URVNUX0hNTV9VQVBJX0hcbmxpYi90ZXN0X2htbV91YXBpLmg6ODojZGVmaW5lIF9MSUJfVEVTVF9ITU1fVUFQSV9IXG5saWIvdGVzdF9obW1fdWFwaS5oLTktXG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaD03ND1lbnVtIHtcbi0tXG5saWIvdGVzdF9obW1fdWFwaS5oLTc5LVxubGliL3Rlc3RfaG1tX3VhcGkuaDo4MDojZW5kaWYgLyogX0xJQl9URVNUX0hNTV9VQVBJX0ggKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9NT1DT05GSUdfREVWSUNFX1BSSVZBVEU9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnOjY6Q09ORklHX1RFU1RfSE1NPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZy03LUNPTkZJR19HVVBfVEVTVD15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2g9MjE9Y2hlY2tfdGVzdF9yZXF1aXJlbWVudHMoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoLTM1LVx0XHRlY2hvIFwmIzM0OyQwOiBZb3UgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbDpcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoOjM2Olx0XHRlY2hvIFwmIzM0O0NPTkZJR19URVNUX0hNTT1tXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0zNy1cdFx0ZXhpdCAka3NmdF9za2lwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTU0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHJldm9sdmVzIGFyb3VuZCBgQ09ORklHX1RFU1RfSE1NYC4gSXQgc2VlbXMgbGlrZSB0aGF0JiMzOTtzIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBoZXJlLiBUaGUgcmVsZXZhbnQgY29kZSBjaGFuZ2UgaXMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGZpbGUgaXMgb25seSBjb21waWxlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHdlJiMzOTt2ZSBnb3Qgc29tZXRoaW5nIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgb3IgYENPTkZJR19ERVZJQ0VfQ09IRVJFTlRgIGVuYWJsZWQuIFJhdGhlciB0aGFuIHJlbHlpbmcgb24gZ3Vlc3N3b3JrLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7bGwgcXVpY2tseSB0ZWxsIHRoZSBzdG9yeS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDg5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYCBpbiBmcm9udCBvZiBtZS4gVGhhdCYjMzk7cyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaXRlbSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTXkgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8gdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIHdpdGhpbiB0aGUgc3lzdGVtIHNlbGVjdHMgb3IgdHJpZ2dlcnMgYERFVklDRV9NSUdSQVRJT05gLiBVbmRlcnN0YW5kaW5nIHRoZSB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgaGVyZS4gSXQmIzM5O3MgdGhlIG9ubHkgd2F5IHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGZpbmQgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWSUNFX01JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY5Nj1jb25maWcgTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02OTktXG5tbS9LY29uZmlnOjcwMDpjb25maWcgREVWSUNFX01JR1JBVElPTlxubW0vS2NvbmZpZy03MDEtXHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4tLVxubW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmN5IENvbmZsaWN0cyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBpc3N1ZSBoaW5nZXMgb24gYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBjcnVjaWFsIGVsZW1lbnRzIGluIHRoaXMgc2NlbmFyaW8uIEFuZCB0aGUgdHJpZ2dlciBmb3IgdGhlIHpvbmUgZGV2aWNlIHNldHVwIHNlZW1zIHRvIGJlIGBURVNUX0hNTWAuIEhtbW0uLi4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVyYWN0aW9uIGFuZCB0aGUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgVEVTVF9ITU1gIGFuZCBgWk9ORV9ERVZJQ0VgIGF0IGEgZGVlcGVyIGxldmVsOyBzcGVjaWZpY2FsbHksIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgYXJlIGxpbmtpbmcgdGhlbT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtcmVmZXJlbmNlcywgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGhpbnRzIGFib3V0IHdoZW4gYW5kIHdoeSBgWk9ORV9ERVZJQ0VgIG1pZ2h0IGJlIHNlbGVjdGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIGBURVNUX0hNTWAuIEEgcXVpY2sgc2NhbiBzaG91bGQgY2xhcmlmeSB0aGUgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGVidWcgY29uZmlndXJhdGlvbiBiZXR0ZXIuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSwgdGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgZmVhdHVyZSBlbmFibGVtZW50LiBJJiMzOTttIHRoaW5raW5nIHRoYXQgbGluZSAzMzI2IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBsb2NhdGUgYSBzcGVjaWZpYyBkZWJ1ZyBmZWF0dXJlLCBvciBwZXJoYXBzIGEgY29uZGl0aW9uYWwgc2VjdGlvbiByZWxhdGluZyB0byBkZWJ1ZyBmdW5jdGlvbmFsaXRpZXMgaW4gdGhlIGtlcm5lbC4gVGhpcyBmaWxlIGNvbnRhaW5zIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGxpbmUgMzMyNiBzaG91bGQgcGlucG9pbnQgYSBzcGVjaWZpYyBjb25maWcgb3B0aW9uIG9yIGEgbG9naWNhbCBibG9jayBvZiBvcHRpb25zIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgc3RhdGUsIGFuZCBmaWd1cmUgb3V0IGhvdyB0byBtb2RpZnkgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBkZWJ1ZyBvdXRwdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMjA6XHRcdGhlbHBcbjMzMjE6XHRcdCAgVGVzdCBpZiB0aGUga2VybmVsIGlzIHplcm8taW5pdGlhbGl6aW5nIGhlYXAgYW5kIHBhZ2UgYWxsb2NhdGlvbnMuXG4zMzIyOlx0XHQgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZXN0IGluaXRfb25fYWxsb2MgYW5kIGluaXRfb25fZnJlZSBmZWF0dXJlcy5cbjMzMjM6XHRcbjMzMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzMjU6XHRcbjMzMjY6XHRjb25maWcgVEVTVF9ITU1cbjMzMjc6XHRcdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuMzMyODpcdFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuMzMyOTpcdFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxuMzMzMDpcdFx0c2VsZWN0IEhNTV9NSVJST1JcbjMzMzE6XHRcdHNlbGVjdCBNTVVfTk9USUZJRVJcbjMzMzI6XHRcdGhlbHBcbjMzMzM6XHRcdCAgVGhpcyBpcyBhIHBzZXVkbyBkZXZpY2UgZHJpdmVyIHNvbGVseSBmb3IgdGVzdGluZyBITU0uXG4zMzM0Olx0XHQgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEhNTSB0ZXN0IG1vZHVsZS5cbjMzMzU6XHRcdCAgRG9pbmcgc28gd2lsbCBhbGxvdyB5b3UgdG8gcnVuIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Qvdm0vaG1tLXRlc3RzLlxuMzMzNjpcdFxuMzMzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMzMzODpcdFxuMzMzOTpcdGNvbmZpZyBURVNUX0ZSRUVfUEFHRVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3MjAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBxdWVzdGlvbiBoYW5ncyBvbiB0aGUgdmFsdWUgb2YgYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBERVZJQ0VfUFJJVkFURWAgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBjb250cm9scy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgc291cmNlLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGZvciBgREVWSUNFX1BSSVZBVEVgIHdpdGhpbiBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWSUNFX1BSSVZBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI2Mj1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4tLVxubW0vS2NvbmZpZy0xMjY0LVxubW0vS2NvbmZpZzoxMjY1OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjY2LVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5ODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBsaW5lIDEyNjUuIFRoYXQgYXJlYSBsaWtlbHkgaG9sZHMgc29tZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBiYXNlZCBvbiBteSBleHBlcmllbmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgYmVpbmcgY29udHJvbGxlZCBvciB3aGF0IHNwZWNpZmljIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbHMgYXJlIGF0IHBsYXkuIEl0JiMzOTtzIGEgcXVpY2sgYW5kIHRhcmdldGVkIGFwcHJvYWNoOyBubyBuZWVkIHRvIHdhc3RlIHRpbWUgc2Nhbm5pbmcgdGhlIHdob2xlIGZpbGUgd2hlbiBJIGhhdmUgYSBzcGVjaWZpYyBsb2NhdGlvbiB0byBjaGVjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgbGluZSwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHJldmVhbC4gSXQmIzM5O3MgYSBrZXkgc3BvdCB0byBkaWcgaW50byEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTI2MTpcdFxuMTI2MjpcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbjEyNjM6XHRcdGJvb2xcbjEyNjQ6XHRcbjEyNjU6XHRjb25maWcgREVWSUNFX1BSSVZBVEVcbjEyNjY6XHRcdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4xMjY3Olx0XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4xMjY4Olx0XHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4xMjY5Olx0XG4xMjcwOlx0XHRoZWxwXG4xMjcxOlx0XHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXG4xMjcyOlx0XHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcbjEyNzM6XHRcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxuMTI3NDpcdFxuMTI3NTpcdGNvbmZpZyBWTUFQX1BGTlxuMTI3NjpcdFx0Ym9vbFxuMTI3NzpcdFxuMTI3ODpcdGNvbmZpZyBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcbjEyNzk6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIENvZGUgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGxpa2UgYFRFU1RfSE1NYCBpcywgYXQgaXRzIGNvcmUsIGRlcGVuZGVudCBvbiBgREVWSUNFX1BSSVZBVEVgLiBBbmQgdGhhdCBkZXBlbmRlbmN5LCBpbiB0dXJuLCBuZWVkcyBgWk9ORV9ERVZJQ0VgIHRvIGJlIGFjdGl2ZS4gR290IGl0LiBTbyBmYXIsIHNvIGdvb2QuIFRoZW4sIGBERVZJQ0VfTUlHUkFUSU9OYCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgY29tYmluYXRpb24gb2YgYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAuIFRoaXMgbWVhbnMsIHRvIGdldCBgREVWSUNFX01JR1JBVElPTmAgd29ya2luZywgSSBuZWVkIGJvdGggb2YgdGhvc2UgY29tcG9uZW50cy4KClRoZXJlZm9yZSwgaWYgSSBzZXQgYWxsIG9mIHRob3NlIHRoaW5ncyAtIGBURVNUX0hNTWAsIGBERVZJQ0VfUFJJVkFURWAsIGBNSUdSQVRJT05gLCBhbmQgYFpPTkVfREVWSUNFYCAtIHRvIGJlIGFjdGl2ZSwgdGhlIHJlbGV2YW50IGNvZGUgc2hvdWxkIGJlIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0LCBob2xkIG9uLi4uIGBNSUdSQVRJT05gLi4uIEkgKnRoaW5rKiBJIHJlY2FsbCB0aGF0IGJlaW5nIGVuYWJsZWQgcXVpdGUgYSBiaXQgaW4gdGhpcyBlbnZpcm9ubWVudC4gSnVzdCB0byBiZSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBgTUlHUkFUSU9OYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBsb2dpYyBpcyBzb3VuZCBoZXJlLCBhbmQgdGhhdCBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgb2J2aW91cywgcHJlLWV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk1LVxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODk5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCAtIExpbmUgNjk2KioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBzcGVjaWZpY2FsbHkgbGluZSA2OTYgaW4gYG1tL0tjb25maWdgLiBSaWdodCwgYG1tL0tjb25maWdgIGlzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBLbm93aW5nIHRoaXMsIEkgZXhwZWN0IHRvIGZpbmQgYSBkZXNjcmlwdGlvbiBhbmQgbWF5YmUgYW4gYGlmYC9gYm9vbGAgYmxvY2sgd2l0aCBhIGRlcGVuZGVuY3kgb3IgZGVmYXVsdC4gSSBhbSBsb29raW5nIGZvciBhIHNwZWNpZmljIHZhcmlhYmxlIG9yIG9wdGlvbiB0byB0d2Vhay4gSSB3aWxsIHJlYWQgYXJvdW5kIHRoZSBnaXZlbiBsaW5lLiBUaGUgY29udGV4dCBhcm91bmQgbGluZSA2OTYgaXMgd2hhdCB3aWxsIHJldmVhbCB3aGF0IHRoaXMgbW9kdWxlIGRvZXMuIEZyb20gdGhlcmUgSSBtYXkgYmUgYWJsZSB0byBkcmF3IGFuIGludGVsbGlnZW50IGNvbmNsdXNpb24gcmVnYXJkaW5nIHRoZSBjdXJyZW50IGlzc3VlLiBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjkwOlx0XHRoZWxwXG4gNjkxOlx0XHQgIFN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBvZiBwYWdlcyB0byBvdGhlciBOVU1BIG5vZGVzLCBhdmFpbGFibGUgdG9cbiA2OTI6XHRcdCAgdXNlciBzcGFjZSB0aHJvdWdoIGludGVyZmFjZXMgbGlrZSBtaWdyYXRlX3BhZ2VzKCksIG1vdmVfcGFnZXMoKSxcbiA2OTM6XHRcdCAgYW5kIG1iaW5kKCkuIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFnZVxuIDY5NDpcdFx0ICBkZW1vdGlvbiBmb3IgbWVtb3J5IHRpZXJpbmcuXG4gNjk1Olx0XG4gNjk2Olx0Y29uZmlnIE1JR1JBVElPTlxuIDY5NzpcdFx0Ym9vbFxuIDY5ODpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA2OTk6XHRcbiA3MDA6XHRjb25maWcgREVWSUNFX01JR1JBVElPTlxuIDcwMTpcdFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuIDcwMjpcdFxuIDcwMzpcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbiA3MDQ6XHRcdGJvb2xcbiA3MDU6XHRcbiA3MDY6XHRjb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcbiA3MDc6XHRcdGJvb2xcbiA3MDg6XHRcbiA3MDk6XHRjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MDQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IGluIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBtaWdyYXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIHN5emthbGxlciBmcmFtZXdvcmsuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGBNSUdSQVRJT05gIGlzIGVzc2VudGlhbGx5IGEgYm9vbGVhbiBmbGFnLiBJdCYjMzk7cyB0cmlnZ2VyZWQgYnkgYSB3aG9sZSBzdWl0ZSBvZiBvdGhlciwgbW9yZSBncmFudWxhciBvcHRpb25zIOKAkyB0aGluZ3MgbGlrZSBgTlVNQV9NSUdSQVRJT05gLCBgQ01BYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgZXZlbiBgQ09NUEFDVElPTmAuIFRoYXQgbWVhbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHN5emthbGxlciYjMzk7cyBjb25maWd1cmF0aW9uLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBgTUlHUkFUSU9OYCBpcywgaW4gZmFjdCwgZW5hYmxlZC4gSXTigJlzIGJha2VkIGludG8gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHNwZWNpZmljIG1lbW9yeSByZWdpb25zIGFuZCBkZXZpY2VzLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBpbnZlc3RpZ2F0ZSB0aGUgYFpPTkVfREVWSUNFYCBzZXR0aW5ncy4gVGhpcyBzaG91bGQgc2hlZCBsaWdodCBvbiBob3cgZGV2aWNlIG1lbW9yeSBpcyBtYW5hZ2VkIGluIHJlbGF0aW9uIHRvIHRoaXMgZ2VuZXJhbCBtaWdyYXRpb24gY2FwYWJpbGl0eSB0aGF0IGFwcGVhcnMgdG8gYmUgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc2NwoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiA5NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCBGaXgqKgoKT2theSwgc28gYFpPTkVfREVWSUNFYCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gc3l6a2FsbGVyLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIHdlIGNhbiBmb2N1cyBvbiBlbmFibGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nIHRoZSBidWcgZml4IGluIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIFNpbmNlIGBaT05FX0RFVklDRWAgaXMgc2V0LCB3ZSBuZWVkIHRvIGVuYWJsZSBgVEVTVF9ITU1gIHRvIGxldmVyYWdlIHRoZSB0ZXN0IG1vZHVsZS4gIEkgc2VlIHRoYXQgYFRFU1RfSE1NYCBpcyBhIHRyaXN0YXRlLCBzbyBsZXQmIzM5O3MgYWRkIGl0IHRvIGBFbmFibGVDb25maWdzYC4gQnV0IHdhaXQsIGBURVNUX0hNTWAgbmVlZHMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIHNpbmNlIHRoYXQmIzM5O3MgdXN1YWxseSBlbmFibGVkLCBsZXQmIzM5O3MgYXNzdW1lIGl0IGlzIGFuZCBhZGQgYFRFU1RfSE1NYCBhcyBhbiBlbmFibGVkIGNvbmZpZy4gYERFVklDRV9QUklWQVRFYCBpcyBhbHNvIG5lZWRlZCwgYXMgYFRFU1RfSE1NYCBkZXBlbmRzIG9uIGl0IGFzIHdlbGwuIEFuZCBgREVWSUNFX1BSSVZBVEVgIGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gU28sIHRoZSBmaW5hbCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBbJiMzNDtURVNUX0hNTSYjMzQ7LCAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0O11gLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZm9jdXMgc3ltYm9scy4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBzbyB0aGF0JiMzOTtzIG9idmlvdXNseSBhIHN0cm9uZyBjYW5kaWRhdGUuIEJ1dCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGlzIGNhbGxlZCBmcm9tIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIHNvIHRoYXQmIzM5O3MgYSBnb29kIG9uZSB0b28uIEkmIzM5O20gYWxzbyBzZWVpbmcgdGhhdCBgbWlncmF0ZV92bWFfY29sbGVjdGAgaXMgaW4gdGhlIGNhbGwgY2hhaW4uIFNvLCBgbWlncmF0ZV92bWFfc2V0dXBgIGFuZCBgbWlncmF0ZV92bWFfY29sbGVjdGAgYXJlIGFsc28gZ29vZCBmb2N1cyBzeW1ib2xzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsbCByZWFjaGFibGUgZnJvbSBvdXIgZnV6emluZyBlbnRyeSBwb2ludC4KCk9rYXksIGxldCYjMzk7cyB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAgY2FsbHMgYG1pZ3JhdGVfdm1hX3NldHVwYC4gYG1pZ3JhdGVfdm1hX3NldHVwYCBjYWxscyBgbWlncmF0ZV92bWFfY29sbGVjdGAuIGBtaWdyYXRlX3ZtYV9jb2xsZWN0YCBjYWxscyBgd2Fsa19wYWdlX3JhbmdlX3ZtYWAuIFRoYXQgbGVhZHMgdG8gYSB3YWxrIG9mIHRoZSBwYWdlIHRhYmxlcyBhbmQgaXQgY2FsbHMgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCB0aHJvdWdoIGBtaWdyYXRlX3ZtYV93YWxrX29wc2AuIEkgY2FuIHNlZSB0aGF0IGB3YWxrLSZndDtvcHMtJmd0O3BtZF9lbnRyeWAgaW4gYG1pZ3JhdGVfdm1hX3dhbGtfb3BzYCBpcyBzZXQgdG8gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCwgc28gaXQgKmlzKiByZWFjaGFibGUuIEV4Y2VsbGVudC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgZGVwZW5kZW5jaWVzLiBgVEVTVF9ITU1gIG5lZWRzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIGBERVZJQ0VfUFJJVkFURWAgbmVlZHMgYFpPTkVfREVWSUNFYC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmUgYFRFU1RfSE1NYCwgYERFVklDRV9QUklWQVRFYCBhbmQgYFpPTkVfREVWSUNFYC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgY29sbGVjdHMgcGFnZXMgZm9yIG1pZ3JhdGlvbi4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgd2hlcmUgcmV0cnlpbmcgYWZ0ZXIgYSBgcHRlX29mZnNldF9tYXBfbG9ja2AgZmFpbHVyZSBjb3VsZCBsZWFkIHRvIGR1cGxpY2F0ZSBwYWdlIGNvbGxlY3Rpb25zIGFuZCBhbiBvdmVyZmxvdy4gVGhlIGZpeCBhZGRzIGEgY2hlY2sgdG8gYXZvaWQgcmUtY29sbGVjdGluZyBwYWdlcyBpZiB0aGUgYWRkcmVzcyBpc24mIzM5O3QgdGhlIHN0YXJ0IGFkZHJlc3Mgd2hlbiByZXRyeWluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBidWcgZml4IGFuZCB3YXJyYW50cyBmdXp6aW5nLgoKTXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHNob3VsZCBpbmNsdWRlOiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBgbWlncmF0ZV92bWFfc2V0dXBgLCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgLgoKVGhlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmU6IGBbJiMzNDtURVNUX0hNTSYjMzQ7LCAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0O11gLgoKSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpcyBzdGF0aWM7IHllcyBpdCBpcyBzdGF0aWMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIGV4cG9ydGVkLCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGlzIHN0YXRpYy4KCkxldCYjMzk7cyBjaGVjayB3aG8gZWxzZSBjYWxscyBgbWlncmF0ZV92bWFfc2V0dXBgLiBJIHNlZSBEUk0gZHJpdmVycyAobm91dmVhdSwgYW1kZ3B1KSBhbmQgS1ZNIG9uIHBvd2VycGMuIEJ1dCwgYmVjYXVzZSBgVEVTVF9ITU1gIHByb3ZpZGVzIGEgZGlyZWN0IHVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gdHJpZ2dlciB0aGlzIHZpYSBpb2N0bCwgYFRFU1RfSE1NYCBpcyB0aGUgYmVzdCB3YXkgdG8gZnV6eiB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpBbHJpZ2h0LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJiMzOTttIHJlYWR5IHRvIHVzZSB0aGVzZSBkZXRhaWxzIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfc2V0dXAmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfc2V0dXAmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0MTowOC40Njk2MDA4NDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTEzNjk3NTgzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9zZXR1cFwiLFxuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgd2hlcmUgaXQgY291bGQgY29sbGVjdCB0aGUgc2FtZSBhZGRyZXNzIHJhbmdlIHR3aWNlIGFuZCBvdmVyZmxvdyB0aGUgY29sbGVjdGlvbiBhcnJheXMgaWYgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIGZhaWxzIGFuZCBgYWRkciAhPSBzdGFydGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWlncmF0aW9uIGxvZ2ljIGZvciBkZXZpY2UgbWVtb3J5LiBJdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIEhNTSB0ZXN0IG1vZHVsZSAoYFRFU1RfSE1NYCkgd2hpY2ggZXhwb3NlcyBpb2N0bHMgdG8gdHJpZ2dlciBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MDguNDY5NjA3MDY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQ4NDE3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNTE0MWJlODBhZjM1OTE0NTQ5ODAyNzY1NzE1OGZjMmFiZDcxODQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMTE6NDE6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5pbmRleCAyZmZmZWIxZjk5Njk0YS4uNmNlYjQ3ZWMxZGEyNDUgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5AQCAtMjU3LDcgKzI1NywxMiBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbiBcXHRwdGVfdCAqcHRlcDtcXG4gXFxuIGFnYWluOlxcbi1cXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZHApIHx8ICFwbWRfcHJlc2VudCgqcG1kcCkpIHtcXG4rXFx0LypcXG4rXFx0ICogT25seSBjaGVjayBwbWQgd2hlbiBhZGRyIGlzIGF0IHN0YXJ0LCBuYW1lbHkgbm8gcHRlIGlzIGNvbGxlY3RlZC5cXG4rXFx0ICogSXQgYXZvaWRzIGNvbGxlY3RpbmcgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSBbc3RhcnQsIGFkZHIpIHR3aWNlXFxuK1xcdCAqIGFuZCBvdmVyZmxvd2luZyB0aGUgY29sbGVjdGlvbiBhcnJheXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoYWRkciA9PSBzdGFydCBcXHUwMDI2XFx1MDAyNiAocG1kX3RyYW5zX2h1Z2UoKnBtZHApIHx8ICFwbWRfcHJlc2VudCgqcG1kcCkpKSB7XFxuIFxcdFxcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTtcXG4gXFxuIFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTilcXG5AQCAtMjY3LDggKzI3MiwxOCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbiBcXHR9XFxuIFxcbiBcXHRwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgc3RhcnQsIFxcdTAwMjZwdGwpO1xcbi1cXHRpZiAoIXB0ZXApXFxuK1xcdGlmICghcHRlcCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBTa2lwIHRoZSByZXN0IGlmIHBtZCBiZWNvbWVzIGh1Z2Ugb3IgY2xlYXJlZC4gRmx1c2ggaWYgYW55XFxuK1xcdFxcdCAqIHB0ZSBpcyBtb2RpZmllZFxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGFkZHIgIT0gc3RhcnQpIHtcXG4rXFx0XFx0XFx0aWYgKHVubWFwcGVkKVxcbitcXHRcXHRcXHRcXHRmbHVzaF90bGJfcmFuZ2Uod2Fsay1cXHUwMDNldm1hLCBzdGFydCwgZW5kKTtcXG4rXFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspO1xcbitcXHRcXHR9XFxuIFxcdFxcdGdvdG8gYWdhaW47XFxuK1xcdH1cXG4gXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4gXFx0cHRlcCArPSAoYWRkciAtIHN0YXJ0KSAvIFBBR0VfU0laRTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQxOjA5LjI5NTQ2OTE3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwNTQzODc0MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZFwiLFxuICAgIFwibWlncmF0ZV92bWFfc2V0dXBcIixcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTUxNDFiZTgwYWYzNTkxNDU0OTgwMjc2NTcxNThmYzJhYmQ3MTg0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTE6NDE6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggMmZmZmViMWY5OTY5NGEuLjZjZWI0N2VjMWRhMjQ1IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xuKysrIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuQEAgLTI1Nyw3ICsyNTcsMTIgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbiBcdHB0ZV90ICpwdGVwO1xuIFxuIGFnYWluOlxuLVx0aWYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSB7XG4rXHQvKlxuK1x0ICogT25seSBjaGVjayBwbWQgd2hlbiBhZGRyIGlzIGF0IHN0YXJ0LCBuYW1lbHkgbm8gcHRlIGlzIGNvbGxlY3RlZC5cbitcdCAqIEl0IGF2b2lkcyBjb2xsZWN0aW5nIHRoZSBzYW1lIGFkZHJlc3MgcmFuZ2UgW3N0YXJ0LCBhZGRyKSB0d2ljZVxuK1x0ICogYW5kIG92ZXJmbG93aW5nIHRoZSBjb2xsZWN0aW9uIGFycmF5cy5cbitcdCAqL1xuK1x0aWYgKGFkZHIgPT0gc3RhcnQgXHUwMDI2XHUwMDI2IChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkpIHtcbiBcdFx0aW50IHJldCA9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kcCwgc3RhcnQsIGVuZCwgd2FsaywgZmF1bHRfZm9saW8pO1xuIFxuIFx0XHRpZiAocmV0ID09IC1FQUdBSU4pXG5AQCAtMjY3LDggKzI3MiwxOCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuIFx0fVxuIFxuIFx0cHRlcCA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZHAsIHN0YXJ0LCBcdTAwMjZwdGwpO1xuLVx0aWYgKCFwdGVwKVxuK1x0aWYgKCFwdGVwKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFNraXAgdGhlIHJlc3QgaWYgcG1kIGJlY29tZXMgaHVnZSBvciBjbGVhcmVkLiBGbHVzaCBpZiBhbnlcbitcdFx0ICogcHRlIGlzIG1vZGlmaWVkXG4rXHRcdCAqL1xuK1x0XHRpZiAoYWRkciAhPSBzdGFydCkge1xuK1x0XHRcdGlmICh1bm1hcHBlZClcbitcdFx0XHRcdGZsdXNoX3RsYl9yYW5nZSh3YWxrLVx1MDAzZXZtYSwgc3RhcnQsIGVuZCk7XG4rXHRcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspO1xuK1x0XHR9XG4gXHRcdGdvdG8gYWdhaW47XG4rXHR9XG4gXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuIFx0cHRlcCArPSAoYWRkciAtIHN0YXJ0KSAvIFBBR0VfU0laRTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQxOjA5LjI5NTQ3MTMwM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Njk1ODY5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgdHdlYWtpbmcgdGhlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhlIGNvbmRpdGlvbiBkZXRlcm1pbmluZyBpZiB3ZSBjaGVjayBmb3IgYSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKGBwbWRfdHJhbnNfaHVnZSgqcG1kcClgKSBvciBub24tcHJlc2VudCBwYWdlIChgIXBtZF9wcmVzZW50KCpwbWRwKWApIGlzIG5vdyBjb25kaXRpb25hbC4gSXQncyBvbmx5IGV2YWx1YXRlZCBpZiB0aGUgY3VycmVudCBhZGRyZXNzIChgYWRkcmApIGlzIGVxdWFsIHRvIHRoZSBzdGFydGluZyBhZGRyZXNzIChgc3RhcnRgKS4gVGhhdCBmZWVscyBsaWtlIGEgc3VidGxlIGNoYW5nZSwgbGlrZWx5IGFpbWVkIGF0IGEgdmVyeSBzcGVjaWZpYyBzY2VuYXJpbyB3aXRoaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgY29uZGl0aW9uYWwgY2hlY2suXG5cblRoZSBvdGhlciBiaXQgaXMgbW9yZSBpbnRlcmVzdGluZy4gSXQgZGVhbHMgd2l0aCBhIGZhaWx1cmUgc2NlbmFyaW8gd2l0aGluIGBwdGVfb2Zmc2V0X21hcF9sb2NrYC4gSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIE5VTEwsIHRoZSBwYXRjaCBub3cgaW50cm9kdWNlcyBhIGNoZWNrLiBJZiB3ZSdyZSBub3QgYXQgdGhlIHN0YXJ0IGFkZHJlc3MsIHdoaWNoIHByZXN1bWFibHkgbWVhbnMgd2UndmUgbWFkZSBzb21lIHByb2dyZXNzLCBhbmQgaWYgYHVubWFwcGVkYCBpcyB0cnVlLCB0aGVuIHdlIGZsdXNoIHRoZSBUTEIuIFRoZSBsb2dpYyBoZXJlIGlzIG1ha2luZyBhc3N1bXB0aW9ucyBhYm91dCB3aGF0IGhhcHBlbnMgaWYgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIGZhaWxzLiBJdCdzIHNheWluZyB0aGF0LCBpbiBzb21lIGNhc2VzLCB0aGUgc3lzdGVtIHNob3VsZCBzdG9wIHByb2Nlc3NpbmcgdGhlIG1pZ3JhdGlvbiBvbiBhbiBpbmRpdmlkdWFsIFBURSBhbmQgY29udGludWUgdG8gdGhlIG5leHQgb25lLCB3aXRoIHRoZSBwb3RlbnRpYWwgb2YgZmx1c2hpbmcgdGhlIFRMQiB0byBkZWFsIHdpdGggcGFydGlhbGx5IHVubWFwcGVkIFZNQSByYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoaXMgc3BlY2lmaWMgY29kZXBhdGggYW5kIHdoeS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGEgc2FmZSBhc3N1bXB0aW9uLCBzbyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UgaXMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0MToxNC4wNjUwNzc3MjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5ODE3NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuYz0xMzc9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDQtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyNDU6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTI0Ni1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBtaWdyYXRlX3ZtYV93YWxrX29wcyA9IHtcXG5tbS9taWdyYXRlX2RldmljZS5jOjUxNTpcXHQucG1kX2VudHJ5XFx0XFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTUxNi1cXHQucHRlX2hvbGVcXHRcXHQ9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MTQuNTU0OTA1MTAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMDczMzM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdpdGhpbiB0aGUgTWlncmF0aW9uIEZyYW1ld29yayoqXG5cbkFscmlnaHQsIHNvIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgaXMgY2xlYXJseSBhIGNvbXBvbmVudCBvZiBgbWlncmF0ZV92bWFfd2Fsa19vcHNgLiBNYWtlcyBzZW5zZTsgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGNvbGxlY3Rpbmcgb3IgaGFuZGxpbmcgcGFnZSBtYXAgZW50cmllcyAoUE1EcykgZHVyaW5nIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIG1pZ3JhdGlvbiBwcm9jZXNzLiBUaGUgXCJ3YWxrXCIgaW1wbGllcyBzb21lIHNvcnQgb2YgaXRlcmF0aW9uLCBwZXJoYXBzIG92ZXIgcGFnZSB0YWJsZXMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBhbmQgd2hhdCBJIHJlYWxseSB3YW50IHRvIHVuZGVyc3RhbmQsIGlzIHdoZXJlIHRoaXMgYG1pZ3JhdGVfdm1hX3dhbGtfb3BzYCBhYnN0cmFjdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBtaWdyYXRpb24gbWFjaGluZXJ5LiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIGdyYXNwIGhvdyB0aGVzZSBjb2xsZWN0ZWQgUE1EcyBhcmUgdXNlZCwgd2hldGhlciB0aGV5J3JlIG1vdmVkLCBjb3BpZWQsIGludmFsaWRhdGVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGVyZSBgbWlncmF0ZV92bWFfd2Fsa19vcHNgIGlzIGVtcGxveWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MTguMTU1NjQzNzk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTY5ODI4MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfd2Fsa19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlX2RldmljZS5jPTI0NT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01MTMtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBtaWdyYXRlX3ZtYV93YWxrX29wcyA9IHtcXG5tbS9taWdyYXRlX2RldmljZS5jLTUxNS1cXHQucG1kX2VudHJ5XFx0XFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NTI4PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2NvbGxlY3Qoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01NDItXFx0d2Fsa19wYWdlX3JhbmdlX3ZtYShtaWdyYXRlLVxcdTAwM2V2bWEsIG1pZ3JhdGUtXFx1MDAzZXN0YXJ0LCBtaWdyYXRlLVxcdTAwM2VlbmQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1NDM6XFx0XFx0XFx0XFx1MDAyNm1pZ3JhdGVfdm1hX3dhbGtfb3BzLCBtaWdyYXRlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTU0NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MTkuMjUyNjMzMTgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNTkxMTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgTWlncmF0aW9uIFByb2Nlc3M6IEEgUHJvY2VkdXJhbCBCcmVha2Rvd24qKlxuXG5SaWdodCwgc28gYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgbWlncmF0ZV92bWFfc2V0dXBgLiBUaGF0J3MgdGhlIGtleSByZWxhdGlvbnNoaXAgaGVyZS4gYG1pZ3JhdGVfdm1hX3NldHVwYCBpcyBjbGVhcmx5IHRoZSBwYXJlbnQgZnVuY3Rpb24sIHRoZSBvcmNoZXN0cmF0b3IsIGFuZCBpdCdzIHVzaW5nIGBtaWdyYXRlX3ZtYV9jb2xsZWN0YCBhcyBhIHN1Ym9yZGluYXRlIHRhc2suICBXZSdyZSBsb29raW5nIGF0IGEgd2VsbC1kZWZpbmVkIHByb2NlZHVyYWwgZmxvdyBpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIHRoZW4sIHdoZXJlIG9uZSBmdW5jdGlvbiBzZXRzIHRoaW5ncyB1cCBhbmQgYW5vdGhlciB0aGVuIGZvbGxvd3MgdG8gZ2F0aGVyIGRldGFpbHMgZm9yIHRoYXQgc2V0dXAuIFRoaXMgaW1wbGllcyBhIHZlcnkgc3BlY2lmaWMgc3RhZ2UgaW4gdGhlIHByb2Nlc3MuIEkgd291bGQgZXhwZWN0IGBtaWdyYXRlX3ZtYV9zZXR1cGAgdG8gYmUgdGhlIHBoYXNlIG9mIHRoZSBtaWdyYXRpb24gd2hpY2ggcHJlcGFyZXMgdGhlIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgZm9yIGNvcHlpbmcuIEl0IHNldHMgdXAgdGhlIGdyb3VuZHdvcmsg4oCTIHBlcmhhcHMgYWxsb2NhdGluZyByZXNvdXJjZXMsIGRldGVybWluaW5nIHJhbmdlcywgb3IgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsIG1lbW9yeSByZWdpb24gd2UncmUgYWJvdXQgdG8gbW92ZS4gIGBtaWdyYXRlX3ZtYV9jb2xsZWN0YCwgdGhlcmVmb3JlLCBpcyBsaWtlbHkgdGhlIG5leHQgc3RlcCBpbiB3aGljaCBpdCBjb2xsZWN0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IFZNQSBmb3IgdGhlIG1pZ3JhdGlvbi4gVGhpcyBjb3VsZCBiZSBjb2xsZWN0aW5nIHBvaW50ZXJzLCBwYWdlIGZsYWdzLCBvciBhbnkgb3RoZXIgbWV0YWRhdGEgdGhhdCBpcyBuZWVkZWQgbGF0ZXIgb24gZHVyaW5nIHRoZSBhY3R1YWwgbWlncmF0aW9uLiBUaGlzIG1ha2VzIGEgbG90IG9mIHNlbnNlLiBUaGUgc2V0dXAgcGhhc2UgZG9lc24ndCBuZWVkIHRvIGhvbGQgb250byB0aGlzIGRhdGEsIHNvIHdlIGNhbiB1c2UgYSB3b3JrZXIgcHJvY2VzcyBmb3IgaXQuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aHkgaXQncyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LCB3aGF0IHRoZSBhZHZhbnRhZ2VzIGFyZSwgYW5kIGlmIHRoZSBicmVha2Rvd24gaXMgaW4gbGluZSB3aXRoIGJlc3QgcHJhY3RpY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MjIuODY4NTQ4ODEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDgwODI3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlX2RldmljZS5jPTY4NT1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV91bm1hcChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTY5MS0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjY5MjogKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIC0gcHJlcGFyZSB0byBtaWdyYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02OTMtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzU0LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzU1OmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NTYte1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03OTQtfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6Nzk1OkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzk2LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzgxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDAzOiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkgZXhjZXB0IHRoYXRcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDQtICogaW5zdGVhZCBvZiBsb29raW5nIHVwIHBhZ2VzIGJhc2VkIG9uIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBhIHJhbmdlIG9mXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MTAtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MTE6ICogTGlrZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJlbmNlIGFuZCBsb2NrIGFueVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQxMi0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJ3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ4MT1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5My1cXHQgKiB0aGUgc291cmNlIGZvbGlvLiBTbyBjYWxsIG1pZ3JhdGVfdm1hX3VubWFwKCkgZGlyZWN0bHkgdG8gdW5tYXAgdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk0OlxcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk1LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0MToyNC4yNzY2Mzg2NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI5ODc1NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBtaWdyYXRlX3ZtYV9zZXR1cGAgRXhwb3J0KipcblxuQWxyaWdodCwgc28gYG1pZ3JhdGVfdm1hX3NldHVwYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UuIE5vdyB0aGUga2V5IHF1ZXN0aW9uIGlzOiB3aG8ncyBhY3R1YWxseSAqdXNpbmcqIGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBzaXRlcyB0byBwcm9wZXJseSBncm9rIHRoZSBpbnRlbnQgYW5kIGhvdyBpdCdzIGJlaW5nIGxldmVyYWdlZCBpbiB0aGUgc3lzdGVtLiBUaGlzIGV4cG9ydCBpbW1lZGlhdGVseSBmbGFncyBhcyBhIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludCBhbmQgcHJvYmFibHkgbWVyaXRzIGEgZGVlcCBkaXZlIGludG8gdGhlIGNhbGxpbmcgY29udGV4dHMuIEtub3dpbmcgdGhlIGNvbnN1bWVycyB3aWxsIHByb3ZpZGUgYSBtdWNoIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgc3Vic3lzdGVtJ3MgYmVoYXZpb3VyLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZXhwb3J0IHRvIGZpbmQgd2hhdCBmdW5jdGlvbnMgYW5kIG1vZHVsZXMgZGVwZW5kIG9uIGl0IHRvIGJlIGFibGUgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjkzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MjcuNDA2NTE2ODQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTU5NjE5MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjY0PXVzZSBoYXJkd2FyZSBETUEgb3IgZGV2aWNlIHNwZWNpZmljIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHRvIG1pZ3JhdGUgZGF0YS5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjY1OlRoZSBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBtaWdyYXRlX3ZtYV9wYWdlcygpLCBhbmQgbWlncmF0ZV92bWFfZmluYWxpemUoKVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI5Nz1iZXR3ZWVuIGRldmljZSBkcml2ZXIgc3BlY2lmaWMgY29kZSBhbmQgc2hhcmVkIGNvbW1vbiBjb2RlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMS0gICBUaGUgZGV2aWNlIGRyaXZlciBoYXMgdG8gcGFzcyBhIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzAyOiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgc28gdGhlIG1tYXBfcmVhZF9sb2NrKCkgb3IgbW1hcF93cml0ZV9sb2NrKCkgbmVlZHMgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAzLSAgIGJlIGhlbGQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWlncmF0aW9uLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDQtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwNToyLiBgYG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylgYFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDYtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNy0gICBUaGUgZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgYGBzdHJ1Y3QgbWlncmF0ZV92bWFgYCBmaWVsZHMgYW5kIHBhc3Nlc1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDg6ICAgdGhlIHBvaW50ZXIgdG8gbWlncmF0ZV92bWFfc2V0dXAoKS4gVGhlIGBgYXJncy1cXHUwMDNlZmxhZ3NgYCBmaWVsZCBpcyB1c2VkIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwOS0gICBmaWx0ZXIgd2hpY2ggc291cmNlIHBhZ2VzIHNob3VsZCBiZSBtaWdyYXRlZC4gRm9yIGV4YW1wbGUsIHNldHRpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTctXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMxODogICBPbmUgb2YgdGhlIGZpcnN0IHN0ZXBzIG1pZ3JhdGVfdm1hX3NldHVwKCkgZG9lcyBpcyB0byBpbnZhbGlkYXRlIG90aGVyXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMxOS0gICBkZXZpY2UncyBNTVVzIHdpdGggdGhlIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKClgYCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjQtICAgYGBNTVVfTk9USUZZX01JR1JBVEVgYCBhbmQgdGhlIGBgb3duZXJgYCBmaWVsZCBzZXQgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzI1OiAgIHRoZSBgYGFyZ3MtXFx1MDAzZXBnbWFwX293bmVyYGAgZmllbGQgcGFzc2VkIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoaXNcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI2LSAgIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBza2lwIHRoZSBpbnZhbGlkYXRpb24gY2FsbGJhY2sgYW5kIG9ubHlcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzctICAgaW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFBURS5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzM4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgYWxzbyBjbGVhcnMgdGhlIGBgYXJncy1cXHUwMDNlZHN0YGAgYXJyYXkuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMzOS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjEyPUhNTSDliIfmjaLliLDnm7TmjqXkvb/nlKggc3RydWN0IHBhZ2Ug55So5LqO6K6+5aSH5YaF5a2Y77yM6L+Z5L2/5b6X5aSn5aSa5pWw5YaF5qC45Luj56CB6Lev5b6E5LiN55+l6YGT5beu5byC44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIxOC3nlLHkuo4gQ1BVIOaXoOazleebtOaOpeiuv+mXruiuvuWkh+WGheWtmO+8jOWboOatpOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+S9v+eUqOehrOS7tiBETUEg5oiW6K6+5aSH54m55a6a55qE5Yqg6L29L+WtmFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjE5OuWCqOaMh+S7pOadpei/geenu+aVsOaNruOAgm1pZ3JhdGVfdm1hX3NldHVwKCnjgIFtaWdyYXRlX3ZtYV9wYWdlcygpIOWSjFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjIwLW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTI0Mz1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTA6ICAg6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75bCGIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAg5Lyg6YCS57uZbWlncmF0ZV92bWFfc2V0dXAoKe+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUxLSAgIOWboOatpOmcgOimgeWcqOi/geenu+acn+mXtOS/neeVmSBtbWFwX3JlYWRfbG9jaygpIOaIliBtbWFwX3dyaXRlX2xvY2soKeOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUyLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUzOjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTQtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTUtICAg6K6+5aSH6amx5Yqo5Yid5aeL5YyW5LqGIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAg55qE5a2X5q6177yM5bm25bCG6K+l5oyH6ZKI5Lyg6YCS57uZXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTY6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeOAgmBgYXJncy1cXHUwMDNlZmxhZ3NgYCDlrZfmrrXmmK/nlKjmnaXov4fmu6Tlk6rkupvmupDpobXpnaLlupTor6Xooqvov4Hnp7vjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Ny0gICDkvovlpoLvvIzorr7nva4gYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAg5bCG5Y+q6L+B56e757O757uf5YaF5a2Y77yM6K6+572uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Mi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2MzogICBtaWdyYXRlX3ZtYV9zZXR1cCgp5omA5YGa55qE56ys5LiA5q2l5piv55SoIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKWBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjQtICAg5ZKMIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKClgYCDosIPnlKjmnaXpgY3ljoborr7lpIflkajlm7TnmoTpobXooajvvIzkvb9cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY3LSAgIOWFtiBgYGV2ZW50YGAg5a2X5q616K6+572u5Li6TU1VX05PVElGWV9NSUdSQVRF77yMIGBgb3duZXJgYCDlrZfmrrXorr7nva7kuLrkvKDpgJLnu5lcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2ODogICBtaWdyYXRlX3ZtYV9zZXR1cCgp55qEIGBgYXJncy1cXHUwMDNlcGdtYXBfb3duZXJgYCDlrZfmrrXjgILov5nlhYHorrjorr7lpIfpqbHliqjot7Pov4fml6BcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2OS0gICDmlYjljJblm57osIPvvIzlj6rml6DmlYjljJbpgqPkupvlrp7pmYXmraPlnKjov4Hnp7vnmoTorr7lpIfnp4HmnIlNTVXmmKDlsITjgILov5nkuIDngrnlsIblnKjkuIvkuIDoioLor6bnu4bop6Pph4rjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjc1LSAgIGBgbG9ja19wYWdlKClgYOmUgeWumu+8jOS4jkxSVemalOemu++8iOWmguaenOezu+e7n+WGheWtmOWSjOiuvuWkh+engeaciemhteS4jeWcqExSVeS4iu+8ie+8jOS7jui/m1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjc2OiAgIOeoi+S4reWPlua2iOaYoOWwhO+8jOW5tuaPkuWFpeS4gOS4queJueauiueahOi/geenu1BUReadpeS7o+abv+WOn+adpeeahFBUReOAgiBtaWdyYXRlX3ZtYV9zZXR1cCgpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzctICAg6L+Y5riF6Zmk5LqGIGBgYXJncy1cXHUwMDNlZHN0YGAg5pWw57uE44CCXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTM4LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTM5OlxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWcpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTQwLVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTc0MD1zdGF0aWMgaW50IGt2bXBwY19zdm1fcGFnZV9pbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYwLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NzYxOlxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWcpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTM5ND1zdm1fbWlncmF0ZV92bWFfdG9fdnJhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMxLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NDMyOlxcdHIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00MzMtXFx0aWYgKHIpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkzPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczNC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjczNTpcXHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzM2LVxcdGlmIChyKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MzUxNT1zdm1fcmFuZ2VfYmVzdF9wcmVmZXRjaF9sb2NhdGlvbihzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4Mi0gKiBhbmQgcmVzdG9yZSB3b3JrOlxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTgzOiAqIDEuIG1pZ3JhdGVfdm1hX3NldHVwIGludmFsaWRhdGUgcGFnZXMsIE1NVSBub3RpZmllciBjYWxsYmFjayBzdm1fcmFuZ2VfZXZpY3RcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4NC0gKiAgICBzdG9wcyBhbGwgcXVldWVzLCBzY2hlZHVsZSByZXN0b3JlIHdvcmtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTYxNj1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODMtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Njg0OlxcdGVyciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEyMTE9c3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTI2NC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjY1OlxcdGVyciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjY2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM1LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjIzNjpcXHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpIFxcdTAwM2MgMClcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yMzctXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTgyMj1ub3V2ZWF1X2RtZW1fbWlncmF0ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzEtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6ODcyOlxcdFxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzMtXFx0XFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE2MD1zdHJ1Y3QgbWlncmF0ZV92bWEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY2LVxcdCAqIFRoZSBzcmMgYXJyYXkgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNhbGxlciBhZnRlclxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE2NzpcXHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBhbmQgbXVzdCBub3QgY2hhbmdlIHRoZSBkc3QgYXJyYXkgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjgtXFx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5NTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xOTYtdm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTEyMD1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xMTY0LVxcbmxpYi90ZXN0X2htbS5jOjExNjU6XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpO1xcbmxpYi90ZXN0X2htbS5jLTExNjYtXFx0XFx0aWYgKHJldClcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTI0Mi1cXHRcXHRcXHRcXHRNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQ7XFxubGliL3Rlc3RfaG1tLmM6MTI0MzpcXHRcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTI0NC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3MDUtXFx0LypcXG5saWIvdGVzdF9obW0uYzoxNzA2OlxcdCAqIEluIHByYWN0aWNlIG1pZ3JhdGVfdm1hX3NldHVwKCkgc2hvdWxkIG5ldmVyIGZhaWwgdW5sZXNzIHRoZVxcbmxpYi90ZXN0X2htbS5jLTE3MDctXFx0ICogdGVzdCBpcyB3cm9uZyBhcyBpdCBqdXN0IHRlc3RzIHNvbWUgc3RhdGljIFZNQSBwcm9wZXJ0aWVzLlxcbmxpYi90ZXN0X2htbS5jLTE3MDgtXFx0ICovXFxubGliL3Rlc3RfaG1tLmM6MTcwOTpcXHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpKSB7XFxubGliL3Rlc3RfaG1tLmMtMTcxMC1cXHRcXHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTY4NT1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV91bm1hcChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTY5MS0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjY5MjogKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIC0gcHJlcGFyZSB0byBtaWdyYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02OTMtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzU0LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzU1OmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NTYte1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03OTQtfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6Nzk1OkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzk2LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzgxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDAzOiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkgZXhjZXB0IHRoYXRcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDQtICogaW5zdGVhZCBvZiBsb29raW5nIHVwIHBhZ2VzIGJhc2VkIG9uIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBhIHJhbmdlIG9mXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MTAtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MTE6ICogTGlrZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJlbmNlIGFuZCBsb2NrIGFueVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQxMi0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJ3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ4MT1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5My1cXHQgKiB0aGUgc291cmNlIGZvbGlvLiBTbyBjYWxsIG1pZ3JhdGVfdm1hX3VubWFwKCkgZGlyZWN0bHkgdG8gdW5tYXAgdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk0OlxcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk1LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0MTozNi45NjYxNDMyMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxMDQ0MjE4OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG1pZ3JhdGVfdm1hX3NldHVwYCBGdW5jdGlvbiBhbmQgdGhlIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIHBvcHBpbmcgdXAgaW4gYSBmZXcgcGxhY2VzIOKAkyBgbGliL3Rlc3RfaG1tLmNgLCBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmNgLCBhbmQgZXZlbiBvdmVyIGluIHRoZSBBTUQgYW5kIFBvd2VyUEMgY29kZSB3aXRoIGBrZmRfbWlncmF0ZS5jYCBhbmQgYGJvb2szc19odl91dm1lbS5jYC4gVGhhdCB0ZXN0IG1vZHVsZSBpbiBgbGliL3Rlc3RfaG1tLmNgIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBITU0sIEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQsIHdoaWNoIEknbSBmYW1pbGlhciB3aXRoIGluIHRoZSBjb250ZXh0IG9mIGRldmljZSBtZW1vcnkgYW5kIHNoYXJpbmcuXG5cbk5vdywgdGhhdCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGNoYW5nZS4uLiB0aGUgY29tbWl0IG1lc3NhZ2UgaXMga2V5IGhlcmUuIEl0IHNlZW1zIGxpa2UgdGhlIGJ1ZyB3YXMgcmVsYXRlZCB0byB0aGUgY29uZGl0aW9uIGBhZGRyICE9IHN0YXJ0YCBjYXVzaW5nIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCB0byBmYWlsLiBUaGlzIHdvdWxkIGxlYWQgdG8gZWl0aGVyIGFuIGluZmluaXRlIGxvb3Agb3Igc2tpcHBpbmcgb2YgYWRkcmVzc2VzLCB3aGljaCBpcyBjbGVhcmx5IHByb2JsZW1hdGljLiBUaGUgZml4IGV4cGxpY2l0bHkgbWVudGlvbnMgb25seSBjaGVja2luZyB0aGUgUE1EIChQYWdlIE1hcCBEaXJlY3RvcnkpIHdoZW4gdGhlIGFkZHJlc3MgaXMgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgYW5kICpubyogUFRFcyBoYXZlIGJlZW4gY29sbGVjdGVkLCBhdm9pZGluZyByZWR1bmRhbnQgY29sbGVjdGlvbiBhbmQgb3ZlcmZsb3dpbmcgdGhvc2UgYXJyYXlzLiBBbHNvLCBpdOKAmXMgc2tpcHBpbmcgaWYgdGhlIFBNRCBiZWNvbWVzIGh1Z2Ugb3IgY2xlYXJlZCBhbmQgZmx1c2hpbmcgaWYgYW55IFBURXMgYXJlIG1vZGlmaWVkLiBJ4oCZbSBndWVzc2luZyB0aGlzIGlzIGFsbCBhYm91dCBwZXJmb3JtYW5jZSBhbmQgYXZvaWRpbmcgZG91YmxlLWNvbGxlY3Rpbmcgb2YgcmVnaW9ucyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIG1pZ3JhdGVkLiBJIGNhbiBzZWUgaG93IHRoYXTigJlzIGEgdHJpY2t5IHJhY2UgdG8gZ2V0IHJpZ2h0LCBlc3BlY2lhbGx5IHdpdGggbXVsdGlwbGUgZGV2aWNlcyBpbiBwbGF5LlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDoyOC4wMTAzNjQ2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHRzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbiAyNDY6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gMjQ3OlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiAyNDg6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIDI0OTpcXHR7XFxuIDI1MDpcXHRcXHRzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiAyNTE6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVxcdTAwM2V2bWE7XFxuIDI1MjpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cXHUwMDNldm1fbW07XFxuIDI1MzpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydCwgdW5tYXBwZWQgPSAwO1xcbiAyNTQ6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiAyNTU6XFx0XFx0c3RydWN0IGZvbGlvICpmYXVsdF9mb2xpbyA9IG1pZ3JhdGUtXFx1MDAzZWZhdWx0X3BhZ2UgP1xcbiAyNTY6XFx0XFx0XFx0cGFnZV9mb2xpbyhtaWdyYXRlLVxcdTAwM2VmYXVsdF9wYWdlKSA6IE5VTEw7XFxuIDI1NzpcXHRcXHRwdGVfdCAqcHRlcDtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0YWdhaW46XFxuIDI2MDpcXHRcXHQvKlxcbiAyNjE6XFx0XFx0ICogT25seSBjaGVjayBwbWQgd2hlbiBhZGRyIGlzIGF0IHN0YXJ0LCBuYW1lbHkgbm8gcHRlIGlzIGNvbGxlY3RlZC5cXG4gMjYyOlxcdFxcdCAqIEl0IGF2b2lkcyBjb2xsZWN0aW5nIHRoZSBzYW1lIGFkZHJlc3MgcmFuZ2UgW3N0YXJ0LCBhZGRyKSB0d2ljZVxcbiAyNjM6XFx0XFx0ICogYW5kIG92ZXJmbG93aW5nIHRoZSBjb2xsZWN0aW9uIGFycmF5cy5cXG4gMjY0OlxcdFxcdCAqL1xcbiAyNjU6XFx0XFx0aWYgKGFkZHIgPT0gc3RhcnQgXFx1MDAyNlxcdTAwMjYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSkge1xcbiAyNjY6XFx0XFx0XFx0aW50IHJldCA9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kcCwgc3RhcnQsIGVuZCwgd2FsaywgZmF1bHRfZm9saW8pO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRcXHRpZiAocmV0ID09IC1FQUdBSU4pXFxuIDI2OTpcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbiAyNzA6XFx0XFx0XFx0aWYgKHJldCA9PSAwKVxcbiAyNzE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDI3MjpcXHRcXHR9XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdHB0ZXAgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWRwLCBzdGFydCwgXFx1MDAyNnB0bCk7XFxuIDI3NTpcXHRcXHRpZiAoIXB0ZXApIHtcXG4gMjc2OlxcdFxcdFxcdC8qXFxuIDI3NzpcXHRcXHRcXHQgKiBTa2lwIHRoZSByZXN0IGlmIHBtZCBiZWNvbWVzIGh1Z2Ugb3IgY2xlYXJlZC4gRmx1c2ggaWYgYW55XFxuIDI3ODpcXHRcXHRcXHQgKiBwdGUgaXMgbW9kaWZpZWRcXG4gMjc5OlxcdFxcdFxcdCAqL1xcbiAyODA6XFx0XFx0XFx0aWYgKGFkZHIgIT0gc3RhcnQpIHtcXG4gMjgxOlxcdFxcdFxcdFxcdGlmICh1bm1hcHBlZClcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdGZsdXNoX3RsYl9yYW5nZSh3YWxrLVxcdTAwM2V2bWEsIHN0YXJ0LCBlbmQpO1xcbiAyODM6XFx0XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspO1xcbiAyODQ6XFx0XFx0XFx0fVxcbiAyODU6XFx0XFx0XFx0Z290byBhZ2FpbjtcXG4gMjg2OlxcdFxcdH1cXG4gMjg3OlxcdFxcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XFxuIDI4ODpcXHRcXHRwdGVwICs9IChhZGRyIC0gc3RhcnQpIC8gUEFHRV9TSVpFO1xcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRmb3IgKDsgYWRkciBcXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUsIHB0ZXArKykge1xcbiAyOTE6XFx0XFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcXG4gMjkyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbXBmbiA9IDAsIHBmbjtcXG4gMjkzOlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDI5NDpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gMjk1OlxcdFxcdFxcdHNvZnRsZWFmX3QgZW50cnk7XFxuIDI5NjpcXHRcXHRcXHRwdGVfdCBwdGU7XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdFxcdHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRcXHRpZiAocHRlX25vbmUocHRlKSkge1xcbiAzMDE6XFx0XFx0XFx0XFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSkge1xcbiAzMDI6XFx0XFx0XFx0XFx0XFx0bXBmbiA9IE1JR1JBVEVfUEZOX01JR1JBVEU7XFxuIDMwMzpcXHRcXHRcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VjcGFnZXMrKztcXG4gMzA0OlxcdFxcdFxcdFxcdH1cXG4gMzA1OlxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gMzA2OlxcdFxcdFxcdH1cXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0XFx0aWYgKCFwdGVfcHJlc2VudChwdGUpKSB7XFxuIDMwOTpcXHRcXHRcXHRcXHQvKlxcbiAzMTA6XFx0XFx0XFx0XFx0ICogT25seSBjYXJlIGFib3V0IHVuYWRkcmVzc2FibGUgZGV2aWNlIHBhZ2Ugc3BlY2lhbFxcbiAzMTE6XFx0XFx0XFx0XFx0ICogcGFnZSB0YWJsZSBlbnRyeS4gT3RoZXIgc3BlY2lhbCBzd2FwIGVudHJpZXMgYXJlIG5vdFxcbiAzMTI6XFx0XFx0XFx0XFx0ICogbWlncmF0YWJsZSwgYW5kIHdlIGlnbm9yZSByZWd1bGFyIHN3YXBwZWQgcGFnZS5cXG4gMzEzOlxcdFxcdFxcdFxcdCAqL1xcbiAzMTQ6XFx0XFx0XFx0XFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xcbiAzMTU6XFx0XFx0XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuIDMxNjpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIDMxNzpcXHRcXG4gMzE4OlxcdFxcdFxcdFxcdHBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4gMzE5OlxcdFxcdFxcdFxcdHBnbWFwID0gcGFnZV9wZ21hcChwYWdlKTtcXG4gMzIwOlxcdFxcdFxcdFxcdGlmICghKG1pZ3JhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjZcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkgfHxcXG4gMzIyOlxcdFxcdFxcdFxcdCAgICBwZ21hcC1cXHUwMDNlb3duZXIgIT0gbWlncmF0ZS1cXHUwMDNlcGdtYXBfb3duZXIpXFxuIDMyMzpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdFxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4gMzI2OlxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbiAzMjc6XFx0XFx0XFx0XFx0XFx0aW50IHJldDtcXG4gMzI4OlxcdFxcbiAzMjk6XFx0XFx0XFx0XFx0XFx0LyogbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oKSBjb25zdW1lcyB0aGlzIHJlZmVyZW5jZSAqL1xcbiAzMzA6XFx0XFx0XFx0XFx0XFx0aWYgKGZvbGlvICE9IGZhdWx0X2ZvbGlvKVxcbiAzMzE6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gMzMyOlxcdFxcdFxcdFxcdFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiAzMzM6XFx0XFx0XFx0XFx0XFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xcbiAzMzQ6XFx0XFx0XFx0XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oZm9saW8sXFxuIDMzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG1pZ3JhdGUtXFx1MDAzZWZhdWx0X3BhZ2UpO1xcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHRcXHRcXHRcXHRpZiAocmV0KSB7XFxuIDMzODpcXHRcXHRcXHRcXHRcXHRcXHRpZiAodW5tYXBwZWQpXFxuIDMzOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRmbHVzaF90bGJfcmFuZ2Uod2Fsay1cXHUwMDNldm1hLCBzdGFydCwgZW5kKTtcXG4gMzQwOlxcdFxcbiAzNDE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspO1xcbiAzNDI6XFx0XFx0XFx0XFx0XFx0fVxcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDoyOC4wMTE1NzczNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDk0MDc3Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggYG1pZ3JhdGVfdm1hX3NldHVwYC4gVGhhdCdzIGdvb2QsIGJlY2F1c2UgYG1pZ3JhdGVfdm1hX3NldHVwYCBpcyBhY3R1YWxseSB1c2VkIGluIGEgZmV3IHBsYWNlcy4gSSBrbm93IGl0J3MgdXNlZCBieSB0aGUgSE1NIHRlc3RzLCBzcGVjaWZpY2FsbHkgaW4gYGxpYi90ZXN0X2htbS5jYCwgd2hpY2gsIGJhc2VkIG9uIHRoZSBjb25maWcgSSBrbm93LCBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfVEVTVF9ITU1gLiBCZXlvbmQgdGhhdCwgaXQncyBhbHNvIHV0aWxpemVkIGJ5IHRob3NlIERSTSBkcml2ZXJzLCBub3V2ZWF1IGFuZCBhbWRncHUsIGFuZCBhbHNvIEtWTSBvbiBwb3dlcnBjLlxuXG5JZiBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGlzIHByb3Blcmx5LCBlbmFibGluZyBgQ09ORklHX1RFU1RfSE1NYCBzZWVtcyBsaWtlIGEgc29saWQgZmlyc3Qgc3RlcC4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQgdG8gZm9jdXMgb24gZWl0aGVyIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgZGlyZWN0bHksIG9yIGl0cyBwYXJlbnQsIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIEkgbmVlZCB0byBkaWcgaW50byBgbGliL3Rlc3RfaG1tLmNgIHRob3VnaCwgYW5kIHNlZSBpZiBpdCBleHBvc2VzIGFueSB1c2FibGUgaW50ZXJmYWNlIHRvIHVzZXIgc3BhY2UuIFRoYXQgd291bGQgbWFrZSB0aGluZ3MgKm11Y2gqIGVhc2llciBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDozMi41MDU2NTc0NThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTIxNzcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz0xODYwPXN0YXRpYyB2b2lkIF9fZXhpdCBobW1fZG1pcnJvcl9leGl0KHZvaWQpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xODY5LVxcbmxpYi90ZXN0X2htbS5jOjE4NzA6bW9kdWxlX2luaXQoaG1tX2RtaXJyb3JfaW5pdCk7XFxubGliL3Rlc3RfaG1tLmMtMTg3MS1tb2R1bGVfZXhpdChobW1fZG1pcnJvcl9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDQ6MzMuMDQwODgzOTkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODUwMTAyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBobW1fZG1pcnJvcl9pbml0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY2hlY2sgYGhtbV9kbWlycm9yX2luaXRgLlwiIE5vIHByZWFtYmxlLCBqdXN0IHN0cmFpZ2h0IHRvIHRoZSBwb2ludC4gV2UncmUgYXNzdW1pbmcgd2UgYm90aCBrbm93IHRoZSBjb250ZXh0LCBhbmQgSSdtIG1lbnRhbGx5IGZpbGluZyB0aGlzIHVuZGVyIHNvbWV0aGluZyB0aGF0IG5lZWRzIGF0dGVudGlvbiwgcmVxdWlyZXMgdmVyaWZpY2F0aW9uLCBvciBwZXJoYXBzIGhhcyByYWlzZWQgYSBxdWVzdGlvbi4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGEgZGlzdHJpYnV0ZWQgbWlycm9yaW5nIHN5c3RlbSB0byBhIGRpYWdub3N0aWMgZnVuY3Rpb24uIFRoZSBzcGVjaWZpY3MgYXJlIGlycmVsZXZhbnQsIHRoZSBrZXkgaXMgZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uJ3MgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ0OjM2LjEyNTg5NjY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODMwOlxcdFxcdFxcdGdvdG8gZXJyX3VucmVnO1xcbjE4MzE6XFx0XFxuMTgzMjpcXHRcXHRtZW1zZXQoZG1pcnJvcl9kZXZpY2VzLCAwLCBETUlSUk9SX05ERVZJQ0VTICogc2l6ZW9mKGRtaXJyb3JfZGV2aWNlc1swXSkpO1xcbjE4MzM6XFx0XFx0ZG1pcnJvcl9kZXZpY2VzW25kZXZpY2VzKytdLnpvbmVfZGV2aWNlX3R5cGUgPVxcbjE4MzQ6XFx0XFx0XFx0XFx0XFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbjE4MzU6XFx0XFx0ZG1pcnJvcl9kZXZpY2VzW25kZXZpY2VzKytdLnpvbmVfZGV2aWNlX3R5cGUgPVxcbjE4MzY6XFx0XFx0XFx0XFx0XFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbjE4Mzc6XFx0XFx0aWYgKHNwbV9hZGRyX2RldjAgXFx1MDAyNlxcdTAwMjYgc3BtX2FkZHJfZGV2MSkge1xcbjE4Mzg6XFx0XFx0XFx0ZG1pcnJvcl9kZXZpY2VzW25kZXZpY2VzKytdLnpvbmVfZGV2aWNlX3R5cGUgPVxcbjE4Mzk6XFx0XFx0XFx0XFx0XFx0XFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9DT0hFUkVOVDtcXG4xODQwOlxcdFxcdFxcdGRtaXJyb3JfZGV2aWNlc1tuZGV2aWNlcysrXS56b25lX2RldmljZV90eXBlID1cXG4xODQxOlxcdFxcdFxcdFxcdFxcdFxcdEhNTV9ETUlSUk9SX01FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ7XFxuMTg0MjpcXHRcXHR9XFxuMTg0MzpcXHRcXHRmb3IgKGlkID0gMDsgaWQgXFx1MDAzYyBuZGV2aWNlczsgaWQrKykge1xcbjE4NDQ6XFx0XFx0XFx0cmV0ID0gZG1pcnJvcl9kZXZpY2VfaW5pdChkbWlycm9yX2RldmljZXMgKyBpZCwgaWQpO1xcbjE4NDU6XFx0XFx0XFx0aWYgKHJldClcXG4xODQ2OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2NocmRldjtcXG4xODQ3OlxcdFxcdH1cXG4xODQ4OlxcdFxcbjE4NDk6XFx0XFx0cHJfaW5mbyhcXFwiSE1NIHRlc3QgbW9kdWxlIGxvYWRlZC4gVGhpcyBpcyBvbmx5IGZvciB0ZXN0aW5nIEhNTS5cXFxcblxcXCIpO1xcbjE4NTA6XFx0XFx0cmV0dXJuIDA7XFxuMTg1MTpcXHRcXG4xODUyOlxcdGVycl9jaHJkZXY6XFxuMTg1MzpcXHRcXHR3aGlsZSAoLS1pZCBcXHUwMDNlPSAwKVxcbjE4NTQ6XFx0XFx0XFx0ZG1pcnJvcl9kZXZpY2VfcmVtb3ZlKGRtaXJyb3JfZGV2aWNlcyArIGlkKTtcXG4xODU1OlxcdFxcdHVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkbWlycm9yX2RldiwgRE1JUlJPUl9OREVWSUNFUyk7XFxuMTg1NjpcXHRlcnJfdW5yZWc6XFxuMTg1NzpcXHRcXHRyZXR1cm4gcmV0O1xcbjE4NTg6XFx0fVxcbjE4NTk6XFx0XFxuMTg2MDpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgaG1tX2RtaXJyb3JfZXhpdCh2b2lkKVxcbjE4NjE6XFx0e1xcbjE4NjI6XFx0XFx0aW50IGlkO1xcbjE4NjM6XFx0XFxuMTg2NDpcXHRcXHRmb3IgKGlkID0gMDsgaWQgXFx1MDAzYyBETUlSUk9SX05ERVZJQ0VTOyBpZCsrKVxcbjE4NjU6XFx0XFx0XFx0aWYgKGRtaXJyb3JfZGV2aWNlc1tpZF0uem9uZV9kZXZpY2VfdHlwZSlcXG4xODY2OlxcdFxcdFxcdFxcdGRtaXJyb3JfZGV2aWNlX3JlbW92ZShkbWlycm9yX2RldmljZXMgKyBpZCk7XFxuMTg2NzpcXHRcXHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZG1pcnJvcl9kZXYsIERNSVJST1JfTkRFVklDRVMpO1xcbjE4Njg6XFx0fVxcbjE4Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ0OjM2LjEyNjA1MDY4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzA2MDY4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBNb2R1bGUgSW5pdGlhbGl6YXRpb24gLSBEaXZpbmcgRGVlcCoqXG5cbk9rYXksIHNvIHRoZSBzeXN0ZW0gaGFzIHJlY29nbml6ZWQgbXkgcHJlc2VuY2U7IGl0J3MgcmVnaXN0ZXJlZCBhIGNoYXJhY3RlciBkZXZpY2UsIHdoaWNoIGlzIHRoZSBmaXJzdCBzdGVwLiBOb3csIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB3aGF0IHRoZSBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFdoYXQgZG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIGVudGFpbD8gSXMgaXQgc2V0dGluZyB1cCBtZW1vcnkgc3RydWN0dXJlcywgYWxsb2NhdGluZyByZXNvdXJjZXMsIHJlZ2lzdGVyaW5nIGludGVycnVwdCBoYW5kbGVycywgb3IgcGVyaGFwcyBjb25maWd1cmluZyBETUEgY2hhbm5lbHM/IEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWwgc3RhdGUgZXN0YWJsaXNoZWQgYnkgdGhpcyBmdW5jdGlvbiwgYmVjYXVzZSB0aGF0IGluaXRpYWwgc3RhdGUgd2lsbCBkZWZpbmUgdGhlIG1vZHVsZSdzIGZ1dHVyZSBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODk1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDozOS4zNTY2NjAyNjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTcyNDAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWlycm9yX2RldmljZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi90ZXN0X2htbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2htbS5jPTE3NzI9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNzc4LVxcbmxpYi90ZXN0X2htbS5jOjE3Nzk6c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxcbmxpYi90ZXN0X2htbS5jLTE3ODAte1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTgyMT1zdGF0aWMgaW50IF9faW5pdCBobW1fZG1pcnJvcl9pbml0KHZvaWQpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xODQzLVxcdGZvciAoaWQgPSAwOyBpZCBcXHUwMDNjIG5kZXZpY2VzOyBpZCsrKSB7XFxubGliL3Rlc3RfaG1tLmM6MTg0NDpcXHRcXHRyZXQgPSBkbWlycm9yX2RldmljZV9pbml0KGRtaXJyb3JfZGV2aWNlcyArIGlkLCBpZCk7XFxubGliL3Rlc3RfaG1tLmMtMTg0NS1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDozOS41MDYzOTE1OTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1MTkxODA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gYGRtaXJyb3JfZGV2aWNlX2luaXRgKipcblxuQWxyaWdodCwgbGV0J3MgY3JhY2sgb3BlbiB0aGlzIGBkbWlycm9yX2RldmljZV9pbml0YCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LCBidXQgSSB3YW50IHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgdGhlIGhpZ2gtbGV2ZWwgY29udHJvbCBmbG93OiBXaGF0J3MgdGhlIGVudHJ5IHBvaW50PyBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBpbml0aWFsaXplZD8gQW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBvciBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQ/IEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIGRldmljZSBtaXJyb3IgZHJpdmVyLCBzbyBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiByZXNvdXJjZSBhbGxvY2F0aW9uLCByZWdpc3RlciBtYXBwaW5nLCBhbmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaGFyZHdhcmUtc3BlY2lmaWMgcGFyYW1ldGVycyBpdCdzIHRha2luZyBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEdpdmVuIHRoYXQgaXQncyBhIGRldmljZSBpbml0IGZ1bmN0aW9uLCBJJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB3aGF0IHJlc291cmNlcyBpdCdzIHRyeWluZyB0byBtYW5hZ2UuIEkgYWxzbyBleHBlY3QgYSBudW1iZXIgb2YgY2hlY2tzLiBBcmUgd2UgZG9pbmcgYSBjaGVjayB0byBzZWUgaWYgd2UndmUgYWxyZWFkeSBkb25lIGFuIGluaXRpYWxpemF0aW9uPyBUaGF0J3MgY29tbW9uLCBzbyBpdCdzIHByb2JhYmx5IGhlcmUuIEknbGwgYWxzbyBiZSBzY2FubmluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgbG9va2luZyBmb3Igd2hlcmUgaXQgaXMgd3JpdGluZyBhbmQgcmVhZGluZyBkYXRhIGZyb20gcmVnaXN0ZXJzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIHZlcnNpb25zIG9mIHRoZSB0YXJnZXQgZGV2aWNlLiBBcmUgdGhlcmUgY29uZGl0aW9uYWwgYmxvY2tzIGJhc2VkIG9uIGRldmljZSBJRHMgb3IgY2FwYWJpbGl0aWVzPyBBbnkgdXNlIG9mIHBsYXRmb3JtLXNwZWNpZmljIG1hY3Jvcz8gSSBhbHNvIHdhbnQgdG8gcGF5IGNhcmVmdWwgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IGlzIGhhbmRsZWQgY29ycmVjdGx5LCBzaW5jZSB0aGlzIGlzIGEga2VybmVsIGZ1bmN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gbXV0ZXhlcywgc2VtYXBob3Jlcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEFuZCBvZiBjb3Vyc2UsIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvd2VyIG1hbmFnZW1lbnQuIElzIGl0IHNldHRpbmcgdXAgYW55IGNsb2NrcyBvciBwb3dlciBkb21haW5zPyBBbnkgc2xlZXAgb3Igd2FrZS11cCBjYWxscz8gV2hhdCBpcyB0aGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IFRoZSBvdmVyYWxsIGdvYWwgaXMgdG8gZm9ybSBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiBob3cgYGRtaXJyb3JfZGV2aWNlX2luaXRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBkcml2ZXIncyBvcGVyYXRpb24sIGFuZCBob3cgcm9idXN0IGFuZCBlZmZpY2llbnQgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDQ6NDQuMDU4MzEzMjY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzc5LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzc5OlxcdHN0YXRpYyBpbnQgZG1pcnJvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsIGludCBpZClcXG4xNzgwOlxcdHtcXG4xNzgxOlxcdFxcdGRldl90IGRldjtcXG4xNzgyOlxcdFxcdGludCByZXQ7XFxuMTc4MzpcXHRcXG4xNzg0OlxcdFxcdGRldiA9IE1LREVWKE1BSk9SKGRtaXJyb3JfZGV2KSwgaWQpO1xcbjE3ODU6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2bWVtX2xvY2spO1xcbjE3ODY6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWxvY2spO1xcbjE3ODc6XFx0XFxuMTc4ODpcXHRcXHRjZGV2X2luaXQoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWNkZXZpY2UsIFxcdTAwMjZkbWlycm9yX2ZvcHMpO1xcbjE3ODk6XFx0XFx0bWRldmljZS1cXHUwMDNlY2RldmljZS5vd25lciA9IFRISVNfTU9EVUxFO1xcbjE3OTA6XFx0XFx0bWRldmljZS1cXHUwMDNlZGV2aWNlLnJlbGVhc2UgPSBkbWlycm9yX2RldmljZV9yZWxlYXNlO1xcbjE3OTE6XFx0XFxuMTc5MjpcXHRcXHRkZXZpY2VfaW5pdGlhbGl6ZShcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2aWNlKTtcXG4xNzkzOlxcdFxcdG1kZXZpY2UtXFx1MDAzZWRldmljZS5kZXZ0ID0gZGV2O1xcbjE3OTQ6XFx0XFxuMTc5NTpcXHRcXHRyZXQgPSBkZXZfc2V0X25hbWUoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWRldmljZSwgXFxcImhtbV9kbWlycm9yJXVcXFwiLCBpZCk7XFxuMTc5NjpcXHRcXHRpZiAocmV0KVxcbjE3OTc6XFx0XFx0XFx0Z290byBwdXRfZGV2aWNlO1xcbjE3OTg6XFx0XFxuMTc5OTpcXHRcXHQvKiBCdWlsZCBhIGxpc3Qgb2YgZnJlZSBaT05FX0RFVklDRSBzdHJ1Y3QgcGFnZXMgKi9cXG4xODAwOlxcdFxcdHJldCA9IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsobWRldmljZSwgTlVMTCwgZmFsc2UpO1xcbjE4MDE6XFx0XFx0aWYgKHJldClcXG4xODAyOlxcdFxcdFxcdGdvdG8gcHV0X2RldmljZTtcXG4xODAzOlxcdFxcbjE4MDQ6XFx0XFx0cmV0ID0gY2Rldl9kZXZpY2VfYWRkKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VjZGV2aWNlLCBcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2aWNlKTtcXG4xODA1OlxcdFxcdGlmIChyZXQpXFxuMTgwNjpcXHRcXHRcXHRnb3RvIHB1dF9kZXZpY2U7XFxuMTgwNzpcXHRcXG4xODA4OlxcdFxcdHJldHVybiAwO1xcbjE4MDk6XFx0XFxuMTgxMDpcXHRwdXRfZGV2aWNlOlxcbjE4MTE6XFx0XFx0cHV0X2RldmljZShcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2aWNlKTtcXG4xODEyOlxcdFxcdHJldHVybiByZXQ7XFxuMTgxMzpcXHR9XFxuMTgxNDpcXHRcXG4xODE1OlxcdHN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UpXFxuMTgxNjpcXHR7XFxuMTgxNzpcXHRcXHRjZGV2X2RldmljZV9kZWwoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWNkZXZpY2UsIFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZpY2UpO1xcbjE4MTg6XFx0XFx0cHV0X2RldmljZShcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2aWNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDQ6NDQuMDU4NTg0NjM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTg3NDMzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTZXR1cCBvZiBgZG1pcnJvcl9mb3BzYCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlJ3MganVtcGluZyByaWdodCBpbnRvIHNldHRpbmcgdXAgYGRtaXJyb3JfZm9wc2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIGtub3cgYGRtaXJyb3JgIGlzIGxpa2VseSByZWxhdGVkIHRvIGRhdGEgbWlycm9yaW5nIG9yIHJlcGxpY2F0aW9uLCBhbmQgdGhlIFwiZm9wc1wiIHN1ZmZpeCBhbG1vc3QgY2VydGFpbmx5IGluZGljYXRlcyBmaWxlIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGdlYXJlZCB0b3dhcmRzIHVuZGVyc3RhbmRpbmcgdGhlIHN0cnVjdHVyZSB0aGF0J3MgYmVpbmcgc2V0IHVwIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBkYXRhIHJlcGxpY2F0aW9uIHN0cmF0ZWd5LiBMZXQncyBkaWcgaW50byB3aGF0IGBkbWlycm9yX2ZvcHNgICphY3R1YWxseSogaXMuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZSBgZG1pcnJvcl9mb3BzYCBkYXRhIHN0cnVjdHVyZS4gSSdtIGV4cGVjdGluZyBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb24gcG9pbnRlcnMsIGltcGxlbWVudGluZyB0aGUgY29yZSBmaWxlLXN5c3RlbSBsZXZlbCBpbnRlcmFjdGlvbiBmb3IgdGhlIG1pcnJvcmluZyBwcm9jZXNzLiBTcGVjaWZpYyB0aGluZ3MgSSdtIGFudGljaXBhdGluZyBhcmUgb3BlcmF0aW9ucyBsaWtlIGBvcGVuYCwgYHJlYWRgLCBgd3JpdGVgLCBgY2xvc2VgLCBgZ2V0YXR0cmAsIGBta2RpcmAsIGBybWRpcmAsIGV0Yy4sIHRoYXQgbmVlZCB0byBiZSBpbnRlcmNlcHRlZCBvciBjdXN0b21pemVkIGZvciBkYXRhIGNvbnNpc3RlbmN5IGFuZCBjb25mbGljdCByZXNvbHV0aW9uIGluIGEgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuIEknbSBhbHNvIHJlYWR5IGZvciBhIGRlZXBlciBkaXZlIGludG8gaG93IHRoaXMgc3RydWN0dXJlIG1pZ2h0IGludGVyYWN0IHdpdGggdW5kZXJseWluZyBibG9jayBkZXZpY2VzLCBuZXR3b3JrIHByb3RvY29scywgb3Igb3RoZXIgc3RvcmFnZSBsYXllcnMuIFRoaXMgaXMgYSBjcml0aWNhbCBidWlsZGluZyBibG9jaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MjQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ0OjQ4Ljc1NzMzMDk0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMzYwMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfZm9wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz0xNTc9c3RhdGljIHZvaWQgZG1pcnJvcl9ib3VuY2VfZmluaShzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgKmJvdW5jZSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE2MS1cXG5saWIvdGVzdF9obW0uYzoxNjI6c3RhdGljIGludCBkbWlycm9yX2ZvcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG5saWIvdGVzdF9obW0uYy0xNjMte1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTg4PXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX2V2aWN0X2NodW5rKHN0cnVjdCBkbWlycm9yX2NodW5rICpjaHVuaylcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTIzNy1cXG5saWIvdGVzdF9obW0uYzoyMzg6c3RhdGljIGludCBkbWlycm9yX2ZvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG5saWIvdGVzdF9obW0uYy0yMzkte1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTQ4MT1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmVfY2h1bmtzKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE1MTItXFxubGliL3Rlc3RfaG1tLmM6MTUxMzpzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxubGliL3Rlc3RfaG1tLmMtMTUxNC1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY29tbWFuZCxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE1ODctXFxubGliL3Rlc3RfaG1tLmM6MTU4ODpzdGF0aWMgaW50IGRtaXJyb3JfZm9wc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5saWIvdGVzdF9obW0uYy0xNTg5LXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE2MTAtXFxubGliL3Rlc3RfaG1tLmM6MTYxMTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkbWlycm9yX2ZvcHMgPSB7XFxubGliL3Rlc3RfaG1tLmM6MTYxMjpcXHQub3BlblxcdFxcdD0gZG1pcnJvcl9mb3BzX29wZW4sXFxubGliL3Rlc3RfaG1tLmM6MTYxMzpcXHQucmVsZWFzZVxcdD0gZG1pcnJvcl9mb3BzX3JlbGVhc2UsXFxubGliL3Rlc3RfaG1tLmM6MTYxNDpcXHQubW1hcFxcdFxcdD0gZG1pcnJvcl9mb3BzX21tYXAsXFxubGliL3Rlc3RfaG1tLmM6MTYxNTpcXHQudW5sb2NrZWRfaW9jdGwgPSBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwsXFxubGliL3Rlc3RfaG1tLmMtMTYxNi1cXHQubGxzZWVrXFx0XFx0PSBkZWZhdWx0X2xsc2VlayxcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE3Nzk9c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTc4Ny1cXG5saWIvdGVzdF9obW0uYzoxNzg4OlxcdGNkZXZfaW5pdChcXHUwMDI2bWRldmljZS1cXHUwMDNlY2RldmljZSwgXFx1MDAyNmRtaXJyb3JfZm9wcyk7XFxubGliL3Rlc3RfaG1tLmMtMTc4OS1cXHRtZGV2aWNlLVxcdTAwM2VjZGV2aWNlLm93bmVyID0gVEhJU19NT0RVTEU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ0OjQ4Ljk3MDY5NzIxOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM0MTI4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgIEhhbmRsZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGNvbW1hbmQgaGFuZGxpbmcsIHdoaWNoIG1lYW5zIGl04oCZcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRtLW1pcnJvciBkZXZpY2UgaW50ZXJhY3RzIHdpdGggdXNlcnNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgdmFyaWV0eSBvZiBjb21tYW5kcyBpdCBwcm9jZXNzZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzdXBwb3J0ZWQgb3BlcmF0aW9ucy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IGFsbG93IG1lIHRvIHN0YXJ0IGNvbnNpZGVyaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgYW55IGludGVyZXN0aW5nIGNvbnRyb2wgZmxvd3Mgd2l0aGluIHRoZSBtaXJyb3IgaW1wbGVtZW50YXRpb24uIExldOKAmXMgc3RhcnQgcGlja2luZyBpdCBhcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDo1MS45MDQ4Mjk1MjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2htbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MTMsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MTM6XFx0c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbjE1MTQ6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNvbW1hbmQsXFxuMTUxNTpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4xNTE2OlxcdHtcXG4xNTE3OlxcdFxcdHZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnO1xcbjE1MTg6XFx0XFx0c3RydWN0IGhtbV9kbWlycm9yX2NtZCBjbWQ7XFxuMTUxOTpcXHRcXHRzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcjtcXG4xNTIwOlxcdFxcdGludCByZXQ7XFxuMTUyMTpcXHRcXG4xNTIyOlxcdFxcdGRtaXJyb3IgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuMTUyMzpcXHRcXHRpZiAoIWRtaXJyb3IpXFxuMTUyNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTI1OlxcdFxcbjE1MjY6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZjbWQsIHVhcmcsIHNpemVvZihjbWQpKSlcXG4xNTI3OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE1Mjg6XFx0XFxuMTUyOTpcXHRcXHRpZiAoY21kLmFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKVxcbjE1MzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTUzMTpcXHRcXHRpZiAoY21kLmFkZHIgXFx1MDAzZT0gKGNtZC5hZGRyICsgKGNtZC5ucGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpKVxcbjE1MzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTUzMzpcXHRcXG4xNTM0OlxcdFxcdGNtZC5jcGFnZXMgPSAwO1xcbjE1MzU6XFx0XFx0Y21kLmZhdWx0cyA9IDA7XFxuMTUzNjpcXHRcXG4xNTM3OlxcdFxcdHN3aXRjaCAoY29tbWFuZCkge1xcbjE1Mzg6XFx0XFx0Y2FzZSBITU1fRE1JUlJPUl9SRUFEOlxcbjE1Mzk6XFx0XFx0XFx0cmV0ID0gZG1pcnJvcl9yZWFkKGRtaXJyb3IsIFxcdTAwMjZjbWQpO1xcbjE1NDA6XFx0XFx0XFx0YnJlYWs7XFxuMTU0MTpcXHRcXG4xNTQyOlxcdFxcdGNhc2UgSE1NX0RNSVJST1JfV1JJVEU6XFxuMTU0MzpcXHRcXHRcXHRyZXQgPSBkbWlycm9yX3dyaXRlKGRtaXJyb3IsIFxcdTAwMjZjbWQpO1xcbjE1NDQ6XFx0XFx0XFx0YnJlYWs7XFxuMTU0NTpcXHRcXG4xNTQ2OlxcdFxcdGNhc2UgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVY6XFxuMTU0NzpcXHRcXHRcXHRyZXQgPSBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKGRtaXJyb3IsIFxcdTAwMjZjbWQpO1xcbjE1NDg6XFx0XFx0XFx0YnJlYWs7XFxuMTU0OTpcXHRcXG4xNTUwOlxcdFxcdGNhc2UgSE1NX0RNSVJST1JfTUlHUkFURV9UT19TWVM6XFxuMTU1MTpcXHRcXHRcXHRyZXQgPSBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKGRtaXJyb3IsIFxcdTAwMjZjbWQpO1xcbjE1NTI6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ0OjUxLjkwNTA0Nzc5OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5MjUwODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGBobW1fZG1pcnJvcmAgQ2hhcmFjdGVyIERldmljZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX0RFVmAgYW5kIGBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZU2AuIFRob3NlIGNhbGxzLCB3aGljaCBhcmUgaW1wb3J0YW50IGJlY2F1c2UgdGhleSdyZSBsaW5rZWQgdG8gdXNlciBzcGFjZSwgYXJlIGNhbGxpbmcgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIGFuZCBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAuIFRob3NlLCBpbiB0dXJuLCBhcmUgY2FsbGluZyBgbWlncmF0ZV92bWFfc2V0dXBgLiBJbW1lZGlhdGVseSwgdGhpcyBzY3JlYW1zIFwiZnV6emFibGUhXCIgSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgaG1tX2RtaXJyb3JgIGNoYXJhY3RlciBkZXZpY2UuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGFjY2Vzc2libGUgaW4gdGhlIGN1cnJlbnQgc3l6a2FsbGVyIGNvbmZpZz9cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1RFU1RfSE1NYCBpcyBlbmFibGVkLiBJdCdzIGEgdGVzdCBtb2R1bGUsIHNvIGl0IGNvdWxkIHZlcnkgd2VsbCBiZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIOKAkyBlaXRoZXIgYGxpYi9LY29uZmlnLmRlYnVnYCBvciBgbW0vS2NvbmZpZ2Ag4oCTIHRvIGJlIGNlcnRhaW4gaWYgaXQncyB0aGVyZS4gVGhhdCdsbCBiZSB0aGUgbmV4dCBzdGVwIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy4gSWYgaXQgaXMgZW5hYmxlZCwgdGhpcyBjb3VsZCBiZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGRpc2NvdmVyaW5nIHNvbWUga2VybmVsIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjEzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDQ6NTYuNTQ0MzAyMTI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY1NDQwMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRFU1RfSE1NXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjUtXFxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI3LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuLS1cXG5saWIvTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19URVNUX0xPQ0tVUCkgKz0gdGVzdF9sb2NrdXAub1xcbmxpYi9NYWtlZmlsZToxMDM6b2JqLSQoQ09ORklHX1RFU1RfSE1NKSArPSB0ZXN0X2htbS5vXFxubGliL01ha2VmaWxlLTEwNC1vYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSArPSB0ZXN0X2ZyZWVfcGFnZXMub1xcbi0tXFxubGliL3Rlc3RfaG1tX3VhcGkuaC02LSAqL1xcbmxpYi90ZXN0X2htbV91YXBpLmg6NzojaWZuZGVmIF9MSUJfVEVTVF9ITU1fVUFQSV9IXFxubGliL3Rlc3RfaG1tX3VhcGkuaDo4OiNkZWZpbmUgX0xJQl9URVNUX0hNTV9VQVBJX0hcXG5saWIvdGVzdF9obW1fdWFwaS5oLTktXFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oPTc0PWVudW0ge1xcbi0tXFxubGliL3Rlc3RfaG1tX3VhcGkuaC03OS1cXG5saWIvdGVzdF9obW1fdWFwaS5oOjgwOiNlbmRpZiAvKiBfTElCX1RFU1RfSE1NX1VBUElfSCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTU9Q09ORklHX0RFVklDRV9QUklWQVRFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc6NjpDT05GSUdfVEVTVF9ITU09bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZy03LUNPTkZJR19HVVBfVEVTVD15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaD0yMT1jaGVja190ZXN0X3JlcXVpcmVtZW50cygpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0zNS1cXHRcXHRlY2hvIFxcXCIkMDogWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWw6XFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoOjM2OlxcdFxcdGVjaG8gXFxcIkNPTkZJR19URVNUX0hNTT1tXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoLTM3LVxcdFxcdGV4aXQgJGtzZnRfc2tpcFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTowMi4wMDk3NTIzMjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwNTA1NjEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgcmV2b2x2ZXMgYXJvdW5kIGBDT05GSUdfVEVTVF9ITU1gLiBJdCBzZWVtcyBsaWtlIHRoYXQncyB0aGUga2V5IGNvbmZpZyBvcHRpb24gaGVyZS4gVGhlIHJlbGV2YW50IGNvZGUgY2hhbmdlIGlzIGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBmaWxlIGlzIG9ubHkgY29tcGlsZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSd2ZSBnb3Qgc29tZXRoaW5nIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgb3IgYENPTkZJR19ERVZJQ0VfQ09IRVJFTlRgIGVuYWJsZWQuIFJhdGhlciB0aGFuIHJlbHlpbmcgb24gZ3Vlc3N3b3JrLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzLiBUaGF0J2xsIHF1aWNrbHkgdGVsbCB0aGUgc3RvcnkuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE1NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ1OjA1LjMxNDgxMTA2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMTAyNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfZGV2aWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6MDUuNTg1OTE5OTA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTY1OTgyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgRGV2aWNlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYCBpbiBmcm9udCBvZiBtZS4gVGhhdCdzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBpdGVtIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogd2l0aGluIHRoZSBzeXN0ZW0gc2VsZWN0cyBvciB0cmlnZ2VycyBgREVWSUNFX01JR1JBVElPTmAuIFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBoZXJlLiBJdCdzIHRoZSBvbmx5IHdheSB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGZpbmQgdGhlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0ODksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTowOC45ODI1MjA3NTZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDMzOTU1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWSUNFX01JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTktXFxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTcwMS1cXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG4tLVxcbm1tL01ha2VmaWxlPTk5PW9iai0kKENPTkZJR19OVU1BKSArPSBtZW1vcnktdGllcnMub1xcbm1tL01ha2VmaWxlOjEwMDpvYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlLTEwMS1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ1OjE0Ljc4NTkyMzAxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg0ODQ4ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY3kgQ29uZmxpY3RzKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgaXNzdWUgaGluZ2VzIG9uIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB0aGUgY3J1Y2lhbCBlbGVtZW50cyBpbiB0aGlzIHNjZW5hcmlvLiBBbmQgdGhlIHRyaWdnZXIgZm9yIHRoZSB6b25lIGRldmljZSBzZXR1cCBzZWVtcyB0byBiZSBgVEVTVF9ITU1gLiBIbW1tLi4uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpbnRlcmFjdGlvbiBhbmQgdGhlIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbGliL0tjb25maWcuZGVidWdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYFRFU1RfSE1NYCBhbmQgYFpPTkVfREVWSUNFYCBhdCBhIGRlZXBlciBsZXZlbDsgc3BlY2lmaWNhbGx5LCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGFyZSBsaW5raW5nIHRoZW0/IEknbGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtcmVmZXJlbmNlcywgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGhpbnRzIGFib3V0IHdoZW4gYW5kIHdoeSBgWk9ORV9ERVZJQ0VgIG1pZ2h0IGJlIHNlbGVjdGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIGBURVNUX0hNTWAuIEEgcXVpY2sgc2NhbiBzaG91bGQgY2xhcmlmeSB0aGUgY29ubmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NToxOC4wNzA3NzQ4NDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTg3MjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJURVNUX0hNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjUtXFxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI3LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ1OjE4LjM3NjY1NDQ2OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA4NDg0MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkZWJ1ZyBjb25maWd1cmF0aW9uIGJldHRlci4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgbGliL0tjb25maWcuZGVidWdgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgZm9yIGZlYXR1cmUgZW5hYmxlbWVudC4gSSdtIHRoaW5raW5nIHRoYXQgbGluZSAzMzI2IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBsb2NhdGUgYSBzcGVjaWZpYyBkZWJ1ZyBmZWF0dXJlLCBvciBwZXJoYXBzIGEgY29uZGl0aW9uYWwgc2VjdGlvbiByZWxhdGluZyB0byBkZWJ1ZyBmdW5jdGlvbmFsaXRpZXMgaW4gdGhlIGtlcm5lbC4gVGhpcyBmaWxlIGNvbnRhaW5zIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGxpbmUgMzMyNiBzaG91bGQgcGlucG9pbnQgYSBzcGVjaWZpYyBjb25maWcgb3B0aW9uIG9yIGEgbG9naWNhbCBibG9jayBvZiBvcHRpb25zIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgc3RhdGUsIGFuZCBmaWd1cmUgb3V0IGhvdyB0byBtb2RpZnkgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBkZWJ1ZyBvdXRwdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6MjEuODg1MTQxNzE5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzIwOlxcdFxcdGhlbHBcXG4zMzIxOlxcdFxcdCAgVGVzdCBpZiB0aGUga2VybmVsIGlzIHplcm8taW5pdGlhbGl6aW5nIGhlYXAgYW5kIHBhZ2UgYWxsb2NhdGlvbnMuXFxuMzMyMjpcXHRcXHQgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZXN0IGluaXRfb25fYWxsb2MgYW5kIGluaXRfb25fZnJlZSBmZWF0dXJlcy5cXG4zMzIzOlxcdFxcbjMzMjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMjU6XFx0XFxuMzMyNjpcXHRjb25maWcgVEVTVF9ITU1cXG4zMzI3OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuMzMyODpcXHRcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuMzMyOTpcXHRcXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxuMzMzMDpcXHRcXHRzZWxlY3QgSE1NX01JUlJPUlxcbjMzMzE6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjMzMzI6XFx0XFx0aGVscFxcbjMzMzM6XFx0XFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cXG4zMzM0OlxcdFxcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxcbjMzMzU6XFx0XFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXFxuMzMzNjpcXHRcXG4zMzM3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzM4OlxcdFxcbjMzMzk6XFx0Y29uZmlnIFRFU1RfRlJFRV9QQUdFU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NToyMS44ODU2NzY3MzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMzE5MjY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBxdWVzdGlvbiBoYW5ncyBvbiB0aGUgdmFsdWUgb2YgYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBERVZJQ0VfUFJJVkFURWAgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBjb250cm9scy4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBzb3VyY2UuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBmb3IgYERFVklDRV9QUklWQVRFYCB3aXRoaW4gYG1tL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzcyMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6MjYuNjE4ODcyMDM3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTU3NjE0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjYyPWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI2NC1cXG5tbS9LY29uZmlnOjEyNjU6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjY2LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6MjYuOTc0NjQyMDQ3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjU2MjM5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIHRvIGxpbmUgMTI2NS4gVGhhdCBhcmVhIGxpa2VseSBob2xkcyBzb21lIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzb21lIHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzIGFyZSBiZWluZyBjb250cm9sbGVkIG9yIHdoYXQgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFscyBhcmUgYXQgcGxheS4gSXQncyBhIHF1aWNrIGFuZCB0YXJnZXRlZCBhcHByb2FjaDsgbm8gbmVlZCB0byB3YXN0ZSB0aW1lIHNjYW5uaW5nIHRoZSB3aG9sZSBmaWxlIHdoZW4gSSBoYXZlIGEgc3BlY2lmaWMgbG9jYXRpb24gdG8gY2hlY2suIExldCdzIHNlZSB3aGF0IHRoYXQgbGluZSwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHJldmVhbC4gSXQncyBhIGtleSBzcG90IHRvIGRpZyBpbnRvIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk4MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ1OjMwLjI0MDI2OTE0OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjYwOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTI2MTpcXHRcXG4xMjYyOlxcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4xMjYzOlxcdFxcdGJvb2xcXG4xMjY0OlxcdFxcbjEyNjU6XFx0Y29uZmlnIERFVklDRV9QUklWQVRFXFxuMTI2NjpcXHRcXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuMTI2NzpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuMTI2ODpcXHRcXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuMTI2OTpcXHRcXG4xMjcwOlxcdFxcdGhlbHBcXG4xMjcxOlxcdFxcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcXG4xMjcyOlxcdFxcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxcbjEyNzM6XFx0XFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXFxuMTI3NDpcXHRcXG4xMjc1OlxcdGNvbmZpZyBWTUFQX1BGTlxcbjEyNzY6XFx0XFx0Ym9vbFxcbjEyNzc6XFx0XFxuMTI3ODpcXHRjb25maWcgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXFxuMTI3OTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ1OjMwLjI0MDQyNzE0OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjA2NDEyOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBDb2RlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgbGlrZSBgVEVTVF9ITU1gIGlzLCBhdCBpdHMgY29yZSwgZGVwZW5kZW50IG9uIGBERVZJQ0VfUFJJVkFURWAuIEFuZCB0aGF0IGRlcGVuZGVuY3ksIGluIHR1cm4sIG5lZWRzIGBaT05FX0RFVklDRWAgdG8gYmUgYWN0aXZlLiBHb3QgaXQuIFNvIGZhciwgc28gZ29vZC4gVGhlbiwgYERFVklDRV9NSUdSQVRJT05gIGxvb2tzIGxpa2UgaXQncyBhIGNvbWJpbmF0aW9uIG9mIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBUaGlzIG1lYW5zLCB0byBnZXQgYERFVklDRV9NSUdSQVRJT05gIHdvcmtpbmcsIEkgbmVlZCBib3RoIG9mIHRob3NlIGNvbXBvbmVudHMuXG5cblRoZXJlZm9yZSwgaWYgSSBzZXQgYWxsIG9mIHRob3NlIHRoaW5ncyAtIGBURVNUX0hNTWAsIGBERVZJQ0VfUFJJVkFURWAsIGBNSUdSQVRJT05gLCBhbmQgYFpPTkVfREVWSUNFYCAtIHRvIGJlIGFjdGl2ZSwgdGhlIHJlbGV2YW50IGNvZGUgc2hvdWxkIGJlIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0LCBob2xkIG9uLi4uIGBNSUdSQVRJT05gLi4uIEkgKnRoaW5rKiBJIHJlY2FsbCB0aGF0IGJlaW5nIGVuYWJsZWQgcXVpdGUgYSBiaXQgaW4gdGhpcyBlbnZpcm9ubWVudC4gSnVzdCB0byBiZSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBgTUlHUkFUSU9OYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBsb2dpYyBpcyBzb3VuZCBoZXJlLCBhbmQgdGhhdCBJJ20gbm90IG92ZXJsb29raW5nIGFueSBvYnZpb3VzLCBwcmUtZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTozNS40NDY4NDM2MDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjEyMzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY5NS1cXG5tbS9LY29uZmlnOjY5Njpjb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTozNS45Mzg5NzQyMzVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MTU0MzIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCAtIExpbmUgNjk2KipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIHRleHQgbWVudGlvbnMgc3BlY2lmaWNhbGx5IGxpbmUgNjk2IGluIGBtbS9LY29uZmlnYC4gUmlnaHQsIGBtbS9LY29uZmlnYCBpcyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gS25vd2luZyB0aGlzLCBJIGV4cGVjdCB0byBmaW5kIGEgZGVzY3JpcHRpb24gYW5kIG1heWJlIGFuIGBpZmAvYGJvb2xgIGJsb2NrIHdpdGggYSBkZXBlbmRlbmN5IG9yIGRlZmF1bHQuIEkgYW0gbG9va2luZyBmb3IgYSBzcGVjaWZpYyB2YXJpYWJsZSBvciBvcHRpb24gdG8gdHdlYWsuIEkgd2lsbCByZWFkIGFyb3VuZCB0aGUgZ2l2ZW4gbGluZS4gVGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgNjk2IGlzIHdoYXQgd2lsbCByZXZlYWwgd2hhdCB0aGlzIG1vZHVsZSBkb2VzLiBGcm9tIHRoZXJlIEkgbWF5IGJlIGFibGUgdG8gZHJhdyBhbiBpbnRlbGxpZ2VudCBjb25jbHVzaW9uIHJlZ2FyZGluZyB0aGUgY3VycmVudCBpc3N1ZS4gTGV0J3MgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODk5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6MzguOTIwNTE5NjYyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzAyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0aGVscFxcbiA2OTE6XFx0XFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXFxuIDY5MjpcXHRcXHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXFxuIDY5MzpcXHRcXHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcXG4gNjk0OlxcdFxcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxcbiA2OTU6XFx0XFxuIDY5NjpcXHRjb25maWcgTUlHUkFUSU9OXFxuIDY5NzpcXHRcXHRib29sXFxuIDY5ODpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA2OTk6XFx0XFxuIDcwMDpcXHRjb25maWcgREVWSUNFX01JR1JBVElPTlxcbiA3MDE6XFx0XFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuIDcwMjpcXHRcXG4gNzAzOlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cXG4gNzA0OlxcdFxcdGJvb2xcXG4gNzA1OlxcdFxcbiA3MDY6XFx0Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuIDcwNzpcXHRcXHRib29sXFxuIDcwODpcXHRcXG4gNzA5OlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTozOC45MjI1NTI1MDFaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4NjU3MjY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IGluIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgbWlncmF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBzeXprYWxsZXIgZnJhbWV3b3JrLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgTUlHUkFUSU9OYCBpcyBlc3NlbnRpYWxseSBhIGJvb2xlYW4gZmxhZy4gSXQncyB0cmlnZ2VyZWQgYnkgYSB3aG9sZSBzdWl0ZSBvZiBvdGhlciwgbW9yZSBncmFudWxhciBvcHRpb25zIOKAkyB0aGluZ3MgbGlrZSBgTlVNQV9NSUdSQVRJT05gLCBgQ01BYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgZXZlbiBgQ09NUEFDVElPTmAuIFRoYXQgbWVhbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHN5emthbGxlcidzIGNvbmZpZ3VyYXRpb24sIEknbSBwcmV0dHkgY29uZmlkZW50IHRoYXQgYE1JR1JBVElPTmAgaXMsIGluIGZhY3QsIGVuYWJsZWQuIEl04oCZcyBiYWtlZCBpbnRvIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHNwZWNpZmljIG1lbW9yeSByZWdpb25zIGFuZCBkZXZpY2VzLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBpbnZlc3RpZ2F0ZSB0aGUgYFpPTkVfREVWSUNFYCBzZXR0aW5ncy4gVGhpcyBzaG91bGQgc2hlZCBsaWdodCBvbiBob3cgZGV2aWNlIG1lbW9yeSBpcyBtYW5hZ2VkIGluIHJlbGF0aW9uIHRvIHRoaXMgZ2VuZXJhbCBtaWdyYXRpb24gY2FwYWJpbGl0eSB0aGF0IGFwcGVhcnMgdG8gYmUgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQwNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6NDUuMTA5MTI3NzM1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY2MzA1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMzUtXFxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTo0NS4zNDU3NjYyNzVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQyOTI1MTgxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCBGaXgqKlxuXG5Pa2F5LCBzbyBgWk9ORV9ERVZJQ0VgIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzeXprYWxsZXIsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWVhbnMgd2UgY2FuIGZvY3VzIG9uIGVuYWJsaW5nIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIGZ1enppbmcgdGhlIGJ1ZyBmaXggaW4gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYC4gU2luY2UgYFpPTkVfREVWSUNFYCBpcyBzZXQsIHdlIG5lZWQgdG8gZW5hYmxlIGBURVNUX0hNTWAgdG8gbGV2ZXJhZ2UgdGhlIHRlc3QgbW9kdWxlLiAgSSBzZWUgdGhhdCBgVEVTVF9ITU1gIGlzIGEgdHJpc3RhdGUsIHNvIGxldCdzIGFkZCBpdCB0byBgRW5hYmxlQ29uZmlnc2AuIEJ1dCB3YWl0LCBgVEVTVF9ITU1gIG5lZWRzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBzaW5jZSB0aGF0J3MgdXN1YWxseSBlbmFibGVkLCBsZXQncyBhc3N1bWUgaXQgaXMgYW5kIGFkZCBgVEVTVF9ITU1gIGFzIGFuIGVuYWJsZWQgY29uZmlnLiBgREVWSUNFX1BSSVZBVEVgIGlzIGFsc28gbmVlZGVkLCBhcyBgVEVTVF9ITU1gIGRlcGVuZHMgb24gaXQgYXMgd2VsbC4gQW5kIGBERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgWk9ORV9ERVZJQ0VgLiBTbywgdGhlIGZpbmFsIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtcIlRFU1RfSE1NXCIsIFwiREVWSUNFX1BSSVZBVEVcIiwgXCJaT05FX0RFVklDRVwiXWAuXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCwgc28gdGhhdCdzIG9idmlvdXNseSBhIHN0cm9uZyBjYW5kaWRhdGUuIEJ1dCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGlzIGNhbGxlZCBmcm9tIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIHNvIHRoYXQncyBhIGdvb2Qgb25lIHRvby4gSSdtIGFsc28gc2VlaW5nIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGlzIGluIHRoZSBjYWxsIGNoYWluLiBTbywgYG1pZ3JhdGVfdm1hX3NldHVwYCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGFyZSBhbHNvIGdvb2QgZm9jdXMgc3ltYm9scy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsbCByZWFjaGFibGUgZnJvbSBvdXIgZnV6emluZyBlbnRyeSBwb2ludC5cblxuT2theSwgbGV0J3MgdmVyaWZ5IHJlYWNoYWJpbGl0eS4gYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIGNhbGxzIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIGBtaWdyYXRlX3ZtYV9zZXR1cGAgY2FsbHMgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgLiBgbWlncmF0ZV92bWFfY29sbGVjdGAgY2FsbHMgYHdhbGtfcGFnZV9yYW5nZV92bWFgLiBUaGF0IGxlYWRzIHRvIGEgd2FsayBvZiB0aGUgcGFnZSB0YWJsZXMgYW5kIGl0IGNhbGxzIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgdGhyb3VnaCBgbWlncmF0ZV92bWFfd2Fsa19vcHNgLiBJIGNhbiBzZWUgdGhhdCBgd2Fsay1cdTAwM2VvcHMtXHUwMDNlcG1kX2VudHJ5YCBpbiBgbWlncmF0ZV92bWFfd2Fsa19vcHNgIGlzIHNldCB0byBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBzbyBpdCAqaXMqIHJlYWNoYWJsZS4gRXhjZWxsZW50LlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgZGVwZW5kZW5jaWVzLiBgVEVTVF9ITU1gIG5lZWRzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIGBERVZJQ0VfUFJJVkFURWAgbmVlZHMgYFpPTkVfREVWSUNFYC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmUgYFRFU1RfSE1NYCwgYERFVklDRV9QUklWQVRFYCBhbmQgYFpPTkVfREVWSUNFYC5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBjb2xsZWN0cyBwYWdlcyBmb3IgbWlncmF0aW9uLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyB3aGVyZSByZXRyeWluZyBhZnRlciBhIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlsdXJlIGNvdWxkIGxlYWQgdG8gZHVwbGljYXRlIHBhZ2UgY29sbGVjdGlvbnMgYW5kIGFuIG92ZXJmbG93LiBUaGUgZml4IGFkZHMgYSBjaGVjayB0byBhdm9pZCByZS1jb2xsZWN0aW5nIHBhZ2VzIGlmIHRoZSBhZGRyZXNzIGlzbid0IHRoZSBzdGFydCBhZGRyZXNzIHdoZW4gcmV0cnlpbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYnVnIGZpeCBhbmQgd2FycmFudHMgZnV6emluZy5cblxuTXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHNob3VsZCBpbmNsdWRlOiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBgbWlncmF0ZV92bWFfc2V0dXBgLCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgLlxuXG5UaGUgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZTogYFtcIlRFU1RfSE1NXCIsIFwiREVWSUNFX1BSSVZBVEVcIiwgXCJaT05FX0RFVklDRVwiXWAuXG5cbkknbGwgZG91YmxlIGNoZWNrIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpcyBzdGF0aWM7IHllcyBpdCBpcyBzdGF0aWMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIGV4cG9ydGVkLCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGlzIHN0YXRpYy5cblxuTGV0J3MgY2hlY2sgd2hvIGVsc2UgY2FsbHMgYG1pZ3JhdGVfdm1hX3NldHVwYC4gSSBzZWUgRFJNIGRyaXZlcnMgKG5vdXZlYXUsIGFtZGdwdSkgYW5kIEtWTSBvbiBwb3dlcnBjLiBCdXQsIGJlY2F1c2UgYFRFU1RfSE1NYCBwcm92aWRlcyBhIGRpcmVjdCB1c2Vyc3BhY2UgaW50ZXJmYWNlIHRvIHRyaWdnZXIgdGhpcyB2aWEgaW9jdGwsIGBURVNUX0hNTWAgaXMgdGhlIGJlc3Qgd2F5IHRvIGZ1enogdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJ20gcmVhZHkgdG8gdXNlIHRoZXNlIGRldGFpbHMgd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc2NywiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6NTkuNjM4Mjg3MTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDEwNDc2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZFwiLFxuICAgIFwibWlncmF0ZV92bWFfc2V0dXBcIixcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9zZXR1cFwiLFxuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgd2hlcmUgaXQgY291bGQgY29sbGVjdCB0aGUgc2FtZSBhZGRyZXNzIHJhbmdlIHR3aWNlIGFuZCBvdmVyZmxvdyB0aGUgY29sbGVjdGlvbiBhcnJheXMgaWYgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIGZhaWxzIGFuZCBgYWRkciAhPSBzdGFydGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWlncmF0aW9uIGxvZ2ljIGZvciBkZXZpY2UgbWVtb3J5LiBJdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIEhNTSB0ZXN0IG1vZHVsZSAoYFRFU1RfSE1NYCkgd2hpY2ggZXhwb3NlcyBpb2N0bHMgdG8gdHJpZ2dlciBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow2z2pc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 11:33:19 +0000 UTC FinishedAt: 2026-07-08 11:46:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "302dfbff3e73be2ba5723237c6303244ec27cebb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE" ], "series_id": "a70121b8-5502-4566-8f4e-486426402a37" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_vma_collect_pmd", "migrate_vma_setup", "migrate_vma_collect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfc2V0dXAmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNTE0MWJlODBhZjM1OTE0NTQ5ODAyNzY1NzE1OGZjMmFiZDcxODQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMTo0MTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggMmZmZmViMWY5OTY5NGEuLjZjZWI0N2VjMWRhMjQ1IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuQEAgLTI1Nyw3ICYjNDM7MjU3LDEyIEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4gXHRwdGVfdCAqcHRlcDtcbiBcbiBhZ2Fpbjpcbi1cdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBjaGVjayBwbWQgd2hlbiBhZGRyIGlzIGF0IHN0YXJ0LCBuYW1lbHkgbm8gcHRlIGlzIGNvbGxlY3RlZC5cbiYjNDM7XHQgKiBJdCBhdm9pZHMgY29sbGVjdGluZyB0aGUgc2FtZSBhZGRyZXNzIHJhbmdlIFtzdGFydCwgYWRkcikgdHdpY2VcbiYjNDM7XHQgKiBhbmQgb3ZlcmZsb3dpbmcgdGhlIGNvbGxlY3Rpb24gYXJyYXlzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhZGRyID09IHN0YXJ0IFx1MDAyNlx1MDAyNiAocG1kX3RyYW5zX2h1Z2UoKnBtZHApIHx8ICFwbWRfcHJlc2VudCgqcG1kcCkpKSB7XG4gXHRcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTtcbiBcbiBcdFx0aWYgKHJldCA9PSAtRUFHQUlOKVxuQEAgLTI2Nyw4ICYjNDM7MjcyLDE4IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4gXHR9XG4gXG4gXHRwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgc3RhcnQsIFx1MDAyNnB0bCk7XG4tXHRpZiAoIXB0ZXApXG4mIzQzO1x0aWYgKCFwdGVwKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2tpcCB0aGUgcmVzdCBpZiBwbWQgYmVjb21lcyBodWdlIG9yIGNsZWFyZWQuIEZsdXNoIGlmIGFueVxuJiM0MztcdFx0ICogcHRlIGlzIG1vZGlmaWVkXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChhZGRyICE9IHN0YXJ0KSB7XG4mIzQzO1x0XHRcdGlmICh1bm1hcHBlZClcbiYjNDM7XHRcdFx0XHRmbHVzaF90bGJfcmFuZ2Uod2Fsay1cdTAwM2V2bWEsIHN0YXJ0LCBlbmQpO1xuJiM0MztcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKGFkZHIsIGVuZCwgd2Fsayk7XG4mIzQzO1x0XHR9XG4gXHRcdGdvdG8gYWdhaW47XG4mIzQzO1x0fVxuIFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbiBcdHB0ZXAgJiM0Mzs9IChhZGRyIC0gc3RhcnQpIC8gUEFHRV9TSVpFO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfc2V0dXAmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU1MTQxYmU4MGFmMzU5MTQ1NDk4MDI3NjU3MTU4ZmMyYWJkNzE4NDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCA4IDExOjQxOjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggMmZmZmViMWY5OTY5NGEuLjZjZWI0N2VjMWRhMjQ1IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTI1Nyw3ICYjNDM7MjU3LDEyIEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsCiAJcHRlX3QgKnB0ZXA7CiAKIGFnYWluOgotCWlmIChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkgewomIzQzOwkvKgomIzQzOwkgKiBPbmx5IGNoZWNrIHBtZCB3aGVuIGFkZHIgaXMgYXQgc3RhcnQsIG5hbWVseSBubyBwdGUgaXMgY29sbGVjdGVkLgomIzQzOwkgKiBJdCBhdm9pZHMgY29sbGVjdGluZyB0aGUgc2FtZSBhZGRyZXNzIHJhbmdlIFtzdGFydCwgYWRkcikgdHdpY2UKJiM0MzsJICogYW5kIG92ZXJmbG93aW5nIHRoZSBjb2xsZWN0aW9uIGFycmF5cy4KJiM0MzsJICovCiYjNDM7CWlmIChhZGRyID09IHN0YXJ0ICZhbXA7JmFtcDsgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSkgewogCQlpbnQgcmV0ID0gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRwLCBzdGFydCwgZW5kLCB3YWxrLCBmYXVsdF9mb2xpbyk7CiAKIAkJaWYgKHJldCA9PSAtRUFHQUlOKQpAQCAtMjY3LDggJiM0MzsyNzIsMTggQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCwKIAl9CiAKIAlwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgc3RhcnQsICZhbXA7cHRsKTsKLQlpZiAoIXB0ZXApCiYjNDM7CWlmICghcHRlcCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFNraXAgdGhlIHJlc3QgaWYgcG1kIGJlY29tZXMgaHVnZSBvciBjbGVhcmVkLiBGbHVzaCBpZiBhbnkKJiM0MzsJCSAqIHB0ZSBpcyBtb2RpZmllZAomIzQzOwkJICovCiYjNDM7CQlpZiAoYWRkciAhPSBzdGFydCkgewomIzQzOwkJCWlmICh1bm1hcHBlZCkKJiM0MzsJCQkJZmx1c2hfdGxiX3JhbmdlKHdhbGstJmd0O3ZtYSwgc3RhcnQsIGVuZCk7CiYjNDM7CQkJcmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspOwomIzQzOwkJfQogCQlnb3RvIGFnYWluOwomIzQzOwl9CiAJbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKIAlwdGVwICYjNDM7PSAoYWRkciAtIHN0YXJ0KSAvIFBBR0VfU0laRTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGV2aWNlIE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHR3ZWFraW5nIHRoZSBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGZ1bmN0aW9uLiBJIHNlZSB0aGF0IHRoZSBjb25kaXRpb24gZGV0ZXJtaW5pbmcgaWYgd2UgY2hlY2sgZm9yIGEgdHJhbnNwYXJlbnQgaHVnZSBwYWdlIChgcG1kX3RyYW5zX2h1Z2UoKnBtZHApYCkgb3Igbm9uLXByZXNlbnQgcGFnZSAoYCFwbWRfcHJlc2VudCgqcG1kcClgKSBpcyBub3cgY29uZGl0aW9uYWwuIEl0JiMzOTtzIG9ubHkgZXZhbHVhdGVkIGlmIHRoZSBjdXJyZW50IGFkZHJlc3MgKGBhZGRyYCkgaXMgZXF1YWwgdG8gdGhlIHN0YXJ0aW5nIGFkZHJlc3MgKGBzdGFydGApLiBUaGF0IGZlZWxzIGxpa2UgYSBzdWJ0bGUgY2hhbmdlLCBsaWtlbHkgYWltZWQgYXQgYSB2ZXJ5IHNwZWNpZmljIHNjZW5hcmlvIHdpdGhpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MuIEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjb25kaXRpb25hbCBjaGVjay4KClRoZSBvdGhlciBiaXQgaXMgbW9yZSBpbnRlcmVzdGluZy4gSXQgZGVhbHMgd2l0aCBhIGZhaWx1cmUgc2NlbmFyaW8gd2l0aGluIGBwdGVfb2Zmc2V0X21hcF9sb2NrYC4gSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIE5VTEwsIHRoZSBwYXRjaCBub3cgaW50cm9kdWNlcyBhIGNoZWNrLiBJZiB3ZSYjMzk7cmUgbm90IGF0IHRoZSBzdGFydCBhZGRyZXNzLCB3aGljaCBwcmVzdW1hYmx5IG1lYW5zIHdlJiMzOTt2ZSBtYWRlIHNvbWUgcHJvZ3Jlc3MsIGFuZCBpZiBgdW5tYXBwZWRgIGlzIHRydWUsIHRoZW4gd2UgZmx1c2ggdGhlIFRMQi4gVGhlIGxvZ2ljIGhlcmUgaXMgbWFraW5nIGFzc3VtcHRpb25zIGFib3V0IHdoYXQgaGFwcGVucyBpZiBgcHRlX29mZnNldF9tYXBfbG9ja2AgZmFpbHMuIEl0JiMzOTtzIHNheWluZyB0aGF0LCBpbiBzb21lIGNhc2VzLCB0aGUgc3lzdGVtIHNob3VsZCBzdG9wIHByb2Nlc3NpbmcgdGhlIG1pZ3JhdGlvbiBvbiBhbiBpbmRpdmlkdWFsIFBURSBhbmQgY29udGludWUgdG8gdGhlIG5leHQgb25lLCB3aXRoIHRoZSBwb3RlbnRpYWwgb2YgZmx1c2hpbmcgdGhlIFRMQiB0byBkZWFsIHdpdGggcGFydGlhbGx5IHVubWFwcGVkIFZNQSByYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoaXMgc3BlY2lmaWMgY29kZXBhdGggYW5kIHdoeS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHNhZmUgYXNzdW1wdGlvbiwgc28gYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoaXMgY2hhbmdlIGlzIHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jPTEzNz1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDQtXG5tbS9taWdyYXRlX2RldmljZS5jOjI0NTpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDYtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NTE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbWlncmF0ZV92bWFfd2Fsa19vcHMgPSB7XG5tbS9taWdyYXRlX2RldmljZS5jOjUxNTpcdC5wbWRfZW50cnlcdFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNTE2LVx0LnB0ZV9ob2xlXHRcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdpdGhpbiB0aGUgTWlncmF0aW9uIEZyYW1ld29yayoqCgpBbHJpZ2h0LCBzbyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGlzIGNsZWFybHkgYSBjb21wb25lbnQgb2YgYG1pZ3JhdGVfdm1hX3dhbGtfb3BzYC4gTWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgY29sbGVjdGluZyBvciBoYW5kbGluZyBwYWdlIG1hcCBlbnRyaWVzIChQTURzKSBkdXJpbmcgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgKFZNQSkgbWlncmF0aW9uIHByb2Nlc3MuIFRoZSAmIzM0O3dhbGsmIzM0OyBpbXBsaWVzIHNvbWUgc29ydCBvZiBpdGVyYXRpb24sIHBlcmhhcHMgb3ZlciBwYWdlIHRhYmxlcy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGFuZCB3aGF0IEkgcmVhbGx5IHdhbnQgdG8gdW5kZXJzdGFuZCwgaXMgd2hlcmUgdGhpcyBgbWlncmF0ZV92bWFfd2Fsa19vcHNgIGFic3RyYWN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIG1pZ3JhdGlvbiBtYWNoaW5lcnkuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdG8gZ3Jhc3AgaG93IHRoZXNlIGNvbGxlY3RlZCBQTURzIGFyZSB1c2VkLCB3aGV0aGVyIHRoZXkmIzM5O3JlIG1vdmVkLCBjb3BpZWQsIGludmFsaWRhdGVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hlcmUgYG1pZ3JhdGVfdm1hX3dhbGtfb3BzYCBpcyBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV93YWxrX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz0yNDU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTUxMy1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NTE0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgbWlncmF0ZV92bWFfd2Fsa19vcHMgPSB7XG5tbS9taWdyYXRlX2RldmljZS5jLTUxNS1cdC5wbWRfZW50cnlcdFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTUyOD1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9jb2xsZWN0KHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTU0Mi1cdHdhbGtfcGFnZV9yYW5nZV92bWEobWlncmF0ZS1cdTAwM2V2bWEsIG1pZ3JhdGUtXHUwMDNlc3RhcnQsIG1pZ3JhdGUtXHUwMDNlZW5kLFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1NDM6XHRcdFx0XHUwMDI2bWlncmF0ZV92bWFfd2Fsa19vcHMsIG1pZ3JhdGUpO1xubW0vbWlncmF0ZV9kZXZpY2UuYy01NDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBNaWdyYXRpb24gUHJvY2VzczogQSBQcm9jZWR1cmFsIEJyZWFrZG93bioqCgpSaWdodCwgc28gYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgbWlncmF0ZV92bWFfc2V0dXBgLiBUaGF0JiMzOTtzIHRoZSBrZXkgcmVsYXRpb25zaGlwIGhlcmUuIGBtaWdyYXRlX3ZtYV9zZXR1cGAgaXMgY2xlYXJseSB0aGUgcGFyZW50IGZ1bmN0aW9uLCB0aGUgb3JjaGVzdHJhdG9yLCBhbmQgaXQmIzM5O3MgdXNpbmcgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGFzIGEgc3Vib3JkaW5hdGUgdGFzay4gIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgd2VsbC1kZWZpbmVkIHByb2NlZHVyYWwgZmxvdyBpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIHRoZW4sIHdoZXJlIG9uZSBmdW5jdGlvbiBzZXRzIHRoaW5ncyB1cCBhbmQgYW5vdGhlciB0aGVuIGZvbGxvd3MgdG8gZ2F0aGVyIGRldGFpbHMgZm9yIHRoYXQgc2V0dXAuIFRoaXMgaW1wbGllcyBhIHZlcnkgc3BlY2lmaWMgc3RhZ2UgaW4gdGhlIHByb2Nlc3MuIEkgd291bGQgZXhwZWN0IGBtaWdyYXRlX3ZtYV9zZXR1cGAgdG8gYmUgdGhlIHBoYXNlIG9mIHRoZSBtaWdyYXRpb24gd2hpY2ggcHJlcGFyZXMgdGhlIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgZm9yIGNvcHlpbmcuIEl0IHNldHMgdXAgdGhlIGdyb3VuZHdvcmsg4oCTIHBlcmhhcHMgYWxsb2NhdGluZyByZXNvdXJjZXMsIGRldGVybWluaW5nIHJhbmdlcywgb3IgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsIG1lbW9yeSByZWdpb24gd2UmIzM5O3JlIGFib3V0IHRvIG1vdmUuICBgbWlncmF0ZV92bWFfY29sbGVjdGAsIHRoZXJlZm9yZSwgaXMgbGlrZWx5IHRoZSBuZXh0IHN0ZXAgaW4gd2hpY2ggaXQgY29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBWTUEgZm9yIHRoZSBtaWdyYXRpb24uIFRoaXMgY291bGQgYmUgY29sbGVjdGluZyBwb2ludGVycywgcGFnZSBmbGFncywgb3IgYW55IG90aGVyIG1ldGFkYXRhIHRoYXQgaXMgbmVlZGVkIGxhdGVyIG9uIGR1cmluZyB0aGUgYWN0dWFsIG1pZ3JhdGlvbi4gVGhpcyBtYWtlcyBhIGxvdCBvZiBzZW5zZS4gVGhlIHNldHVwIHBoYXNlIGRvZXNuJiMzOTt0IG5lZWQgdG8gaG9sZCBvbnRvIHRoaXMgZGF0YSwgc28gd2UgY2FuIHVzZSBhIHdvcmtlciBwcm9jZXNzIGZvciBpdC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aHkgaXQmIzM5O3Mgc3RydWN0dXJlZCB0aGlzIHdheSwgd2hhdCB0aGUgYWR2YW50YWdlcyBhcmUsIGFuZCBpZiB0aGUgYnJlYWtkb3duIGlzIGluIGxpbmUgd2l0aCBiZXN0IHByYWN0aWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz02ODU9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjkxLS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo2OTI6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxubW0vbWlncmF0ZV9kZXZpY2UuYy02OTMtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTc1NC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzU1OmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG5tbS9taWdyYXRlX2RldmljZS5jLTc1Ni17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03OTQtfVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3OTU6RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTc5Ni1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzODE9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MDM6ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDA0LSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQxMC0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDExOiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQxMi0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJiMzOTt0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDgxPWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5My1cdCAqIHRoZSBzb3VyY2UgZm9saW8uIFNvIGNhbGwgbWlncmF0ZV92bWFfdW5tYXAoKSBkaXJlY3RseSB0byB1bm1hcCB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ5NDpcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTUtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjkzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgbWlncmF0ZV92bWFfc2V0dXBgIEV4cG9ydCoqCgpBbHJpZ2h0LCBzbyBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UuIE5vdyB0aGUga2V5IHF1ZXN0aW9uIGlzOiB3aG8mIzM5O3MgYWN0dWFsbHkgKnVzaW5nKiBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgdG8gcHJvcGVybHkgZ3JvayB0aGUgaW50ZW50IGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgbGV2ZXJhZ2VkIGluIHRoZSBzeXN0ZW0uIFRoaXMgZXhwb3J0IGltbWVkaWF0ZWx5IGZsYWdzIGFzIGEgcG90ZW50aWFsIGludGVncmF0aW9uIHBvaW50IGFuZCBwcm9iYWJseSBtZXJpdHMgYSBkZWVwIGRpdmUgaW50byB0aGUgY2FsbGluZyBjb250ZXh0cy4gS25vd2luZyB0aGUgY29uc3VtZXJzIHdpbGwgcHJvdmlkZSBhIG11Y2ggbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzdWJzeXN0ZW0mIzM5O3MgYmVoYXZpb3VyLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZXhwb3J0IHRvIGZpbmQgd2hhdCBmdW5jdGlvbnMgYW5kIG1vZHVsZXMgZGVwZW5kIG9uIGl0IHRvIGJlIGFibGUgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjY0PXVzZSBoYXJkd2FyZSBETUEgb3IgZGV2aWNlIHNwZWNpZmljIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHRvIG1pZ3JhdGUgZGF0YS5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNjU6VGhlIG1pZ3JhdGVfdm1hX3NldHVwKCksIG1pZ3JhdGVfdm1hX3BhZ2VzKCksIGFuZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjY2LWZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gbWFrZSBkcml2ZXJzIGVhc2llciB0byB3cml0ZSBhbmQgdG8gY2VudHJhbGl6ZSBjb21tb25cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjk3PWJldHdlZW4gZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjb2RlIGFuZCBzaGFyZWQgY29tbW9uIGNvZGU6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMS0gICBUaGUgZGV2aWNlIGRyaXZlciBoYXMgdG8gcGFzcyBhIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAgdG9cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDI6ICAgbWlncmF0ZV92bWFfc2V0dXAoKSBzbyB0aGUgbW1hcF9yZWFkX2xvY2soKSBvciBtbWFwX3dyaXRlX2xvY2soKSBuZWVkcyB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMy0gICBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG1pZ3JhdGlvbi5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDQtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA1OjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA2LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNy0gICBUaGUgZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgYGBzdHJ1Y3QgbWlncmF0ZV92bWFgYCBmaWVsZHMgYW5kIHBhc3Nlc1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwODogICB0aGUgcG9pbnRlciB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGUgYGBhcmdzLVx1MDAzZWZsYWdzYGAgZmllbGQgaXMgdXNlZCB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwOS0gICBmaWx0ZXIgd2hpY2ggc291cmNlIHBhZ2VzIHNob3VsZCBiZSBtaWdyYXRlZC4gRm9yIGV4YW1wbGUsIHNldHRpbmdcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE3LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMxODogICBPbmUgb2YgdGhlIGZpcnN0IHN0ZXBzIG1pZ3JhdGVfdm1hX3NldHVwKCkgZG9lcyBpcyB0byBpbnZhbGlkYXRlIG90aGVyXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE5LSAgIGRldmljZSYjMzk7cyBNTVVzIHdpdGggdGhlIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKClgYCBhbmRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI0LSAgIGBgTU1VX05PVElGWV9NSUdSQVRFYGAgYW5kIHRoZSBgYG93bmVyYGAgZmllbGQgc2V0IHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzI1OiAgIHRoZSBgYGFyZ3MtXHUwMDNlcGdtYXBfb3duZXJgYCBmaWVsZCBwYXNzZWQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKS4gVGhpc1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyNi0gICBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gc2tpcCB0aGUgaW52YWxpZGF0aW9uIGNhbGxiYWNrIGFuZCBvbmx5XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMzNy0gICBpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgUFRFLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMzODogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIGFsc28gY2xlYXJzIHRoZSBgYGFyZ3MtXHUwMDNlZHN0YGAgYXJyYXkuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM5LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjEyPUhNTSDliIfmjaLliLDnm7TmjqXkvb/nlKggc3RydWN0IHBhZ2Ug55So5LqO6K6+5aSH5YaF5a2Y77yM6L+Z5L2/5b6X5aSn5aSa5pWw5YaF5qC45Luj56CB6Lev5b6E5LiN55+l6YGT5beu5byC44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMTgt55Sx5LqOIENQVSDml6Dms5Xnm7TmjqXorr/pl67orr7lpIflhoXlrZjvvIzlm6DmraTorr7lpIfpqbHliqjnqIvluo/lv4Xpobvkvb/nlKjnoazku7YgRE1BIOaIluiuvuWkh+eJueWumueahOWKoOi9vS/lrZhcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjE5OuWCqOaMh+S7pOadpei/geenu+aVsOaNruOAgm1pZ3JhdGVfdm1hX3NldHVwKCnjgIFtaWdyYXRlX3ZtYV9wYWdlcygpIOWSjFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMjAtbWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTI0Mz1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQ5LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTA6ICAg6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75bCGIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAg5Lyg6YCS57uZbWlncmF0ZV92bWFfc2V0dXAoKe+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTEtICAg5Zug5q2k6ZyA6KaB5Zyo6L+B56e75pyf6Ze05L+d55WZIG1tYXBfcmVhZF9sb2NrKCkg5oiWIG1tYXBfd3JpdGVfbG9jaygp44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Mi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUzOjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1NC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU1LSAgIOiuvuWkh+mpseWKqOWIneWni+WMluS6hiBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIOeahOWtl+aute+8jOW5tuWwhuivpeaMh+mSiOS8oOmAkue7mVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTY6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeOAgmBgYXJncy1cdTAwM2VmbGFnc2BgIOWtl+auteaYr+eUqOadpei/h+a7pOWTquS6m+a6kOmhtemdouW6lOivpeiiq+i/geenu+OAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTctICAg5L6L5aaC77yM6K6+572uIGBgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTWBgIOWwhuWPqui/geenu+ezu+e7n+WGheWtmO+8jOiuvue9rlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjYyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjM6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeaJgOWBmueahOesrOS4gOatpeaYr+eUqCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KClgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjQtICAg5ZKMIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKClgYCDosIPnlKjmnaXpgY3ljoborr7lpIflkajlm7TnmoTpobXooajvvIzkvb9cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Ny0gICDlhbYgYGBldmVudGBgIOWtl+auteiuvue9ruS4uk1NVV9OT1RJRllfTUlHUkFURe+8jCBgYG93bmVyYGAg5a2X5q616K6+572u5Li65Lyg6YCS57uZXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2ODogICBtaWdyYXRlX3ZtYV9zZXR1cCgp55qEIGBgYXJncy1cdTAwM2VwZ21hcF9vd25lcmBgIOWtl+auteOAgui/meWFgeiuuOiuvuWkh+mpseWKqOi3s+i/h+aXoFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjktICAg5pWI5YyW5Zue6LCD77yM5Y+q5peg5pWI5YyW6YKj5Lqb5a6e6ZmF5q2j5Zyo6L+B56e755qE6K6+5aSH56eB5pyJTU1V5pig5bCE44CC6L+Z5LiA54K55bCG5Zyo5LiL5LiA6IqC6K+m57uG6Kej6YeK44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzUtICAgYGBsb2NrX3BhZ2UoKWBg6ZSB5a6a77yM5LiOTFJV6ZqU56a777yI5aaC5p6c57O757uf5YaF5a2Y5ZKM6K6+5aSH56eB5pyJ6aG15LiN5ZyoTFJV5LiK77yJ77yM5LuO6L+bXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI3NjogICDnqIvkuK3lj5bmtojmmKDlsITvvIzlubbmj5LlhaXkuIDkuKrnibnmrornmoTov4Hnp7tQVEXmnaXku6Pmm7/ljp/mnaXnmoRQVEXjgIIgbWlncmF0ZV92bWFfc2V0dXAoKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzctICAg6L+Y5riF6Zmk5LqGIGBgYXJncy1cdTAwM2Vkc3RgYCDmlbDnu4TjgIJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUzOC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTM5Olx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlnKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTQwLVx0aWYgKHJldClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTc0MD1zdGF0aWMgaW50IGt2bXBwY19zdm1fcGFnZV9pbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2MC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NzYxOlx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlnKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTM5ND1zdm1fbWlncmF0ZV92bWFfdG9fdnJhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NDMyOlx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNm1pZ3JhdGUpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00MzMtXHRpZiAocikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkzPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzQtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjczNTpcdHIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzM2LVx0aWYgKHIpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MzUxNT1zdm1fcmFuZ2VfYmVzdF9wcmVmZXRjaF9sb2NhdGlvbihzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODItICogYW5kIHJlc3RvcmUgd29yazpcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTgzOiAqIDEuIG1pZ3JhdGVfdm1hX3NldHVwIGludmFsaWRhdGUgcGFnZXMsIE1NVSBub3RpZmllciBjYWxsYmFjayBzdm1fcmFuZ2VfZXZpY3RcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNTg0LSAqICAgIHN0b3BzIGFsbCBxdWV1ZXMsIHNjaGVkdWxlIHJlc3RvcmUgd29ya1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTYxNj1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjgzLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Njg0Olx0ZXJyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODUtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEyMTE9c3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyNjQtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjY1Olx0ZXJyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjY2LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTIzNS1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjM2Olx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpIFx1MDAzYyAwKVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM3LVx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTgyMj1ub3V2ZWF1X2RtZW1fbWlncmF0ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODcxLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6ODcyOlx0XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTg3My1cdFx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNjA9c3RydWN0IG1pZ3JhdGVfdm1hIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjYtXHQgKiBUaGUgc3JjIGFycmF5IG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIgYWZ0ZXJcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE2NzpcdCAqIG1pZ3JhdGVfdm1hX3NldHVwKCksIGFuZCBtdXN0IG5vdCBjaGFuZ2UgdGhlIGRzdCBhcnJheSBhZnRlclxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY4LVx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5NC1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5NTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5Ni12b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XG4tLVxubGliL3Rlc3RfaG1tLmM9MTEyMD1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4tLVxubGliL3Rlc3RfaG1tLmMtMTE2NC1cbmxpYi90ZXN0X2htbS5jOjExNjU6XHRcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpO1xubGliL3Rlc3RfaG1tLmMtMTE2Ni1cdFx0aWYgKHJldClcbi0tXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMjQyLVx0XHRcdFx0TUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EO1xubGliL3Rlc3RfaG1tLmM6MTI0MzpcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG5saWIvdGVzdF9obW0uYy0xMjQ0LVx0XHRpZiAocmV0KVxuLS1cbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTcwNS1cdC8qXG5saWIvdGVzdF9obW0uYzoxNzA2Olx0ICogSW4gcHJhY3RpY2UgbWlncmF0ZV92bWFfc2V0dXAoKSBzaG91bGQgbmV2ZXIgZmFpbCB1bmxlc3MgdGhlXG5saWIvdGVzdF9obW0uYy0xNzA3LVx0ICogdGVzdCBpcyB3cm9uZyBhcyBpdCBqdXN0IHRlc3RzIHNvbWUgc3RhdGljIFZNQSBwcm9wZXJ0aWVzLlxubGliL3Rlc3RfaG1tLmMtMTcwOC1cdCAqL1xubGliL3Rlc3RfaG1tLmM6MTcwOTpcdGlmIChtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKSkge1xubGliL3Rlc3RfaG1tLmMtMTcxMC1cdFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9Njg1PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTY5MS0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NjkyOiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgLSBwcmVwYXJlIHRvIG1pZ3JhdGUgYSByYW5nZSBvZiBtZW1vcnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjkzLSAqIEBhcmdzOiBjb250YWlucyB0aGUgdm1hLCBzdGFydCwgYW5kIHBmbnMgYXJyYXlzIGZvciB0aGUgbWlncmF0aW9uXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NTQtICovXG5tbS9taWdyYXRlX2RldmljZS5jOjc1NTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NTYte1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzk0LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6Nzk1OkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xubW0vbWlncmF0ZV9kZXZpY2UuYy03OTYtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzgxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwMi0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDAzOiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkgZXhjZXB0IHRoYXRcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQwNC0gKiBpbnN0ZWFkIG9mIGxvb2tpbmcgdXAgcGFnZXMgYmFzZWQgb24gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzIGEgcmFuZ2Ugb2Zcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MTAtICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQxMTogKiBMaWtlIG1pZ3JhdGVfdm1hX3NldHVwKCkgdGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYSByZWZlcmVuY2UgYW5kIGxvY2sgYW55XG5tbS9taWdyYXRlX2RldmljZS5jLTE0MTItICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbiYjMzk7dCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ4MT1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0OTMtXHQgKiB0aGUgc291cmNlIGZvbGlvLiBTbyBjYWxsIG1pZ3JhdGVfdm1hX3VubWFwKCkgZGlyZWN0bHkgdG8gdW5tYXAgdGhlXG5tbS9taWdyYXRlX2RldmljZS5jOjE0OTQ6XHQgKiBmb2xpbyBhcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIHdpbGwgZmFpbCBpZiBhcmdzLnZtYSA9PSBOVUxMLlxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk1LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbWlncmF0ZV92bWFfc2V0dXBgIEZ1bmN0aW9uIGFuZCB0aGUgQnVnIEZpeCoqCgpPa2F5LCBzbyBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIHBvcHBpbmcgdXAgaW4gYSBmZXcgcGxhY2VzIOKAkyBgbGliL3Rlc3RfaG1tLmNgLCBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmNgLCBhbmQgZXZlbiBvdmVyIGluIHRoZSBBTUQgYW5kIFBvd2VyUEMgY29kZSB3aXRoIGBrZmRfbWlncmF0ZS5jYCBhbmQgYGJvb2szc19odl91dm1lbS5jYC4gVGhhdCB0ZXN0IG1vZHVsZSBpbiBgbGliL3Rlc3RfaG1tLmNgIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBITU0sIEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQsIHdoaWNoIEkmIzM5O20gZmFtaWxpYXIgd2l0aCBpbiB0aGUgY29udGV4dCBvZiBkZXZpY2UgbWVtb3J5IGFuZCBzaGFyaW5nLgoKTm93LCB0aGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgY2hhbmdlLi4uIHRoZSBjb21taXQgbWVzc2FnZSBpcyBrZXkgaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgYnVnIHdhcyByZWxhdGVkIHRvIHRoZSBjb25kaXRpb24gYGFkZHIgIT0gc3RhcnRgIGNhdXNpbmcgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIHRvIGZhaWwuIFRoaXMgd291bGQgbGVhZCB0byBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBvciBza2lwcGluZyBvZiBhZGRyZXNzZXMsIHdoaWNoIGlzIGNsZWFybHkgcHJvYmxlbWF0aWMuIFRoZSBmaXggZXhwbGljaXRseSBtZW50aW9ucyBvbmx5IGNoZWNraW5nIHRoZSBQTUQgKFBhZ2UgTWFwIERpcmVjdG9yeSkgd2hlbiB0aGUgYWRkcmVzcyBpcyB0aGUgc3RhcnRpbmcgYWRkcmVzcyBhbmQgKm5vKiBQVEVzIGhhdmUgYmVlbiBjb2xsZWN0ZWQsIGF2b2lkaW5nIHJlZHVuZGFudCBjb2xsZWN0aW9uIGFuZCBvdmVyZmxvd2luZyB0aG9zZSBhcnJheXMuIEFsc28sIGl04oCZcyBza2lwcGluZyBpZiB0aGUgUE1EIGJlY29tZXMgaHVnZSBvciBjbGVhcmVkIGFuZCBmbHVzaGluZyBpZiBhbnkgUFRFcyBhcmUgbW9kaWZpZWQuIEnigJltIGd1ZXNzaW5nIHRoaXMgaXMgYWxsIGFib3V0IHBlcmZvcm1hbmNlIGFuZCBhdm9pZGluZyBkb3VibGUtY29sbGVjdGluZyBvZiByZWdpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbWlncmF0ZWQuIEkgY2FuIHNlZSBob3cgdGhhdOKAmXMgYSB0cmlja3kgcmFjZSB0byBnZXQgcmlnaHQsIGVzcGVjaWFsbHkgd2l0aCBtdWx0aXBsZSBkZXZpY2VzIGluIHBsYXkuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtbS9taWdyYXRlX2RldmljZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4gMjQ2Olx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIDI0NzpcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlbmQsXG4gMjQ4Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiAyNDk6XHR7XG4gMjUwOlx0XHRzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gMjUxOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuIDI1MjpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXHUwMDNldm1fbW07XG4gMjUzOlx0XHR1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydCwgdW5tYXBwZWQgPSAwO1xuIDI1NDpcdFx0c3BpbmxvY2tfdCAqcHRsO1xuIDI1NTpcdFx0c3RydWN0IGZvbGlvICpmYXVsdF9mb2xpbyA9IG1pZ3JhdGUtXHUwMDNlZmF1bHRfcGFnZSA/XG4gMjU2Olx0XHRcdHBhZ2VfZm9saW8obWlncmF0ZS1cdTAwM2VmYXVsdF9wYWdlKSA6IE5VTEw7XG4gMjU3Olx0XHRwdGVfdCAqcHRlcDtcbiAyNTg6XHRcbiAyNTk6XHRhZ2FpbjpcbiAyNjA6XHRcdC8qXG4gMjYxOlx0XHQgKiBPbmx5IGNoZWNrIHBtZCB3aGVuIGFkZHIgaXMgYXQgc3RhcnQsIG5hbWVseSBubyBwdGUgaXMgY29sbGVjdGVkLlxuIDI2MjpcdFx0ICogSXQgYXZvaWRzIGNvbGxlY3RpbmcgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSBbc3RhcnQsIGFkZHIpIHR3aWNlXG4gMjYzOlx0XHQgKiBhbmQgb3ZlcmZsb3dpbmcgdGhlIGNvbGxlY3Rpb24gYXJyYXlzLlxuIDI2NDpcdFx0ICovXG4gMjY1Olx0XHRpZiAoYWRkciA9PSBzdGFydCBcdTAwMjZcdTAwMjYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSkge1xuIDI2NjpcdFx0XHRpbnQgcmV0ID0gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRwLCBzdGFydCwgZW5kLCB3YWxrLCBmYXVsdF9mb2xpbyk7XG4gMjY3Olx0XG4gMjY4Olx0XHRcdGlmIChyZXQgPT0gLUVBR0FJTilcbiAyNjk6XHRcdFx0XHRnb3RvIGFnYWluO1xuIDI3MDpcdFx0XHRpZiAocmV0ID09IDApXG4gMjcxOlx0XHRcdFx0cmV0dXJuIDA7XG4gMjcyOlx0XHR9XG4gMjczOlx0XG4gMjc0Olx0XHRwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgc3RhcnQsIFx1MDAyNnB0bCk7XG4gMjc1Olx0XHRpZiAoIXB0ZXApIHtcbiAyNzY6XHRcdFx0LypcbiAyNzc6XHRcdFx0ICogU2tpcCB0aGUgcmVzdCBpZiBwbWQgYmVjb21lcyBodWdlIG9yIGNsZWFyZWQuIEZsdXNoIGlmIGFueVxuIDI3ODpcdFx0XHQgKiBwdGUgaXMgbW9kaWZpZWRcbiAyNzk6XHRcdFx0ICovXG4gMjgwOlx0XHRcdGlmIChhZGRyICE9IHN0YXJ0KSB7XG4gMjgxOlx0XHRcdFx0aWYgKHVubWFwcGVkKVxuIDI4MjpcdFx0XHRcdFx0Zmx1c2hfdGxiX3JhbmdlKHdhbGstXHUwMDNldm1hLCBzdGFydCwgZW5kKTtcbiAyODM6XHRcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKGFkZHIsIGVuZCwgd2Fsayk7XG4gMjg0Olx0XHRcdH1cbiAyODU6XHRcdFx0Z290byBhZ2FpbjtcbiAyODY6XHRcdH1cbiAyODc6XHRcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG4gMjg4Olx0XHRwdGVwICYjNDM7PSAoYWRkciAtIHN0YXJ0KSAvIFBBR0VfU0laRTtcbiAyODk6XHRcbiAyOTA6XHRcdGZvciAoOyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgJiM0Mzs9IFBBR0VfU0laRSwgcHRlcCYjNDM7JiM0MzspIHtcbiAyOTE6XHRcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcbiAyOTI6XHRcdFx0dW5zaWduZWQgbG9uZyBtcGZuID0gMCwgcGZuO1xuIDI5MzpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIDI5NDpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiAyOTU6XHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiAyOTY6XHRcdFx0cHRlX3QgcHRlO1xuIDI5NzpcdFxuIDI5ODpcdFx0XHRwdGUgPSBwdGVwX2dldChwdGVwKTtcbiAyOTk6XHRcbiAzMDA6XHRcdFx0aWYgKHB0ZV9ub25lKHB0ZSkpIHtcbiAzMDE6XHRcdFx0XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKSB7XG4gMzAyOlx0XHRcdFx0XHRtcGZuID0gTUlHUkFURV9QRk5fTUlHUkFURTtcbiAzMDM6XHRcdFx0XHRcdG1pZ3JhdGUtXHUwMDNlY3BhZ2VzJiM0MzsmIzQzOztcbiAzMDQ6XHRcdFx0XHR9XG4gMzA1Olx0XHRcdFx0Z290byBuZXh0O1xuIDMwNjpcdFx0XHR9XG4gMzA3Olx0XG4gMzA4Olx0XHRcdGlmICghcHRlX3ByZXNlbnQocHRlKSkge1xuIDMwOTpcdFx0XHRcdC8qXG4gMzEwOlx0XHRcdFx0ICogT25seSBjYXJlIGFib3V0IHVuYWRkcmVzc2FibGUgZGV2aWNlIHBhZ2Ugc3BlY2lhbFxuIDMxMTpcdFx0XHRcdCAqIHBhZ2UgdGFibGUgZW50cnkuIE90aGVyIHNwZWNpYWwgc3dhcCBlbnRyaWVzIGFyZSBub3RcbiAzMTI6XHRcdFx0XHQgKiBtaWdyYXRhYmxlLCBhbmQgd2UgaWdub3JlIHJlZ3VsYXIgc3dhcHBlZCBwYWdlLlxuIDMxMzpcdFx0XHRcdCAqL1xuIDMxNDpcdFx0XHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcbiAzMTU6XHRcdFx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbiAzMTY6XHRcdFx0XHRcdGdvdG8gbmV4dDtcbiAzMTc6XHRcbiAzMTg6XHRcdFx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4gMzE5Olx0XHRcdFx0cGdtYXAgPSBwYWdlX3BnbWFwKHBhZ2UpO1xuIDMyMDpcdFx0XHRcdGlmICghKG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2XG4gMzIxOlx0XHRcdFx0XHRNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpIHx8XG4gMzIyOlx0XHRcdFx0ICAgIHBnbWFwLVx1MDAzZW93bmVyICE9IG1pZ3JhdGUtXHUwMDNlcGdtYXBfb3duZXIpXG4gMzIzOlx0XHRcdFx0XHRnb3RvIG5leHQ7XG4gMzI0Olx0XG4gMzI1Olx0XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIDMyNjpcdFx0XHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuIDMyNzpcdFx0XHRcdFx0aW50IHJldDtcbiAzMjg6XHRcbiAzMjk6XHRcdFx0XHRcdC8qIG1pZ3JhdGVfdm1hX3NwbGl0X2ZvbGlvKCkgY29uc3VtZXMgdGhpcyByZWZlcmVuY2UgKi9cbiAzMzA6XHRcdFx0XHRcdGlmIChmb2xpbyAhPSBmYXVsdF9mb2xpbylcbiAzMzE6XHRcdFx0XHRcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiAzMzI6XHRcdFx0XHRcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIDMzMzpcdFx0XHRcdFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xuIDMzNDpcdFx0XHRcdFx0cmV0ID0gbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oZm9saW8sXG4gMzM1Olx0XHRcdFx0XHRcdFx0XHQgIG1pZ3JhdGUtXHUwMDNlZmF1bHRfcGFnZSk7XG4gMzM2Olx0XG4gMzM3Olx0XHRcdFx0XHRpZiAocmV0KSB7XG4gMzM4Olx0XHRcdFx0XHRcdGlmICh1bm1hcHBlZClcbiAzMzk6XHRcdFx0XHRcdFx0XHRmbHVzaF90bGJfcmFuZ2Uod2Fsay1cdTAwM2V2bWEsIHN0YXJ0LCBlbmQpO1xuIDM0MDpcdFxuIDM0MTpcdFx0XHRcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKGFkZHIsIGVuZCwgd2Fsayk7XG4gMzQyOlx0XHRcdFx0XHR9XG4gMzQzOlx0XG4gMzQ0Olx0XHRcdFx0XHRnb3RvIGFnYWluO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBgbWlncmF0ZV92bWFfc2V0dXBgLiBUaGF0JiMzOTtzIGdvb2QsIGJlY2F1c2UgYG1pZ3JhdGVfdm1hX3NldHVwYCBpcyBhY3R1YWxseSB1c2VkIGluIGEgZmV3IHBsYWNlcy4gSSBrbm93IGl0JiMzOTtzIHVzZWQgYnkgdGhlIEhNTSB0ZXN0cywgc3BlY2lmaWNhbGx5IGluIGBsaWIvdGVzdF9obW0uY2AsIHdoaWNoLCBiYXNlZCBvbiB0aGUgY29uZmlnIEkga25vdywgaXMgY29udHJvbGxlZCBieSBgQ09ORklHX1RFU1RfSE1NYC4gQmV5b25kIHRoYXQsIGl0JiMzOTtzIGFsc28gdXRpbGl6ZWQgYnkgdGhvc2UgRFJNIGRyaXZlcnMsIG5vdXZlYXUgYW5kIGFtZGdwdSwgYW5kIGFsc28gS1ZNIG9uIHBvd2VycGMuCgpJZiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhpcyBwcm9wZXJseSwgZW5hYmxpbmcgYENPTkZJR19URVNUX0hNTWAgc2VlbXMgbGlrZSBhIHNvbGlkIGZpcnN0IHN0ZXAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBjb250cm9sbGVkIGVudmlyb25tZW50IHRvIGZvY3VzIG9uIGVpdGhlciBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGRpcmVjdGx5LCBvciBpdHMgcGFyZW50LCBgbWlncmF0ZV92bWFfc2V0dXBgLiBJIG5lZWQgdG8gZGlnIGludG8gYGxpYi90ZXN0X2htbS5jYCB0aG91Z2gsIGFuZCBzZWUgaWYgaXQgZXhwb3NlcyBhbnkgdXNhYmxlIGludGVyZmFjZSB0byB1c2VyIHNwYWNlLiBUaGF0IHdvdWxkIG1ha2UgdGhpbmdzICptdWNoKiBlYXNpZXIgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmM9MTg2MD1zdGF0aWMgdm9pZCBfX2V4aXQgaG1tX2RtaXJyb3JfZXhpdCh2b2lkKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE4NjktXG5saWIvdGVzdF9obW0uYzoxODcwOm1vZHVsZV9pbml0KGhtbV9kbWlycm9yX2luaXQpO1xubGliL3Rlc3RfaG1tLmMtMTg3MS1tb2R1bGVfZXhpdChobW1fZG1pcnJvcl9leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGhtbV9kbWlycm9yX2luaXRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBobW1fZG1pcnJvcl9pbml0YC4mIzM0OyBObyBwcmVhbWJsZSwganVzdCBzdHJhaWdodCB0byB0aGUgcG9pbnQuIFdlJiMzOTtyZSBhc3N1bWluZyB3ZSBib3RoIGtub3cgdGhlIGNvbnRleHQsIGFuZCBJJiMzOTttIG1lbnRhbGx5IGZpbGluZyB0aGlzIHVuZGVyIHNvbWV0aGluZyB0aGF0IG5lZWRzIGF0dGVudGlvbiwgcmVxdWlyZXMgdmVyaWZpY2F0aW9uLCBvciBwZXJoYXBzIGhhcyByYWlzZWQgYSBxdWVzdGlvbi4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGEgZGlzdHJpYnV0ZWQgbWlycm9yaW5nIHN5c3RlbSB0byBhIGRpYWdub3N0aWMgZnVuY3Rpb24uIFRoZSBzcGVjaWZpY3MgYXJlIGlycmVsZXZhbnQsIHRoZSBrZXkgaXMgZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MzA6XHRcdFx0Z290byBlcnJfdW5yZWc7XG4xODMxOlx0XG4xODMyOlx0XHRtZW1zZXQoZG1pcnJvcl9kZXZpY2VzLCAwLCBETUlSUk9SX05ERVZJQ0VTICogc2l6ZW9mKGRtaXJyb3JfZGV2aWNlc1swXSkpO1xuMTgzMzpcdFx0ZG1pcnJvcl9kZXZpY2VzW25kZXZpY2VzJiM0MzsmIzQzO10uem9uZV9kZXZpY2VfdHlwZSA9XG4xODM0Olx0XHRcdFx0XHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEU7XG4xODM1Olx0XHRkbWlycm9yX2RldmljZXNbbmRldmljZXMmIzQzOyYjNDM7XS56b25lX2RldmljZV90eXBlID1cbjE4MzY6XHRcdFx0XHRcdEhNTV9ETUlSUk9SX01FTU9SWV9ERVZJQ0VfUFJJVkFURTtcbjE4Mzc6XHRcdGlmIChzcG1fYWRkcl9kZXYwIFx1MDAyNlx1MDAyNiBzcG1fYWRkcl9kZXYxKSB7XG4xODM4Olx0XHRcdGRtaXJyb3JfZGV2aWNlc1tuZGV2aWNlcyYjNDM7JiM0MztdLnpvbmVfZGV2aWNlX3R5cGUgPVxuMTgzOTpcdFx0XHRcdFx0XHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX0NPSEVSRU5UO1xuMTg0MDpcdFx0XHRkbWlycm9yX2RldmljZXNbbmRldmljZXMmIzQzOyYjNDM7XS56b25lX2RldmljZV90eXBlID1cbjE4NDE6XHRcdFx0XHRcdFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9DT0hFUkVOVDtcbjE4NDI6XHRcdH1cbjE4NDM6XHRcdGZvciAoaWQgPSAwOyBpZCBcdTAwM2MgbmRldmljZXM7IGlkJiM0MzsmIzQzOykge1xuMTg0NDpcdFx0XHRyZXQgPSBkbWlycm9yX2RldmljZV9pbml0KGRtaXJyb3JfZGV2aWNlcyAmIzQzOyBpZCwgaWQpO1xuMTg0NTpcdFx0XHRpZiAocmV0KVxuMTg0NjpcdFx0XHRcdGdvdG8gZXJyX2NocmRldjtcbjE4NDc6XHRcdH1cbjE4NDg6XHRcbjE4NDk6XHRcdHByX2luZm8oXCYjMzQ7SE1NIHRlc3QgbW9kdWxlIGxvYWRlZC4gVGhpcyBpcyBvbmx5IGZvciB0ZXN0aW5nIEhNTS5cXG5cJiMzNDspO1xuMTg1MDpcdFx0cmV0dXJuIDA7XG4xODUxOlx0XG4xODUyOlx0ZXJyX2NocmRldjpcbjE4NTM6XHRcdHdoaWxlICgtLWlkIFx1MDAzZT0gMClcbjE4NTQ6XHRcdFx0ZG1pcnJvcl9kZXZpY2VfcmVtb3ZlKGRtaXJyb3JfZGV2aWNlcyAmIzQzOyBpZCk7XG4xODU1Olx0XHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZG1pcnJvcl9kZXYsIERNSVJST1JfTkRFVklDRVMpO1xuMTg1NjpcdGVycl91bnJlZzpcbjE4NTc6XHRcdHJldHVybiByZXQ7XG4xODU4Olx0fVxuMTg1OTpcdFxuMTg2MDpcdHN0YXRpYyB2b2lkIF9fZXhpdCBobW1fZG1pcnJvcl9leGl0KHZvaWQpXG4xODYxOlx0e1xuMTg2MjpcdFx0aW50IGlkO1xuMTg2MzpcdFxuMTg2NDpcdFx0Zm9yIChpZCA9IDA7IGlkIFx1MDAzYyBETUlSUk9SX05ERVZJQ0VTOyBpZCYjNDM7JiM0MzspXG4xODY1Olx0XHRcdGlmIChkbWlycm9yX2RldmljZXNbaWRdLnpvbmVfZGV2aWNlX3R5cGUpXG4xODY2Olx0XHRcdFx0ZG1pcnJvcl9kZXZpY2VfcmVtb3ZlKGRtaXJyb3JfZGV2aWNlcyAmIzQzOyBpZCk7XG4xODY3Olx0XHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZG1pcnJvcl9kZXYsIERNSVJST1JfTkRFVklDRVMpO1xuMTg2ODpcdH1cbjE4Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4OTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgTW9kdWxlIEluaXRpYWxpemF0aW9uIC0gRGl2aW5nIERlZXAqKgoKT2theSwgc28gdGhlIHN5c3RlbSBoYXMgcmVjb2duaXplZCBteSBwcmVzZW5jZTsgaXQmIzM5O3MgcmVnaXN0ZXJlZCBhIGNoYXJhY3RlciBkZXZpY2UsIHdoaWNoIGlzIHRoZSBmaXJzdCBzdGVwLiBOb3csIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB3aGF0IHRoZSBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFdoYXQgZG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIGVudGFpbD8gSXMgaXQgc2V0dGluZyB1cCBtZW1vcnkgc3RydWN0dXJlcywgYWxsb2NhdGluZyByZXNvdXJjZXMsIHJlZ2lzdGVyaW5nIGludGVycnVwdCBoYW5kbGVycywgb3IgcGVyaGFwcyBjb25maWd1cmluZyBETUEgY2hhbm5lbHM/IEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWwgc3RhdGUgZXN0YWJsaXNoZWQgYnkgdGhpcyBmdW5jdGlvbiwgYmVjYXVzZSB0aGF0IGluaXRpYWwgc3RhdGUgd2lsbCBkZWZpbmUgdGhlIG1vZHVsZSYjMzk7cyBmdXR1cmUgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2RldmljZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmM9MTc3Mj1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5saWIvdGVzdF9obW0uYy0xNzc4LVxubGliL3Rlc3RfaG1tLmM6MTc3OTpzdGF0aWMgaW50IGRtaXJyb3JfZGV2aWNlX2luaXQoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLCBpbnQgaWQpXG5saWIvdGVzdF9obW0uYy0xNzgwLXtcbi0tXG5saWIvdGVzdF9obW0uYz0xODIxPXN0YXRpYyBpbnQgX19pbml0IGhtbV9kbWlycm9yX2luaXQodm9pZClcbi0tXG5saWIvdGVzdF9obW0uYy0xODQzLVx0Zm9yIChpZCA9IDA7IGlkIFx1MDAzYyBuZGV2aWNlczsgaWQmIzQzOyYjNDM7KSB7XG5saWIvdGVzdF9obW0uYzoxODQ0Olx0XHRyZXQgPSBkbWlycm9yX2RldmljZV9pbml0KGRtaXJyb3JfZGV2aWNlcyAmIzQzOyBpZCwgaWQpO1xubGliL3Rlc3RfaG1tLmMtMTg0NS1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgZG1pcnJvcl9kZXZpY2VfaW5pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyYWNrIG9wZW4gdGhpcyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBpcyBwcmV0dHkgc2VsZi1leHBsYW5hdG9yeSwgYnV0IEkgd2FudCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGZvciB0aGUgaGlnaC1sZXZlbCBjb250cm9sIGZsb3c6IFdoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50PyBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBpbml0aWFsaXplZD8gQW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBvciBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQ/IEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIHRoZSBkZXZpY2UgbWlycm9yIGRyaXZlciwgc28gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIHJlc291cmNlIGFsbG9jYXRpb24sIHJlZ2lzdGVyIG1hcHBpbmcsIGFuZCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaGFyZHdhcmUtc3BlY2lmaWMgcGFyYW1ldGVycyBpdCYjMzk7cyB0YWtpbmcgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgZGV2aWNlIGluaXQgZnVuY3Rpb24sIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB3aGF0IHJlc291cmNlcyBpdCYjMzk7cyB0cnlpbmcgdG8gbWFuYWdlLiBJIGFsc28gZXhwZWN0IGEgbnVtYmVyIG9mIGNoZWNrcy4gQXJlIHdlIGRvaW5nIGEgY2hlY2sgdG8gc2VlIGlmIHdlJiMzOTt2ZSBhbHJlYWR5IGRvbmUgYW4gaW5pdGlhbGl6YXRpb24/IFRoYXQmIzM5O3MgY29tbW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBoZXJlLiBJJiMzOTtsbCBhbHNvIGJlIHNjYW5uaW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgbG9va2luZyBmb3Igd2hlcmUgaXQgaXMgd3JpdGluZyBhbmQgcmVhZGluZyBkYXRhIGZyb20gcmVnaXN0ZXJzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIHZlcnNpb25zIG9mIHRoZSB0YXJnZXQgZGV2aWNlLiBBcmUgdGhlcmUgY29uZGl0aW9uYWwgYmxvY2tzIGJhc2VkIG9uIGRldmljZSBJRHMgb3IgY2FwYWJpbGl0aWVzPyBBbnkgdXNlIG9mIHBsYXRmb3JtLXNwZWNpZmljIG1hY3Jvcz8gSSBhbHNvIHdhbnQgdG8gcGF5IGNhcmVmdWwgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IGlzIGhhbmRsZWQgY29ycmVjdGx5LCBzaW5jZSB0aGlzIGlzIGEga2VybmVsIGZ1bmN0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWZlcmVuY2VzIHRvIG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBBbmQgb2YgY291cnNlLCBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG93ZXIgbWFuYWdlbWVudC4gSXMgaXQgc2V0dGluZyB1cCBhbnkgY2xvY2tzIG9yIHBvd2VyIGRvbWFpbnM/IEFueSBzbGVlcCBvciB3YWtlLXVwIGNhbGxzPyBXaGF0IGlzIHRoZSByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gVGhlIG92ZXJhbGwgZ29hbCBpcyB0byBmb3JtIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb24sIGFuZCBob3cgcm9idXN0IGFuZCBlZmZpY2llbnQgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3Nzk6XHRzdGF0aWMgaW50IGRtaXJyb3JfZGV2aWNlX2luaXQoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlLCBpbnQgaWQpXG4xNzgwOlx0e1xuMTc4MTpcdFx0ZGV2X3QgZGV2O1xuMTc4MjpcdFx0aW50IHJldDtcbjE3ODM6XHRcbjE3ODQ6XHRcdGRldiA9IE1LREVWKE1BSk9SKGRtaXJyb3JfZGV2KSwgaWQpO1xuMTc4NTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZtZGV2aWNlLVx1MDAzZWRldm1lbV9sb2NrKTtcbjE3ODY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1kZXZpY2UtXHUwMDNlbG9jayk7XG4xNzg3Olx0XG4xNzg4Olx0XHRjZGV2X2luaXQoXHUwMDI2bWRldmljZS1cdTAwM2VjZGV2aWNlLCBcdTAwMjZkbWlycm9yX2ZvcHMpO1xuMTc4OTpcdFx0bWRldmljZS1cdTAwM2VjZGV2aWNlLm93bmVyID0gVEhJU19NT0RVTEU7XG4xNzkwOlx0XHRtZGV2aWNlLVx1MDAzZWRldmljZS5yZWxlYXNlID0gZG1pcnJvcl9kZXZpY2VfcmVsZWFzZTtcbjE3OTE6XHRcbjE3OTI6XHRcdGRldmljZV9pbml0aWFsaXplKFx1MDAyNm1kZXZpY2UtXHUwMDNlZGV2aWNlKTtcbjE3OTM6XHRcdG1kZXZpY2UtXHUwMDNlZGV2aWNlLmRldnQgPSBkZXY7XG4xNzk0Olx0XG4xNzk1Olx0XHRyZXQgPSBkZXZfc2V0X25hbWUoXHUwMDI2bWRldmljZS1cdTAwM2VkZXZpY2UsIFwmIzM0O2htbV9kbWlycm9yJXVcJiMzNDssIGlkKTtcbjE3OTY6XHRcdGlmIChyZXQpXG4xNzk3Olx0XHRcdGdvdG8gcHV0X2RldmljZTtcbjE3OTg6XHRcbjE3OTk6XHRcdC8qIEJ1aWxkIGEgbGlzdCBvZiBmcmVlIFpPTkVfREVWSUNFIHN0cnVjdCBwYWdlcyAqL1xuMTgwMDpcdFx0cmV0ID0gZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhtZGV2aWNlLCBOVUxMLCBmYWxzZSk7XG4xODAxOlx0XHRpZiAocmV0KVxuMTgwMjpcdFx0XHRnb3RvIHB1dF9kZXZpY2U7XG4xODAzOlx0XG4xODA0Olx0XHRyZXQgPSBjZGV2X2RldmljZV9hZGQoXHUwMDI2bWRldmljZS1cdTAwM2VjZGV2aWNlLCBcdTAwMjZtZGV2aWNlLVx1MDAzZWRldmljZSk7XG4xODA1Olx0XHRpZiAocmV0KVxuMTgwNjpcdFx0XHRnb3RvIHB1dF9kZXZpY2U7XG4xODA3Olx0XG4xODA4Olx0XHRyZXR1cm4gMDtcbjE4MDk6XHRcbjE4MTA6XHRwdXRfZGV2aWNlOlxuMTgxMTpcdFx0cHV0X2RldmljZShcdTAwMjZtZGV2aWNlLVx1MDAzZWRldmljZSk7XG4xODEyOlx0XHRyZXR1cm4gcmV0O1xuMTgxMzpcdH1cbjE4MTQ6XHRcbjE4MTU6XHRzdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmUoc3RydWN0IGRtaXJyb3JfZGV2aWNlICptZGV2aWNlKVxuMTgxNjpcdHtcbjE4MTc6XHRcdGNkZXZfZGV2aWNlX2RlbChcdTAwMjZtZGV2aWNlLVx1MDAzZWNkZXZpY2UsIFx1MDAyNm1kZXZpY2UtXHUwMDNlZGV2aWNlKTtcbjE4MTg6XHRcdHB1dF9kZXZpY2UoXHUwMDI2bWRldmljZS1cdTAwM2VkZXZpY2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQyNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBTZXR1cCBvZiBgZG1pcnJvcl9mb3BzYCoqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBqdW1waW5nIHJpZ2h0IGludG8gc2V0dGluZyB1cCBgZG1pcnJvcl9mb3BzYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkga25vdyBgZG1pcnJvcmAgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gZGF0YSBtaXJyb3Jpbmcgb3IgcmVwbGljYXRpb24sIGFuZCB0aGUgJiMzNDtmb3BzJiMzNDsgc3VmZml4IGFsbW9zdCBjZXJ0YWlubHkgaW5kaWNhdGVzIGZpbGUgb3BlcmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZHMgdW5kZXJzdGFuZGluZyB0aGUgc3RydWN0dXJlIHRoYXQmIzM5O3MgYmVpbmcgc2V0IHVwIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBkYXRhIHJlcGxpY2F0aW9uIHN0cmF0ZWd5LiBMZXQmIzM5O3MgZGlnIGludG8gd2hhdCBgZG1pcnJvcl9mb3BzYCAqYWN0dWFsbHkqIGlzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlIGBkbWlycm9yX2ZvcHNgIGRhdGEgc3RydWN0dXJlLiBJJiMzOTttIGV4cGVjdGluZyBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb24gcG9pbnRlcnMsIGltcGxlbWVudGluZyB0aGUgY29yZSBmaWxlLXN5c3RlbSBsZXZlbCBpbnRlcmFjdGlvbiBmb3IgdGhlIG1pcnJvcmluZyBwcm9jZXNzLiBTcGVjaWZpYyB0aGluZ3MgSSYjMzk7bSBhbnRpY2lwYXRpbmcgYXJlIG9wZXJhdGlvbnMgbGlrZSBgb3BlbmAsIGByZWFkYCwgYHdyaXRlYCwgYGNsb3NlYCwgYGdldGF0dHJgLCBgbWtkaXJgLCBgcm1kaXJgLCBldGMuLCB0aGF0IG5lZWQgdG8gYmUgaW50ZXJjZXB0ZWQgb3IgY3VzdG9taXplZCBmb3IgZGF0YSBjb25zaXN0ZW5jeSBhbmQgY29uZmxpY3QgcmVzb2x1dGlvbiBpbiBhIGRpc3RyaWJ1dGVkIGVudmlyb25tZW50LiBJJiMzOTttIGFsc28gcmVhZHkgZm9yIGEgZGVlcGVyIGRpdmUgaW50byBob3cgdGhpcyBzdHJ1Y3R1cmUgbWlnaHQgaW50ZXJhY3Qgd2l0aCB1bmRlcmx5aW5nIGJsb2NrIGRldmljZXMsIG5ldHdvcmsgcHJvdG9jb2xzLCBvciBvdGhlciBzdG9yYWdlIGxheWVycy4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2ZvcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz0xNTc9c3RhdGljIHZvaWQgZG1pcnJvcl9ib3VuY2VfZmluaShzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgKmJvdW5jZSlcbi0tXG5saWIvdGVzdF9obW0uYy0xNjEtXG5saWIvdGVzdF9obW0uYzoxNjI6c3RhdGljIGludCBkbWlycm9yX2ZvcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbmxpYi90ZXN0X2htbS5jLTE2My17XG4tLVxubGliL3Rlc3RfaG1tLmM9MTg4PXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX2V2aWN0X2NodW5rKHN0cnVjdCBkbWlycm9yX2NodW5rICpjaHVuaylcbi0tXG5saWIvdGVzdF9obW0uYy0yMzctXG5saWIvdGVzdF9obW0uYzoyMzg6c3RhdGljIGludCBkbWlycm9yX2ZvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbmxpYi90ZXN0X2htbS5jLTIzOS17XG4tLVxubGliL3Rlc3RfaG1tLmM9MTQ4MT1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmVfY2h1bmtzKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcbi0tXG5saWIvdGVzdF9obW0uYy0xNTEyLVxubGliL3Rlc3RfaG1tLmM6MTUxMzpzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG5saWIvdGVzdF9obW0uYy0xNTE0LVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgY29tbWFuZCxcbi0tXG5saWIvdGVzdF9obW0uYy0xNTg3LVxubGliL3Rlc3RfaG1tLmM6MTU4ODpzdGF0aWMgaW50IGRtaXJyb3JfZm9wc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmxpYi90ZXN0X2htbS5jLTE1ODkte1xuLS1cbmxpYi90ZXN0X2htbS5jLTE2MTAtXG5saWIvdGVzdF9obW0uYzoxNjExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRtaXJyb3JfZm9wcyA9IHtcbmxpYi90ZXN0X2htbS5jOjE2MTI6XHQub3Blblx0XHQ9IGRtaXJyb3JfZm9wc19vcGVuLFxubGliL3Rlc3RfaG1tLmM6MTYxMzpcdC5yZWxlYXNlXHQ9IGRtaXJyb3JfZm9wc19yZWxlYXNlLFxubGliL3Rlc3RfaG1tLmM6MTYxNDpcdC5tbWFwXHRcdD0gZG1pcnJvcl9mb3BzX21tYXAsXG5saWIvdGVzdF9obW0uYzoxNjE1Olx0LnVubG9ja2VkX2lvY3RsID0gZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsLFxubGliL3Rlc3RfaG1tLmMtMTYxNi1cdC5sbHNlZWtcdFx0PSBkZWZhdWx0X2xsc2Vlayxcbi0tXG5saWIvdGVzdF9obW0uYz0xNzc5PXN0YXRpYyBpbnQgZG1pcnJvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsIGludCBpZClcbi0tXG5saWIvdGVzdF9obW0uYy0xNzg3LVxubGliL3Rlc3RfaG1tLmM6MTc4ODpcdGNkZXZfaW5pdChcdTAwMjZtZGV2aWNlLVx1MDAzZWNkZXZpY2UsIFx1MDAyNmRtaXJyb3JfZm9wcyk7XG5saWIvdGVzdF9obW0uYy0xNzg5LVx0bWRldmljZS1cdTAwM2VjZGV2aWNlLm93bmVyID0gVEhJU19NT0RVTEU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCBIYW5kbGVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGNvbW1hbmQgaGFuZGxpbmcsIHdoaWNoIG1lYW5zIGl04oCZcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRtLW1pcnJvciBkZXZpY2UgaW50ZXJhY3RzIHdpdGggdXNlcnNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgdmFyaWV0eSBvZiBjb21tYW5kcyBpdCBwcm9jZXNzZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzdXBwb3J0ZWQgb3BlcmF0aW9ucy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IGFsbG93IG1lIHRvIHN0YXJ0IGNvbnNpZGVyaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgYW55IGludGVyZXN0aW5nIGNvbnRyb2wgZmxvd3Mgd2l0aGluIHRoZSBtaXJyb3IgaW1wbGVtZW50YXRpb24uIExldOKAmXMgc3RhcnQgcGlja2luZyBpdCBhcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUxMzpcdHN0YXRpYyBsb25nIGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbjE1MTQ6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGNvbW1hbmQsXG4xNTE1Olx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYXJnKVxuMTUxNjpcdHtcbjE1MTc6XHRcdHZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnO1xuMTUxODpcdFx0c3RydWN0IGhtbV9kbWlycm9yX2NtZCBjbWQ7XG4xNTE5Olx0XHRzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcjtcbjE1MjA6XHRcdGludCByZXQ7XG4xNTIxOlx0XG4xNTIyOlx0XHRkbWlycm9yID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4xNTIzOlx0XHRpZiAoIWRtaXJyb3IpXG4xNTI0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTUyNTpcdFxuMTUyNjpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmNtZCwgdWFyZywgc2l6ZW9mKGNtZCkpKVxuMTUyNzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE1Mjg6XHRcbjE1Mjk6XHRcdGlmIChjbWQuYWRkciBcdTAwMjYgflBBR0VfTUFTSylcbjE1MzA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTMxOlx0XHRpZiAoY21kLmFkZHIgXHUwMDNlPSAoY21kLmFkZHIgJiM0MzsgKGNtZC5ucGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKSlcbjE1MzI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTMzOlx0XG4xNTM0Olx0XHRjbWQuY3BhZ2VzID0gMDtcbjE1MzU6XHRcdGNtZC5mYXVsdHMgPSAwO1xuMTUzNjpcdFxuMTUzNzpcdFx0c3dpdGNoIChjb21tYW5kKSB7XG4xNTM4Olx0XHRjYXNlIEhNTV9ETUlSUk9SX1JFQUQ6XG4xNTM5Olx0XHRcdHJldCA9IGRtaXJyb3JfcmVhZChkbWlycm9yLCBcdTAwMjZjbWQpO1xuMTU0MDpcdFx0XHRicmVhaztcbjE1NDE6XHRcbjE1NDI6XHRcdGNhc2UgSE1NX0RNSVJST1JfV1JJVEU6XG4xNTQzOlx0XHRcdHJldCA9IGRtaXJyb3Jfd3JpdGUoZG1pcnJvciwgXHUwMDI2Y21kKTtcbjE1NDQ6XHRcdFx0YnJlYWs7XG4xNTQ1Olx0XG4xNTQ2Olx0XHRjYXNlIEhNTV9ETUlSUk9SX01JR1JBVEVfVE9fREVWOlxuMTU0NzpcdFx0XHRyZXQgPSBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKGRtaXJyb3IsIFx1MDAyNmNtZCk7XG4xNTQ4Olx0XHRcdGJyZWFrO1xuMTU0OTpcdFxuMTU1MDpcdFx0Y2FzZSBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZUzpcbjE1NTE6XHRcdFx0cmV0ID0gZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShkbWlycm9yLCBcdTAwMjZjbWQpO1xuMTU1MjpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMTMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYGhtbV9kbWlycm9yYCBDaGFyYWN0ZXIgRGV2aWNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVZgIGFuZCBgSE1NX0RNSVJST1JfTUlHUkFURV9UT19TWVNgLiBUaG9zZSBjYWxscywgd2hpY2ggYXJlIGltcG9ydGFudCBiZWNhdXNlIHRoZXkmIzM5O3JlIGxpbmtlZCB0byB1c2VyIHNwYWNlLCBhcmUgY2FsbGluZyBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAgYW5kIGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYC4gVGhvc2UsIGluIHR1cm4sIGFyZSBjYWxsaW5nIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIEltbWVkaWF0ZWx5LCB0aGlzIHNjcmVhbXMgJiMzNDtmdXp6YWJsZSEmIzM0OyBJdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgaG1tX2RtaXJyb3JgIGNoYXJhY3RlciBkZXZpY2UuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGFjY2Vzc2libGUgaW4gdGhlIGN1cnJlbnQgc3l6a2FsbGVyIGNvbmZpZz8KCkkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19URVNUX0hNTWAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgYSB0ZXN0IG1vZHVsZSwgc28gaXQgY291bGQgdmVyeSB3ZWxsIGJlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIOKAkyBlaXRoZXIgYGxpYi9LY29uZmlnLmRlYnVnYCBvciBgbW0vS2NvbmZpZ2Ag4oCTIHRvIGJlIGNlcnRhaW4gaWYgaXQmIzM5O3MgdGhlcmUuIFRoYXQmIzM5O2xsIGJlIHRoZSBuZXh0IHN0ZXAgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLiBJZiBpdCBpcyBlbmFibGVkLCB0aGlzIGNvdWxkIGJlIGEgcHJvbWlzaW5nIGF2ZW51ZSBmb3IgZGlzY292ZXJpbmcgc29tZSBrZXJuZWwgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MzMxOD1jb25maWcgVEVTVF9NRU1JTklUXG4tLVxubGliL0tjb25maWcuZGVidWctMzMyNS1cbmxpYi9LY29uZmlnLmRlYnVnOjMzMjY6Y29uZmlnIFRFU1RfSE1NXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI3LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4tLVxubGliL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfVEVTVF9MT0NLVVApICYjNDM7PSB0ZXN0X2xvY2t1cC5vXG5saWIvTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19URVNUX0hNTSkgJiM0Mzs9IHRlc3RfaG1tLm9cbmxpYi9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vXG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaC02LSAqL1xubGliL3Rlc3RfaG1tX3VhcGkuaDo3OiNpZm5kZWYgX0xJQl9URVNUX0hNTV9VQVBJX0hcbmxpYi90ZXN0X2htbV91YXBpLmg6ODojZGVmaW5lIF9MSUJfVEVTVF9ITU1fVUFQSV9IXG5saWIvdGVzdF9obW1fdWFwaS5oLTktXG4tLVxubGliL3Rlc3RfaG1tX3VhcGkuaD03ND1lbnVtIHtcbi0tXG5saWIvdGVzdF9obW1fdWFwaS5oLTc5LVxubGliL3Rlc3RfaG1tX3VhcGkuaDo4MDojZW5kaWYgLyogX0xJQl9URVNUX0hNTV9VQVBJX0ggKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9NT1DT05GSUdfREVWSUNFX1BSSVZBVEU9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnOjY6Q09ORklHX1RFU1RfSE1NPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZy03LUNPTkZJR19HVVBfVEVTVD15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdGVzdF9obW0uc2g9MjE9Y2hlY2tfdGVzdF9yZXF1aXJlbWVudHMoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoLTM1LVx0XHRlY2hvIFwmIzM0OyQwOiBZb3UgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgZW5hYmxlZCBpbiB5b3VyIGtlcm5lbDpcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoOjM2Olx0XHRlY2hvIFwmIzM0O0NPTkZJR19URVNUX0hNTT1tXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0zNy1cdFx0ZXhpdCAka3NmdF9za2lwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTU0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHJldm9sdmVzIGFyb3VuZCBgQ09ORklHX1RFU1RfSE1NYC4gSXQgc2VlbXMgbGlrZSB0aGF0JiMzOTtzIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBoZXJlLiBUaGUgcmVsZXZhbnQgY29kZSBjaGFuZ2UgaXMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGZpbGUgaXMgb25seSBjb21waWxlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIHdlJiMzOTt2ZSBnb3Qgc29tZXRoaW5nIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgb3IgYENPTkZJR19ERVZJQ0VfQ09IRVJFTlRgIGVuYWJsZWQuIFJhdGhlciB0aGFuIHJlbHlpbmcgb24gZ3Vlc3N3b3JrLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7bGwgcXVpY2tseSB0ZWxsIHRoZSBzdG9yeS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDg5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYCBpbiBmcm9udCBvZiBtZS4gVGhhdCYjMzk7cyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaXRlbSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTXkgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8gdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIHdpdGhpbiB0aGUgc3lzdGVtIHNlbGVjdHMgb3IgdHJpZ2dlcnMgYERFVklDRV9NSUdSQVRJT05gLiBVbmRlcnN0YW5kaW5nIHRoZSB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgaGVyZS4gSXQmIzM5O3MgdGhlIG9ubHkgd2F5IHRvIGdyYXNwIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGZpbmQgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWSUNFX01JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY5Nj1jb25maWcgTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02OTktXG5tbS9LY29uZmlnOjcwMDpjb25maWcgREVWSUNFX01JR1JBVElPTlxubW0vS2NvbmZpZy03MDEtXHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4tLVxubW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmN5IENvbmZsaWN0cyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBpc3N1ZSBoaW5nZXMgb24gYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBjcnVjaWFsIGVsZW1lbnRzIGluIHRoaXMgc2NlbmFyaW8uIEFuZCB0aGUgdHJpZ2dlciBmb3IgdGhlIHpvbmUgZGV2aWNlIHNldHVwIHNlZW1zIHRvIGJlIGBURVNUX0hNTWAuIEhtbW0uLi4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVyYWN0aW9uIGFuZCB0aGUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgVEVTVF9ITU1gIGFuZCBgWk9ORV9ERVZJQ0VgIGF0IGEgZGVlcGVyIGxldmVsOyBzcGVjaWZpY2FsbHksIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgYXJlIGxpbmtpbmcgdGhlbT8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtcmVmZXJlbmNlcywgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGhpbnRzIGFib3V0IHdoZW4gYW5kIHdoeSBgWk9ORV9ERVZJQ0VgIG1pZ2h0IGJlIHNlbGVjdGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIGBURVNUX0hNTWAuIEEgcXVpY2sgc2NhbiBzaG91bGQgY2xhcmlmeSB0aGUgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGVidWcgY29uZmlndXJhdGlvbiBiZXR0ZXIuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSwgdGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgZmVhdHVyZSBlbmFibGVtZW50LiBJJiMzOTttIHRoaW5raW5nIHRoYXQgbGluZSAzMzI2IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBsb2NhdGUgYSBzcGVjaWZpYyBkZWJ1ZyBmZWF0dXJlLCBvciBwZXJoYXBzIGEgY29uZGl0aW9uYWwgc2VjdGlvbiByZWxhdGluZyB0byBkZWJ1ZyBmdW5jdGlvbmFsaXRpZXMgaW4gdGhlIGtlcm5lbC4gVGhpcyBmaWxlIGNvbnRhaW5zIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGxpbmUgMzMyNiBzaG91bGQgcGlucG9pbnQgYSBzcGVjaWZpYyBjb25maWcgb3B0aW9uIG9yIGEgbG9naWNhbCBibG9jayBvZiBvcHRpb25zIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgc3RhdGUsIGFuZCBmaWd1cmUgb3V0IGhvdyB0byBtb2RpZnkgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBkZWJ1ZyBvdXRwdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMjA6XHRcdGhlbHBcbjMzMjE6XHRcdCAgVGVzdCBpZiB0aGUga2VybmVsIGlzIHplcm8taW5pdGlhbGl6aW5nIGhlYXAgYW5kIHBhZ2UgYWxsb2NhdGlvbnMuXG4zMzIyOlx0XHQgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZXN0IGluaXRfb25fYWxsb2MgYW5kIGluaXRfb25fZnJlZSBmZWF0dXJlcy5cbjMzMjM6XHRcbjMzMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzMjU6XHRcbjMzMjY6XHRjb25maWcgVEVTVF9ITU1cbjMzMjc6XHRcdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuMzMyODpcdFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuMzMyOTpcdFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxuMzMzMDpcdFx0c2VsZWN0IEhNTV9NSVJST1JcbjMzMzE6XHRcdHNlbGVjdCBNTVVfTk9USUZJRVJcbjMzMzI6XHRcdGhlbHBcbjMzMzM6XHRcdCAgVGhpcyBpcyBhIHBzZXVkbyBkZXZpY2UgZHJpdmVyIHNvbGVseSBmb3IgdGVzdGluZyBITU0uXG4zMzM0Olx0XHQgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEhNTSB0ZXN0IG1vZHVsZS5cbjMzMzU6XHRcdCAgRG9pbmcgc28gd2lsbCBhbGxvdyB5b3UgdG8gcnVuIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Qvdm0vaG1tLXRlc3RzLlxuMzMzNjpcdFxuMzMzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMzMzODpcdFxuMzMzOTpcdGNvbmZpZyBURVNUX0ZSRUVfUEFHRVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3MjAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBxdWVzdGlvbiBoYW5ncyBvbiB0aGUgdmFsdWUgb2YgYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBERVZJQ0VfUFJJVkFURWAgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBjb250cm9scy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgc291cmNlLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGZvciBgREVWSUNFX1BSSVZBVEVgIHdpdGhpbiBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWSUNFX1BSSVZBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI2Mj1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4tLVxubW0vS2NvbmZpZy0xMjY0LVxubW0vS2NvbmZpZzoxMjY1OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjY2LVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5ODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBsaW5lIDEyNjUuIFRoYXQgYXJlYSBsaWtlbHkgaG9sZHMgc29tZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBiYXNlZCBvbiBteSBleHBlcmllbmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc29tZSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgYmVpbmcgY29udHJvbGxlZCBvciB3aGF0IHNwZWNpZmljIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbHMgYXJlIGF0IHBsYXkuIEl0JiMzOTtzIGEgcXVpY2sgYW5kIHRhcmdldGVkIGFwcHJvYWNoOyBubyBuZWVkIHRvIHdhc3RlIHRpbWUgc2Nhbm5pbmcgdGhlIHdob2xlIGZpbGUgd2hlbiBJIGhhdmUgYSBzcGVjaWZpYyBsb2NhdGlvbiB0byBjaGVjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgbGluZSwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHJldmVhbC4gSXQmIzM5O3MgYSBrZXkgc3BvdCB0byBkaWcgaW50byEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTI2MTpcdFxuMTI2MjpcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbjEyNjM6XHRcdGJvb2xcbjEyNjQ6XHRcbjEyNjU6XHRjb25maWcgREVWSUNFX1BSSVZBVEVcbjEyNjY6XHRcdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4xMjY3Olx0XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4xMjY4Olx0XHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXG4xMjY5Olx0XG4xMjcwOlx0XHRoZWxwXG4xMjcxOlx0XHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXG4xMjcyOlx0XHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcbjEyNzM6XHRcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxuMTI3NDpcdFxuMTI3NTpcdGNvbmZpZyBWTUFQX1BGTlxuMTI3NjpcdFx0Ym9vbFxuMTI3NzpcdFxuMTI3ODpcdGNvbmZpZyBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcbjEyNzk6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIENvZGUgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGxpa2UgYFRFU1RfSE1NYCBpcywgYXQgaXRzIGNvcmUsIGRlcGVuZGVudCBvbiBgREVWSUNFX1BSSVZBVEVgLiBBbmQgdGhhdCBkZXBlbmRlbmN5LCBpbiB0dXJuLCBuZWVkcyBgWk9ORV9ERVZJQ0VgIHRvIGJlIGFjdGl2ZS4gR290IGl0LiBTbyBmYXIsIHNvIGdvb2QuIFRoZW4sIGBERVZJQ0VfTUlHUkFUSU9OYCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgY29tYmluYXRpb24gb2YgYE1JR1JBVElPTmAgYW5kIGBaT05FX0RFVklDRWAuIFRoaXMgbWVhbnMsIHRvIGdldCBgREVWSUNFX01JR1JBVElPTmAgd29ya2luZywgSSBuZWVkIGJvdGggb2YgdGhvc2UgY29tcG9uZW50cy4KClRoZXJlZm9yZSwgaWYgSSBzZXQgYWxsIG9mIHRob3NlIHRoaW5ncyAtIGBURVNUX0hNTWAsIGBERVZJQ0VfUFJJVkFURWAsIGBNSUdSQVRJT05gLCBhbmQgYFpPTkVfREVWSUNFYCAtIHRvIGJlIGFjdGl2ZSwgdGhlIHJlbGV2YW50IGNvZGUgc2hvdWxkIGJlIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0LCBob2xkIG9uLi4uIGBNSUdSQVRJT05gLi4uIEkgKnRoaW5rKiBJIHJlY2FsbCB0aGF0IGJlaW5nIGVuYWJsZWQgcXVpdGUgYSBiaXQgaW4gdGhpcyBlbnZpcm9ubWVudC4gSnVzdCB0byBiZSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBgTUlHUkFUSU9OYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBsb2dpYyBpcyBzb3VuZCBoZXJlLCBhbmQgdGhhdCBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgb2J2aW91cywgcHJlLWV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk1LVxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODk5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCAtIExpbmUgNjk2KioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBzcGVjaWZpY2FsbHkgbGluZSA2OTYgaW4gYG1tL0tjb25maWdgLiBSaWdodCwgYG1tL0tjb25maWdgIGlzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBLbm93aW5nIHRoaXMsIEkgZXhwZWN0IHRvIGZpbmQgYSBkZXNjcmlwdGlvbiBhbmQgbWF5YmUgYW4gYGlmYC9gYm9vbGAgYmxvY2sgd2l0aCBhIGRlcGVuZGVuY3kgb3IgZGVmYXVsdC4gSSBhbSBsb29raW5nIGZvciBhIHNwZWNpZmljIHZhcmlhYmxlIG9yIG9wdGlvbiB0byB0d2Vhay4gSSB3aWxsIHJlYWQgYXJvdW5kIHRoZSBnaXZlbiBsaW5lLiBUaGUgY29udGV4dCBhcm91bmQgbGluZSA2OTYgaXMgd2hhdCB3aWxsIHJldmVhbCB3aGF0IHRoaXMgbW9kdWxlIGRvZXMuIEZyb20gdGhlcmUgSSBtYXkgYmUgYWJsZSB0byBkcmF3IGFuIGludGVsbGlnZW50IGNvbmNsdXNpb24gcmVnYXJkaW5nIHRoZSBjdXJyZW50IGlzc3VlLiBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjkwOlx0XHRoZWxwXG4gNjkxOlx0XHQgIFN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBvZiBwYWdlcyB0byBvdGhlciBOVU1BIG5vZGVzLCBhdmFpbGFibGUgdG9cbiA2OTI6XHRcdCAgdXNlciBzcGFjZSB0aHJvdWdoIGludGVyZmFjZXMgbGlrZSBtaWdyYXRlX3BhZ2VzKCksIG1vdmVfcGFnZXMoKSxcbiA2OTM6XHRcdCAgYW5kIG1iaW5kKCkuIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFnZVxuIDY5NDpcdFx0ICBkZW1vdGlvbiBmb3IgbWVtb3J5IHRpZXJpbmcuXG4gNjk1Olx0XG4gNjk2Olx0Y29uZmlnIE1JR1JBVElPTlxuIDY5NzpcdFx0Ym9vbFxuIDY5ODpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA2OTk6XHRcbiA3MDA6XHRjb25maWcgREVWSUNFX01JR1JBVElPTlxuIDcwMTpcdFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuIDcwMjpcdFxuIDcwMzpcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbiA3MDQ6XHRcdGJvb2xcbiA3MDU6XHRcbiA3MDY6XHRjb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcbiA3MDc6XHRcdGJvb2xcbiA3MDg6XHRcbiA3MDk6XHRjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MDQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IGluIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBtaWdyYXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIHN5emthbGxlciBmcmFtZXdvcmsuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGBNSUdSQVRJT05gIGlzIGVzc2VudGlhbGx5IGEgYm9vbGVhbiBmbGFnLiBJdCYjMzk7cyB0cmlnZ2VyZWQgYnkgYSB3aG9sZSBzdWl0ZSBvZiBvdGhlciwgbW9yZSBncmFudWxhciBvcHRpb25zIOKAkyB0aGluZ3MgbGlrZSBgTlVNQV9NSUdSQVRJT05gLCBgQ01BYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgZXZlbiBgQ09NUEFDVElPTmAuIFRoYXQgbWVhbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHN5emthbGxlciYjMzk7cyBjb25maWd1cmF0aW9uLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBgTUlHUkFUSU9OYCBpcywgaW4gZmFjdCwgZW5hYmxlZC4gSXTigJlzIGJha2VkIGludG8gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHNwZWNpZmljIG1lbW9yeSByZWdpb25zIGFuZCBkZXZpY2VzLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBpbnZlc3RpZ2F0ZSB0aGUgYFpPTkVfREVWSUNFYCBzZXR0aW5ncy4gVGhpcyBzaG91bGQgc2hlZCBsaWdodCBvbiBob3cgZGV2aWNlIG1lbW9yeSBpcyBtYW5hZ2VkIGluIHJlbGF0aW9uIHRvIHRoaXMgZ2VuZXJhbCBtaWdyYXRpb24gY2FwYWJpbGl0eSB0aGF0IGFwcGVhcnMgdG8gYmUgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc2NwoJCQkJCQkJb3V0cHV0OiAxNzEKCQkJCQkJCXRob3VnaHRzOiA5NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCBGaXgqKgoKT2theSwgc28gYFpPTkVfREVWSUNFYCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gc3l6a2FsbGVyLCB3aGljaCBpcyBnb29kLiBUaGF0IG1lYW5zIHdlIGNhbiBmb2N1cyBvbiBlbmFibGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nIHRoZSBidWcgZml4IGluIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIFNpbmNlIGBaT05FX0RFVklDRWAgaXMgc2V0LCB3ZSBuZWVkIHRvIGVuYWJsZSBgVEVTVF9ITU1gIHRvIGxldmVyYWdlIHRoZSB0ZXN0IG1vZHVsZS4gIEkgc2VlIHRoYXQgYFRFU1RfSE1NYCBpcyBhIHRyaXN0YXRlLCBzbyBsZXQmIzM5O3MgYWRkIGl0IHRvIGBFbmFibGVDb25maWdzYC4gQnV0IHdhaXQsIGBURVNUX0hNTWAgbmVlZHMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIHNpbmNlIHRoYXQmIzM5O3MgdXN1YWxseSBlbmFibGVkLCBsZXQmIzM5O3MgYXNzdW1lIGl0IGlzIGFuZCBhZGQgYFRFU1RfSE1NYCBhcyBhbiBlbmFibGVkIGNvbmZpZy4gYERFVklDRV9QUklWQVRFYCBpcyBhbHNvIG5lZWRlZCwgYXMgYFRFU1RfSE1NYCBkZXBlbmRzIG9uIGl0IGFzIHdlbGwuIEFuZCBgREVWSUNFX1BSSVZBVEVgIGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gU28sIHRoZSBmaW5hbCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBbJiMzNDtURVNUX0hNTSYjMzQ7LCAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0O11gLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZm9jdXMgc3ltYm9scy4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBzbyB0aGF0JiMzOTtzIG9idmlvdXNseSBhIHN0cm9uZyBjYW5kaWRhdGUuIEJ1dCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGlzIGNhbGxlZCBmcm9tIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIHNvIHRoYXQmIzM5O3MgYSBnb29kIG9uZSB0b28uIEkmIzM5O20gYWxzbyBzZWVpbmcgdGhhdCBgbWlncmF0ZV92bWFfY29sbGVjdGAgaXMgaW4gdGhlIGNhbGwgY2hhaW4uIFNvLCBgbWlncmF0ZV92bWFfc2V0dXBgIGFuZCBgbWlncmF0ZV92bWFfY29sbGVjdGAgYXJlIGFsc28gZ29vZCBmb2N1cyBzeW1ib2xzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsbCByZWFjaGFibGUgZnJvbSBvdXIgZnV6emluZyBlbnRyeSBwb2ludC4KCk9rYXksIGxldCYjMzk7cyB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAgY2FsbHMgYG1pZ3JhdGVfdm1hX3NldHVwYC4gYG1pZ3JhdGVfdm1hX3NldHVwYCBjYWxscyBgbWlncmF0ZV92bWFfY29sbGVjdGAuIGBtaWdyYXRlX3ZtYV9jb2xsZWN0YCBjYWxscyBgd2Fsa19wYWdlX3JhbmdlX3ZtYWAuIFRoYXQgbGVhZHMgdG8gYSB3YWxrIG9mIHRoZSBwYWdlIHRhYmxlcyBhbmQgaXQgY2FsbHMgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCB0aHJvdWdoIGBtaWdyYXRlX3ZtYV93YWxrX29wc2AuIEkgY2FuIHNlZSB0aGF0IGB3YWxrLSZndDtvcHMtJmd0O3BtZF9lbnRyeWAgaW4gYG1pZ3JhdGVfdm1hX3dhbGtfb3BzYCBpcyBzZXQgdG8gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCwgc28gaXQgKmlzKiByZWFjaGFibGUuIEV4Y2VsbGVudC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgZGVwZW5kZW5jaWVzLiBgVEVTVF9ITU1gIG5lZWRzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIGBERVZJQ0VfUFJJVkFURWAgbmVlZHMgYFpPTkVfREVWSUNFYC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmUgYFRFU1RfSE1NYCwgYERFVklDRV9QUklWQVRFYCBhbmQgYFpPTkVfREVWSUNFYC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgY29sbGVjdHMgcGFnZXMgZm9yIG1pZ3JhdGlvbi4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgd2hlcmUgcmV0cnlpbmcgYWZ0ZXIgYSBgcHRlX29mZnNldF9tYXBfbG9ja2AgZmFpbHVyZSBjb3VsZCBsZWFkIHRvIGR1cGxpY2F0ZSBwYWdlIGNvbGxlY3Rpb25zIGFuZCBhbiBvdmVyZmxvdy4gVGhlIGZpeCBhZGRzIGEgY2hlY2sgdG8gYXZvaWQgcmUtY29sbGVjdGluZyBwYWdlcyBpZiB0aGUgYWRkcmVzcyBpc24mIzM5O3QgdGhlIHN0YXJ0IGFkZHJlc3Mgd2hlbiByZXRyeWluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBidWcgZml4IGFuZCB3YXJyYW50cyBmdXp6aW5nLgoKTXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHNob3VsZCBpbmNsdWRlOiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBgbWlncmF0ZV92bWFfc2V0dXBgLCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgLgoKVGhlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmU6IGBbJiMzNDtURVNUX0hNTSYjMzQ7LCAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0O11gLgoKSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpcyBzdGF0aWM7IHllcyBpdCBpcyBzdGF0aWMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIGV4cG9ydGVkLCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGlzIHN0YXRpYy4KCkxldCYjMzk7cyBjaGVjayB3aG8gZWxzZSBjYWxscyBgbWlncmF0ZV92bWFfc2V0dXBgLiBJIHNlZSBEUk0gZHJpdmVycyAobm91dmVhdSwgYW1kZ3B1KSBhbmQgS1ZNIG9uIHBvd2VycGMuIEJ1dCwgYmVjYXVzZSBgVEVTVF9ITU1gIHByb3ZpZGVzIGEgZGlyZWN0IHVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gdHJpZ2dlciB0aGlzIHZpYSBpb2N0bCwgYFRFU1RfSE1NYCBpcyB0aGUgYmVzdCB3YXkgdG8gZnV6eiB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpBbHJpZ2h0LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJiMzOTttIHJlYWR5IHRvIHVzZSB0aGVzZSBkZXRhaWxzIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfc2V0dXAmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfc2V0dXAmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0MTowOC40Njk2MDA4NDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTEzNjk3NTgzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9zZXR1cFwiLFxuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgd2hlcmUgaXQgY291bGQgY29sbGVjdCB0aGUgc2FtZSBhZGRyZXNzIHJhbmdlIHR3aWNlIGFuZCBvdmVyZmxvdyB0aGUgY29sbGVjdGlvbiBhcnJheXMgaWYgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIGZhaWxzIGFuZCBgYWRkciAhPSBzdGFydGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWlncmF0aW9uIGxvZ2ljIGZvciBkZXZpY2UgbWVtb3J5LiBJdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIEhNTSB0ZXN0IG1vZHVsZSAoYFRFU1RfSE1NYCkgd2hpY2ggZXhwb3NlcyBpb2N0bHMgdG8gdHJpZ2dlciBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MDguNDY5NjA3MDY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQ4NDE3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNTE0MWJlODBhZjM1OTE0NTQ5ODAyNzY1NzE1OGZjMmFiZDcxODQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMTE6NDE6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5pbmRleCAyZmZmZWIxZjk5Njk0YS4uNmNlYjQ3ZWMxZGEyNDUgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5AQCAtMjU3LDcgKzI1NywxMiBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbiBcXHRwdGVfdCAqcHRlcDtcXG4gXFxuIGFnYWluOlxcbi1cXHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZHApIHx8ICFwbWRfcHJlc2VudCgqcG1kcCkpIHtcXG4rXFx0LypcXG4rXFx0ICogT25seSBjaGVjayBwbWQgd2hlbiBhZGRyIGlzIGF0IHN0YXJ0LCBuYW1lbHkgbm8gcHRlIGlzIGNvbGxlY3RlZC5cXG4rXFx0ICogSXQgYXZvaWRzIGNvbGxlY3RpbmcgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSBbc3RhcnQsIGFkZHIpIHR3aWNlXFxuK1xcdCAqIGFuZCBvdmVyZmxvd2luZyB0aGUgY29sbGVjdGlvbiBhcnJheXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoYWRkciA9PSBzdGFydCBcXHUwMDI2XFx1MDAyNiAocG1kX3RyYW5zX2h1Z2UoKnBtZHApIHx8ICFwbWRfcHJlc2VudCgqcG1kcCkpKSB7XFxuIFxcdFxcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTtcXG4gXFxuIFxcdFxcdGlmIChyZXQgPT0gLUVBR0FJTilcXG5AQCAtMjY3LDggKzI3MiwxOCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbiBcXHR9XFxuIFxcbiBcXHRwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kcCwgc3RhcnQsIFxcdTAwMjZwdGwpO1xcbi1cXHRpZiAoIXB0ZXApXFxuK1xcdGlmICghcHRlcCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBTa2lwIHRoZSByZXN0IGlmIHBtZCBiZWNvbWVzIGh1Z2Ugb3IgY2xlYXJlZC4gRmx1c2ggaWYgYW55XFxuK1xcdFxcdCAqIHB0ZSBpcyBtb2RpZmllZFxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGFkZHIgIT0gc3RhcnQpIHtcXG4rXFx0XFx0XFx0aWYgKHVubWFwcGVkKVxcbitcXHRcXHRcXHRcXHRmbHVzaF90bGJfcmFuZ2Uod2Fsay1cXHUwMDNldm1hLCBzdGFydCwgZW5kKTtcXG4rXFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspO1xcbitcXHRcXHR9XFxuIFxcdFxcdGdvdG8gYWdhaW47XFxuK1xcdH1cXG4gXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4gXFx0cHRlcCArPSAoYWRkciAtIHN0YXJ0KSAvIFBBR0VfU0laRTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQxOjA5LjI5NTQ2OTE3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwNTQzODc0MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZFwiLFxuICAgIFwibWlncmF0ZV92bWFfc2V0dXBcIixcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTUxNDFiZTgwYWYzNTkxNDU0OTgwMjc2NTcxNThmYzJhYmQ3MTg0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTE6NDE6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggMmZmZmViMWY5OTY5NGEuLjZjZWI0N2VjMWRhMjQ1IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xuKysrIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuQEAgLTI1Nyw3ICsyNTcsMTIgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbiBcdHB0ZV90ICpwdGVwO1xuIFxuIGFnYWluOlxuLVx0aWYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSB7XG4rXHQvKlxuK1x0ICogT25seSBjaGVjayBwbWQgd2hlbiBhZGRyIGlzIGF0IHN0YXJ0LCBuYW1lbHkgbm8gcHRlIGlzIGNvbGxlY3RlZC5cbitcdCAqIEl0IGF2b2lkcyBjb2xsZWN0aW5nIHRoZSBzYW1lIGFkZHJlc3MgcmFuZ2UgW3N0YXJ0LCBhZGRyKSB0d2ljZVxuK1x0ICogYW5kIG92ZXJmbG93aW5nIHRoZSBjb2xsZWN0aW9uIGFycmF5cy5cbitcdCAqL1xuK1x0aWYgKGFkZHIgPT0gc3RhcnQgXHUwMDI2XHUwMDI2IChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkpIHtcbiBcdFx0aW50IHJldCA9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kcCwgc3RhcnQsIGVuZCwgd2FsaywgZmF1bHRfZm9saW8pO1xuIFxuIFx0XHRpZiAocmV0ID09IC1FQUdBSU4pXG5AQCAtMjY3LDggKzI3MiwxOCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuIFx0fVxuIFxuIFx0cHRlcCA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZHAsIHN0YXJ0LCBcdTAwMjZwdGwpO1xuLVx0aWYgKCFwdGVwKVxuK1x0aWYgKCFwdGVwKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFNraXAgdGhlIHJlc3QgaWYgcG1kIGJlY29tZXMgaHVnZSBvciBjbGVhcmVkLiBGbHVzaCBpZiBhbnlcbitcdFx0ICogcHRlIGlzIG1vZGlmaWVkXG4rXHRcdCAqL1xuK1x0XHRpZiAoYWRkciAhPSBzdGFydCkge1xuK1x0XHRcdGlmICh1bm1hcHBlZClcbitcdFx0XHRcdGZsdXNoX3RsYl9yYW5nZSh3YWxrLVx1MDAzZXZtYSwgc3RhcnQsIGVuZCk7XG4rXHRcdFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspO1xuK1x0XHR9XG4gXHRcdGdvdG8gYWdhaW47XG4rXHR9XG4gXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuIFx0cHRlcCArPSAoYWRkciAtIHN0YXJ0KSAvIFBBR0VfU0laRTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQxOjA5LjI5NTQ3MTMwM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Njk1ODY5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgdHdlYWtpbmcgdGhlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhlIGNvbmRpdGlvbiBkZXRlcm1pbmluZyBpZiB3ZSBjaGVjayBmb3IgYSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKGBwbWRfdHJhbnNfaHVnZSgqcG1kcClgKSBvciBub24tcHJlc2VudCBwYWdlIChgIXBtZF9wcmVzZW50KCpwbWRwKWApIGlzIG5vdyBjb25kaXRpb25hbC4gSXQncyBvbmx5IGV2YWx1YXRlZCBpZiB0aGUgY3VycmVudCBhZGRyZXNzIChgYWRkcmApIGlzIGVxdWFsIHRvIHRoZSBzdGFydGluZyBhZGRyZXNzIChgc3RhcnRgKS4gVGhhdCBmZWVscyBsaWtlIGEgc3VidGxlIGNoYW5nZSwgbGlrZWx5IGFpbWVkIGF0IGEgdmVyeSBzcGVjaWZpYyBzY2VuYXJpbyB3aXRoaW4gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgY29uZGl0aW9uYWwgY2hlY2suXG5cblRoZSBvdGhlciBiaXQgaXMgbW9yZSBpbnRlcmVzdGluZy4gSXQgZGVhbHMgd2l0aCBhIGZhaWx1cmUgc2NlbmFyaW8gd2l0aGluIGBwdGVfb2Zmc2V0X21hcF9sb2NrYC4gSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIE5VTEwsIHRoZSBwYXRjaCBub3cgaW50cm9kdWNlcyBhIGNoZWNrLiBJZiB3ZSdyZSBub3QgYXQgdGhlIHN0YXJ0IGFkZHJlc3MsIHdoaWNoIHByZXN1bWFibHkgbWVhbnMgd2UndmUgbWFkZSBzb21lIHByb2dyZXNzLCBhbmQgaWYgYHVubWFwcGVkYCBpcyB0cnVlLCB0aGVuIHdlIGZsdXNoIHRoZSBUTEIuIFRoZSBsb2dpYyBoZXJlIGlzIG1ha2luZyBhc3N1bXB0aW9ucyBhYm91dCB3aGF0IGhhcHBlbnMgaWYgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIGZhaWxzLiBJdCdzIHNheWluZyB0aGF0LCBpbiBzb21lIGNhc2VzLCB0aGUgc3lzdGVtIHNob3VsZCBzdG9wIHByb2Nlc3NpbmcgdGhlIG1pZ3JhdGlvbiBvbiBhbiBpbmRpdmlkdWFsIFBURSBhbmQgY29udGludWUgdG8gdGhlIG5leHQgb25lLCB3aXRoIHRoZSBwb3RlbnRpYWwgb2YgZmx1c2hpbmcgdGhlIFRMQiB0byBkZWFsIHdpdGggcGFydGlhbGx5IHVubWFwcGVkIFZNQSByYW5nZXMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoaXMgc3BlY2lmaWMgY29kZXBhdGggYW5kIHdoeS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGEgc2FmZSBhc3N1bXB0aW9uLCBzbyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UgaXMgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0MToxNC4wNjUwNzc3MjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5ODE3NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuYz0xMzc9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDQtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyNDU6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTI0Ni1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBtaWdyYXRlX3ZtYV93YWxrX29wcyA9IHtcXG5tbS9taWdyYXRlX2RldmljZS5jOjUxNTpcXHQucG1kX2VudHJ5XFx0XFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTUxNi1cXHQucHRlX2hvbGVcXHRcXHQ9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MTQuNTU0OTA1MTAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMDczMzM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdpdGhpbiB0aGUgTWlncmF0aW9uIEZyYW1ld29yayoqXG5cbkFscmlnaHQsIHNvIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgaXMgY2xlYXJseSBhIGNvbXBvbmVudCBvZiBgbWlncmF0ZV92bWFfd2Fsa19vcHNgLiBNYWtlcyBzZW5zZTsgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGNvbGxlY3Rpbmcgb3IgaGFuZGxpbmcgcGFnZSBtYXAgZW50cmllcyAoUE1EcykgZHVyaW5nIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIG1pZ3JhdGlvbiBwcm9jZXNzLiBUaGUgXCJ3YWxrXCIgaW1wbGllcyBzb21lIHNvcnQgb2YgaXRlcmF0aW9uLCBwZXJoYXBzIG92ZXIgcGFnZSB0YWJsZXMuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBhbmQgd2hhdCBJIHJlYWxseSB3YW50IHRvIHVuZGVyc3RhbmQsIGlzIHdoZXJlIHRoaXMgYG1pZ3JhdGVfdm1hX3dhbGtfb3BzYCBhYnN0cmFjdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBtaWdyYXRpb24gbWFjaGluZXJ5LiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIGdyYXNwIGhvdyB0aGVzZSBjb2xsZWN0ZWQgUE1EcyBhcmUgdXNlZCwgd2hldGhlciB0aGV5J3JlIG1vdmVkLCBjb3BpZWQsIGludmFsaWRhdGVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGVyZSBgbWlncmF0ZV92bWFfd2Fsa19vcHNgIGlzIGVtcGxveWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MTguMTU1NjQzNzk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTY5ODI4MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfd2Fsa19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlX2RldmljZS5jPTI0NT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01MTMtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1MTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBtaWdyYXRlX3ZtYV93YWxrX29wcyA9IHtcXG5tbS9taWdyYXRlX2RldmljZS5jLTUxNS1cXHQucG1kX2VudHJ5XFx0XFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NTI4PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2NvbGxlY3Qoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy01NDItXFx0d2Fsa19wYWdlX3JhbmdlX3ZtYShtaWdyYXRlLVxcdTAwM2V2bWEsIG1pZ3JhdGUtXFx1MDAzZXN0YXJ0LCBtaWdyYXRlLVxcdTAwM2VlbmQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo1NDM6XFx0XFx0XFx0XFx1MDAyNm1pZ3JhdGVfdm1hX3dhbGtfb3BzLCBtaWdyYXRlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTU0NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MTkuMjUyNjMzMTgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNTkxMTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgTWlncmF0aW9uIFByb2Nlc3M6IEEgUHJvY2VkdXJhbCBCcmVha2Rvd24qKlxuXG5SaWdodCwgc28gYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgbWlncmF0ZV92bWFfc2V0dXBgLiBUaGF0J3MgdGhlIGtleSByZWxhdGlvbnNoaXAgaGVyZS4gYG1pZ3JhdGVfdm1hX3NldHVwYCBpcyBjbGVhcmx5IHRoZSBwYXJlbnQgZnVuY3Rpb24sIHRoZSBvcmNoZXN0cmF0b3IsIGFuZCBpdCdzIHVzaW5nIGBtaWdyYXRlX3ZtYV9jb2xsZWN0YCBhcyBhIHN1Ym9yZGluYXRlIHRhc2suICBXZSdyZSBsb29raW5nIGF0IGEgd2VsbC1kZWZpbmVkIHByb2NlZHVyYWwgZmxvdyBpbiB0aGUgbWlncmF0aW9uIHByb2Nlc3MsIHRoZW4sIHdoZXJlIG9uZSBmdW5jdGlvbiBzZXRzIHRoaW5ncyB1cCBhbmQgYW5vdGhlciB0aGVuIGZvbGxvd3MgdG8gZ2F0aGVyIGRldGFpbHMgZm9yIHRoYXQgc2V0dXAuIFRoaXMgaW1wbGllcyBhIHZlcnkgc3BlY2lmaWMgc3RhZ2UgaW4gdGhlIHByb2Nlc3MuIEkgd291bGQgZXhwZWN0IGBtaWdyYXRlX3ZtYV9zZXR1cGAgdG8gYmUgdGhlIHBoYXNlIG9mIHRoZSBtaWdyYXRpb24gd2hpY2ggcHJlcGFyZXMgdGhlIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgZm9yIGNvcHlpbmcuIEl0IHNldHMgdXAgdGhlIGdyb3VuZHdvcmsg4oCTIHBlcmhhcHMgYWxsb2NhdGluZyByZXNvdXJjZXMsIGRldGVybWluaW5nIHJhbmdlcywgb3IgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsIG1lbW9yeSByZWdpb24gd2UncmUgYWJvdXQgdG8gbW92ZS4gIGBtaWdyYXRlX3ZtYV9jb2xsZWN0YCwgdGhlcmVmb3JlLCBpcyBsaWtlbHkgdGhlIG5leHQgc3RlcCBpbiB3aGljaCBpdCBjb2xsZWN0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IFZNQSBmb3IgdGhlIG1pZ3JhdGlvbi4gVGhpcyBjb3VsZCBiZSBjb2xsZWN0aW5nIHBvaW50ZXJzLCBwYWdlIGZsYWdzLCBvciBhbnkgb3RoZXIgbWV0YWRhdGEgdGhhdCBpcyBuZWVkZWQgbGF0ZXIgb24gZHVyaW5nIHRoZSBhY3R1YWwgbWlncmF0aW9uLiBUaGlzIG1ha2VzIGEgbG90IG9mIHNlbnNlLiBUaGUgc2V0dXAgcGhhc2UgZG9lc24ndCBuZWVkIHRvIGhvbGQgb250byB0aGlzIGRhdGEsIHNvIHdlIGNhbiB1c2UgYSB3b3JrZXIgcHJvY2VzcyBmb3IgaXQuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aHkgaXQncyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LCB3aGF0IHRoZSBhZHZhbnRhZ2VzIGFyZSwgYW5kIGlmIHRoZSBicmVha2Rvd24gaXMgaW4gbGluZSB3aXRoIGJlc3QgcHJhY3RpY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MjIuODY4NTQ4ODEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDgwODI3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlX2RldmljZS5jPTY4NT1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV91bm1hcChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTY5MS0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjY5MjogKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIC0gcHJlcGFyZSB0byBtaWdyYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02OTMtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzU0LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzU1OmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NTYte1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03OTQtfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6Nzk1OkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzk2LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzgxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDAzOiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkgZXhjZXB0IHRoYXRcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDQtICogaW5zdGVhZCBvZiBsb29raW5nIHVwIHBhZ2VzIGJhc2VkIG9uIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBhIHJhbmdlIG9mXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MTAtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MTE6ICogTGlrZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJlbmNlIGFuZCBsb2NrIGFueVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQxMi0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJ3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ4MT1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5My1cXHQgKiB0aGUgc291cmNlIGZvbGlvLiBTbyBjYWxsIG1pZ3JhdGVfdm1hX3VubWFwKCkgZGlyZWN0bHkgdG8gdW5tYXAgdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk0OlxcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk1LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0MToyNC4yNzY2Mzg2NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI5ODc1NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBtaWdyYXRlX3ZtYV9zZXR1cGAgRXhwb3J0KipcblxuQWxyaWdodCwgc28gYG1pZ3JhdGVfdm1hX3NldHVwYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UuIE5vdyB0aGUga2V5IHF1ZXN0aW9uIGlzOiB3aG8ncyBhY3R1YWxseSAqdXNpbmcqIGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBzaXRlcyB0byBwcm9wZXJseSBncm9rIHRoZSBpbnRlbnQgYW5kIGhvdyBpdCdzIGJlaW5nIGxldmVyYWdlZCBpbiB0aGUgc3lzdGVtLiBUaGlzIGV4cG9ydCBpbW1lZGlhdGVseSBmbGFncyBhcyBhIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludCBhbmQgcHJvYmFibHkgbWVyaXRzIGEgZGVlcCBkaXZlIGludG8gdGhlIGNhbGxpbmcgY29udGV4dHMuIEtub3dpbmcgdGhlIGNvbnN1bWVycyB3aWxsIHByb3ZpZGUgYSBtdWNoIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgc3Vic3lzdGVtJ3MgYmVoYXZpb3VyLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoaXMgZXhwb3J0IHRvIGZpbmQgd2hhdCBmdW5jdGlvbnMgYW5kIG1vZHVsZXMgZGVwZW5kIG9uIGl0IHRvIGJlIGFibGUgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjkzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDE6MjcuNDA2NTE2ODQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTU5NjE5MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX3NldHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjY0PXVzZSBoYXJkd2FyZSBETUEgb3IgZGV2aWNlIHNwZWNpZmljIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHRvIG1pZ3JhdGUgZGF0YS5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjY1OlRoZSBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBtaWdyYXRlX3ZtYV9wYWdlcygpLCBhbmQgbWlncmF0ZV92bWFfZmluYWxpemUoKVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI5Nz1iZXR3ZWVuIGRldmljZSBkcml2ZXIgc3BlY2lmaWMgY29kZSBhbmQgc2hhcmVkIGNvbW1vbiBjb2RlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMS0gICBUaGUgZGV2aWNlIGRyaXZlciBoYXMgdG8gcGFzcyBhIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzAyOiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgc28gdGhlIG1tYXBfcmVhZF9sb2NrKCkgb3IgbW1hcF93cml0ZV9sb2NrKCkgbmVlZHMgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAzLSAgIGJlIGhlbGQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWlncmF0aW9uLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDQtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwNToyLiBgYG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylgYFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDYtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNy0gICBUaGUgZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgYGBzdHJ1Y3QgbWlncmF0ZV92bWFgYCBmaWVsZHMgYW5kIHBhc3Nlc1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDg6ICAgdGhlIHBvaW50ZXIgdG8gbWlncmF0ZV92bWFfc2V0dXAoKS4gVGhlIGBgYXJncy1cXHUwMDNlZmxhZ3NgYCBmaWVsZCBpcyB1c2VkIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwOS0gICBmaWx0ZXIgd2hpY2ggc291cmNlIHBhZ2VzIHNob3VsZCBiZSBtaWdyYXRlZC4gRm9yIGV4YW1wbGUsIHNldHRpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTctXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMxODogICBPbmUgb2YgdGhlIGZpcnN0IHN0ZXBzIG1pZ3JhdGVfdm1hX3NldHVwKCkgZG9lcyBpcyB0byBpbnZhbGlkYXRlIG90aGVyXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMxOS0gICBkZXZpY2UncyBNTVVzIHdpdGggdGhlIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKClgYCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjQtICAgYGBNTVVfTk9USUZZX01JR1JBVEVgYCBhbmQgdGhlIGBgb3duZXJgYCBmaWVsZCBzZXQgdG9cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzI1OiAgIHRoZSBgYGFyZ3MtXFx1MDAzZXBnbWFwX293bmVyYGAgZmllbGQgcGFzc2VkIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoaXNcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI2LSAgIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBza2lwIHRoZSBpbnZhbGlkYXRpb24gY2FsbGJhY2sgYW5kIG9ubHlcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzctICAgaW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFBURS5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzM4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgYWxzbyBjbGVhcnMgdGhlIGBgYXJncy1cXHUwMDNlZHN0YGAgYXJyYXkuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMzOS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjEyPUhNTSDliIfmjaLliLDnm7TmjqXkvb/nlKggc3RydWN0IHBhZ2Ug55So5LqO6K6+5aSH5YaF5a2Y77yM6L+Z5L2/5b6X5aSn5aSa5pWw5YaF5qC45Luj56CB6Lev5b6E5LiN55+l6YGT5beu5byC44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIxOC3nlLHkuo4gQ1BVIOaXoOazleebtOaOpeiuv+mXruiuvuWkh+WGheWtmO+8jOWboOatpOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+S9v+eUqOehrOS7tiBETUEg5oiW6K6+5aSH54m55a6a55qE5Yqg6L29L+WtmFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjE5OuWCqOaMh+S7pOadpei/geenu+aVsOaNruOAgm1pZ3JhdGVfdm1hX3NldHVwKCnjgIFtaWdyYXRlX3ZtYV9wYWdlcygpIOWSjFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjIwLW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTI0Mz1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTA6ICAg6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75bCGIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAg5Lyg6YCS57uZbWlncmF0ZV92bWFfc2V0dXAoKe+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUxLSAgIOWboOatpOmcgOimgeWcqOi/geenu+acn+mXtOS/neeVmSBtbWFwX3JlYWRfbG9jaygpIOaIliBtbWFwX3dyaXRlX2xvY2soKeOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUyLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUzOjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTQtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTUtICAg6K6+5aSH6amx5Yqo5Yid5aeL5YyW5LqGIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAg55qE5a2X5q6177yM5bm25bCG6K+l5oyH6ZKI5Lyg6YCS57uZXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTY6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeOAgmBgYXJncy1cXHUwMDNlZmxhZ3NgYCDlrZfmrrXmmK/nlKjmnaXov4fmu6Tlk6rkupvmupDpobXpnaLlupTor6Xooqvov4Hnp7vjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Ny0gICDkvovlpoLvvIzorr7nva4gYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAg5bCG5Y+q6L+B56e757O757uf5YaF5a2Y77yM6K6+572uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Mi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2MzogICBtaWdyYXRlX3ZtYV9zZXR1cCgp5omA5YGa55qE56ys5LiA5q2l5piv55SoIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKWBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjQtICAg5ZKMIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKClgYCDosIPnlKjmnaXpgY3ljoborr7lpIflkajlm7TnmoTpobXooajvvIzkvb9cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY3LSAgIOWFtiBgYGV2ZW50YGAg5a2X5q616K6+572u5Li6TU1VX05PVElGWV9NSUdSQVRF77yMIGBgb3duZXJgYCDlrZfmrrXorr7nva7kuLrkvKDpgJLnu5lcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2ODogICBtaWdyYXRlX3ZtYV9zZXR1cCgp55qEIGBgYXJncy1cXHUwMDNlcGdtYXBfb3duZXJgYCDlrZfmrrXjgILov5nlhYHorrjorr7lpIfpqbHliqjot7Pov4fml6BcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2OS0gICDmlYjljJblm57osIPvvIzlj6rml6DmlYjljJbpgqPkupvlrp7pmYXmraPlnKjov4Hnp7vnmoTorr7lpIfnp4HmnIlNTVXmmKDlsITjgILov5nkuIDngrnlsIblnKjkuIvkuIDoioLor6bnu4bop6Pph4rjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjc1LSAgIGBgbG9ja19wYWdlKClgYOmUgeWumu+8jOS4jkxSVemalOemu++8iOWmguaenOezu+e7n+WGheWtmOWSjOiuvuWkh+engeaciemhteS4jeWcqExSVeS4iu+8ie+8jOS7jui/m1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjc2OiAgIOeoi+S4reWPlua2iOaYoOWwhO+8jOW5tuaPkuWFpeS4gOS4queJueauiueahOi/geenu1BUReadpeS7o+abv+WOn+adpeeahFBUReOAgiBtaWdyYXRlX3ZtYV9zZXR1cCgpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzctICAg6L+Y5riF6Zmk5LqGIGBgYXJncy1cXHUwMDNlZHN0YGAg5pWw57uE44CCXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTM4LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTM5OlxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWcpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTQwLVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTc0MD1zdGF0aWMgaW50IGt2bXBwY19zdm1fcGFnZV9pbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYwLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NzYxOlxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWcpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTM5ND1zdm1fbWlncmF0ZV92bWFfdG9fdnJhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMxLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NDMyOlxcdHIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00MzMtXFx0aWYgKHIpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkzPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczNC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjczNTpcXHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzM2LVxcdGlmIChyKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MzUxNT1zdm1fcmFuZ2VfYmVzdF9wcmVmZXRjaF9sb2NhdGlvbihzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4Mi0gKiBhbmQgcmVzdG9yZSB3b3JrOlxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTgzOiAqIDEuIG1pZ3JhdGVfdm1hX3NldHVwIGludmFsaWRhdGUgcGFnZXMsIE1NVSBub3RpZmllciBjYWxsYmFjayBzdm1fcmFuZ2VfZXZpY3RcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4NC0gKiAgICBzdG9wcyBhbGwgcXVldWVzLCBzY2hlZHVsZSByZXN0b3JlIHdvcmtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTYxNj1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODMtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Njg0OlxcdGVyciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEyMTE9c3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTI2NC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjY1OlxcdGVyciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjY2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM1LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjIzNjpcXHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpIFxcdTAwM2MgMClcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yMzctXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTgyMj1ub3V2ZWF1X2RtZW1fbWlncmF0ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzEtXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6ODcyOlxcdFxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzMtXFx0XFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE2MD1zdHJ1Y3QgbWlncmF0ZV92bWEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY2LVxcdCAqIFRoZSBzcmMgYXJyYXkgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNhbGxlciBhZnRlclxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE2NzpcXHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBhbmQgbXVzdCBub3QgY2hhbmdlIHRoZSBkc3QgYXJyYXkgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjgtXFx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5NTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xOTYtdm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTEyMD1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xMTY0LVxcbmxpYi90ZXN0X2htbS5jOjExNjU6XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpO1xcbmxpYi90ZXN0X2htbS5jLTExNjYtXFx0XFx0aWYgKHJldClcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTI0Mi1cXHRcXHRcXHRcXHRNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQ7XFxubGliL3Rlc3RfaG1tLmM6MTI0MzpcXHRcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncyk7XFxubGliL3Rlc3RfaG1tLmMtMTI0NC1cXHRcXHRpZiAocmV0KVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3MDUtXFx0LypcXG5saWIvdGVzdF9obW0uYzoxNzA2OlxcdCAqIEluIHByYWN0aWNlIG1pZ3JhdGVfdm1hX3NldHVwKCkgc2hvdWxkIG5ldmVyIGZhaWwgdW5sZXNzIHRoZVxcbmxpYi90ZXN0X2htbS5jLTE3MDctXFx0ICogdGVzdCBpcyB3cm9uZyBhcyBpdCBqdXN0IHRlc3RzIHNvbWUgc3RhdGljIFZNQSBwcm9wZXJ0aWVzLlxcbmxpYi90ZXN0X2htbS5jLTE3MDgtXFx0ICovXFxubGliL3Rlc3RfaG1tLmM6MTcwOTpcXHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpKSB7XFxubGliL3Rlc3RfaG1tLmMtMTcxMC1cXHRcXHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTY4NT1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV91bm1hcChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTY5MS0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjY5MjogKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIC0gcHJlcGFyZSB0byBtaWdyYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02OTMtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzU0LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzU1OmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NTYte1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03OTQtfVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6Nzk1OkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzk2LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzgxPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDAyLSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDAzOiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkgZXhjZXB0IHRoYXRcXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MDQtICogaW5zdGVhZCBvZiBsb29raW5nIHVwIHBhZ2VzIGJhc2VkIG9uIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5ncyBhIHJhbmdlIG9mXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0MTAtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0MTE6ICogTGlrZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJlbmNlIGFuZCBsb2NrIGFueVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQxMi0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJ3QgZnJlZSBiZWZvcmUgdW5tYXBwaW5nIHRoZW0uIERyaXZlcnMgbWF5IHRoZW5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ4MT1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ5My1cXHQgKiB0aGUgc291cmNlIGZvbGlvLiBTbyBjYWxsIG1pZ3JhdGVfdm1hX3VubWFwKCkgZGlyZWN0bHkgdG8gdW5tYXAgdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDk0OlxcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDk1LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0MTozNi45NjYxNDMyMTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxMDQ0MjE4OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG1pZ3JhdGVfdm1hX3NldHVwYCBGdW5jdGlvbiBhbmQgdGhlIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIHBvcHBpbmcgdXAgaW4gYSBmZXcgcGxhY2VzIOKAkyBgbGliL3Rlc3RfaG1tLmNgLCBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmNgLCBhbmQgZXZlbiBvdmVyIGluIHRoZSBBTUQgYW5kIFBvd2VyUEMgY29kZSB3aXRoIGBrZmRfbWlncmF0ZS5jYCBhbmQgYGJvb2szc19odl91dm1lbS5jYC4gVGhhdCB0ZXN0IG1vZHVsZSBpbiBgbGliL3Rlc3RfaG1tLmNgIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBITU0sIEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQsIHdoaWNoIEknbSBmYW1pbGlhciB3aXRoIGluIHRoZSBjb250ZXh0IG9mIGRldmljZSBtZW1vcnkgYW5kIHNoYXJpbmcuXG5cbk5vdywgdGhhdCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGNoYW5nZS4uLiB0aGUgY29tbWl0IG1lc3NhZ2UgaXMga2V5IGhlcmUuIEl0IHNlZW1zIGxpa2UgdGhlIGJ1ZyB3YXMgcmVsYXRlZCB0byB0aGUgY29uZGl0aW9uIGBhZGRyICE9IHN0YXJ0YCBjYXVzaW5nIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCB0byBmYWlsLiBUaGlzIHdvdWxkIGxlYWQgdG8gZWl0aGVyIGFuIGluZmluaXRlIGxvb3Agb3Igc2tpcHBpbmcgb2YgYWRkcmVzc2VzLCB3aGljaCBpcyBjbGVhcmx5IHByb2JsZW1hdGljLiBUaGUgZml4IGV4cGxpY2l0bHkgbWVudGlvbnMgb25seSBjaGVja2luZyB0aGUgUE1EIChQYWdlIE1hcCBEaXJlY3RvcnkpIHdoZW4gdGhlIGFkZHJlc3MgaXMgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgYW5kICpubyogUFRFcyBoYXZlIGJlZW4gY29sbGVjdGVkLCBhdm9pZGluZyByZWR1bmRhbnQgY29sbGVjdGlvbiBhbmQgb3ZlcmZsb3dpbmcgdGhvc2UgYXJyYXlzLiBBbHNvLCBpdOKAmXMgc2tpcHBpbmcgaWYgdGhlIFBNRCBiZWNvbWVzIGh1Z2Ugb3IgY2xlYXJlZCBhbmQgZmx1c2hpbmcgaWYgYW55IFBURXMgYXJlIG1vZGlmaWVkLiBJ4oCZbSBndWVzc2luZyB0aGlzIGlzIGFsbCBhYm91dCBwZXJmb3JtYW5jZSBhbmQgYXZvaWRpbmcgZG91YmxlLWNvbGxlY3Rpbmcgb2YgcmVnaW9ucyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIG1pZ3JhdGVkLiBJIGNhbiBzZWUgaG93IHRoYXTigJlzIGEgdHJpY2t5IHJhY2UgdG8gZ2V0IHJpZ2h0LCBlc3BlY2lhbGx5IHdpdGggbXVsdGlwbGUgZGV2aWNlcyBpbiBwbGF5LlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbnRleHQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDoyOC4wMTAzNjQ2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEwMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHRzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbiAyNDY6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gMjQ3OlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiAyNDg6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIDI0OTpcXHR7XFxuIDI1MDpcXHRcXHRzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUgPSB3YWxrLVxcdTAwM2Vwcml2YXRlO1xcbiAyNTE6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVxcdTAwM2V2bWE7XFxuIDI1MjpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cXHUwMDNldm1fbW07XFxuIDI1MzpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydCwgdW5tYXBwZWQgPSAwO1xcbiAyNTQ6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiAyNTU6XFx0XFx0c3RydWN0IGZvbGlvICpmYXVsdF9mb2xpbyA9IG1pZ3JhdGUtXFx1MDAzZWZhdWx0X3BhZ2UgP1xcbiAyNTY6XFx0XFx0XFx0cGFnZV9mb2xpbyhtaWdyYXRlLVxcdTAwM2VmYXVsdF9wYWdlKSA6IE5VTEw7XFxuIDI1NzpcXHRcXHRwdGVfdCAqcHRlcDtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0YWdhaW46XFxuIDI2MDpcXHRcXHQvKlxcbiAyNjE6XFx0XFx0ICogT25seSBjaGVjayBwbWQgd2hlbiBhZGRyIGlzIGF0IHN0YXJ0LCBuYW1lbHkgbm8gcHRlIGlzIGNvbGxlY3RlZC5cXG4gMjYyOlxcdFxcdCAqIEl0IGF2b2lkcyBjb2xsZWN0aW5nIHRoZSBzYW1lIGFkZHJlc3MgcmFuZ2UgW3N0YXJ0LCBhZGRyKSB0d2ljZVxcbiAyNjM6XFx0XFx0ICogYW5kIG92ZXJmbG93aW5nIHRoZSBjb2xsZWN0aW9uIGFycmF5cy5cXG4gMjY0OlxcdFxcdCAqL1xcbiAyNjU6XFx0XFx0aWYgKGFkZHIgPT0gc3RhcnQgXFx1MDAyNlxcdTAwMjYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSkge1xcbiAyNjY6XFx0XFx0XFx0aW50IHJldCA9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kcCwgc3RhcnQsIGVuZCwgd2FsaywgZmF1bHRfZm9saW8pO1xcbiAyNjc6XFx0XFxuIDI2ODpcXHRcXHRcXHRpZiAocmV0ID09IC1FQUdBSU4pXFxuIDI2OTpcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbiAyNzA6XFx0XFx0XFx0aWYgKHJldCA9PSAwKVxcbiAyNzE6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDI3MjpcXHRcXHR9XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdHB0ZXAgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWRwLCBzdGFydCwgXFx1MDAyNnB0bCk7XFxuIDI3NTpcXHRcXHRpZiAoIXB0ZXApIHtcXG4gMjc2OlxcdFxcdFxcdC8qXFxuIDI3NzpcXHRcXHRcXHQgKiBTa2lwIHRoZSByZXN0IGlmIHBtZCBiZWNvbWVzIGh1Z2Ugb3IgY2xlYXJlZC4gRmx1c2ggaWYgYW55XFxuIDI3ODpcXHRcXHRcXHQgKiBwdGUgaXMgbW9kaWZpZWRcXG4gMjc5OlxcdFxcdFxcdCAqL1xcbiAyODA6XFx0XFx0XFx0aWYgKGFkZHIgIT0gc3RhcnQpIHtcXG4gMjgxOlxcdFxcdFxcdFxcdGlmICh1bm1hcHBlZClcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdGZsdXNoX3RsYl9yYW5nZSh3YWxrLVxcdTAwM2V2bWEsIHN0YXJ0LCBlbmQpO1xcbiAyODM6XFx0XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspO1xcbiAyODQ6XFx0XFx0XFx0fVxcbiAyODU6XFx0XFx0XFx0Z290byBhZ2FpbjtcXG4gMjg2OlxcdFxcdH1cXG4gMjg3OlxcdFxcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XFxuIDI4ODpcXHRcXHRwdGVwICs9IChhZGRyIC0gc3RhcnQpIC8gUEFHRV9TSVpFO1xcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRmb3IgKDsgYWRkciBcXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUsIHB0ZXArKykge1xcbiAyOTE6XFx0XFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcDtcXG4gMjkyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbXBmbiA9IDAsIHBmbjtcXG4gMjkzOlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIDI5NDpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gMjk1OlxcdFxcdFxcdHNvZnRsZWFmX3QgZW50cnk7XFxuIDI5NjpcXHRcXHRcXHRwdGVfdCBwdGU7XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdFxcdHB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRcXHRpZiAocHRlX25vbmUocHRlKSkge1xcbiAzMDE6XFx0XFx0XFx0XFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSkge1xcbiAzMDI6XFx0XFx0XFx0XFx0XFx0bXBmbiA9IE1JR1JBVEVfUEZOX01JR1JBVEU7XFxuIDMwMzpcXHRcXHRcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VjcGFnZXMrKztcXG4gMzA0OlxcdFxcdFxcdFxcdH1cXG4gMzA1OlxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gMzA2OlxcdFxcdFxcdH1cXG4gMzA3OlxcdFxcbiAzMDg6XFx0XFx0XFx0aWYgKCFwdGVfcHJlc2VudChwdGUpKSB7XFxuIDMwOTpcXHRcXHRcXHRcXHQvKlxcbiAzMTA6XFx0XFx0XFx0XFx0ICogT25seSBjYXJlIGFib3V0IHVuYWRkcmVzc2FibGUgZGV2aWNlIHBhZ2Ugc3BlY2lhbFxcbiAzMTE6XFx0XFx0XFx0XFx0ICogcGFnZSB0YWJsZSBlbnRyeS4gT3RoZXIgc3BlY2lhbCBzd2FwIGVudHJpZXMgYXJlIG5vdFxcbiAzMTI6XFx0XFx0XFx0XFx0ICogbWlncmF0YWJsZSwgYW5kIHdlIGlnbm9yZSByZWd1bGFyIHN3YXBwZWQgcGFnZS5cXG4gMzEzOlxcdFxcdFxcdFxcdCAqL1xcbiAzMTQ6XFx0XFx0XFx0XFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xcbiAzMTU6XFx0XFx0XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuIDMxNjpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIDMxNzpcXHRcXG4gMzE4OlxcdFxcdFxcdFxcdHBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4gMzE5OlxcdFxcdFxcdFxcdHBnbWFwID0gcGFnZV9wZ21hcChwYWdlKTtcXG4gMzIwOlxcdFxcdFxcdFxcdGlmICghKG1pZ3JhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjZcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkgfHxcXG4gMzIyOlxcdFxcdFxcdFxcdCAgICBwZ21hcC1cXHUwMDNlb3duZXIgIT0gbWlncmF0ZS1cXHUwMDNlcGdtYXBfb3duZXIpXFxuIDMyMzpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdFxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4gMzI2OlxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbiAzMjc6XFx0XFx0XFx0XFx0XFx0aW50IHJldDtcXG4gMzI4OlxcdFxcbiAzMjk6XFx0XFx0XFx0XFx0XFx0LyogbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oKSBjb25zdW1lcyB0aGlzIHJlZmVyZW5jZSAqL1xcbiAzMzA6XFx0XFx0XFx0XFx0XFx0aWYgKGZvbGlvICE9IGZhdWx0X2ZvbGlvKVxcbiAzMzE6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gMzMyOlxcdFxcdFxcdFxcdFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiAzMzM6XFx0XFx0XFx0XFx0XFx0cHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpO1xcbiAzMzQ6XFx0XFx0XFx0XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc3BsaXRfZm9saW8oZm9saW8sXFxuIDMzNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIG1pZ3JhdGUtXFx1MDAzZWZhdWx0X3BhZ2UpO1xcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHRcXHRcXHRcXHRpZiAocmV0KSB7XFxuIDMzODpcXHRcXHRcXHRcXHRcXHRcXHRpZiAodW5tYXBwZWQpXFxuIDMzOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRmbHVzaF90bGJfcmFuZ2Uod2Fsay1cXHUwMDNldm1hLCBzdGFydCwgZW5kKTtcXG4gMzQwOlxcdFxcbiAzNDE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChhZGRyLCBlbmQsIHdhbGspO1xcbiAzNDI6XFx0XFx0XFx0XFx0XFx0fVxcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDoyOC4wMTE1NzczNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDk0MDc3Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggYG1pZ3JhdGVfdm1hX3NldHVwYC4gVGhhdCdzIGdvb2QsIGJlY2F1c2UgYG1pZ3JhdGVfdm1hX3NldHVwYCBpcyBhY3R1YWxseSB1c2VkIGluIGEgZmV3IHBsYWNlcy4gSSBrbm93IGl0J3MgdXNlZCBieSB0aGUgSE1NIHRlc3RzLCBzcGVjaWZpY2FsbHkgaW4gYGxpYi90ZXN0X2htbS5jYCwgd2hpY2gsIGJhc2VkIG9uIHRoZSBjb25maWcgSSBrbm93LCBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfVEVTVF9ITU1gLiBCZXlvbmQgdGhhdCwgaXQncyBhbHNvIHV0aWxpemVkIGJ5IHRob3NlIERSTSBkcml2ZXJzLCBub3V2ZWF1IGFuZCBhbWRncHUsIGFuZCBhbHNvIEtWTSBvbiBwb3dlcnBjLlxuXG5JZiBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGlzIHByb3Blcmx5LCBlbmFibGluZyBgQ09ORklHX1RFU1RfSE1NYCBzZWVtcyBsaWtlIGEgc29saWQgZmlyc3Qgc3RlcC4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQgdG8gZm9jdXMgb24gZWl0aGVyIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgZGlyZWN0bHksIG9yIGl0cyBwYXJlbnQsIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIEkgbmVlZCB0byBkaWcgaW50byBgbGliL3Rlc3RfaG1tLmNgIHRob3VnaCwgYW5kIHNlZSBpZiBpdCBleHBvc2VzIGFueSB1c2FibGUgaW50ZXJmYWNlIHRvIHVzZXIgc3BhY2UuIFRoYXQgd291bGQgbWFrZSB0aGluZ3MgKm11Y2gqIGVhc2llciBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDozMi41MDU2NTc0NThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTIxNzcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz0xODYwPXN0YXRpYyB2b2lkIF9fZXhpdCBobW1fZG1pcnJvcl9leGl0KHZvaWQpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xODY5LVxcbmxpYi90ZXN0X2htbS5jOjE4NzA6bW9kdWxlX2luaXQoaG1tX2RtaXJyb3JfaW5pdCk7XFxubGliL3Rlc3RfaG1tLmMtMTg3MS1tb2R1bGVfZXhpdChobW1fZG1pcnJvcl9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDQ6MzMuMDQwODgzOTkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODUwMTAyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBobW1fZG1pcnJvcl9pbml0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY2hlY2sgYGhtbV9kbWlycm9yX2luaXRgLlwiIE5vIHByZWFtYmxlLCBqdXN0IHN0cmFpZ2h0IHRvIHRoZSBwb2ludC4gV2UncmUgYXNzdW1pbmcgd2UgYm90aCBrbm93IHRoZSBjb250ZXh0LCBhbmQgSSdtIG1lbnRhbGx5IGZpbGluZyB0aGlzIHVuZGVyIHNvbWV0aGluZyB0aGF0IG5lZWRzIGF0dGVudGlvbiwgcmVxdWlyZXMgdmVyaWZpY2F0aW9uLCBvciBwZXJoYXBzIGhhcyByYWlzZWQgYSBxdWVzdGlvbi4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGEgZGlzdHJpYnV0ZWQgbWlycm9yaW5nIHN5c3RlbSB0byBhIGRpYWdub3N0aWMgZnVuY3Rpb24uIFRoZSBzcGVjaWZpY3MgYXJlIGlycmVsZXZhbnQsIHRoZSBrZXkgaXMgZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uJ3MgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ0OjM2LjEyNTg5NjY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODMwOlxcdFxcdFxcdGdvdG8gZXJyX3VucmVnO1xcbjE4MzE6XFx0XFxuMTgzMjpcXHRcXHRtZW1zZXQoZG1pcnJvcl9kZXZpY2VzLCAwLCBETUlSUk9SX05ERVZJQ0VTICogc2l6ZW9mKGRtaXJyb3JfZGV2aWNlc1swXSkpO1xcbjE4MzM6XFx0XFx0ZG1pcnJvcl9kZXZpY2VzW25kZXZpY2VzKytdLnpvbmVfZGV2aWNlX3R5cGUgPVxcbjE4MzQ6XFx0XFx0XFx0XFx0XFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbjE4MzU6XFx0XFx0ZG1pcnJvcl9kZXZpY2VzW25kZXZpY2VzKytdLnpvbmVfZGV2aWNlX3R5cGUgPVxcbjE4MzY6XFx0XFx0XFx0XFx0XFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbjE4Mzc6XFx0XFx0aWYgKHNwbV9hZGRyX2RldjAgXFx1MDAyNlxcdTAwMjYgc3BtX2FkZHJfZGV2MSkge1xcbjE4Mzg6XFx0XFx0XFx0ZG1pcnJvcl9kZXZpY2VzW25kZXZpY2VzKytdLnpvbmVfZGV2aWNlX3R5cGUgPVxcbjE4Mzk6XFx0XFx0XFx0XFx0XFx0XFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9DT0hFUkVOVDtcXG4xODQwOlxcdFxcdFxcdGRtaXJyb3JfZGV2aWNlc1tuZGV2aWNlcysrXS56b25lX2RldmljZV90eXBlID1cXG4xODQxOlxcdFxcdFxcdFxcdFxcdFxcdEhNTV9ETUlSUk9SX01FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ7XFxuMTg0MjpcXHRcXHR9XFxuMTg0MzpcXHRcXHRmb3IgKGlkID0gMDsgaWQgXFx1MDAzYyBuZGV2aWNlczsgaWQrKykge1xcbjE4NDQ6XFx0XFx0XFx0cmV0ID0gZG1pcnJvcl9kZXZpY2VfaW5pdChkbWlycm9yX2RldmljZXMgKyBpZCwgaWQpO1xcbjE4NDU6XFx0XFx0XFx0aWYgKHJldClcXG4xODQ2OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2NocmRldjtcXG4xODQ3OlxcdFxcdH1cXG4xODQ4OlxcdFxcbjE4NDk6XFx0XFx0cHJfaW5mbyhcXFwiSE1NIHRlc3QgbW9kdWxlIGxvYWRlZC4gVGhpcyBpcyBvbmx5IGZvciB0ZXN0aW5nIEhNTS5cXFxcblxcXCIpO1xcbjE4NTA6XFx0XFx0cmV0dXJuIDA7XFxuMTg1MTpcXHRcXG4xODUyOlxcdGVycl9jaHJkZXY6XFxuMTg1MzpcXHRcXHR3aGlsZSAoLS1pZCBcXHUwMDNlPSAwKVxcbjE4NTQ6XFx0XFx0XFx0ZG1pcnJvcl9kZXZpY2VfcmVtb3ZlKGRtaXJyb3JfZGV2aWNlcyArIGlkKTtcXG4xODU1OlxcdFxcdHVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkbWlycm9yX2RldiwgRE1JUlJPUl9OREVWSUNFUyk7XFxuMTg1NjpcXHRlcnJfdW5yZWc6XFxuMTg1NzpcXHRcXHRyZXR1cm4gcmV0O1xcbjE4NTg6XFx0fVxcbjE4NTk6XFx0XFxuMTg2MDpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgaG1tX2RtaXJyb3JfZXhpdCh2b2lkKVxcbjE4NjE6XFx0e1xcbjE4NjI6XFx0XFx0aW50IGlkO1xcbjE4NjM6XFx0XFxuMTg2NDpcXHRcXHRmb3IgKGlkID0gMDsgaWQgXFx1MDAzYyBETUlSUk9SX05ERVZJQ0VTOyBpZCsrKVxcbjE4NjU6XFx0XFx0XFx0aWYgKGRtaXJyb3JfZGV2aWNlc1tpZF0uem9uZV9kZXZpY2VfdHlwZSlcXG4xODY2OlxcdFxcdFxcdFxcdGRtaXJyb3JfZGV2aWNlX3JlbW92ZShkbWlycm9yX2RldmljZXMgKyBpZCk7XFxuMTg2NzpcXHRcXHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZG1pcnJvcl9kZXYsIERNSVJST1JfTkRFVklDRVMpO1xcbjE4Njg6XFx0fVxcbjE4Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ0OjM2LjEyNjA1MDY4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzA2MDY4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBNb2R1bGUgSW5pdGlhbGl6YXRpb24gLSBEaXZpbmcgRGVlcCoqXG5cbk9rYXksIHNvIHRoZSBzeXN0ZW0gaGFzIHJlY29nbml6ZWQgbXkgcHJlc2VuY2U7IGl0J3MgcmVnaXN0ZXJlZCBhIGNoYXJhY3RlciBkZXZpY2UsIHdoaWNoIGlzIHRoZSBmaXJzdCBzdGVwLiBOb3csIEkgd2FudCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB3aGF0IHRoZSBgZG1pcnJvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFdoYXQgZG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIGVudGFpbD8gSXMgaXQgc2V0dGluZyB1cCBtZW1vcnkgc3RydWN0dXJlcywgYWxsb2NhdGluZyByZXNvdXJjZXMsIHJlZ2lzdGVyaW5nIGludGVycnVwdCBoYW5kbGVycywgb3IgcGVyaGFwcyBjb25maWd1cmluZyBETUEgY2hhbm5lbHM/IEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWwgc3RhdGUgZXN0YWJsaXNoZWQgYnkgdGhpcyBmdW5jdGlvbiwgYmVjYXVzZSB0aGF0IGluaXRpYWwgc3RhdGUgd2lsbCBkZWZpbmUgdGhlIG1vZHVsZSdzIGZ1dHVyZSBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODk1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDozOS4zNTY2NjAyNjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTcyNDAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWlycm9yX2RldmljZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi90ZXN0X2htbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2htbS5jPTE3NzI9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNzc4LVxcbmxpYi90ZXN0X2htbS5jOjE3Nzk6c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxcbmxpYi90ZXN0X2htbS5jLTE3ODAte1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTgyMT1zdGF0aWMgaW50IF9faW5pdCBobW1fZG1pcnJvcl9pbml0KHZvaWQpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xODQzLVxcdGZvciAoaWQgPSAwOyBpZCBcXHUwMDNjIG5kZXZpY2VzOyBpZCsrKSB7XFxubGliL3Rlc3RfaG1tLmM6MTg0NDpcXHRcXHRyZXQgPSBkbWlycm9yX2RldmljZV9pbml0KGRtaXJyb3JfZGV2aWNlcyArIGlkLCBpZCk7XFxubGliL3Rlc3RfaG1tLmMtMTg0NS1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDozOS41MDYzOTE1OTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1MTkxODA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gYGRtaXJyb3JfZGV2aWNlX2luaXRgKipcblxuQWxyaWdodCwgbGV0J3MgY3JhY2sgb3BlbiB0aGlzIGBkbWlycm9yX2RldmljZV9pbml0YCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LCBidXQgSSB3YW50IHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgdGhlIGhpZ2gtbGV2ZWwgY29udHJvbCBmbG93OiBXaGF0J3MgdGhlIGVudHJ5IHBvaW50PyBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBpbml0aWFsaXplZD8gQW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBvciBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQ/IEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIGRldmljZSBtaXJyb3IgZHJpdmVyLCBzbyBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiByZXNvdXJjZSBhbGxvY2F0aW9uLCByZWdpc3RlciBtYXBwaW5nLCBhbmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaGFyZHdhcmUtc3BlY2lmaWMgcGFyYW1ldGVycyBpdCdzIHRha2luZyBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEdpdmVuIHRoYXQgaXQncyBhIGRldmljZSBpbml0IGZ1bmN0aW9uLCBJJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB3aGF0IHJlc291cmNlcyBpdCdzIHRyeWluZyB0byBtYW5hZ2UuIEkgYWxzbyBleHBlY3QgYSBudW1iZXIgb2YgY2hlY2tzLiBBcmUgd2UgZG9pbmcgYSBjaGVjayB0byBzZWUgaWYgd2UndmUgYWxyZWFkeSBkb25lIGFuIGluaXRpYWxpemF0aW9uPyBUaGF0J3MgY29tbW9uLCBzbyBpdCdzIHByb2JhYmx5IGhlcmUuIEknbGwgYWxzbyBiZSBzY2FubmluZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgbG9va2luZyBmb3Igd2hlcmUgaXQgaXMgd3JpdGluZyBhbmQgcmVhZGluZyBkYXRhIGZyb20gcmVnaXN0ZXJzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIHZlcnNpb25zIG9mIHRoZSB0YXJnZXQgZGV2aWNlLiBBcmUgdGhlcmUgY29uZGl0aW9uYWwgYmxvY2tzIGJhc2VkIG9uIGRldmljZSBJRHMgb3IgY2FwYWJpbGl0aWVzPyBBbnkgdXNlIG9mIHBsYXRmb3JtLXNwZWNpZmljIG1hY3Jvcz8gSSBhbHNvIHdhbnQgdG8gcGF5IGNhcmVmdWwgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IGlzIGhhbmRsZWQgY29ycmVjdGx5LCBzaW5jZSB0aGlzIGlzIGEga2VybmVsIGZ1bmN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gbXV0ZXhlcywgc2VtYXBob3Jlcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEFuZCBvZiBjb3Vyc2UsIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvd2VyIG1hbmFnZW1lbnQuIElzIGl0IHNldHRpbmcgdXAgYW55IGNsb2NrcyBvciBwb3dlciBkb21haW5zPyBBbnkgc2xlZXAgb3Igd2FrZS11cCBjYWxscz8gV2hhdCBpcyB0aGUgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IFRoZSBvdmVyYWxsIGdvYWwgaXMgdG8gZm9ybSBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiBob3cgYGRtaXJyb3JfZGV2aWNlX2luaXRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBkcml2ZXIncyBvcGVyYXRpb24sIGFuZCBob3cgcm9idXN0IGFuZCBlZmZpY2llbnQgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDQ6NDQuMDU4MzEzMjY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzc5LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzc5OlxcdHN0YXRpYyBpbnQgZG1pcnJvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsIGludCBpZClcXG4xNzgwOlxcdHtcXG4xNzgxOlxcdFxcdGRldl90IGRldjtcXG4xNzgyOlxcdFxcdGludCByZXQ7XFxuMTc4MzpcXHRcXG4xNzg0OlxcdFxcdGRldiA9IE1LREVWKE1BSk9SKGRtaXJyb3JfZGV2KSwgaWQpO1xcbjE3ODU6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2bWVtX2xvY2spO1xcbjE3ODY6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWxvY2spO1xcbjE3ODc6XFx0XFxuMTc4ODpcXHRcXHRjZGV2X2luaXQoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWNkZXZpY2UsIFxcdTAwMjZkbWlycm9yX2ZvcHMpO1xcbjE3ODk6XFx0XFx0bWRldmljZS1cXHUwMDNlY2RldmljZS5vd25lciA9IFRISVNfTU9EVUxFO1xcbjE3OTA6XFx0XFx0bWRldmljZS1cXHUwMDNlZGV2aWNlLnJlbGVhc2UgPSBkbWlycm9yX2RldmljZV9yZWxlYXNlO1xcbjE3OTE6XFx0XFxuMTc5MjpcXHRcXHRkZXZpY2VfaW5pdGlhbGl6ZShcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2aWNlKTtcXG4xNzkzOlxcdFxcdG1kZXZpY2UtXFx1MDAzZWRldmljZS5kZXZ0ID0gZGV2O1xcbjE3OTQ6XFx0XFxuMTc5NTpcXHRcXHRyZXQgPSBkZXZfc2V0X25hbWUoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWRldmljZSwgXFxcImhtbV9kbWlycm9yJXVcXFwiLCBpZCk7XFxuMTc5NjpcXHRcXHRpZiAocmV0KVxcbjE3OTc6XFx0XFx0XFx0Z290byBwdXRfZGV2aWNlO1xcbjE3OTg6XFx0XFxuMTc5OTpcXHRcXHQvKiBCdWlsZCBhIGxpc3Qgb2YgZnJlZSBaT05FX0RFVklDRSBzdHJ1Y3QgcGFnZXMgKi9cXG4xODAwOlxcdFxcdHJldCA9IGRtaXJyb3JfYWxsb2NhdGVfY2h1bmsobWRldmljZSwgTlVMTCwgZmFsc2UpO1xcbjE4MDE6XFx0XFx0aWYgKHJldClcXG4xODAyOlxcdFxcdFxcdGdvdG8gcHV0X2RldmljZTtcXG4xODAzOlxcdFxcbjE4MDQ6XFx0XFx0cmV0ID0gY2Rldl9kZXZpY2VfYWRkKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VjZGV2aWNlLCBcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2aWNlKTtcXG4xODA1OlxcdFxcdGlmIChyZXQpXFxuMTgwNjpcXHRcXHRcXHRnb3RvIHB1dF9kZXZpY2U7XFxuMTgwNzpcXHRcXG4xODA4OlxcdFxcdHJldHVybiAwO1xcbjE4MDk6XFx0XFxuMTgxMDpcXHRwdXRfZGV2aWNlOlxcbjE4MTE6XFx0XFx0cHV0X2RldmljZShcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2aWNlKTtcXG4xODEyOlxcdFxcdHJldHVybiByZXQ7XFxuMTgxMzpcXHR9XFxuMTgxNDpcXHRcXG4xODE1OlxcdHN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UpXFxuMTgxNjpcXHR7XFxuMTgxNzpcXHRcXHRjZGV2X2RldmljZV9kZWwoXFx1MDAyNm1kZXZpY2UtXFx1MDAzZWNkZXZpY2UsIFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZpY2UpO1xcbjE4MTg6XFx0XFx0cHV0X2RldmljZShcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2aWNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDQ6NDQuMDU4NTg0NjM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTg3NDMzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTZXR1cCBvZiBgZG1pcnJvcl9mb3BzYCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlJ3MganVtcGluZyByaWdodCBpbnRvIHNldHRpbmcgdXAgYGRtaXJyb3JfZm9wc2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIGtub3cgYGRtaXJyb3JgIGlzIGxpa2VseSByZWxhdGVkIHRvIGRhdGEgbWlycm9yaW5nIG9yIHJlcGxpY2F0aW9uLCBhbmQgdGhlIFwiZm9wc1wiIHN1ZmZpeCBhbG1vc3QgY2VydGFpbmx5IGluZGljYXRlcyBmaWxlIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGdlYXJlZCB0b3dhcmRzIHVuZGVyc3RhbmRpbmcgdGhlIHN0cnVjdHVyZSB0aGF0J3MgYmVpbmcgc2V0IHVwIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBkYXRhIHJlcGxpY2F0aW9uIHN0cmF0ZWd5LiBMZXQncyBkaWcgaW50byB3aGF0IGBkbWlycm9yX2ZvcHNgICphY3R1YWxseSogaXMuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZSBgZG1pcnJvcl9mb3BzYCBkYXRhIHN0cnVjdHVyZS4gSSdtIGV4cGVjdGluZyBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb24gcG9pbnRlcnMsIGltcGxlbWVudGluZyB0aGUgY29yZSBmaWxlLXN5c3RlbSBsZXZlbCBpbnRlcmFjdGlvbiBmb3IgdGhlIG1pcnJvcmluZyBwcm9jZXNzLiBTcGVjaWZpYyB0aGluZ3MgSSdtIGFudGljaXBhdGluZyBhcmUgb3BlcmF0aW9ucyBsaWtlIGBvcGVuYCwgYHJlYWRgLCBgd3JpdGVgLCBgY2xvc2VgLCBgZ2V0YXR0cmAsIGBta2RpcmAsIGBybWRpcmAsIGV0Yy4sIHRoYXQgbmVlZCB0byBiZSBpbnRlcmNlcHRlZCBvciBjdXN0b21pemVkIGZvciBkYXRhIGNvbnNpc3RlbmN5IGFuZCBjb25mbGljdCByZXNvbHV0aW9uIGluIGEgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQuIEknbSBhbHNvIHJlYWR5IGZvciBhIGRlZXBlciBkaXZlIGludG8gaG93IHRoaXMgc3RydWN0dXJlIG1pZ2h0IGludGVyYWN0IHdpdGggdW5kZXJseWluZyBibG9jayBkZXZpY2VzLCBuZXR3b3JrIHByb3RvY29scywgb3Igb3RoZXIgc3RvcmFnZSBsYXllcnMuIFRoaXMgaXMgYSBjcml0aWNhbCBidWlsZGluZyBibG9jaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MjQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ0OjQ4Ljc1NzMzMDk0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMzYwMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtaXJyb3JfZm9wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz0xNTc9c3RhdGljIHZvaWQgZG1pcnJvcl9ib3VuY2VfZmluaShzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgKmJvdW5jZSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE2MS1cXG5saWIvdGVzdF9obW0uYzoxNjI6c3RhdGljIGludCBkbWlycm9yX2ZvcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG5saWIvdGVzdF9obW0uYy0xNjMte1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTg4PXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2aWNlX2V2aWN0X2NodW5rKHN0cnVjdCBkbWlycm9yX2NodW5rICpjaHVuaylcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTIzNy1cXG5saWIvdGVzdF9obW0uYzoyMzg6c3RhdGljIGludCBkbWlycm9yX2ZvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG5saWIvdGVzdF9obW0uYy0yMzkte1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTQ4MT1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmVfY2h1bmtzKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE1MTItXFxubGliL3Rlc3RfaG1tLmM6MTUxMzpzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxubGliL3Rlc3RfaG1tLmMtMTUxNC1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY29tbWFuZCxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE1ODctXFxubGliL3Rlc3RfaG1tLmM6MTU4ODpzdGF0aWMgaW50IGRtaXJyb3JfZm9wc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5saWIvdGVzdF9obW0uYy0xNTg5LXtcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE2MTAtXFxubGliL3Rlc3RfaG1tLmM6MTYxMTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkbWlycm9yX2ZvcHMgPSB7XFxubGliL3Rlc3RfaG1tLmM6MTYxMjpcXHQub3BlblxcdFxcdD0gZG1pcnJvcl9mb3BzX29wZW4sXFxubGliL3Rlc3RfaG1tLmM6MTYxMzpcXHQucmVsZWFzZVxcdD0gZG1pcnJvcl9mb3BzX3JlbGVhc2UsXFxubGliL3Rlc3RfaG1tLmM6MTYxNDpcXHQubW1hcFxcdFxcdD0gZG1pcnJvcl9mb3BzX21tYXAsXFxubGliL3Rlc3RfaG1tLmM6MTYxNTpcXHQudW5sb2NrZWRfaW9jdGwgPSBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwsXFxubGliL3Rlc3RfaG1tLmMtMTYxNi1cXHQubGxzZWVrXFx0XFx0PSBkZWZhdWx0X2xsc2VlayxcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE3Nzk9c3RhdGljIGludCBkbWlycm9yX2RldmljZV9pbml0KHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSwgaW50IGlkKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTc4Ny1cXG5saWIvdGVzdF9obW0uYzoxNzg4OlxcdGNkZXZfaW5pdChcXHUwMDI2bWRldmljZS1cXHUwMDNlY2RldmljZSwgXFx1MDAyNmRtaXJyb3JfZm9wcyk7XFxubGliL3Rlc3RfaG1tLmMtMTc4OS1cXHRtZGV2aWNlLVxcdTAwM2VjZGV2aWNlLm93bmVyID0gVEhJU19NT0RVTEU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ0OjQ4Ljk3MDY5NzIxOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM0MTI4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgIEhhbmRsZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGNvbW1hbmQgaGFuZGxpbmcsIHdoaWNoIG1lYW5zIGl04oCZcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRtLW1pcnJvciBkZXZpY2UgaW50ZXJhY3RzIHdpdGggdXNlcnNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgdmFyaWV0eSBvZiBjb21tYW5kcyBpdCBwcm9jZXNzZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzdXBwb3J0ZWQgb3BlcmF0aW9ucy4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IGFsbG93IG1lIHRvIHN0YXJ0IGNvbnNpZGVyaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgYW55IGludGVyZXN0aW5nIGNvbnRyb2wgZmxvd3Mgd2l0aGluIHRoZSBtaXJyb3IgaW1wbGVtZW50YXRpb24uIExldOKAmXMgc3RhcnQgcGlja2luZyBpdCBhcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NDo1MS45MDQ4Mjk1MjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2htbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MTMsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MTM6XFx0c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbjE1MTQ6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNvbW1hbmQsXFxuMTUxNTpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4xNTE2OlxcdHtcXG4xNTE3OlxcdFxcdHZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnO1xcbjE1MTg6XFx0XFx0c3RydWN0IGhtbV9kbWlycm9yX2NtZCBjbWQ7XFxuMTUxOTpcXHRcXHRzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcjtcXG4xNTIwOlxcdFxcdGludCByZXQ7XFxuMTUyMTpcXHRcXG4xNTIyOlxcdFxcdGRtaXJyb3IgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuMTUyMzpcXHRcXHRpZiAoIWRtaXJyb3IpXFxuMTUyNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTI1OlxcdFxcbjE1MjY6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZjbWQsIHVhcmcsIHNpemVvZihjbWQpKSlcXG4xNTI3OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE1Mjg6XFx0XFxuMTUyOTpcXHRcXHRpZiAoY21kLmFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKVxcbjE1MzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTUzMTpcXHRcXHRpZiAoY21kLmFkZHIgXFx1MDAzZT0gKGNtZC5hZGRyICsgKGNtZC5ucGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpKVxcbjE1MzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTUzMzpcXHRcXG4xNTM0OlxcdFxcdGNtZC5jcGFnZXMgPSAwO1xcbjE1MzU6XFx0XFx0Y21kLmZhdWx0cyA9IDA7XFxuMTUzNjpcXHRcXG4xNTM3OlxcdFxcdHN3aXRjaCAoY29tbWFuZCkge1xcbjE1Mzg6XFx0XFx0Y2FzZSBITU1fRE1JUlJPUl9SRUFEOlxcbjE1Mzk6XFx0XFx0XFx0cmV0ID0gZG1pcnJvcl9yZWFkKGRtaXJyb3IsIFxcdTAwMjZjbWQpO1xcbjE1NDA6XFx0XFx0XFx0YnJlYWs7XFxuMTU0MTpcXHRcXG4xNTQyOlxcdFxcdGNhc2UgSE1NX0RNSVJST1JfV1JJVEU6XFxuMTU0MzpcXHRcXHRcXHRyZXQgPSBkbWlycm9yX3dyaXRlKGRtaXJyb3IsIFxcdTAwMjZjbWQpO1xcbjE1NDQ6XFx0XFx0XFx0YnJlYWs7XFxuMTU0NTpcXHRcXG4xNTQ2OlxcdFxcdGNhc2UgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVY6XFxuMTU0NzpcXHRcXHRcXHRyZXQgPSBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKGRtaXJyb3IsIFxcdTAwMjZjbWQpO1xcbjE1NDg6XFx0XFx0XFx0YnJlYWs7XFxuMTU0OTpcXHRcXG4xNTUwOlxcdFxcdGNhc2UgSE1NX0RNSVJST1JfTUlHUkFURV9UT19TWVM6XFxuMTU1MTpcXHRcXHRcXHRyZXQgPSBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKGRtaXJyb3IsIFxcdTAwMjZjbWQpO1xcbjE1NTI6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ0OjUxLjkwNTA0Nzc5OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5MjUwODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGBobW1fZG1pcnJvcmAgQ2hhcmFjdGVyIERldmljZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX0RFVmAgYW5kIGBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX1NZU2AuIFRob3NlIGNhbGxzLCB3aGljaCBhcmUgaW1wb3J0YW50IGJlY2F1c2UgdGhleSdyZSBsaW5rZWQgdG8gdXNlciBzcGFjZSwgYXJlIGNhbGxpbmcgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIGFuZCBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAuIFRob3NlLCBpbiB0dXJuLCBhcmUgY2FsbGluZyBgbWlncmF0ZV92bWFfc2V0dXBgLiBJbW1lZGlhdGVseSwgdGhpcyBzY3JlYW1zIFwiZnV6emFibGUhXCIgSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgaG1tX2RtaXJyb3JgIGNoYXJhY3RlciBkZXZpY2UuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGFjY2Vzc2libGUgaW4gdGhlIGN1cnJlbnQgc3l6a2FsbGVyIGNvbmZpZz9cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1RFU1RfSE1NYCBpcyBlbmFibGVkLiBJdCdzIGEgdGVzdCBtb2R1bGUsIHNvIGl0IGNvdWxkIHZlcnkgd2VsbCBiZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIOKAkyBlaXRoZXIgYGxpYi9LY29uZmlnLmRlYnVnYCBvciBgbW0vS2NvbmZpZ2Ag4oCTIHRvIGJlIGNlcnRhaW4gaWYgaXQncyB0aGVyZS4gVGhhdCdsbCBiZSB0aGUgbmV4dCBzdGVwIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy4gSWYgaXQgaXMgZW5hYmxlZCwgdGhpcyBjb3VsZCBiZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGRpc2NvdmVyaW5nIHNvbWUga2VybmVsIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjEzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDQ6NTYuNTQ0MzAyMTI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY1NDQwMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRFU1RfSE1NXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjUtXFxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI3LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuLS1cXG5saWIvTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19URVNUX0xPQ0tVUCkgKz0gdGVzdF9sb2NrdXAub1xcbmxpYi9NYWtlZmlsZToxMDM6b2JqLSQoQ09ORklHX1RFU1RfSE1NKSArPSB0ZXN0X2htbS5vXFxubGliL01ha2VmaWxlLTEwNC1vYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSArPSB0ZXN0X2ZyZWVfcGFnZXMub1xcbi0tXFxubGliL3Rlc3RfaG1tX3VhcGkuaC02LSAqL1xcbmxpYi90ZXN0X2htbV91YXBpLmg6NzojaWZuZGVmIF9MSUJfVEVTVF9ITU1fVUFQSV9IXFxubGliL3Rlc3RfaG1tX3VhcGkuaDo4OiNkZWZpbmUgX0xJQl9URVNUX0hNTV9VQVBJX0hcXG5saWIvdGVzdF9obW1fdWFwaS5oLTktXFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oPTc0PWVudW0ge1xcbi0tXFxubGliL3Rlc3RfaG1tX3VhcGkuaC03OS1cXG5saWIvdGVzdF9obW1fdWFwaS5oOjgwOiNlbmRpZiAvKiBfTElCX1RFU1RfSE1NX1VBUElfSCAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTU9Q09ORklHX0RFVklDRV9QUklWQVRFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc6NjpDT05GSUdfVEVTVF9ITU09bVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZy03LUNPTkZJR19HVVBfVEVTVD15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaD0yMT1jaGVja190ZXN0X3JlcXVpcmVtZW50cygpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90ZXN0X2htbS5zaC0zNS1cXHRcXHRlY2hvIFxcXCIkMDogWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWw6XFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoOjM2OlxcdFxcdGVjaG8gXFxcIkNPTkZJR19URVNUX0hNTT1tXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Rlc3RfaG1tLnNoLTM3LVxcdFxcdGV4aXQgJGtzZnRfc2tpcFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTowMi4wMDk3NTIzMjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwNTA1NjEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgcmV2b2x2ZXMgYXJvdW5kIGBDT05GSUdfVEVTVF9ITU1gLiBJdCBzZWVtcyBsaWtlIHRoYXQncyB0aGUga2V5IGNvbmZpZyBvcHRpb24gaGVyZS4gVGhlIHJlbGV2YW50IGNvZGUgY2hhbmdlIGlzIGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBmaWxlIGlzIG9ubHkgY29tcGlsZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSd2ZSBnb3Qgc29tZXRoaW5nIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgb3IgYENPTkZJR19ERVZJQ0VfQ09IRVJFTlRgIGVuYWJsZWQuIFJhdGhlciB0aGFuIHJlbHlpbmcgb24gZ3Vlc3N3b3JrLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzLiBUaGF0J2xsIHF1aWNrbHkgdGVsbCB0aGUgc3RvcnkuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE1NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ1OjA1LjMxNDgxMTA2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMTAyNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfZGV2aWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6MDUuNTg1OTE5OTA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTY1OTgyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgRGV2aWNlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYCBpbiBmcm9udCBvZiBtZS4gVGhhdCdzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBpdGVtIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogd2l0aGluIHRoZSBzeXN0ZW0gc2VsZWN0cyBvciB0cmlnZ2VycyBgREVWSUNFX01JR1JBVElPTmAuIFVuZGVyc3RhbmRpbmcgdGhlIHVwc3RyZWFtIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBoZXJlLiBJdCdzIHRoZSBvbmx5IHdheSB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGZpbmQgdGhlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0ODksIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTowOC45ODI1MjA3NTZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDMzOTU1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWSUNFX01JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTktXFxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTcwMS1cXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG4tLVxcbm1tL01ha2VmaWxlPTk5PW9iai0kKENPTkZJR19OVU1BKSArPSBtZW1vcnktdGllcnMub1xcbm1tL01ha2VmaWxlOjEwMDpvYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlLTEwMS1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ1OjE0Ljc4NTkyMzAxM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg0ODQ4ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY3kgQ29uZmxpY3RzKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgaXNzdWUgaGluZ2VzIG9uIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB0aGUgY3J1Y2lhbCBlbGVtZW50cyBpbiB0aGlzIHNjZW5hcmlvLiBBbmQgdGhlIHRyaWdnZXIgZm9yIHRoZSB6b25lIGRldmljZSBzZXR1cCBzZWVtcyB0byBiZSBgVEVTVF9ITU1gLiBIbW1tLi4uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpbnRlcmFjdGlvbiBhbmQgdGhlIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbGliL0tjb25maWcuZGVidWdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYFRFU1RfSE1NYCBhbmQgYFpPTkVfREVWSUNFYCBhdCBhIGRlZXBlciBsZXZlbDsgc3BlY2lmaWNhbGx5LCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGFyZSBsaW5raW5nIHRoZW0/IEknbGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtcmVmZXJlbmNlcywgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGhpbnRzIGFib3V0IHdoZW4gYW5kIHdoeSBgWk9ORV9ERVZJQ0VgIG1pZ2h0IGJlIHNlbGVjdGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIGBURVNUX0hNTWAuIEEgcXVpY2sgc2NhbiBzaG91bGQgY2xhcmlmeSB0aGUgY29ubmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NToxOC4wNzA3NzQ4NDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTg3MjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJURVNUX0hNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjUtXFxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI3LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ1OjE4LjM3NjY1NDQ2OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA4NDg0MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkZWJ1ZyBjb25maWd1cmF0aW9uIGJldHRlci4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgbGliL0tjb25maWcuZGVidWdgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgZm9yIGZlYXR1cmUgZW5hYmxlbWVudC4gSSdtIHRoaW5raW5nIHRoYXQgbGluZSAzMzI2IGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBsb2NhdGUgYSBzcGVjaWZpYyBkZWJ1ZyBmZWF0dXJlLCBvciBwZXJoYXBzIGEgY29uZGl0aW9uYWwgc2VjdGlvbiByZWxhdGluZyB0byBkZWJ1ZyBmdW5jdGlvbmFsaXRpZXMgaW4gdGhlIGtlcm5lbC4gVGhpcyBmaWxlIGNvbnRhaW5zIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGxpbmUgMzMyNiBzaG91bGQgcGlucG9pbnQgYSBzcGVjaWZpYyBjb25maWcgb3B0aW9uIG9yIGEgbG9naWNhbCBibG9jayBvZiBvcHRpb25zIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBmZWF0dXJlLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgc3RhdGUsIGFuZCBmaWd1cmUgb3V0IGhvdyB0byBtb2RpZnkgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBkZWJ1ZyBvdXRwdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6MjEuODg1MTQxNzE5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzIwOlxcdFxcdGhlbHBcXG4zMzIxOlxcdFxcdCAgVGVzdCBpZiB0aGUga2VybmVsIGlzIHplcm8taW5pdGlhbGl6aW5nIGhlYXAgYW5kIHBhZ2UgYWxsb2NhdGlvbnMuXFxuMzMyMjpcXHRcXHQgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZXN0IGluaXRfb25fYWxsb2MgYW5kIGluaXRfb25fZnJlZSBmZWF0dXJlcy5cXG4zMzIzOlxcdFxcbjMzMjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMjU6XFx0XFxuMzMyNjpcXHRjb25maWcgVEVTVF9ITU1cXG4zMzI3OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuMzMyODpcXHRcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuMzMyOTpcXHRcXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxuMzMzMDpcXHRcXHRzZWxlY3QgSE1NX01JUlJPUlxcbjMzMzE6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjMzMzI6XFx0XFx0aGVscFxcbjMzMzM6XFx0XFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cXG4zMzM0OlxcdFxcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxcbjMzMzU6XFx0XFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXFxuMzMzNjpcXHRcXG4zMzM3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzM4OlxcdFxcbjMzMzk6XFx0Y29uZmlnIFRFU1RfRlJFRV9QQUdFU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NToyMS44ODU2NzY3MzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMzE5MjY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBxdWVzdGlvbiBoYW5ncyBvbiB0aGUgdmFsdWUgb2YgYERFVklDRV9QUklWQVRFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBERVZJQ0VfUFJJVkFURWAgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBjb250cm9scy4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBzb3VyY2UuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBmb3IgYERFVklDRV9QUklWQVRFYCB3aXRoaW4gYG1tL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzcyMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6MjYuNjE4ODcyMDM3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTU3NjE0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjYyPWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI2NC1cXG5tbS9LY29uZmlnOjEyNjU6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjY2LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6MjYuOTc0NjQyMDQ3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjU2MjM5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYG1tL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIHRvIGxpbmUgMTI2NS4gVGhhdCBhcmVhIGxpa2VseSBob2xkcyBzb21lIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzb21lIHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzIGFyZSBiZWluZyBjb250cm9sbGVkIG9yIHdoYXQgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFscyBhcmUgYXQgcGxheS4gSXQncyBhIHF1aWNrIGFuZCB0YXJnZXRlZCBhcHByb2FjaDsgbm8gbmVlZCB0byB3YXN0ZSB0aW1lIHNjYW5uaW5nIHRoZSB3aG9sZSBmaWxlIHdoZW4gSSBoYXZlIGEgc3BlY2lmaWMgbG9jYXRpb24gdG8gY2hlY2suIExldCdzIHNlZSB3aGF0IHRoYXQgbGluZSwgYW5kIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHJldmVhbC4gSXQncyBhIGtleSBzcG90IHRvIGRpZyBpbnRvIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk4MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ1OjMwLjI0MDI2OTE0OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjYwOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTI2MTpcXHRcXG4xMjYyOlxcdGNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4xMjYzOlxcdFxcdGJvb2xcXG4xMjY0OlxcdFxcbjEyNjU6XFx0Y29uZmlnIERFVklDRV9QUklWQVRFXFxuMTI2NjpcXHRcXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuMTI2NzpcXHRcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuMTI2ODpcXHRcXHRzZWxlY3QgR0VUX0ZSRUVfUkVHSU9OXFxuMTI2OTpcXHRcXG4xMjcwOlxcdFxcdGhlbHBcXG4xMjcxOlxcdFxcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcXG4xMjcyOlxcdFxcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxcbjEyNzM6XFx0XFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXFxuMTI3NDpcXHRcXG4xMjc1OlxcdGNvbmZpZyBWTUFQX1BGTlxcbjEyNzY6XFx0XFx0Ym9vbFxcbjEyNzc6XFx0XFxuMTI3ODpcXHRjb25maWcgQVJDSF9VU0VTX0hJR0hfVk1BX0ZMQUdTXFxuMTI3OTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjQ1OjMwLjI0MDQyNzE0OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjA2NDEyOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBDb2RlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgbGlrZSBgVEVTVF9ITU1gIGlzLCBhdCBpdHMgY29yZSwgZGVwZW5kZW50IG9uIGBERVZJQ0VfUFJJVkFURWAuIEFuZCB0aGF0IGRlcGVuZGVuY3ksIGluIHR1cm4sIG5lZWRzIGBaT05FX0RFVklDRWAgdG8gYmUgYWN0aXZlLiBHb3QgaXQuIFNvIGZhciwgc28gZ29vZC4gVGhlbiwgYERFVklDRV9NSUdSQVRJT05gIGxvb2tzIGxpa2UgaXQncyBhIGNvbWJpbmF0aW9uIG9mIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBUaGlzIG1lYW5zLCB0byBnZXQgYERFVklDRV9NSUdSQVRJT05gIHdvcmtpbmcsIEkgbmVlZCBib3RoIG9mIHRob3NlIGNvbXBvbmVudHMuXG5cblRoZXJlZm9yZSwgaWYgSSBzZXQgYWxsIG9mIHRob3NlIHRoaW5ncyAtIGBURVNUX0hNTWAsIGBERVZJQ0VfUFJJVkFURWAsIGBNSUdSQVRJT05gLCBhbmQgYFpPTkVfREVWSUNFYCAtIHRvIGJlIGFjdGl2ZSwgdGhlIHJlbGV2YW50IGNvZGUgc2hvdWxkIGJlIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0LCBob2xkIG9uLi4uIGBNSUdSQVRJT05gLi4uIEkgKnRoaW5rKiBJIHJlY2FsbCB0aGF0IGJlaW5nIGVuYWJsZWQgcXVpdGUgYSBiaXQgaW4gdGhpcyBlbnZpcm9ubWVudC4gSnVzdCB0byBiZSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBgTUlHUkFUSU9OYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBsb2dpYyBpcyBzb3VuZCBoZXJlLCBhbmQgdGhhdCBJJ20gbm90IG92ZXJsb29raW5nIGFueSBvYnZpb3VzLCBwcmUtZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTozNS40NDY4NDM2MDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjEyMzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY5NS1cXG5tbS9LY29uZmlnOjY5Njpjb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTozNS45Mzg5NzQyMzVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MTU0MzIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCAtIExpbmUgNjk2KipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUuLi4gdGhlIHRleHQgbWVudGlvbnMgc3BlY2lmaWNhbGx5IGxpbmUgNjk2IGluIGBtbS9LY29uZmlnYC4gUmlnaHQsIGBtbS9LY29uZmlnYCBpcyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gS25vd2luZyB0aGlzLCBJIGV4cGVjdCB0byBmaW5kIGEgZGVzY3JpcHRpb24gYW5kIG1heWJlIGFuIGBpZmAvYGJvb2xgIGJsb2NrIHdpdGggYSBkZXBlbmRlbmN5IG9yIGRlZmF1bHQuIEkgYW0gbG9va2luZyBmb3IgYSBzcGVjaWZpYyB2YXJpYWJsZSBvciBvcHRpb24gdG8gdHdlYWsuIEkgd2lsbCByZWFkIGFyb3VuZCB0aGUgZ2l2ZW4gbGluZS4gVGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgNjk2IGlzIHdoYXQgd2lsbCByZXZlYWwgd2hhdCB0aGlzIG1vZHVsZSBkb2VzLiBGcm9tIHRoZXJlIEkgbWF5IGJlIGFibGUgdG8gZHJhdyBhbiBpbnRlbGxpZ2VudCBjb25jbHVzaW9uIHJlZ2FyZGluZyB0aGUgY3VycmVudCBpc3N1ZS4gTGV0J3MgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODk5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6MzguOTIwNTE5NjYyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzAyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0aGVscFxcbiA2OTE6XFx0XFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXFxuIDY5MjpcXHRcXHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXFxuIDY5MzpcXHRcXHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcXG4gNjk0OlxcdFxcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxcbiA2OTU6XFx0XFxuIDY5NjpcXHRjb25maWcgTUlHUkFUSU9OXFxuIDY5NzpcXHRcXHRib29sXFxuIDY5ODpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA2OTk6XFx0XFxuIDcwMDpcXHRjb25maWcgREVWSUNFX01JR1JBVElPTlxcbiA3MDE6XFx0XFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuIDcwMjpcXHRcXG4gNzAzOlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cXG4gNzA0OlxcdFxcdGJvb2xcXG4gNzA1OlxcdFxcbiA3MDY6XFx0Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuIDcwNzpcXHRcXHRib29sXFxuIDcwODpcXHRcXG4gNzA5OlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTozOC45MjI1NTI1MDFaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4NjU3MjY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIE1lbW9yeSBNYW5hZ2VtZW50IGluIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgbWlncmF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBzeXprYWxsZXIgZnJhbWV3b3JrLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgTUlHUkFUSU9OYCBpcyBlc3NlbnRpYWxseSBhIGJvb2xlYW4gZmxhZy4gSXQncyB0cmlnZ2VyZWQgYnkgYSB3aG9sZSBzdWl0ZSBvZiBvdGhlciwgbW9yZSBncmFudWxhciBvcHRpb25zIOKAkyB0aGluZ3MgbGlrZSBgTlVNQV9NSUdSQVRJT05gLCBgQ01BYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgZXZlbiBgQ09NUEFDVElPTmAuIFRoYXQgbWVhbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHN5emthbGxlcidzIGNvbmZpZ3VyYXRpb24sIEknbSBwcmV0dHkgY29uZmlkZW50IHRoYXQgYE1JR1JBVElPTmAgaXMsIGluIGZhY3QsIGVuYWJsZWQuIEl04oCZcyBiYWtlZCBpbnRvIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHNwZWNpZmljIG1lbW9yeSByZWdpb25zIGFuZCBkZXZpY2VzLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBpbnZlc3RpZ2F0ZSB0aGUgYFpPTkVfREVWSUNFYCBzZXR0aW5ncy4gVGhpcyBzaG91bGQgc2hlZCBsaWdodCBvbiBob3cgZGV2aWNlIG1lbW9yeSBpcyBtYW5hZ2VkIGluIHJlbGF0aW9uIHRvIHRoaXMgZ2VuZXJhbCBtaWdyYXRpb24gY2FwYWJpbGl0eSB0aGF0IGFwcGVhcnMgdG8gYmUgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQwNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6NDUuMTA5MTI3NzM1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY2MzA1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMzUtXFxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTo0NTo0NS4zNDU3NjYyNzVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQyOTI1MTgxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCBGaXgqKlxuXG5Pa2F5LCBzbyBgWk9ORV9ERVZJQ0VgIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzeXprYWxsZXIsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWVhbnMgd2UgY2FuIGZvY3VzIG9uIGVuYWJsaW5nIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIGZ1enppbmcgdGhlIGJ1ZyBmaXggaW4gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYC4gU2luY2UgYFpPTkVfREVWSUNFYCBpcyBzZXQsIHdlIG5lZWQgdG8gZW5hYmxlIGBURVNUX0hNTWAgdG8gbGV2ZXJhZ2UgdGhlIHRlc3QgbW9kdWxlLiAgSSBzZWUgdGhhdCBgVEVTVF9ITU1gIGlzIGEgdHJpc3RhdGUsIHNvIGxldCdzIGFkZCBpdCB0byBgRW5hYmxlQ29uZmlnc2AuIEJ1dCB3YWl0LCBgVEVTVF9ITU1gIG5lZWRzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBzaW5jZSB0aGF0J3MgdXN1YWxseSBlbmFibGVkLCBsZXQncyBhc3N1bWUgaXQgaXMgYW5kIGFkZCBgVEVTVF9ITU1gIGFzIGFuIGVuYWJsZWQgY29uZmlnLiBgREVWSUNFX1BSSVZBVEVgIGlzIGFsc28gbmVlZGVkLCBhcyBgVEVTVF9ITU1gIGRlcGVuZHMgb24gaXQgYXMgd2VsbC4gQW5kIGBERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgWk9ORV9ERVZJQ0VgLiBTbywgdGhlIGZpbmFsIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtcIlRFU1RfSE1NXCIsIFwiREVWSUNFX1BSSVZBVEVcIiwgXCJaT05FX0RFVklDRVwiXWAuXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCwgc28gdGhhdCdzIG9idmlvdXNseSBhIHN0cm9uZyBjYW5kaWRhdGUuIEJ1dCBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGlzIGNhbGxlZCBmcm9tIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIHNvIHRoYXQncyBhIGdvb2Qgb25lIHRvby4gSSdtIGFsc28gc2VlaW5nIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGlzIGluIHRoZSBjYWxsIGNoYWluLiBTbywgYG1pZ3JhdGVfdm1hX3NldHVwYCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGFyZSBhbHNvIGdvb2QgZm9jdXMgc3ltYm9scy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIGFsbCByZWFjaGFibGUgZnJvbSBvdXIgZnV6emluZyBlbnRyeSBwb2ludC5cblxuT2theSwgbGV0J3MgdmVyaWZ5IHJlYWNoYWJpbGl0eS4gYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIGNhbGxzIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIGBtaWdyYXRlX3ZtYV9zZXR1cGAgY2FsbHMgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgLiBgbWlncmF0ZV92bWFfY29sbGVjdGAgY2FsbHMgYHdhbGtfcGFnZV9yYW5nZV92bWFgLiBUaGF0IGxlYWRzIHRvIGEgd2FsayBvZiB0aGUgcGFnZSB0YWJsZXMgYW5kIGl0IGNhbGxzIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgdGhyb3VnaCBgbWlncmF0ZV92bWFfd2Fsa19vcHNgLiBJIGNhbiBzZWUgdGhhdCBgd2Fsay1cdTAwM2VvcHMtXHUwMDNlcG1kX2VudHJ5YCBpbiBgbWlncmF0ZV92bWFfd2Fsa19vcHNgIGlzIHNldCB0byBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBzbyBpdCAqaXMqIHJlYWNoYWJsZS4gRXhjZWxsZW50LlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgZGVwZW5kZW5jaWVzLiBgVEVTVF9ITU1gIG5lZWRzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIGBERVZJQ0VfUFJJVkFURWAgbmVlZHMgYFpPTkVfREVWSUNFYC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmUgYFRFU1RfSE1NYCwgYERFVklDRV9QUklWQVRFYCBhbmQgYFpPTkVfREVWSUNFYC5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBjb2xsZWN0cyBwYWdlcyBmb3IgbWlncmF0aW9uLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyB3aGVyZSByZXRyeWluZyBhZnRlciBhIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlsdXJlIGNvdWxkIGxlYWQgdG8gZHVwbGljYXRlIHBhZ2UgY29sbGVjdGlvbnMgYW5kIGFuIG92ZXJmbG93LiBUaGUgZml4IGFkZHMgYSBjaGVjayB0byBhdm9pZCByZS1jb2xsZWN0aW5nIHBhZ2VzIGlmIHRoZSBhZGRyZXNzIGlzbid0IHRoZSBzdGFydCBhZGRyZXNzIHdoZW4gcmV0cnlpbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYnVnIGZpeCBhbmQgd2FycmFudHMgZnV6emluZy5cblxuTXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHNob3VsZCBpbmNsdWRlOiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgLCBgbWlncmF0ZV92bWFfc2V0dXBgLCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgLlxuXG5UaGUgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZTogYFtcIlRFU1RfSE1NXCIsIFwiREVWSUNFX1BSSVZBVEVcIiwgXCJaT05FX0RFVklDRVwiXWAuXG5cbkknbGwgZG91YmxlIGNoZWNrIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpcyBzdGF0aWM7IHllcyBpdCBpcyBzdGF0aWMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBgbWlncmF0ZV92bWFfc2V0dXBgIGlzIGV4cG9ydGVkLCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RgIGlzIHN0YXRpYy5cblxuTGV0J3MgY2hlY2sgd2hvIGVsc2UgY2FsbHMgYG1pZ3JhdGVfdm1hX3NldHVwYC4gSSBzZWUgRFJNIGRyaXZlcnMgKG5vdXZlYXUsIGFtZGdwdSkgYW5kIEtWTSBvbiBwb3dlcnBjLiBCdXQsIGJlY2F1c2UgYFRFU1RfSE1NYCBwcm92aWRlcyBhIGRpcmVjdCB1c2Vyc3BhY2UgaW50ZXJmYWNlIHRvIHRyaWdnZXIgdGhpcyB2aWEgaW9jdGwsIGBURVNUX0hNTWAgaXMgdGhlIGJlc3Qgd2F5IHRvIGZ1enogdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJ20gcmVhZHkgdG8gdXNlIHRoZXNlIGRldGFpbHMgd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc2NywiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6NDU6NTkuNjM4Mjg3MTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDEwNDc2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZFwiLFxuICAgIFwibWlncmF0ZV92bWFfc2V0dXBcIixcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIHdoZXJlIGl0IGNvdWxkIGNvbGxlY3QgdGhlIHNhbWUgYWRkcmVzcyByYW5nZSB0d2ljZSBhbmQgb3ZlcmZsb3cgdGhlIGNvbGxlY3Rpb24gYXJyYXlzIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlscyBhbmQgYGFkZHIgIT0gc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYyBmb3IgZGV2aWNlIG1lbW9yeS4gSXQgY2FuIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBITU0gdGVzdCBtb2R1bGUgKGBURVNUX0hNTWApIHdoaWNoIGV4cG9zZXMgaW9jdGxzIHRvIHRyaWdnZXIgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9zZXR1cFwiLFxuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgd2hlcmUgaXQgY291bGQgY29sbGVjdCB0aGUgc2FtZSBhZGRyZXNzIHJhbmdlIHR3aWNlIGFuZCBvdmVyZmxvdyB0aGUgY29sbGVjdGlvbiBhcnJheXMgaWYgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIGZhaWxzIGFuZCBgYWRkciAhPSBzdGFydGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWlncmF0aW9uIGxvZ2ljIGZvciBkZXZpY2UgbWVtb3J5LiBJdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIEhNTSB0ZXN0IG1vZHVsZSAoYFRFU1RfSE1NYCkgd2hpY2ggZXhwb3NlcyBpb2N0bHMgdG8gdHJpZ2dlciBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow2z2pc[1] Phase: Succeeded StartedAt: 2026-07-08 11:46:15 +0000 UTC FinishedAt: 2026-07-08 11:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 11:46:16 +0000 UTC FinishedAt: 2026-07-08 11:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2] Phase: Succeeded StartedAt: 2026-07-08 11:46:16 +0000 UTC FinishedAt: 2026-07-08 16:19:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 11:46:17 +0000 UTC FinishedAt: 2026-07-08 16:19:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 11:46:17 +0000 UTC FinishedAt: 2026-07-08 11:47:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 11:46:17 +0000 UTC FinishedAt: 2026-07-08 11:46:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-convert-artifact-1268560197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 11:47:00 +0000 UTC FinishedAt: 2026-07-08 12:29:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 11:47:00 +0000 UTC FinishedAt: 2026-07-08 12:29:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a73d7e90-8f88-42de-91bd-55f187aa528e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-convert-artifact-1268560197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6e62c7d9-cded-47a9-a043-9c4ad5c09a73", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-build-action-4070397931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 11:47:00 +0000 UTC FinishedAt: 2026-07-08 12:29:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a73d7e90-8f88-42de-91bd-55f187aa528e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-convert-artifact-1268560197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6e62c7d9-cded-47a9-a043-9c4ad5c09a73", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-build-action-4070397931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 12:29:10 +0000 UTC FinishedAt: 2026-07-08 12:29:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 12:29:10 +0000 UTC FinishedAt: 2026-07-08 12:29:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 12:29:10 +0000 UTC FinishedAt: 2026-07-08 12:29:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 12:29:10 +0000 UTC FinishedAt: 2026-07-08 12:29:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-convert-artifact-4074648352/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 12:29:20 +0000 UTC FinishedAt: 2026-07-08 12:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 12:29:20 +0000 UTC FinishedAt: 2026-07-08 12:31:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6e62c7d9-cded-47a9-a043-9c4ad5c09a73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-build-action-4070397931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 12:31:38 +0000 UTC FinishedAt: 2026-07-08 12:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 12:31:38 +0000 UTC FinishedAt: 2026-07-08 12:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 12:31:38 +0000 UTC FinishedAt: 2026-07-08 13:14:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 12:31:38 +0000 UTC FinishedAt: 2026-07-08 13:14:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a73d7e90-8f88-42de-91bd-55f187aa528e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-convert-artifact-4074648352/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "09922862-4368-40ff-8064-8d6dc06a12f8", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-build-action-452929756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 12:31:38 +0000 UTC FinishedAt: 2026-07-08 13:13:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a73d7e90-8f88-42de-91bd-55f187aa528e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-convert-artifact-4074648352/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "09922862-4368-40ff-8064-8d6dc06a12f8", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-build-action-452929756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 13:14:07 +0000 UTC FinishedAt: 2026-07-08 13:14:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 13:14:07 +0000 UTC FinishedAt: 2026-07-08 13:14:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 13:14:07 +0000 UTC FinishedAt: 2026-07-08 13:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 13:14:07 +0000 UTC FinishedAt: 2026-07-08 13:16:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*09922862-4368-40ff-8064-8d6dc06a12f8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-build-action-452929756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 13:16:26 +0000 UTC FinishedAt: 2026-07-08 16:19:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 13:16:26 +0000 UTC FinishedAt: 2026-07-08 16:19:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*6e62c7d9-cded-47a9-a043-9c4ad5c09a73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*09922862-4368-40ff-8064-8d6dc06a12f8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-build-action-4070397931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-build-action-452929756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 13:16:26 +0000 UTC FinishedAt: 2026-07-08 13:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 13:16:26 +0000 UTC FinishedAt: 2026-07-08 13:16:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-convert-artifact-3914221433/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 13:16:26 +0000 UTC FinishedAt: 2026-07-08 13:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 13:16:26 +0000 UTC FinishedAt: 2026-07-08 13:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 13:16:26 +0000 UTC FinishedAt: 2026-07-08 13:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 13:16:55 +0000 UTC FinishedAt: 2026-07-08 16:19:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2z2pc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_collect_pmd","migrate_vma_setup","migrate_vma_collect"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"302dfbff3e73be2ba5723237c6303244ec27cebb","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE"],"series_id":"a70121b8-5502-4566-8f4e-486426402a37","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 13:16:55 +0000 UTC FinishedAt: 2026-07-08 16:19:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6e62c7d9-cded-47a9-a043-9c4ad5c09a73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*09922862-4368-40ff-8064-8d6dc06a12f8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-build-action-4070397931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-build-action-452929756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2z2pc/series-workflow2z2pc-convert-artifact-3914221433/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}