Name: series-workflowh8ffr Phase: Succeeded StartedAt: 2026-07-03 20:38:27 +0000 UTC FinishedAt: 2026-07-03 22:54:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[0] Phase: Succeeded StartedAt: 2026-07-03 20:38:27 +0000 UTC FinishedAt: 2026-07-03 20:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 20:38:27 +0000 UTC FinishedAt: 2026-07-03 20:45:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC_S3FWRN5_I2C", "NFC_S3FWRN5" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC_S3FWRN5_I2C", "NFC_S3FWRN5" ], "series_id": "0d36a93d-11a2-4185-995e-1cd7ef2a0fe9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "s3fwrn5_nci_setup", "s3fwrn5_nci_post_setup", "s3fwrn5_nci_rf_configure_dual", "s3fwrn5_nci_clk_cfg", "s3fwrn5_i2c_clk_set", "s3fwrn5_i2c_clk_req_thread", "s3fwrn5_i2c_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDIwOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQ19TM0ZXUk41X0kyQyYjMzQ7LAogICAgJiMzNDtORkNfUzNGV1JONSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MzZndybjVfbmNpX3NldHVwJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX3Bvc3Rfc2V0dXAmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfY2xrX2NmZyYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X2kyY19jbGtfc2V0JiMzNDssCiAgICAmIzM0O3MzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkJiMzNDssCiAgICAmIzM0O3MzZndybjVfaTJjX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgdmFyaWFudCBvZiB0aGUgU2Ftc3VuZyBORkMgY29udHJvbGxlciAoUzNOUk40VikgdG8gdGhlIHMzZndybjUgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBsb2dpYywgZmlybXdhcmUgbG9hZGluZyB2aWEgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzLCBhbmQgY2xvY2sgaGFuZGxpbmcgdmlhIGEgbmV3IEdQSU8gaW50ZXJydXB0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoTkZDIGRyaXZlcikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBJMkMgZGV2aWNlIHByb2JpbmcgYW5kIE5DSSBjb3JlIGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAyMDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFmZWIxYWE0NzViZjA1NDZkYjg4YTQ1ODIxOTgyNDdmYWUxZjMyMTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDIwOjQ1OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcbmluZGV4IDEyYmFlZTQ1NzUyYzdiLi4zZWJjZDA5MzM5YjgxZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxuQEAgLTE0LDEyICYjNDM7MTQsMjAgQEAgcHJvcGVydGllczpcbiAgICAgZW51bTpcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmNcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuODJcbiYjNDM7ICAgICAgLSBzYW1zdW5nLHMzbnJuNHYtaTJjXG4gXG4gICBlbi1ncGlvczpcbiAgICAgbWF4SXRlbXM6IDFcbiAgICAgZGVzY3JpcHRpb246XG4gICAgICAgT3V0cHV0IEdQSU8gcGluIHVzZWQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgY2hpcFxuIFxuJiM0MzsgIGNsay1yZXEtZ3Bpb3M6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIElucHV0IEdQSU8gcGluIGNvbm5lY3RlZCB0byB0aGUgY29udHJvbGxlciYjMzk7cyBjbG9jay1yZXF1ZXN0IG91dHB1dC4gV2hlblxuJiM0MzsgICAgICBwcmVzZW50LCB0aGUgcmVmZXJlbmNlIGNsb2NrIGlzIGVuYWJsZWQgaW4gcmVzcG9uc2UgdG8gdGhpcyBzaWduYWxcbiYjNDM7ICAgICAgaW5zdGVhZCBvZiBiZWluZyBsZWZ0IGFsd2F5cy1vbi5cbiYjNDM7XG4gICBpbnRlcnJ1cHRzOlxuICAgICBtYXhJdGVtczogMVxuIFxuQEAgLTU4LDEyICYjNDM7NjYsMjUgQEAgYWxsT2Y6XG4gICAgICAgcHJvcGVydGllczpcbiAgICAgICAgIGNvbXBhdGlibGU6XG4gICAgICAgICAgIGNvbnRhaW5zOlxuLSAgICAgICAgICAgIGNvbnN0OiBzYW1zdW5nLHMzZndybjUtaTJjXG4mIzQzOyAgICAgICAgICAgIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXG4mIzQzOyAgICAgICAgICAgICAgLSBzYW1zdW5nLHMzbnJuNHYtaTJjXG4gICAgIHRoZW46XG4gICAgICAgcmVxdWlyZWQ6XG4gICAgICAgICAtIGludGVycnVwdHNcbiAgICAgICAgIC0gcmVnXG4gXG4mIzQzOyAgIyBUaGUgY2xvY2stcmVxdWVzdCBoYW5kc2hha2Ugb25seSBleGlzdHMgb24gdGhlIFMzTlJONFYuXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgbm90OlxuJiM0MzsgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM25ybjR2LWkyY1xuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjbGstcmVxLWdwaW9zOiBmYWxzZVxuJiM0MztcbiBleGFtcGxlczpcbiAgIC0gfFxuICAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcbmluZGV4IGFmMGZhOGJkOTcwYjRmLi41OTMxN2VhYWQ3YWM5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY1xuQEAgLTEyMiwxMSAmIzQzOzEyMiw0NyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgczNmd3JuNV9uY2lfc2V0dXAoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJ1bnMgYWZ0ZXIgQ09SRV9SRVNFVCwgYmVmb3JlIENPUkVfSU5JVC4gVGhlIFMzTlJONFYgbmVlZHMgaXRzXG4mIzQzO1x0ICogcmVmZXJlbmNlIGNsb2NrIGNvbmZpZ3VyZWQgaGVyZSAodGhlIGRvd25zdHJlYW0gc3RhY2sgZG9lcyBpdCBpbiB0aGVcbiYjNDM7XHQgKiBib290bG9hZGVyLCBiZWZvcmUgQ09SRV9SRVNFVCwgYnV0IHRoaXMgaXMgdGhlIGVhcmxpZXN0IGhvb2sgdGhlIE5DSVxuJiM0MztcdCAqIGNvcmUgb2ZmZXJzIGFuZCB0aGUgY2hpcCBhY2NlcHRzIGl0KS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaW5mby1cdTAwM2V2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKVxuJiM0MztcdFx0cmV0dXJuIHMzZndybjVfbmNpX2Nsa19jZmcoaW5mbyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2V2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIFMzTlJONFYgc2hpcHMgd2l0aCB3b3JraW5nIGZpcm13YXJlIGJlaGluZCBhIGJvb3Rsb2FkZXJcbiYjNDM7XHRcdCAqIHByb3RvY29sIHRoaXMgZHJpdmVyIGRvZXMgbm90IGltcGxlbWVudCwgc28gdGhlcmUgaXMgbm9cbiYjNDM7XHRcdCAqIGRvd25sb2FkIHN0ZXA7IHRoZSBOQ0kgY29yZSBoYXMgYWxyZWFkeSBkb25lIENPUkVfUkVTRVQgJiM0MztcbiYjNDM7XHRcdCAqIENPUkVfSU5JVC4gSnVzdCAocmUpbG9hZCB0aGUgUkYgcmVnaXN0ZXJzIHZpYSBEVUFMX09QVElPTi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0gczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoaW5mbywgXCYjMzQ7c2VjX3MzbnJuNHZfaHdyZWcuYmluXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgXCYjMzQ7c2VjX3MzbnJuNHZfc3dyZWcuYmluXCYjMzQ7KTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBLZWVwIGdvaW5nIGV2ZW4gaWYgdGhlIGJsb2JzIGNvdWxkIG5vdCBiZSBsb2FkZWQ6IHRoZSBjaGlwXG4mIzQzO1x0XHQgKiBzdGlsbCBlbnVtZXJhdGVzIGFuZCBmYWxscyBiYWNrIHRvIHRoZSBSRiByZWdpc3RlcnMgcHJvZ3JhbW1lZFxuJiM0MztcdFx0ICogaW4gaXRzIGZsYXNoLCBzbyBORkMgbWF5IHdvcmsgYW55d2F5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRkZXZfd2FybihcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtyZnJlZyBjb25maWd1cmUgZmFpbGVkICglZClcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHMzZndybjVfZmlybXdhcmVfaW5pdChpbmZvKSkge1xuIFx0XHQvL3NraXAgYm9vdGxvYWRlciBtb2RlXG4gXHRcdHJldHVybiAwO1xuQEAgLTE1MiwxMyAmIzQzOzE4OCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0ge1xuIFx0Lm9wZW4gPSBzM2Z3cm41X25jaV9vcGVuLFxuIFx0LmNsb3NlID0gczNmd3JuNV9uY2lfY2xvc2UsXG4gXHQuc2VuZCA9IHMzZndybjVfbmNpX3NlbmQsXG4mIzQzO1x0LnNldHVwID0gczNmd3JuNV9uY2lfc2V0dXAsXG4gXHQucG9zdF9zZXR1cCA9IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAsXG4gXHQucHJvcF9vcHMgPSBzM2Z3cm41X25jaV9wcm9wX29wcyxcbiBcdC5uX3Byb3Bfb3BzID0gQVJSQVlfU0laRShzM2Z3cm41X25jaV9wcm9wX29wcyksXG4gfTtcbiBcbiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi1cdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpXG4mIzQzO1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudClcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvO1xuIFx0aW50IHJldDtcbkBAIC0xNzAsNiAmIzQzOzIwNyw3IEBAIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuIFx0aW5mby1cdTAwM2VwaHlfaWQgPSBwaHlfaWQ7XG4gXHRpbmZvLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0aW5mby1cdTAwM2VwaHlfb3BzID0gcGh5X29wcztcbiYjNDM7XHRpbmZvLVx1MDAzZXZhcmlhbnQgPSB2YXJpYW50O1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZpbmZvLVx1MDAzZW11dGV4KTtcbiBcbiBcdHMzZndybjVfc2V0X21vZGUoaW5mbywgUzNGV1JONV9NT0RFX0NPTEQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5pbmRleCBlOWEzNGQyN2EzNjk4NC4uODhhNDk4ODc5MWVmZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5AQCAtMjMsOSAmIzQzOzIzLDUzIEBAIHN0cnVjdCBzM2Z3cm41X2kyY19waHkge1xuIFx0c3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7XG4gXHRzdHJ1Y3QgY2xrICpjbGs7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPcHRpb25hbCBoYXJkd2FyZSBjbG9jay1yZXF1ZXN0IGhhbmRzaGFrZS4gV2hlbiBhIENMS19SRVEgR1BJTyBpc1xuJiM0MztcdCAqIHdpcmVkLCB0aGUgY2hpcCBkcml2ZXMgaXQgaGlnaCB3aGlsZSBpdCBuZWVkcyBpdHMgWEkgY2xvY2sgLS0gbm90YWJseVxuJiM0MztcdCAqIHRvIGdlbmVyYXRlIHRoZSBwb2xsL3JlYWRlciBjYXJyaWVyIC0tIGFuZCB0aGUgY2xvY2sgaXMgZ2F0ZWQgb24gaXRcbiYjNDM7XHQgKiBpbnN0ZWFkIG9mIGJlaW5nIGxlZnQgYWx3YXlzLW9uICh3aGljaCBuZXZlciBsZXRzIHRoZSBjaGlwJiMzOTtzIFRYIFBMTFxuJiM0MztcdCAqIGxvY2sgb24gYSBmcmVzaCBjbG9jayBzdGFydCwgbGVhdmluZyBpdCB1bmFibGUgdG8gcG9sbCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGdwaW9fZGVzYyAqZ3Bpb19jbGtfcmVxO1xuJiM0MztcdGJvb2wgY2xrX29uO1xuJiM0MztcdHN0cnVjdCBtdXRleCBjbGtfbG9jaztcdC8qIHNlcmlhbGlzZXMgY2xrX29uIGFnYWluc3QgdGhlIENMS19SRVEgaXJxICovXG4mIzQzO1xuIFx0dW5zaWduZWQgaW50IGlycV9za2lwOjE7XG4gfTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgczNmd3JuNV9pMmNfY2xrX3NldChzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHksIGJvb2wgb24pXG4mIzQzO3tcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBoeS1cdTAwM2VjbGtfbG9jayk7XG4mIzQzO1x0aWYgKG9uIFx1MDAyNlx1MDAyNiAhcGh5LVx1MDAzZWNsa19vbikge1xuJiM0MztcdFx0aW50IHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwaHktXHUwMDNlY2xrKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0ID09IDApXG4mIzQzO1x0XHRcdHBoeS1cdTAwM2VjbGtfb24gPSB0cnVlO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRkZXZfd2Fybl9vbmNlKFx1MDAyNnBoeS1cdTAwM2VpMmNfZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGNsb2NrICglZCk7IE5GQyBtYXkgbm90IHBvbGxcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgcmV0KTtcbiYjNDM7XHR9IGVsc2UgaWYgKCFvbiBcdTAwMjZcdTAwMjYgcGh5LVx1MDAzZWNsa19vbikge1xuJiM0MztcdFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBoeS1cdTAwM2VjbGspO1xuJiM0MztcdFx0cGh5LVx1MDAzZWNsa19vbiA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGh5LVx1MDAzZWNsa19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgczNmd3JuNV9pMmNfY2xrX2Rpc2FibGVfYWN0aW9uKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzM2Z3cm41X2kyY19jbGtfc2V0KGRhdGEsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkKGludCBpcnEsIHZvaWQgKnBoeV9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeSA9IHBoeV9pZDtcbiYjNDM7XG4mIzQzO1x0czNmd3JuNV9pMmNfY2xrX3NldChwaHksIGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKSBcdTAwM2UgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19zZXRfbW9kZSh2b2lkICpwaHlfaWQsIGVudW0gczNmd3JuNV9tb2RlIG1vZGUpXG4ge1xuIFx0c3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5ID0gcGh5X2lkO1xuQEAgLTE0Niw2ICYjNDM7MTkwLDcgQEAgc3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKVxuIFxuIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiB7XG4mIzQzO1x0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcbiBcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeTtcbiBcdGludCByZXQ7XG4gXG5AQCAtMTcyLDE1ICYjNDM7MjE3LDYzIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiBcdCAqIFMzRldSTjUgZGVwZW5kcyBvbiBhIGNsb2NrIGlucHV0IChcJiMzNDtYSVwmIzM0OyBwaW4pIHRvIGZ1bmN0aW9uIHByb3Blcmx5LlxuIFx0ICogRGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHRoaXMgY291bGQgYmUgYW4gYWx3YXlzLW9uXG4gXHQgKiBvc2NpbGxhdG9yIG9yIHNvbWUgZXh0ZXJuYWwgY2xvY2sgdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZC5cbi1cdCAqIE1ha2Ugc3VyZSB0aGUgY2xvY2sgaXMgcnVubmluZyBiZWZvcmUgc3RhcnRpbmcgUzNGV1JONS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElmIGEgQ0xLX1JFUSBHUElPIGlzIHdpcmVkLCB0aGUgY2hpcCBnYXRlcyB0aGUgY2xvY2sgaXRzZWxmIChkcml2aW5nXG4mIzQzO1x0ICogQ0xLX1JFUSBoaWdoIHdoZW4gaXQgbmVlZHMgWEkpOyBzZXJ2aWNlIHRoYXQgaGFuZHNoYWtlLiBPdGhlcndpc2UganVzdFxuJiM0MztcdCAqIG1ha2Ugc3VyZSB0aGUgY2xvY2sgaXMgcnVubmluZyBiZWZvcmUgc3RhcnRpbmcgUzNGV1JONS5cbiBcdCAqL1xuLVx0cGh5LVx1MDAzZWNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIE5VTEwpO1xuLVx0aWYgKElTX0VSUihwaHktXHUwMDNlY2xrKSlcbi1cdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgUFRSX0VSUihwaHktXHUwMDNlY2xrKSxcbi1cdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwaHktXHUwMDNlY2xrX2xvY2spO1xuJiM0MztcdHBoeS1cdTAwM2VncGlvX2Nsa19yZXEgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBcJiMzNDtjbGstcmVxXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgR1BJT0RfSU4pO1xuJiM0MztcdGlmIChJU19FUlIocGh5LVx1MDAzZWdwaW9fY2xrX3JlcSkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeS1cdTAwM2VncGlvX2Nsa19yZXEpIHtcbiYjNDM7XHRcdGludCBjbGtfcmVxX2lycTtcbiYjNDM7XG4mIzQzO1x0XHRwaHktXHUwMDNlY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIE5VTEwpO1xuJiM0MztcdFx0aWYgKElTX0VSUihwaHktXHUwMDNlY2xrKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgUFRSX0VSUihwaHktXHUwMDNlY2xrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFVubGlrZSB0aGUgYWx3YXlzLW9uIGJyYW5jaCBiZWxvdywgdGhpcyBjbG9jayBpcyBlbmFibGVkIGJ5XG4mIzQzO1x0XHQgKiBoYW5kIGZyb20gdGhlIENMS19SRVEgaGFuZGxlciwgc28gZGV2bSB3aWxsIG5vdCBkaXNhYmxlIGl0IG9uXG4mIzQzO1x0XHQgKiB1bmJpbmQuIEdhdGUgaXQgb2ZmIGV4cGxpY2l0bHkgaWYgaXQgaXMgc3RpbGwgb24gYXQgdGVhcmRvd24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHMzZndybjVfaTJjX2Nsa19kaXNhYmxlX2FjdGlvbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBwaHkpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRjbGtfcmVxX2lycSA9IGdwaW9kX3RvX2lycShwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKTtcbiYjNDM7XHRcdGlmIChjbGtfcmVxX2lycSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIGNsa19yZXFfaXJxO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgY2xrX3JlcV9pcnEsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkLFxuJiM0MztcdFx0XHRcdFx0XHRJUlFGX1RSSUdHRVJfUklTSU5HIHxcbiYjNDM7XHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX0ZBTExJTkcgfFxuJiM0MztcdFx0XHRcdFx0XHRJUlFGX09ORVNIT1QsXG4mIzQzO1x0XHRcdFx0XHRcdFwmIzM0O3MzZndybjVfY2xrX3JlcVwmIzM0OywgcGh5KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0LyogU2VlZCB0aGUgY2xvY2sgc3RhdGUgZnJvbSB0aGUgY3VycmVudCBDTEtfUkVRIGxldmVsLiAqL1xuJiM0MztcdFx0czNmd3JuNV9pMmNfY2xrX3NldChwaHksXG4mIzQzO1x0XHRcdFx0ICAgIGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKSBcdTAwM2UgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBoeS1cdTAwM2VjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbiYjNDM7XHRcdGlmIChJU19FUlIocGh5LVx1MDAzZWNsaykpXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFBUUl9FUlIocGh5LVx1MDAzZWNsayksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgY2xvY2tcXG5cJiMzNDspO1xuJiM0MztcdH1cbiBcbiYjNDM7XHQvKiBObyBtYXRjaCBkYXRhIChlLmcuIGkyY19kZXZpY2VfaWQgYmluZGluZykgbWVhbnMgdGhlIGRlZmF1bHQgRldETC4gKi9cbiYjNDM7XHR2YXJpYW50ID0gKHVpbnRwdHJfdClpMmNfZ2V0X21hdGNoX2RhdGEoY2xpZW50KTtcbiBcdHJldCA9IHMzZndybjVfcHJvYmUoXHUwMDI2cGh5LVx1MDAzZWNvbW1vbi5uZGV2LCBwaHksIFx1MDAyNnBoeS1cdTAwM2VpMmNfZGV2LVx1MDAzZWRldixcbi1cdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMsIHZhcmlhbnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMTAsOCAmIzQzOzMwMywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgczNmd3JuNV9pMmNfaWRfdGFibGVbXSA9IHtcbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfczNmd3JuNV9pMmNfbWF0Y2hbXSBfX21heWJlX3VudXNlZCA9IHtcbi1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtzYW1zdW5nLHMzZndybjUtaTJjXCYjMzQ7LCB9LFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zM2Z3cm41X2kyY19tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtzYW1zdW5nLHMzZndybjUtaTJjXCYjMzQ7LFxuJiM0MztcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9GV0RMLCB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtzYW1zdW5nLHMzbnJuNHYtaTJjXCYjMzQ7LFxuJiM0MztcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9TM05STjRWLCB9LFxuIFx0e31cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTtcbkBAIC0yMTksNyAmIzQzOzMxNSw3IEBAIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTtcbiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgczNmd3JuNV9pMmNfZHJpdmVyID0ge1xuIFx0LmRyaXZlciA9IHtcbiBcdFx0Lm5hbWUgPSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSxcbi1cdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9mX3MzZndybjVfaTJjX21hdGNoKSxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IG9mX3MzZndybjVfaTJjX21hdGNoLFxuIFx0fSxcbiBcdC5wcm9iZSA9IHMzZndybjVfaTJjX3Byb2JlLFxuIFx0LnJlbW92ZSA9IHMzZndybjVfaTJjX3JlbW92ZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xuaW5kZXggNWE5ZGUxMWJiZWNlYTQuLjA0ZjRjMzYyNjkxZTNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xuQEAgLTgsNiAmIzQzOzgsOSBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlubWF4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7czNmd3JuNS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bmNpLmhcJiMzNDtcbkBAIC0yMCw3ICYjNDM7MjMsNyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcbiYjNDM7Y29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xuIFx0e1xuIFx0XHQub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksXG4gXHRcdFx0XHROQ0lfUFJPUF9TRVRfUkZSRUcpLFxuQEAgLTQxLDYgJiM0Mzs0NCwxMSBAQCBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7XG4gXHRcdFx0XHROQ0lfUFJPUF9GV19DRkcpLFxuIFx0XHQucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcbiYjNDM7XHRcdFx0XHROQ0lfUFJPUF9EVUFMX09QVElPTiksXG4mIzQzO1x0XHQucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsXG4mIzQzO1x0fSxcbiB9O1xuIFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXG5AQCAtMTE3LDMgJiM0MzsxMjUsMTA0IEBAIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSlcbiBcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb25maWd1cmUgdGhlIHJlZmVyZW5jZSBjbG9jay4gVGhlIFMzTlJONFYgZXhwZWN0cyB0aGUgc2luZ2xlLWJ5dGUgRldfQ0ZHXG4mIzQzOyAqIGZvcm0gKGp1c3QgdGhlIGNsb2NrLXNwZWVkIHNlbGVjdG9yKS4gVGhlIGRvd25zdHJlYW0gc3RhY2sgc2VuZHMgdGhpcyBpbiB0aGVcbiYjNDM7ICogYm9vdGxvYWRlciBiZWZvcmUgQ09SRV9SRVNFVDsgdGhlIGVhcmxpZXN0IHRoZSBtYWlubGluZSBOQ0kgY29yZSBsZXRzIHVzIGluXG4mIzQzOyAqIGlzIHRoZSAtXHUwMDNlc2V0dXAgaG9vayAoYWZ0ZXIgQ09SRV9SRVNFVCwgYmVmb3JlIENPUkVfSU5JVCksIHdoaWNoIHdvcmtzLlxuJiM0MzsgKi9cbiYjNDM7aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHU4IGNsa19zcGVlZCA9IE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRUQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsIFx1MDAyNmNsa19zcGVlZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFMzTlJONFYgUkYgcmVnaXN0ZXIgdXBkYXRlLiBUaGUgSFcgYW5kIFNXIHJlZ2lzdGVyIGJsb2JzIGFyZSBtZXJnZWQgaW50byBhXG4mIzQzOyAqIHNpbmdsZSBzdHJlYW0gKEhXIGZpcnN0KSBhbmQgcHVzaGVkIHZpYSB0aGUgRFVBTF9PUFRJT04gY29tbWFuZDpcbiYjNDM7ICogU1RBUlRfVVBEQVRFLCBvbmUgU0VUX09QVElPTiBwZXIgMjUyLWJ5dGUgc2VjdGlvbiwgdGhlbiBTVE9QX1VQREFURSBjYXJyeWluZ1xuJiM0MzsgKiBhIDE2LWJpdCBjaGVja3N1bSAocnVubmluZyBzdW0gb2YgdGhlIG1lcmdlZCBzdHJlYW0gYXMgMzItYml0IHdvcmRzKS5cbiYjNDM7ICovXG4mIzQzO2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaHdfZncgPSBOVUxMLCAqc3dfZncgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHNldF9vcHRpb247XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2aW5mby1cdTAwM2VuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2O1xuJiM0MztcdHNpemVfdCBtZXJnZWRfc2l6ZSwgaSwgbGVuO1xuJiM0MztcdHU4ICptZXJnZWQgPSBOVUxMO1xuJiM0MztcdHU4IHN0b3BfY21kWzNdO1xuJiM0MztcdHUzMiBjaGVja3N1bTtcbiYjNDM7XHR1OCBzdWJfb2lkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2aHdfZncsIGh3X25hbWUsIGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcdTAwMjZzd19mdywgc3dfbmFtZSwgZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXRfaHc7XG4mIzQzO1xuJiM0MztcdG1lcmdlZF9zaXplID0gaHdfZnctXHUwMDNlc2l6ZSAmIzQzOyBzd19mdy1cdTAwM2VzaXplO1xuJiM0MztcdG1lcmdlZCA9IGttYWxsb2MobWVyZ2VkX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbWVyZ2VkKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdG1lbWNweShtZXJnZWQsIGh3X2Z3LVx1MDAzZWRhdGEsIGh3X2Z3LVx1MDAzZXNpemUpO1xuJiM0MztcdG1lbWNweShtZXJnZWQgJiM0MzsgaHdfZnctXHUwMDNlc2l6ZSwgc3dfZnctXHUwMDNlZGF0YSwgc3dfZnctXHUwMDNlc2l6ZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUnVubmluZyBzdW0gb2YgdGhlIG1lcmdlZCBzdHJlYW0gYXMgbGl0dGxlLWVuZGlhbiAzMi1iaXQgd29yZHMuIFRoZVxuJiM0MztcdCAqIHJmcmVnIGJsb2JzIGFyZSB3b3JkLWFsaWduZWQsIHNvIHRoZSBsb29wIGNvbnN1bWVzIHRoZSB3aG9sZSBzdHJlYW07XG4mIzQzO1x0ICogc2hvdWxkIGEgZnV0dXJlIGJsb2Igbm90IGJlIGEgbXVsdGlwbGUgb2YgNCBieXRlcyBpdHMgdGFpbCB3b3VsZCBiZVxuJiM0MztcdCAqIGlnbm9yZWQgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjaGVja3N1bSA9IDA7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSAmIzQzOyA0IFx1MDAzYz0gbWVyZ2VkX3NpemU7IGkgJiM0Mzs9IDQpXG4mIzQzO1x0XHRjaGVja3N1bSAmIzQzOz0gZ2V0X3VuYWxpZ25lZF9sZTMyKG1lcmdlZCAmIzQzOyBpKTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2RiZyhkZXYsIFwmIzM0O3JmcmVnIGR1YWwtb3B0aW9uIHVwZGF0ZTogJXMgJiM0MzsgJXNcXG5cJiMzNDssIGh3X25hbWUsIHN3X25hbWUpO1xuJiM0MztcbiYjNDM7XHQvKiBTVEFSVF9VUERBVEUgKi9cbiYjNDM7XHRzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RBUlRfVVBEQVRFO1xuJiM0MztcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcdTAwMjZzdWJfb2lkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VW5hYmxlIHRvIHN0YXJ0IHJmcmVnIHVwZGF0ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNFVF9PUFRJT04gcGVyIHNlY3Rpb24gKi9cbiYjNDM7XHRzZXRfb3B0aW9uLnN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OO1xuJiM0MztcdHNldF9vcHRpb24uaW5kZXggPSAwO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1lcmdlZF9zaXplOyBpICYjNDM7PSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkge1xuJiM0MztcdFx0bGVuID0gbWluX3Qoc2l6ZV90LCBtZXJnZWRfc2l6ZSAtIGksIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKTtcbiYjNDM7XHRcdG1lbWNweShzZXRfb3B0aW9uLmRhdGEsIG1lcmdlZCAmIzQzOyBpLCBsZW4pO1xuJiM0MztcdFx0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sXG4mIzQzO1x0XHRcdFx0ICAgbGVuICYjNDM7IDIsIChfX3U4ICopXHUwMDI2c2V0X29wdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtyZnJlZyB1cGRhdGUgZXJyb3IgKGNvZGU9JWQpXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNldF9vcHRpb24uaW5kZXgmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU1RPUF9VUERBVEUgd2l0aCBjaGVja3N1bSAqL1xuJiM0MztcdHN0b3BfY21kWzBdID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7XG4mIzQzO1x0cHV0X3VuYWxpZ25lZF9sZTE2KGNoZWNrc3VtLCBcdTAwMjZzdG9wX2NtZFsxXSk7XG4mIzQzO1x0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDMsIHN0b3BfY21kKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VW5hYmxlIHRvIHN0b3AgcmZyZWcgdXBkYXRlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2X2RiZyhkZXYsIFwmIzM0O3JmcmVnIGR1YWwtb3B0aW9uIHVwZGF0ZTogc3VjY2Vzc1xcblwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShtZXJnZWQpO1xuJiM0MztcdHJlbGVhc2VfZmlybXdhcmUoc3dfZncpO1xuJiM0MztvdXRfaHc6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShod19mdyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG5pbmRleCBiYzRiY2UyYmJjNGQ5My4uMjMxNzliYTA5NWExYjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG5AQCAtNDAsNiAmIzQzOzQwLDEzIEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7XG4gXG4gI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdcdFx0MHgyOFxuIFxuJiM0MzsvKlxuJiM0MzsgKiBTaW5nbGUtYnl0ZSBGV19DRkcgcGF5bG9hZCAoY2xvY2stc3BlZWQgc2VsZWN0b3IpIGZvciB0aGUgUzNOUk40ViByZWZlcmVuY2VcbiYjNDM7ICogY2xvY2suIFRha2VuIGZyb20gdGhlIHZlbmRvciBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBhcnQgKHRoZSBlbmNvZGluZyBpc1xuJiM0MzsgKiBub3QgZG9jdW1lbnRlZCkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRURcdDB4MTFcbiYjNDM7XG4gc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19jbWQge1xuIFx0X191OCBjbGtfdHlwZTtcbiBcdF9fdTggY2xrX3NwZWVkO1xuQEAgLTUwLDcgJiM0Mzs1NywzMCBAQCBzdHJ1Y3QgbmNpX3Byb3BfZndfY2ZnX3JzcCB7XG4gXHRfX3U4IHN0YXR1cztcbiB9O1xuIFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF07XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBTM05STjRWIHVwZGF0ZXMgaXRzIFJGIHJlZ2lzdGVycyB0aHJvdWdoIGEgc2luZ2xlIFwmIzM0O2R1YWwgb3B0aW9uXCYjMzQ7IGNvbW1hbmRcbiYjNDM7ICogKGEgc3ViLU9JRCBzZWxlY3RzIHRoZSBvcGVyYXRpb24pIGluc3RlYWQgb2YgdGhlIFNUQVJUL1NFVC9TVE9QX1JGUkVHXG4mIzQzOyAqIG9wY29kZXMgYWJvdmUsIGFuZCBleHBlY3RzIHRoZSBIVyBhbmQgU1cgcmVnaXN0ZXIgYmxvYnMgbWVyZ2VkIGludG8gb25lXG4mIzQzOyAqIHN0cmVhbS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9PUFRJT05cdFx0MHgyYVxuJiM0MztcbiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEVcdDB4MDFcbiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OXHQweDAyXG4mIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEVcdDB4MDNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkVcdDI1MlxuJiM0MztcbiYjNDM7c3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQge1xuJiM0MztcdF9fdTggc3ViX29pZDtcdC8qIE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT04gKi9cbiYjNDM7XHRfX3U4IGluZGV4O1xuJiM0MztcdF9fdTggZGF0YVtOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRV07XG4mIzQzO307XG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdO1xuIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XG4mIzQzO2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7XG4mIzQzO2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pO1xuIFxuICNlbmRpZiAvKiBfX0xPQ0FMX1MzRldSTjVfTkNJX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxuaW5kZXggMmI0OTIyMzYwOTBiODUuLjJkOGMxMjA5MWZiYTU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXG5AQCAtMjEsNiAmIzQzOzIxLDE3IEBAIGVudW0gczNmd3JuNV9tb2RlIHtcbiBcdFMzRldSTjVfTU9ERV9GVyxcbiB9O1xuIFxuJiM0MztlbnVtIHMzZndybjVfdmFyaWFudCB7XG4mIzQzO1x0LyogUzNGV1JONSAvIFMzRldSTjgyOiBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGJ5IHRoaXMgZHJpdmVyICovXG4mIzQzO1x0UzNGV1JONV9WQVJJQU5UX0ZXREwsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTM05STjRWOiBzaGlwcyB3aXRoIHdvcmtpbmcgZmlybXdhcmUgYmVoaW5kIGEgYm9vdGxvYWRlciBwcm90b2NvbFxuJiM0MztcdCAqIHRoaXMgZHJpdmVyIGRvZXMgbm90IGltcGxlbWVudDsgc2tpcCB0aGUgZG93bmxvYWQsIGNvbmZpZ3VyZSB0aGVcbiYjNDM7XHQgKiBjbG9jayAoRldfQ0ZHKSBhbmQgdXBkYXRlIHRoZSBSRiByZWdpc3RlcnMgdmlhIHRoZSBEVUFMX09QVElPTiBjbWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0UzNGV1JONV9WQVJJQU5UX1MzTlJONFYsXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMge1xuIFx0dm9pZCAoKnNldF93YWtlKSh2b2lkICppZCwgYm9vbCBzbGVlcCk7XG4gXHR2b2lkICgqc2V0X21vZGUpKHZvaWQgKmlkLCBlbnVtIHMzZndybjVfbW9kZSk7XG5AQCAtMzYsNiAmIzQzOzQ3LDcgQEAgc3RydWN0IHMzZndybjVfaW5mbyB7XG4gXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzO1xuIFxuIFx0c3RydWN0IHMzZndybjVfZndfaW5mbyBmd19pbmZvO1xuJiM0MztcdGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQ7XG4gXG4gXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XG4gfTtcbkBAIC03OCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuLVx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcyk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7XG4gdm9pZCBzM2Z3cm41X3JlbW92ZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7XG4gXG4gaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG5pbmRleCA1NDBhNGRkYjBiMDVlOS4uNDcxNzJkNzM5YTQxZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIHN0YXRpYyBpbnQgczNmd3JuODJfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxuIFx0fVxuIFxuIFx0cmV0ID0gczNmd3JuNV9wcm9iZShcdTAwMjZwaHktXHUwMDNlY29tbW9uLm5kZXYsIHBoeSwgXHUwMDI2cGh5LVx1MDAzZXNlcl9kZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCAgICBcdTAwMjZ1YXJ0X3BoeV9vcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2dWFydF9waHlfb3BzLCBTM0ZXUk41X1ZBUklBTlRfRldETCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9zZXJkZXY7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMjA6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDX1MzRldSTjVfSTJDJiMzNDssCiAgICAmIzM0O05GQ19TM0ZXUk41JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7czNmd3JuNV9uY2lfc2V0dXAmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfcG9zdF9zZXR1cCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9jbGtfY2ZnJiMzNDssCiAgICAmIzM0O3MzZndybjVfaTJjX2Nsa19zZXQmIzM0OywKICAgICYjMzQ7czNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWQmIzM0OywKICAgICYjMzQ7czNmd3JuNV9pMmNfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIG5ldyB2YXJpYW50IG9mIHRoZSBTYW1zdW5nIE5GQyBjb250cm9sbGVyIChTM05STjRWKSB0byB0aGUgczNmd3JuNSBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBmaXJtd2FyZSBsb2FkaW5nIHZpYSBOQ0kgcHJvcHJpZXRhcnkgY29tbWFuZHMsIGFuZCBjbG9jayBoYW5kbGluZyB2aWEgYSBuZXcgR1BJTyBpbnRlcnJ1cHQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChORkMgZHJpdmVyKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIEkyQyBkZXZpY2UgcHJvYmluZyBhbmQgTkNJIGNvcmUgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZmViMWFhNDc1YmYwNTQ2ZGI4OGE0NTgyMTk4MjQ3ZmFlMWYzMjExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAyMDo0NTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwKaW5kZXggMTJiYWVlNDU3NTJjN2IuLjNlYmNkMDkzMzliODFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbApAQCAtMTQsMTIgJiM0MzsxNCwyMCBAQCBwcm9wZXJ0aWVzOgogICAgIGVudW06CiAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmMKICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm44MgomIzQzOyAgICAgIC0gc2Ftc3VuZyxzM25ybjR2LWkyYwogCiAgIGVuLWdwaW9zOgogICAgIG1heEl0ZW1zOiAxCiAgICAgZGVzY3JpcHRpb246CiAgICAgICBPdXRwdXQgR1BJTyBwaW4gdXNlZCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBjaGlwCiAKJiM0MzsgIGNsay1yZXEtZ3Bpb3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIElucHV0IEdQSU8gcGluIGNvbm5lY3RlZCB0byB0aGUgY29udHJvbGxlciYjMzk7cyBjbG9jay1yZXF1ZXN0IG91dHB1dC4gV2hlbgomIzQzOyAgICAgIHByZXNlbnQsIHRoZSByZWZlcmVuY2UgY2xvY2sgaXMgZW5hYmxlZCBpbiByZXNwb25zZSB0byB0aGlzIHNpZ25hbAomIzQzOyAgICAgIGluc3RlYWQgb2YgYmVpbmcgbGVmdCBhbHdheXMtb24uCiYjNDM7CiAgIGludGVycnVwdHM6CiAgICAgbWF4SXRlbXM6IDEKIApAQCAtNTgsMTIgJiM0Mzs2NiwyNSBAQCBhbGxPZjoKICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgIGNvbXBhdGlibGU6CiAgICAgICAgICAgY29udGFpbnM6Ci0gICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM2Z3cm41LWkyYwomIzQzOyAgICAgICAgICAgIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmMKJiM0MzsgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM25ybjR2LWkyYwogICAgIHRoZW46CiAgICAgICByZXF1aXJlZDoKICAgICAgICAgLSBpbnRlcnJ1cHRzCiAgICAgICAgIC0gcmVnCiAKJiM0MzsgICMgVGhlIGNsb2NrLXJlcXVlc3QgaGFuZHNoYWtlIG9ubHkgZXhpc3RzIG9uIHRoZSBTM05STjRWLgomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBub3Q6CiYjNDM7ICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICAgIGNvbnRhaW5zOgomIzQzOyAgICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNucm40di1pMmMKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY2xrLXJlcS1ncGlvczogZmFsc2UKJiM0MzsKIGV4YW1wbGVzOgogICAtIHwKICAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmgmZ3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jCmluZGV4IGFmMGZhOGJkOTcwYjRmLi41OTMxN2VhYWQ3YWM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMKQEAgLTEyMiwxMSAmIzQzOzEyMiw0NyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHMzZndybjVfbmNpX3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUnVucyBhZnRlciBDT1JFX1JFU0VULCBiZWZvcmUgQ09SRV9JTklULiBUaGUgUzNOUk40ViBuZWVkcyBpdHMKJiM0MzsJICogcmVmZXJlbmNlIGNsb2NrIGNvbmZpZ3VyZWQgaGVyZSAodGhlIGRvd25zdHJlYW0gc3RhY2sgZG9lcyBpdCBpbiB0aGUKJiM0MzsJICogYm9vdGxvYWRlciwgYmVmb3JlIENPUkVfUkVTRVQsIGJ1dCB0aGlzIGlzIHRoZSBlYXJsaWVzdCBob29rIHRoZSBOQ0kKJiM0MzsJICogY29yZSBvZmZlcnMgYW5kIHRoZSBjaGlwIGFjY2VwdHMgaXQpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGluZm8tJmd0O3ZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpCiYjNDM7CQlyZXR1cm4gczNmd3JuNV9uY2lfY2xrX2NmZyhpbmZvKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQogewogCXN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7CiAJaW50IHJldDsKIAomIzQzOwlpZiAoaW5mby0mZ3Q7dmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40VikgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBTM05STjRWIHNoaXBzIHdpdGggd29ya2luZyBmaXJtd2FyZSBiZWhpbmQgYSBib290bG9hZGVyCiYjNDM7CQkgKiBwcm90b2NvbCB0aGlzIGRyaXZlciBkb2VzIG5vdCBpbXBsZW1lbnQsIHNvIHRoZXJlIGlzIG5vCiYjNDM7CQkgKiBkb3dubG9hZCBzdGVwOyB0aGUgTkNJIGNvcmUgaGFzIGFscmVhZHkgZG9uZSBDT1JFX1JFU0VUICYjNDM7CiYjNDM7CQkgKiBDT1JFX0lOSVQuIEp1c3QgKHJlKWxvYWQgdGhlIFJGIHJlZ2lzdGVycyB2aWEgRFVBTF9PUFRJT04uCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKGluZm8sICYjMzQ7c2VjX3MzbnJuNHZfaHdyZWcuYmluJiMzNDssCiYjNDM7CQkJCQkJICAgICYjMzQ7c2VjX3MzbnJuNHZfc3dyZWcuYmluJiMzNDspOwomIzQzOwkJLyoKJiM0MzsJCSAqIEtlZXAgZ29pbmcgZXZlbiBpZiB0aGUgYmxvYnMgY291bGQgbm90IGJlIGxvYWRlZDogdGhlIGNoaXAKJiM0MzsJCSAqIHN0aWxsIGVudW1lcmF0ZXMgYW5kIGZhbGxzIGJhY2sgdG8gdGhlIFJGIHJlZ2lzdGVycyBwcm9ncmFtbWVkCiYjNDM7CQkgKiBpbiBpdHMgZmxhc2gsIHNvIE5GQyBtYXkgd29yayBhbnl3YXkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWRldl93YXJuKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtyZnJlZyBjb25maWd1cmUgZmFpbGVkICglZClcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKIAlpZiAoczNmd3JuNV9maXJtd2FyZV9pbml0KGluZm8pKSB7CiAJCS8vc2tpcCBib290bG9hZGVyIG1vZGUKIAkJcmV0dXJuIDA7CkBAIC0xNTIsMTMgJiM0MzsxODgsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHsKIAkub3BlbiA9IHMzZndybjVfbmNpX29wZW4sCiAJLmNsb3NlID0gczNmd3JuNV9uY2lfY2xvc2UsCiAJLnNlbmQgPSBzM2Z3cm41X25jaV9zZW5kLAomIzQzOwkuc2V0dXAgPSBzM2Z3cm41X25jaV9zZXR1cCwKIAkucG9zdF9zZXR1cCA9IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAsCiAJLnByb3Bfb3BzID0gczNmd3JuNV9uY2lfcHJvcF9vcHMsCiAJLm5fcHJvcF9vcHMgPSBBUlJBWV9TSVpFKHMzZndybjVfbmNpX3Byb3Bfb3BzKSwKIH07CiAKIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LAotCWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpCiYjNDM7CWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpCiB7CiAJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbzsKIAlpbnQgcmV0OwpAQCAtMTcwLDYgJiM0MzsyMDcsNyBAQCBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldiwKIAlpbmZvLSZndDtwaHlfaWQgPSBwaHlfaWQ7CiAJaW5mby0mZ3Q7cGRldiA9IHBkZXY7CiAJaW5mby0mZ3Q7cGh5X29wcyA9IHBoeV9vcHM7CiYjNDM7CWluZm8tJmd0O3ZhcmlhbnQgPSB2YXJpYW50OwogCW11dGV4X2luaXQoJmFtcDtpbmZvLSZndDttdXRleCk7CiAKIAlzM2Z3cm41X3NldF9tb2RlKGluZm8sIFMzRldSTjVfTU9ERV9DT0xEKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jCmluZGV4IGU5YTM0ZDI3YTM2OTg0Li44OGE0OTg4NzkxZWZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jCkBAIC0yMyw5ICYjNDM7MjMsNTMgQEAgc3RydWN0IHMzZndybjVfaTJjX3BoeSB7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7CiAJc3RydWN0IGNsayAqY2xrOwogCiYjNDM7CS8qCiYjNDM7CSAqIE9wdGlvbmFsIGhhcmR3YXJlIGNsb2NrLXJlcXVlc3QgaGFuZHNoYWtlLiBXaGVuIGEgQ0xLX1JFUSBHUElPIGlzCiYjNDM7CSAqIHdpcmVkLCB0aGUgY2hpcCBkcml2ZXMgaXQgaGlnaCB3aGlsZSBpdCBuZWVkcyBpdHMgWEkgY2xvY2sgLS0gbm90YWJseQomIzQzOwkgKiB0byBnZW5lcmF0ZSB0aGUgcG9sbC9yZWFkZXIgY2FycmllciAtLSBhbmQgdGhlIGNsb2NrIGlzIGdhdGVkIG9uIGl0CiYjNDM7CSAqIGluc3RlYWQgb2YgYmVpbmcgbGVmdCBhbHdheXMtb24gKHdoaWNoIG5ldmVyIGxldHMgdGhlIGNoaXAmIzM5O3MgVFggUExMCiYjNDM7CSAqIGxvY2sgb24gYSBmcmVzaCBjbG9jayBzdGFydCwgbGVhdmluZyBpdCB1bmFibGUgdG8gcG9sbCkuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX2Nsa19yZXE7CiYjNDM7CWJvb2wgY2xrX29uOwomIzQzOwlzdHJ1Y3QgbXV0ZXggY2xrX2xvY2s7CS8qIHNlcmlhbGlzZXMgY2xrX29uIGFnYWluc3QgdGhlIENMS19SRVEgaXJxICovCiYjNDM7CiAJdW5zaWduZWQgaW50IGlycV9za2lwOjE7CiB9OwogCiYjNDM7c3RhdGljIHZvaWQgczNmd3JuNV9pMmNfY2xrX3NldChzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHksIGJvb2wgb24pCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7cGh5LSZndDtjbGtfbG9jayk7CiYjNDM7CWlmIChvbiAmYW1wOyZhbXA7ICFwaHktJmd0O2Nsa19vbikgewomIzQzOwkJaW50IHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwaHktJmd0O2Nsayk7CiYjNDM7CiYjNDM7CQlpZiAocmV0ID09IDApCiYjNDM7CQkJcGh5LSZndDtjbGtfb24gPSB0cnVlOwomIzQzOwkJZWxzZQomIzQzOwkJCWRldl93YXJuX29uY2UoJmFtcDtwaHktJmd0O2kyY19kZXYtJmd0O2RldiwKJiM0MzsJCQkJICAgICAgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGNsb2NrICglZCk7IE5GQyBtYXkgbm90IHBvbGxcbiYjMzQ7LAomIzQzOwkJCQkgICAgICByZXQpOwomIzQzOwl9IGVsc2UgaWYgKCFvbiAmYW1wOyZhbXA7IHBoeS0mZ3Q7Y2xrX29uKSB7CiYjNDM7CQljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LSZndDtjbGspOwomIzQzOwkJcGh5LSZndDtjbGtfb24gPSBmYWxzZTsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwaHktJmd0O2Nsa19sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgczNmd3JuNV9pMmNfY2xrX2Rpc2FibGVfYWN0aW9uKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzM2Z3cm41X2kyY19jbGtfc2V0KGRhdGEsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkKGludCBpcnEsIHZvaWQgKnBoeV9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeSA9IHBoeV9pZDsKJiM0MzsKJiM0MzsJczNmd3JuNV9pMmNfY2xrX3NldChwaHksIGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChwaHktJmd0O2dwaW9fY2xrX3JlcSkgJmd0OyAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHMzZndybjVfaTJjX3NldF9tb2RlKHZvaWQgKnBoeV9pZCwgZW51bSBzM2Z3cm41X21vZGUgbW9kZSkKIHsKIAlzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHkgPSBwaHlfaWQ7CkBAIC0xNDYsNiAmIzQzOzE5MCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBzM2Z3cm41X2kyY19pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKnBoeV9pZCkKIAogc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewomIzQzOwllbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50OwogCXN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeTsKIAlpbnQgcmV0OwogCkBAIC0xNzIsMTUgJiM0MzsyMTcsNjMgQEAgc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogCSAqIFMzRldSTjUgZGVwZW5kcyBvbiBhIGNsb2NrIGlucHV0ICgmIzM0O1hJJiMzNDsgcGluKSB0byBmdW5jdGlvbiBwcm9wZXJseS4KIAkgKiBEZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gdGhpcyBjb3VsZCBiZSBhbiBhbHdheXMtb24KIAkgKiBvc2NpbGxhdG9yIG9yIHNvbWUgZXh0ZXJuYWwgY2xvY2sgdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZC4KLQkgKiBNYWtlIHN1cmUgdGhlIGNsb2NrIGlzIHJ1bm5pbmcgYmVmb3JlIHN0YXJ0aW5nIFMzRldSTjUuCiYjNDM7CSAqCiYjNDM7CSAqIElmIGEgQ0xLX1JFUSBHUElPIGlzIHdpcmVkLCB0aGUgY2hpcCBnYXRlcyB0aGUgY2xvY2sgaXRzZWxmIChkcml2aW5nCiYjNDM7CSAqIENMS19SRVEgaGlnaCB3aGVuIGl0IG5lZWRzIFhJKTsgc2VydmljZSB0aGF0IGhhbmRzaGFrZS4gT3RoZXJ3aXNlIGp1c3QKJiM0MzsJICogbWFrZSBzdXJlIHRoZSBjbG9jayBpcyBydW5uaW5nIGJlZm9yZSBzdGFydGluZyBTM0ZXUk41LgogCSAqLwotCXBoeS0mZ3Q7Y2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7Ci0JaWYgKElTX0VSUihwaHktJmd0O2NsaykpCi0JCXJldHVybiBkZXZfZXJyX3Byb2JlKCZhbXA7Y2xpZW50LSZndDtkZXYsIFBUUl9FUlIocGh5LSZndDtjbGspLAotCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGNsb2NrXG4mIzM0Oyk7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwaHktJmd0O2Nsa19sb2NrKTsKJiM0MzsJcGh5LSZndDtncGlvX2Nsa19yZXEgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCAmIzM0O2Nsay1yZXEmIzM0OywKJiM0MzsJCQkJCQkgICAgR1BJT0RfSU4pOwomIzQzOwlpZiAoSVNfRVJSKHBoeS0mZ3Q7Z3Bpb19jbGtfcmVxKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHBoeS0mZ3Q7Z3Bpb19jbGtfcmVxKTsKJiM0MzsKJiM0MzsJaWYgKHBoeS0mZ3Q7Z3Bpb19jbGtfcmVxKSB7CiYjNDM7CQlpbnQgY2xrX3JlcV9pcnE7CiYjNDM7CiYjNDM7CQlwaHktJmd0O2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBOVUxMKTsKJiM0MzsJCWlmIChJU19FUlIocGh5LSZndDtjbGspKQomIzQzOwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZhbXA7Y2xpZW50LSZndDtkZXYsIFBUUl9FUlIocGh5LSZndDtjbGspLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgY2xvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBVbmxpa2UgdGhlIGFsd2F5cy1vbiBicmFuY2ggYmVsb3csIHRoaXMgY2xvY2sgaXMgZW5hYmxlZCBieQomIzQzOwkJICogaGFuZCBmcm9tIHRoZSBDTEtfUkVRIGhhbmRsZXIsIHNvIGRldm0gd2lsbCBub3QgZGlzYWJsZSBpdCBvbgomIzQzOwkJICogdW5iaW5kLiBHYXRlIGl0IG9mZiBleHBsaWNpdGx5IGlmIGl0IGlzIHN0aWxsIG9uIGF0IHRlYXJkb3duLgomIzQzOwkJICovCiYjNDM7CQlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoJmFtcDtjbGllbnQtJmd0O2RldiwKJiM0MzsJCQkJCSAgICAgICBzM2Z3cm41X2kyY19jbGtfZGlzYWJsZV9hY3Rpb24sCiYjNDM7CQkJCQkgICAgICAgcGh5KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWNsa19yZXFfaXJxID0gZ3Bpb2RfdG9faXJxKHBoeS0mZ3Q7Z3Bpb19jbGtfcmVxKTsKJiM0MzsJCWlmIChjbGtfcmVxX2lycSAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIGNsa19yZXFfaXJxOwomIzQzOwomIzQzOwkJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBjbGtfcmVxX2lycSwgTlVMTCwKJiM0MzsJCQkJCQlzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZCwKJiM0MzsJCQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwKJiM0MzsJCQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8CiYjNDM7CQkJCQkJSVJRRl9PTkVTSE9ULAomIzQzOwkJCQkJCSYjMzQ7czNmd3JuNV9jbGtfcmVxJiMzNDssIHBoeSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBTZWVkIHRoZSBjbG9jayBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50IENMS19SRVEgbGV2ZWwuICovCiYjNDM7CQlzM2Z3cm41X2kyY19jbGtfc2V0KHBoeSwKJiM0MzsJCQkJICAgIGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChwaHktJmd0O2dwaW9fY2xrX3JlcSkgJmd0OyAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBoeS0mZ3Q7Y2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7CiYjNDM7CQlpZiAoSVNfRVJSKHBoeS0mZ3Q7Y2xrKSkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBQVFJfRVJSKHBoeS0mZ3Q7Y2xrKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGNsb2NrXG4mIzM0Oyk7CiYjNDM7CX0KIAomIzQzOwkvKiBObyBtYXRjaCBkYXRhIChlLmcuIGkyY19kZXZpY2VfaWQgYmluZGluZykgbWVhbnMgdGhlIGRlZmF1bHQgRldETC4gKi8KJiM0MzsJdmFyaWFudCA9ICh1aW50cHRyX3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7CiAJcmV0ID0gczNmd3JuNV9wcm9iZSgmYW1wO3BoeS0mZ3Q7Y29tbW9uLm5kZXYsIHBoeSwgJmFtcDtwaHktJmd0O2kyY19kZXYtJmd0O2RldiwKLQkJCSAgICAmYW1wO2kyY19waHlfb3BzKTsKJiM0MzsJCQkgICAgJmFtcDtpMmNfcGh5X29wcywgdmFyaWFudCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTIxMCw4ICYjNDM7MzAzLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzM2Z3cm41X2kyY19pZF90YWJsZVtdID0gewogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gX19tYXliZV91bnVzZWQgPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICYjMzQ7c2Ftc3VuZyxzM2Z3cm41LWkyYyYjMzQ7LCB9LAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNmd3JuNS1pMmMmIzM0OywKJiM0MzsJICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX0ZXREwsIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNucm40di1pMmMmIzM0OywKJiM0MzsJICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX1MzTlJONFYsIH0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9zM2Z3cm41X2kyY19tYXRjaCk7CkBAIC0yMTksNyAmIzQzOzMxNSw3IEBAIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTsKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzM2Z3cm41X2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSwKLQkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9mX3MzZndybjVfaTJjX21hdGNoKSwKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IG9mX3MzZndybjVfaTJjX21hdGNoLAogCX0sCiAJLnByb2JlID0gczNmd3JuNV9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9IHMzZndybjVfaTJjX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jCmluZGV4IDVhOWRlMTFiYmVjZWE0Li4wNGY0YzM2MjY5MWUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jCkBAIC04LDYgJiM0Mzs4LDkgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maXJtd2FyZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taW5tYXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtzM2Z3cm41LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtuY2kuaCYjMzQ7CkBAIC0yMCw3ICYjNDM7MjMsNyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAwOwogfQogCi1jb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7CiYjNDM7Y29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0gewogCXsKIAkJLm9wY29kZSA9IG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1BST1BSSUVUQVJZLAogCQkJCU5DSV9QUk9QX1NFVF9SRlJFRyksCkBAIC00MSw2ICYjNDM7NDQsMTEgQEAgY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdID0gewogCQkJCU5DSV9QUk9QX0ZXX0NGRyksCiAJCS5yc3AgPSBzM2Z3cm41X25jaV9wcm9wX3JzcCwKIAl9LAomIzQzOwl7CiYjNDM7CQkub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksCiYjNDM7CQkJCU5DSV9QUk9QX0RVQUxfT1BUSU9OKSwKJiM0MzsJCS5yc3AgPSBzM2Z3cm41X25jaV9wcm9wX3JzcCwKJiM0MzsJfSwKIH07CiAKICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyCkBAIC0xMTcsMyAmIzQzOzEyNSwxMDQgQEAgaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKQogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb25maWd1cmUgdGhlIHJlZmVyZW5jZSBjbG9jay4gVGhlIFMzTlJONFYgZXhwZWN0cyB0aGUgc2luZ2xlLWJ5dGUgRldfQ0ZHCiYjNDM7ICogZm9ybSAoanVzdCB0aGUgY2xvY2stc3BlZWQgc2VsZWN0b3IpLiBUaGUgZG93bnN0cmVhbSBzdGFjayBzZW5kcyB0aGlzIGluIHRoZQomIzQzOyAqIGJvb3Rsb2FkZXIgYmVmb3JlIENPUkVfUkVTRVQ7IHRoZSBlYXJsaWVzdCB0aGUgbWFpbmxpbmUgTkNJIGNvcmUgbGV0cyB1cyBpbgomIzQzOyAqIGlzIHRoZSAtJmd0O3NldHVwIGhvb2sgKGFmdGVyIENPUkVfUkVTRVQsIGJlZm9yZSBDT1JFX0lOSVQpLCB3aGljaCB3b3Jrcy4KJiM0MzsgKi8KJiM0MztpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJdTggY2xrX3NwZWVkID0gTkNJX1BST1BfRldfQ0ZHX0NMS19TUEVFRDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5jaV9wcm9wX2NtZChpbmZvLSZndDtuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsICZhbXA7Y2xrX3NwZWVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTM05STjRWIFJGIHJlZ2lzdGVyIHVwZGF0ZS4gVGhlIEhXIGFuZCBTVyByZWdpc3RlciBibG9icyBhcmUgbWVyZ2VkIGludG8gYQomIzQzOyAqIHNpbmdsZSBzdHJlYW0gKEhXIGZpcnN0KSBhbmQgcHVzaGVkIHZpYSB0aGUgRFVBTF9PUFRJT04gY29tbWFuZDoKJiM0MzsgKiBTVEFSVF9VUERBVEUsIG9uZSBTRVRfT1BUSU9OIHBlciAyNTItYnl0ZSBzZWN0aW9uLCB0aGVuIFNUT1BfVVBEQVRFIGNhcnJ5aW5nCiYjNDM7ICogYSAxNi1iaXQgY2hlY2tzdW0gKHJ1bm5pbmcgc3VtIG9mIHRoZSBtZXJnZWQgc3RyZWFtIGFzIDMyLWJpdCB3b3JkcykuCiYjNDM7ICovCiYjNDM7aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sCiYjNDM7CQkJCSAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaHdfZncgPSBOVUxMLCAqc3dfZncgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCBzZXRfb3B0aW9uOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2luZm8tJmd0O25kZXYtJmd0O25mY19kZXYtJmd0O2RldjsKJiM0MzsJc2l6ZV90IG1lcmdlZF9zaXplLCBpLCBsZW47CiYjNDM7CXU4ICptZXJnZWQgPSBOVUxMOwomIzQzOwl1OCBzdG9wX2NtZFszXTsKJiM0MzsJdTMyIGNoZWNrc3VtOwomIzQzOwl1OCBzdWJfb2lkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZhbXA7aHdfZncsIGh3X25hbWUsIGRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO3N3X2Z3LCBzd19uYW1lLCBkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X2h3OwomIzQzOwomIzQzOwltZXJnZWRfc2l6ZSA9IGh3X2Z3LSZndDtzaXplICYjNDM7IHN3X2Z3LSZndDtzaXplOwomIzQzOwltZXJnZWQgPSBrbWFsbG9jKG1lcmdlZF9zaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtZXJnZWQpIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwltZW1jcHkobWVyZ2VkLCBod19mdy0mZ3Q7ZGF0YSwgaHdfZnctJmd0O3NpemUpOwomIzQzOwltZW1jcHkobWVyZ2VkICYjNDM7IGh3X2Z3LSZndDtzaXplLCBzd19mdy0mZ3Q7ZGF0YSwgc3dfZnctJmd0O3NpemUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSdW5uaW5nIHN1bSBvZiB0aGUgbWVyZ2VkIHN0cmVhbSBhcyBsaXR0bGUtZW5kaWFuIDMyLWJpdCB3b3Jkcy4gVGhlCiYjNDM7CSAqIHJmcmVnIGJsb2JzIGFyZSB3b3JkLWFsaWduZWQsIHNvIHRoZSBsb29wIGNvbnN1bWVzIHRoZSB3aG9sZSBzdHJlYW07CiYjNDM7CSAqIHNob3VsZCBhIGZ1dHVyZSBibG9iIG5vdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgaXRzIHRhaWwgd291bGQgYmUKJiM0MzsJICogaWdub3JlZCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJY2hlY2tzdW0gPSAwOwomIzQzOwlmb3IgKGkgPSAwOyBpICYjNDM7IDQgJmx0Oz0gbWVyZ2VkX3NpemU7IGkgJiM0Mzs9IDQpCiYjNDM7CQljaGVja3N1bSAmIzQzOz0gZ2V0X3VuYWxpZ25lZF9sZTMyKG1lcmdlZCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJZGV2X2RiZyhkZXYsICYjMzQ7cmZyZWcgZHVhbC1vcHRpb24gdXBkYXRlOiAlcyAmIzQzOyAlc1xuJiMzNDssIGh3X25hbWUsIHN3X25hbWUpOwomIzQzOwomIzQzOwkvKiBTVEFSVF9VUERBVEUgKi8KJiM0MzsJc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURTsKJiM0MzsJcmV0ID0gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCAmYW1wO3N1Yl9vaWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7VW5hYmxlIHRvIHN0YXJ0IHJmcmVnIHVwZGF0ZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU0VUX09QVElPTiBwZXIgc2VjdGlvbiAqLwomIzQzOwlzZXRfb3B0aW9uLnN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OOwomIzQzOwlzZXRfb3B0aW9uLmluZGV4ID0gMDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1lcmdlZF9zaXplOyBpICYjNDM7PSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkgewomIzQzOwkJbGVuID0gbWluX3Qoc2l6ZV90LCBtZXJnZWRfc2l6ZSAtIGksIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKTsKJiM0MzsJCW1lbWNweShzZXRfb3B0aW9uLmRhdGEsIG1lcmdlZCAmIzQzOyBpLCBsZW4pOwomIzQzOwkJcmV0ID0gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLAomIzQzOwkJCQkgICBsZW4gJiM0MzsgMiwgKF9fdTggKikmYW1wO3NldF9vcHRpb24pOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlkZXZfZXJyKGRldiwgJiMzNDtyZnJlZyB1cGRhdGUgZXJyb3IgKGNvZGU9JWQpXG4mIzM0OywgcmV0KTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCXNldF9vcHRpb24uaW5kZXgmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi8KJiM0MzsJc3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTsKJiM0MzsJcHV0X3VuYWxpZ25lZF9sZTE2KGNoZWNrc3VtLCAmYW1wO3N0b3BfY21kWzFdKTsKJiM0MzsJcmV0ID0gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAzLCBzdG9wX2NtZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtVbmFibGUgdG8gc3RvcCByZnJlZyB1cGRhdGVcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl9kYmcoZGV2LCAmIzM0O3JmcmVnIGR1YWwtb3B0aW9uIHVwZGF0ZTogc3VjY2Vzc1xuJiMzNDspOwomIzQzO291dDoKJiM0MzsJa2ZyZWUobWVyZ2VkKTsKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShzd19mdyk7CiYjNDM7b3V0X2h3OgomIzQzOwlyZWxlYXNlX2Zpcm13YXJlKGh3X2Z3KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaAppbmRleCBiYzRiY2UyYmJjNGQ5My4uMjMxNzliYTA5NWExYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaApAQCAtNDAsNiAmIzQzOzQwLDEzIEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7CiAKICNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHCQkweDI4CiAKJiM0MzsvKgomIzQzOyAqIFNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkIChjbG9jay1zcGVlZCBzZWxlY3RvcikgZm9yIHRoZSBTM05STjRWIHJlZmVyZW5jZQomIzQzOyAqIGNsb2NrLiBUYWtlbiBmcm9tIHRoZSB2ZW5kb3IgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYXJ0ICh0aGUgZW5jb2RpbmcgaXMKJiM0MzsgKiBub3QgZG9jdW1lbnRlZCkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVECTB4MTEKJiM0MzsKIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfY21kIHsKIAlfX3U4IGNsa190eXBlOwogCV9fdTggY2xrX3NwZWVkOwpAQCAtNTAsNyAmIzQzOzU3LDMwIEBAIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfcnNwIHsKIAlfX3U4IHN0YXR1czsKIH07CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF07CiYjNDM7LyoKJiM0MzsgKiBUaGUgUzNOUk40ViB1cGRhdGVzIGl0cyBSRiByZWdpc3RlcnMgdGhyb3VnaCBhIHNpbmdsZSAmIzM0O2R1YWwgb3B0aW9uJiMzNDsgY29tbWFuZAomIzQzOyAqIChhIHN1Yi1PSUQgc2VsZWN0cyB0aGUgb3BlcmF0aW9uKSBpbnN0ZWFkIG9mIHRoZSBTVEFSVC9TRVQvU1RPUF9SRlJFRwomIzQzOyAqIG9wY29kZXMgYWJvdmUsIGFuZCBleHBlY3RzIHRoZSBIVyBhbmQgU1cgcmVnaXN0ZXIgYmxvYnMgbWVyZ2VkIGludG8gb25lCiYjNDM7ICogc3RyZWFtLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9PUFRJT04JCTB4MmEKJiM0MzsKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURQkweDAxCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OCTB4MDIKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFCTB4MDMKJiM0MzsKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFCTI1MgomIzQzOwomIzQzO3N0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHsKJiM0MzsJX191OCBzdWJfb2lkOwkvKiBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OICovCiYjNDM7CV9fdTggaW5kZXg7CiYjNDM7CV9fdTggZGF0YVtOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRV07CiYjNDM7fTsKJiM0MzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdOwogaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKTsKJiM0MztpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywKJiM0MzsJCQkJICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKTsKJiM0MztpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKTsKIAogI2VuZGlmIC8qIF9fTE9DQUxfUzNGV1JONV9OQ0lfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmgKaW5kZXggMmI0OTIyMzYwOTBiODUuLjJkOGMxMjA5MWZiYTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaApAQCAtMjEsNiAmIzQzOzIxLDE3IEBAIGVudW0gczNmd3JuNV9tb2RlIHsKIAlTM0ZXUk41X01PREVfRlcsCiB9OwogCiYjNDM7ZW51bSBzM2Z3cm41X3ZhcmlhbnQgewomIzQzOwkvKiBTM0ZXUk41IC8gUzNGV1JOODI6IGZpcm13YXJlIGlzIGRvd25sb2FkZWQgYnkgdGhpcyBkcml2ZXIgKi8KJiM0MzsJUzNGV1JONV9WQVJJQU5UX0ZXREwsCiYjNDM7CS8qCiYjNDM7CSAqIFMzTlJONFY6IHNoaXBzIHdpdGggd29ya2luZyBmaXJtd2FyZSBiZWhpbmQgYSBib290bG9hZGVyIHByb3RvY29sCiYjNDM7CSAqIHRoaXMgZHJpdmVyIGRvZXMgbm90IGltcGxlbWVudDsgc2tpcCB0aGUgZG93bmxvYWQsIGNvbmZpZ3VyZSB0aGUKJiM0MzsJICogY2xvY2sgKEZXX0NGRykgYW5kIHVwZGF0ZSB0aGUgUkYgcmVnaXN0ZXJzIHZpYSB0aGUgRFVBTF9PUFRJT04gY21kLgomIzQzOwkgKi8KJiM0MzsJUzNGV1JONV9WQVJJQU5UX1MzTlJONFYsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgewogCXZvaWQgKCpzZXRfd2FrZSkodm9pZCAqaWQsIGJvb2wgc2xlZXApOwogCXZvaWQgKCpzZXRfbW9kZSkodm9pZCAqaWQsIGVudW0gczNmd3JuNV9tb2RlKTsKQEAgLTM2LDYgJiM0Mzs0Nyw3IEBAIHN0cnVjdCBzM2Z3cm41X2luZm8gewogCWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHM7CiAKIAlzdHJ1Y3QgczNmd3JuNV9md19pbmZvIGZ3X2luZm87CiYjNDM7CWVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQ7CiAKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiB9OwpAQCAtNzgsNyAmIzQzOzkwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgczNmd3JuNV93cml0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldiwKLQljb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKTsKJiM0MzsJY29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7CiB2b2lkIHMzZndybjVfcmVtb3ZlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KTsKIAogaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMKaW5kZXggNTQwYTRkZGIwYjA1ZTkuLjQ3MTcyZDczOWE0MWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYwpAQCAtMTM3LDcgJiM0MzsxMzcsNyBAQCBzdGF0aWMgaW50IHMzZndybjgyX3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldikKIAl9CiAKIAlyZXQgPSBzM2Z3cm41X3Byb2JlKCZhbXA7cGh5LSZndDtjb21tb24ubmRldiwgcGh5LCAmYW1wO3BoeS0mZ3Q7c2VyX2Rldi0mZ3Q7ZGV2LAotCQkJICAgICZhbXA7dWFydF9waHlfb3BzKTsKJiM0MzsJCQkgICAgJmFtcDt1YXJ0X3BoeV9vcHMsIFMzRldSTjVfVkFSSUFOVF9GV0RMKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnJfc2VyZGV2OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgYW5kIEZ1enppbmcgdGhlIE5ldyBORkMgQ29udHJvbGxlciBWYXJpYW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyBTYW1zdW5nIE5GQyBjb250cm9sbGVyIHZhcmlhbnQsIHRoZSBTM05STjRWLCBpbnRvIHRoZSBgczNmd3JuNWAgZHJpdmVyLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIG5ldyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQsIGltcG9ydGFudGx5LCBmdXp6YWJsZS4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIHRlc3QgaXQgdGhvcm91Z2hseS4KClRoZSBwYXRjaCBpdHNlbGYgbG9va3Mgc3RyYWlnaHRmb3J3YXJkIOKAkyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgZm9yIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nLCBtb2RpZmljYXRpb25zIHRvIGBzM2Z3cm41X25jaV9zZXR1cGAgYW5kIGBzM2Z3cm41X25jaV9wb3N0X3NldHVwYCB0byBhY2NvdW50IGZvciB0aGUgbmV3IGBTM0ZXUk41X1ZBUklBTlRfUzNOUk40VmAsIGFuZCBzb21lIGFkZGl0aW9ucyB0byBoYW5kbGUgYSBgY2xrLXJlcWAgR1BJTyBhbmQgY2xvY2sgZ2F0aW5nIGluIGBzM2Z3cm41X2kyY19wcm9iZWAuIFdlJiMzOTt2ZSBhbHNvIGdvdCBzb21lIG5ldyBmdW5jdGlvbnMgaW4gYG5jaS5jYCBhbmQgYGkyYy5jYCByZWxhdGVkIHRvIFJGIGNvbmZpZ3VyYXRpb24sIGNsb2NrIGNvbnRyb2wsIGFuZCB0aGF0IEdQSU8gaW50ZXJydXB0IGhhbmRsZXIuCgpTaW5jZSB0aGlzIGlzIGFuIE5GQyBkcml2ZXIsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZnV6emluZy4gVHlwaWNhbGx5LCBORkMgZHJpdmVycyBhcmUgZnV6emVkIHRocm91Z2ggdGhlIE5DSSBsYXllciDigJMgbmV0bGluay9zb2NrZXRzIOKAkyBvciB0aHJvdWdoIHZpcnR1YWwgZGV2aWNlcy4gVGhlIGBzM2Z3cm41YCBkcml2ZXIgaXMgYW4gSTJDL1VBUlQgZHJpdmVyLCB3aGljaCBsZWFkcyBtZSB0byB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciBTeXprYWxsZXImIzM5O3MgSTJDIHN1cHBvcnQgaXMgc3VmZmljaWVudCBmb3IgZnV6emluZyB0aGlzLiBXaGlsZSBTeXprYWxsZXIgaGFzIHNvbWUgSTJDIGNhcGFiaWxpdGllcyB2aWEgYC9kZXYvaTJjLSpgIG9yIHZpcnR1YWwgZGV2aWNlcywgaXQmIzM5O3MgbW9yZSBjb21tb24gdG8gc2VlIGZ1enppbmcgYXQgdGhlIE5DSSBsYXllci4KCk5vdywgdGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoaXMgZHJpdmVyICpkb2VzKiByZWdpc3RlciBhbiBOQ0kgZGV2aWNlLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBOQ0kgY29yZS4gYHMzZndybjVfcHJvYmVgIGNhbGxzIGBuY2lfYWxsb2NhdGVfZGV2aWNlYCBhbmQgYG5jaV9yZWdpc3Rlcl9kZXZpY2VgLiBUaGUgTkNJIGNvcmUgc2hvdWxkIGJlIGhhbmRsaW5nIHRoZSBOQ0kgcHJvdG9jb2wgaXRzZWxmLiBTbywgdGhpcyBnaXZlcyB1cyBhIGhvb2suCgpUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGlzIG5ldyBgUzNGV1JONV9WQVJJQU5UX1MzTlJONFZgIHZhcmlhbnQuIEl0JiMzOTtzIG1hdGNoZWQgdmlhIHRoZSBkZXZpY2UgdHJlZSB3aXRoIGBzYW1zdW5nLHMzbnJuNHYtaTJjYC4gVGhpcyBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgdG8gdHJpZ2dlciB0aGUgbmV3IGNvZGUuIFRoZSBuZXcgY29kZSBpbiBgczNmd3JuNV9uY2lfc2V0dXBgIGFuZCBgczNmd3JuNV9uY2lfcG9zdF9zZXR1cGAgaXMgY2xlYXJseSBleGVjdXRlZCBieSB0aGUgTkNJIGNvcmUgd2hlbiBzZXR0aW5nIHVwIHRoZSBkZXZpY2UuIFRoaXMgbG9va3MgcmVhY2hhYmxlIHZpYSB0aGUgZGV2aWNlIHNldHVwLiBgbmNpX29wZW5fZGV2aWNlYCAtJmd0OyBgbmNpX3NldHVwYCAtJmd0OyBgbmRldi0mZ3Q7b3BzLSZndDtzZXR1cGAgYW5kIGBuZGV2LSZndDtvcHMtJmd0O3Bvc3Rfc2V0dXBgLCBzbyB0aGUgY29kZSBpcyB0cmlnZ2VyZWQgYnkgdGhlIE5DSSBjb3JlIGR1cmluZyBkZXZpY2Ugc2V0dXAuIFRoZW4sIHRoZSBuZXcgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYCBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl04oCZcyBzZW5kaW5nIE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcywgbWVhbmluZyB0aGF0IHdlIGNvdWxkIHBvdGVudGlhbGx5IGZ1enogdGhyb3VnaCBgbmNpX3Byb3BfY21kYC4gQW5kIGxhc3RseSwgdGhhdCBpbnRlcnJ1cHQgaGFuZGxlciBpbiBgczNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWRgIGlzIGFub3RoZXIgcG9pbnQgd2UgbmVlZCB0byB0ZXN0LgpOb3cgSSYjMzk7bGwgY2hlY2sgS2NvbmZpZyBmb3IgdGhpcyBkcml2ZXIgdG8gc2VlIGhvdyBpdCYjMzk7cyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORkNfUzNGV1JONSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoyOmNvbmZpZyBORkNfUzNGV1JONVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjEwOmNvbmZpZyBORkNfUzNGV1JONV9JMkNcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1NhbXN1bmcgUzNGV1JONSBJMkMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODU3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBwcmVzZW50ZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtjb25maWcgLSBBIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBvYmplY3RpdmUgaGVyZSBpcyBjbGVhcjogYSBjb21wbGV0ZSwgdGhvcm91Z2ggYW5hbHlzaXMgaXMgbmVlZGVkLiBUaGUgZmlyc3Qgc3RlcCwgbG9naWNhbGx5LCBpcyB0byBpbW1lZGlhdGVseSBnZXQgdGhlICpmdWxsKiBLY29uZmlnIGZpbGUgaW4gZnJvbnQgb2YgbWUuIE5vIHBhcnRpYWwgdmlld3MsIG5vIHNuaXBwZXRzOyBJIG5lZWQgdGhlIHdob2xlIGVuY2hpbGFkYS4gSSBuZWVkIHRvIHNlZSB0aGUgY29tcGxldGUgY29udGV4dCwgdGhlIGRlcGVuZGVuY2llcywgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhbGwgdGhlIHZhcmlhYmxlcywgdGhlIGRlZmF1bHRzLiBXaXRob3V0IHRoaXMgY29tcHJlaGVuc2l2ZSB2aWV3LCBhbnkgYXR0ZW1wdCBhdCBpbnNpZ2h0ZnVsIGFuYWx5c2lzIGlzIGp1c3Qgc3BlY3VsYXRpb24uIEkgYW0gZ29pbmcgdG8gc2VlIHRoZSBmb3Jlc3QgYW5kIGFsbCB0aGUgdHJlZXMuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjdXJzb3J5IGdsYW5jZTsgdGhpcyBpcyBhIGRlZXAgZGl2ZS4gSSYjMzk7bSByZWFkeSB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBkZXNpZ24gZGVjaXNpb25zLCBhbmQgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHVuZGVyc3RhbmRpbmcgYmVnaW5zLiBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkZDX1MzRldSTjVcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIENvcmUgZHJpdmVyIGZvciBTYW1zdW5nIFMzRldSTjUgTkZDIGNoaXAuIENvbnRhaW5zIGNvcmUgdXRpbGl0aWVzXG4gICA3Olx0XHQgIG9mIGNoaXAuIEl0JiMzOTtzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgUEhZcyB0byBhdm9pZCBkdXBsaWNhdGluZyBsb3RzXG4gICA4Olx0XHQgIG9mIGNvbW1vbiBjb2RlLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBORkNfUzNGV1JONV9JMkNcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1NhbXN1bmcgUzNGV1JONSBJMkMgc3VwcG9ydFwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBJMkNcbiAgMTM6XHRcdHNlbGVjdCBORkNfUzNGV1JONVxuICAxNDpcdFx0ZGVmYXVsdCBuXG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgYW4gSTJDIGludGVyZmFjZSB0byB0aGUgUzNGV1JONSBjaGlwLlxuICAxNzpcdFx0ICBTZWxlY3QgdGhpcyBpZiB5b3VyIHBsYXRmb3JtIGlzIHVzaW5nIHRoZSBJMkMgYnVzLlxuICAxODpcdFxuICAxOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgbSBoZXJlLiBUaGUgbW9kdWxlIHdpbGxcbiAgMjA6XHRcdCAgYmUgY2FsbGVkIHMzZndybjVfaTJjLmtvLlxuICAyMTpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIE5GQ19TM0ZXUk44Ml9VQVJUXG4gIDI0Olx0ICAgICAgICB0cmlzdGF0ZSBcJiMzNDtTYW1zdW5nIFMzRldSTjgyIFVBUlQgc3VwcG9ydFwmIzM0O1xuICAyNTpcdCAgICAgICAgZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTRVJJQUxfREVWX0JVU1xuICAyNjpcdCAgICAgICAgc2VsZWN0IE5GQ19TM0ZXUk41XG4gIDI3Olx0ICAgICAgICBoZWxwXG4gIDI4Olx0ICAgICAgICAgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgYSBVQVJUIGludGVyZmFjZSB0byB0aGUgUzNGV1JOODIgY2hpcC5cbiAgMjk6XHQgICAgICAgICAgU2VsZWN0IHRoaXMgaWYgeW91ciBwbGF0Zm9ybSBpcyB1c2luZyB0aGUgVUFSVCBidXMuXG4gIDMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NzYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE5GQyBTM0ZXUk41IEkyQyBEcml2ZXI6IEEgV29ydGh3aGlsZSBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyB0aGUgZnV6emFiaWxpdHkgb2YgdGhpcyBgTkZDX1MzRldSTjVfSTJDYCBkcml2ZXIuIFRoZSBjb3JlIG9mIHRoZSBuZXcgY29kZSByZXNpZGVzIGluIHNldmVyYWwgZnVuY3Rpb25zOiBgczNmd3JuNV9uY2lfc2V0dXBgLCBgczNmd3JuNV9uY2lfcG9zdF9zZXR1cGAsIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAsIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCwgYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYCwgYW5kIGBzM2Z3cm41X2kyY19jbGtfc2V0YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyBlYXNpbHkgdGhlc2UgY2FuIGJlIHJlYWNoZWQuCgpUaGUgSTJDIGRyaXZlciBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBJMkMgZGV2aWNlIHdpdGggdGhlIGNvbXBhdGlibGUgSUQgJiMzNDtzYW1zdW5nLHMzbnJuNHYtaTJjJiMzNDsgaXMgcHJlc2VudC4gIFN5emthbGxlciBjYW4sIGluIHRoZW9yeSwgaW5qZWN0IEkyQyBkZXZpY2VzIHVzaW5nIGBzeXpfaTJjX3NldHVwYCAoaWYgaXQgc3VwcG9ydHMgaXQpLCBhbmQgYWxzbyBoYXMgTkNJIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRocm91Z2ggdGhlIE5DSSBjb3JlLiAgVGhhdCYjMzk7cyBwcm9taXNpbmcuCgpTaW5jZSB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHRoZSBOQ0kgb3BlcmF0aW9ucywgdGhleSBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyBgbmNpX29wZW5fZGV2aWNlYCBpZiB0aGUgZGV2aWNlIGlzIHN1Y2Nlc3NmdWxseSBwcm9iZWQuIE5vdywgdGhlcmUgaXMgYSBwb3RlbnRpYWwgaGljY3VwIHdpdGggYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYCwgd2hpY2ggcmVsaWVzIG9uIGByZXF1ZXN0X2Zpcm13YXJlYC4gVGhpcyBjb3VsZCBibG9jaywgb3IgZmFpbCBpZiB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IGF2YWlsYWJsZS4gRm9ydHVuYXRlbHksIGl0IGxvb2tzIGxpa2UgaXQgcHJpbnRzIGEgd2FybmluZyBhbmQgY29udGludWVzIGlmIHRoZSBmaXJtd2FyZSBsb2FkIGZhaWxzLiBUaGF0IGFsbGV2aWF0ZXMgc29tZSBjb25jZXJuLgoKVGhlIGBzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZGAgaXMgYW4gSVJRIGhhbmRsZXIgZm9yIGEgR1BJTy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGVhc2lseSB0cmlnZ2VyIEdQSU8gSVJRcyB1bmxlc3MgaXQmIzM5O3MgYSBjb250cm9sbGVkIHZpcnR1YWwgR1BJTyBkcml2ZXIuIFNvIHRoYXQgbWlnaHQgYmUgdHJpY2tpZXIgdG8gcmVhY2guCgpIb3dldmVyLCBgczNmd3JuNV9uY2lfc2V0dXBgIGFuZCBgczNmd3JuNV9uY2lfcG9zdF9zZXR1cGAgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGlmIHRoZSBkZXZpY2UgaXMgcHJvYmVkIGFuZCBvcGVuZWQuIFRoZSBnb29kIG5ld3MgaXMsIFN5emthbGxlciBoYXMgc29tZSBJMkMgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkgc2VlIHNvbWUgcHJvcHJpZXRhcnkgTkNJIGNvbW1hbmRzIGhhdmUgYmVlbiBhZGRlZDogYE5DSV9QUk9QX0RVQUxfT1BUSU9OYCBhbmQgYE5DSV9QUk9QX0ZXX0NGR2AgaW4gYHMzZndybjVfbmNpX3Byb3Bfb3BzYC4gQnV0IHRoZXNlIGFyZSBqdXN0IHJlc3BvbnNlcyB0byBjb21tYW5kcyB0aGUgZHJpdmVyIHNlbmRzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nPyAgQ29uc2lkZXJpbmcgdGhlIGFkZGVkIGtlcm5lbCBmdW5jdGlvbmFsaXR5IChhIG5ldyBORkMgY29udHJvbGxlciB2YXJpYW50LCBpbml0aWFsaXphdGlvbiwgZmlybXdhcmUgbG9hZGluZywgY2xvY2sgaGFuZGxpbmcpLCBhbmQgdGhlIGZhY3QgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljICh0aGUgTkZDIGRyaXZlciksIG15IGFzc2Vzc21lbnQgaXMgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZXJlZm9yZSwgdGhlIGtleSB0YXJnZXRzIGZvciBmdXp6aW5nIGFyZTogYHMzZndybjVfbmNpX3NldHVwYCwgYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgLCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AsIGBzM2Z3cm41X2kyY19jbGtfc2V0YCwgYW5kIHRvIGEgbGVzc2VyIGV4dGVudCwgYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYC4KClRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBpbmNsdWRlIGBORkNfUzNGV1JONV9JMkNgLCBgTkZDX1MzRldSTjVgLCBgTkZDX05DSWAsIGFuZCBgSTJDYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZXNlIHNldHRpbmdzIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX1MzRldSTjUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnPTgzPUNPTkZJR19ORkNfU0hETEM9eVxuYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnOjg0OkNPTkZJR19ORkNfUzNGV1JONV9JMkM9eVxuYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnLTg1LUNPTkZJR19ERVZUTVBGUz15XG4tLVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc9MTczPUNPTkZJR19ORkNfU0hETEM9eVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MTc0OkNPTkZJR19ORkNfUzNGV1JONV9JMkM9bVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWctMTc1LUNPTkZJR19QQ0lFUE9SVEJVUz15XG4tLVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0yMDg9Q09ORklHX05GQ19OWFBfTkNJX0kyQz1tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjIwOTpDT05GSUdfTkZDX1MzRldSTjVfSTJDPW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMjEwLUNPTkZJR19QQ0k9eVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmM9NDg3PXN0YXRpYyBzdHJ1Y3QgZ3Bpb19kZXNjICpvZl9maW5kX2dwaW9fcmVuYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy01MjYtI2VuZGlmXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jOjUyNzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZDX1MzRldSTjVfSTJDKVxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy01MjgtXHRcdHsgXCYjMzQ7ZW5cJiMzNDssXHRcdFwmIzM0O3MzZndybjUsZW4tZ3Bpb3NcJiMzNDssXHRcJiMzNDtzYW1zdW5nLHMzZndybjUtaTJjXCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX05GQ19OWFBfTkNJKVx0JiM0Mzs9IG54cC1uY2kvXG5kcml2ZXJzL25mYy9NYWtlZmlsZToxODpvYmotJChDT05GSUdfTkZDX1MzRldSTjUpXHQmIzQzOz0gczNmd3JuNS9cbmRyaXZlcnMvbmZjL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVx0JiM0Mzs9IHN0OTVoZi9cbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoyOmNvbmZpZyBORkNfUzNGV1JONVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjEwOmNvbmZpZyBORkNfUzNGV1JONV9JMkNcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1NhbXN1bmcgUzNGV1JONSBJMkMgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEyLVx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBJMkNcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMzpcdHNlbGVjdCBORkNfUzNGV1JONVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTE0LVx0ZGVmYXVsdCBuXG4tLVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnPTIzPWNvbmZpZyBORkNfUzNGV1JOODJfVUFSVFxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0yNS0gICAgICAgIGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgU0VSSUFMX0RFVl9CVVNcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoyNjogICAgICAgIHNlbGVjdCBORkNfUzNGV1JONVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTI3LSAgICAgICAgaGVscFxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGU9OD1zM2Z3cm44Ml91YXJ0LW9ianMgPSB1YXJ0Lm9cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGUtOS1cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX05GQ19TM0ZXUk41KSAmIzQzOz0gczNmd3JuNS5vXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19ORkNfUzNGV1JONV9JMkMpICYjNDM7PSBzM2Z3cm41X2kyYy5vXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19ORkNfUzNGV1JOODJfVUFSVCkgJiM0Mzs9IHMzZndybjgyX3VhcnQub1xuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvcGh5X2NvbW1vbi5oLTEwLVxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg6MTE6I2lmbmRlZiBfX05GQ19TM0ZXUk41X1BIWV9DT01NT05fSFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg6MTI6I2RlZmluZSBfX05GQ19TM0ZXUk41X1BIWV9DT01NT05fSFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmgtMTMtXG4tLVxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg9MzY9ZW51bSBzM2Z3cm41X21vZGUgczNmd3JuNV9waHlfZ2V0X21vZGUodm9pZCAqcGh5X2lkKTtcbmRyaXZlcnMvbmZjL3MzZndybjUvcGh5X2NvbW1vbi5oLTM3LVxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg6Mzg6I2VuZGlmIC8qIF9fTkZDX1MzRldSTjVfUEhZX0NPTU1PTl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MTkKCQkJCQkJCW91dHB1dDogMjU2CgkJCQkJCQl0aG91Z2h0czogMzcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBORkMgQ29uZmlndXJhdGlvbiBhbmQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYE5GQ19TM0ZXUk41X0kyQ2AgYW5kIGBORkNfUzNGV1JONWAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBORkNfUzNGV1JONWAgaXMgc2VsZWN0ZWQgYnkgYE5GQ19TM0ZXUk41X0kyQ2AsIG1ha2luZyBgTkZDX1MzRldSTjVfSTJDYCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uLiBNYWtlcyBzZW5zZS4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGhhdmUgZXZlcnl0aGluZyBlbHNlIHdlIG5lZWQuIEFoLCB5ZXMsIGBORkNfTkNJYCBhbmQgYEkyQ2AgYXJlIGRlcGVuZGVuY2llcywgd2hpY2ggaXMgZXhwZWN0ZWQgZm9yIHRoaXMgdHlwZSBvZiBzZXR1cC4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGRyaXZlciBmdW5jdGlvbnMuIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9sczogYHMzZndybjVfbmNpX3NldHVwYCwgYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgLCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AsIGBzM2Z3cm41X2kyY19jbGtfc2V0YCwgYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYCwgYW5kIGBzM2Z3cm41X2kyY19wcm9iZWAg4oCTIGVzcGVjaWFsbHkgdGhlIGxhc3Qgb25lLCBhcyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gbW9kaWZpZWQuCgpJbmRlZWQsIHRoZSBtb2RpZmljYXRpb24gdG8gYHMzZndybjVfaTJjX3Byb2JlYCBpcyBrZXkuIEl0JiMzOTtzIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyBgY2xrLXJlcWAgR1BJTyBhbmQgY2xvY2sgZ2F0aW5nIOKAkyBhIHNpZ25pZmljYW50IGNoYW5nZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGZvciBhbnkgdGVzdGluZy4KCkFscmlnaHQsIHdoYXQgZWxzZSBpcyByZWxldmFudD8gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYHMzZndybjVgIGRyaXZlciwgd2hpY2ggaXMgYW4gTkZDIGRyaXZlci4gSXQmIzM5O3MgYWNjZXNzZWQgdGhyb3VnaCBJMkMgcHJvYmluZyBhbmQgdGhlIE5DSSBjb3JlLiBUaGUgYmlnIHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIGZ1enogdGhpcy4gVGhlIGFuc3dlciBpcyB5ZXMuIElmIHN5emthbGxlciBjYW4gc3VjY2Vzc2Z1bGx5IGluamVjdCBJMkMgZGV2aWNlcyBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgTkNJIGludGVyZmFjZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB2YXJpb3VzIGNvZGUgcGF0aHMgd2l0aGluIHRoZSBkcml2ZXIuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpUaW1lIHRvIHByZXBhcmUgdGhlIGZpbmFsIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkNfUzNGV1JONV9JMkMmIzM0OywKICAgICYjMzQ7TkZDX1MzRldSTjUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzM2Z3cm41X25jaV9zZXR1cCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9wb3N0X3NldHVwJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX2Nsa19jZmcmIzM0OywKICAgICYjMzQ7czNmd3JuNV9pMmNfY2xrX3NldCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X2kyY19wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgbmV3IHZhcmlhbnQgb2YgdGhlIFNhbXN1bmcgTkZDIGNvbnRyb2xsZXIgKFMzTlJONFYpIHRvIHRoZSBzM2Z3cm41IGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gbG9naWMsIGZpcm13YXJlIGxvYWRpbmcgdmlhIE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcywgYW5kIGNsb2NrIGhhbmRsaW5nIHZpYSBhIG5ldyBHUElPIGludGVycnVwdC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKE5GQyBkcml2ZXIpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgSTJDIGRldmljZSBwcm9iaW5nIGFuZCBOQ0kgY29yZSBpbnRlcmFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQ19TM0ZXUk41X0kyQyYjMzQ7LAogICAgJiMzNDtORkNfUzNGV1JONSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MzZndybjVfbmNpX3NldHVwJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX3Bvc3Rfc2V0dXAmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfY2xrX2NmZyYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X2kyY19jbGtfc2V0JiMzNDssCiAgICAmIzM0O3MzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkJiMzNDssCiAgICAmIzM0O3MzZndybjVfaTJjX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgdmFyaWFudCBvZiB0aGUgU2Ftc3VuZyBORkMgY29udHJvbGxlciAoUzNOUk40VikgdG8gdGhlIHMzZndybjUgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBsb2dpYywgZmlybXdhcmUgbG9hZGluZyB2aWEgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzLCBhbmQgY2xvY2sgaGFuZGxpbmcgdmlhIGEgbmV3IEdQSU8gaW50ZXJydXB0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoTkZDIGRyaXZlcikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBJMkMgZGV2aWNlIHByb2JpbmcgYW5kIE5DSSBjb3JlIGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDIwOjQ1OjA1Ljg0NzA3MTEyM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTMzOTU1Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ19TM0ZXUk41X0kyQ1wiLFxuICAgIFwiTkZDX1MzRldSTjVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzM2Z3cm41X25jaV9zZXR1cFwiLFxuICAgIFwiczNmd3JuNV9uY2lfcG9zdF9zZXR1cFwiLFxuICAgIFwiczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxcIixcbiAgICBcInMzZndybjVfbmNpX2Nsa19jZmdcIixcbiAgICBcInMzZndybjVfaTJjX2Nsa19zZXRcIixcbiAgICBcInMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkXCIsXG4gICAgXCJzM2Z3cm41X2kyY19wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgdmFyaWFudCBvZiB0aGUgU2Ftc3VuZyBORkMgY29udHJvbGxlciAoUzNOUk40VikgdG8gdGhlIHMzZndybjUgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBsb2dpYywgZmlybXdhcmUgbG9hZGluZyB2aWEgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzLCBhbmQgY2xvY2sgaGFuZGxpbmcgdmlhIGEgbmV3IEdQSU8gaW50ZXJydXB0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoTkZDIGRyaXZlcikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBJMkMgZGV2aWNlIHByb2JpbmcgYW5kIE5DSSBjb3JlIGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMjA6NDU6MDUuODQ3MDc3MzIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU0MjY4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZmViMWFhNDc1YmYwNTQ2ZGI4OGE0NTgyMTk4MjQ3ZmFlMWYzMjExXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMjA6NDU6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxcbmluZGV4IDEyYmFlZTQ1NzUyYzdiLi4zZWJjZDA5MzM5YjgxZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXFxuQEAgLTE0LDEyICsxNCwyMCBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgZW51bTpcXG4gICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXFxuICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm44MlxcbisgICAgICAtIHNhbXN1bmcsczNucm40di1pMmNcXG4gXFxuICAgZW4tZ3Bpb3M6XFxuICAgICBtYXhJdGVtczogMVxcbiAgICAgZGVzY3JpcHRpb246XFxuICAgICAgIE91dHB1dCBHUElPIHBpbiB1c2VkIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGNoaXBcXG4gXFxuKyAgY2xrLXJlcS1ncGlvczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgSW5wdXQgR1BJTyBwaW4gY29ubmVjdGVkIHRvIHRoZSBjb250cm9sbGVyJ3MgY2xvY2stcmVxdWVzdCBvdXRwdXQuIFdoZW5cXG4rICAgICAgcHJlc2VudCwgdGhlIHJlZmVyZW5jZSBjbG9jayBpcyBlbmFibGVkIGluIHJlc3BvbnNlIHRvIHRoaXMgc2lnbmFsXFxuKyAgICAgIGluc3RlYWQgb2YgYmVpbmcgbGVmdCBhbHdheXMtb24uXFxuK1xcbiAgIGludGVycnVwdHM6XFxuICAgICBtYXhJdGVtczogMVxcbiBcXG5AQCAtNTgsMTIgKzY2LDI1IEBAIGFsbE9mOlxcbiAgICAgICBwcm9wZXJ0aWVzOlxcbiAgICAgICAgIGNvbXBhdGlibGU6XFxuICAgICAgICAgICBjb250YWluczpcXG4tICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNmd3JuNS1pMmNcXG4rICAgICAgICAgICAgZW51bTpcXG4rICAgICAgICAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmNcXG4rICAgICAgICAgICAgICAtIHNhbXN1bmcsczNucm40di1pMmNcXG4gICAgIHRoZW46XFxuICAgICAgIHJlcXVpcmVkOlxcbiAgICAgICAgIC0gaW50ZXJydXB0c1xcbiAgICAgICAgIC0gcmVnXFxuIFxcbisgICMgVGhlIGNsb2NrLXJlcXVlc3QgaGFuZHNoYWtlIG9ubHkgZXhpc3RzIG9uIHRoZSBTM05STjRWLlxcbisgIC0gaWY6XFxuKyAgICAgIG5vdDpcXG4rICAgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgICAgY29udGFpbnM6XFxuKyAgICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNucm40di1pMmNcXG4rICAgIHRoZW46XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY2xrLXJlcS1ncGlvczogZmFsc2VcXG4rXFxuIGV4YW1wbGVzOlxcbiAgIC0gfFxcbiAgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXFxuaW5kZXggYWYwZmE4YmQ5NzBiNGYuLjU5MzE3ZWFhZDdhYzk4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXFxuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcXG5AQCAtMTIyLDExICsxMjIsNDcgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9zZW5kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBzM2Z3cm41X25jaV9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUnVucyBhZnRlciBDT1JFX1JFU0VULCBiZWZvcmUgQ09SRV9JTklULiBUaGUgUzNOUk40ViBuZWVkcyBpdHNcXG4rXFx0ICogcmVmZXJlbmNlIGNsb2NrIGNvbmZpZ3VyZWQgaGVyZSAodGhlIGRvd25zdHJlYW0gc3RhY2sgZG9lcyBpdCBpbiB0aGVcXG4rXFx0ICogYm9vdGxvYWRlciwgYmVmb3JlIENPUkVfUkVTRVQsIGJ1dCB0aGlzIGlzIHRoZSBlYXJsaWVzdCBob29rIHRoZSBOQ0lcXG4rXFx0ICogY29yZSBvZmZlcnMgYW5kIHRoZSBjaGlwIGFjY2VwdHMgaXQpLlxcbitcXHQgKi9cXG4rXFx0aWYgKGluZm8tXFx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpXFxuK1xcdFxcdHJldHVybiBzM2Z3cm41X25jaV9jbGtfY2ZnKGluZm8pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIFMzTlJONFYgc2hpcHMgd2l0aCB3b3JraW5nIGZpcm13YXJlIGJlaGluZCBhIGJvb3Rsb2FkZXJcXG4rXFx0XFx0ICogcHJvdG9jb2wgdGhpcyBkcml2ZXIgZG9lcyBub3QgaW1wbGVtZW50LCBzbyB0aGVyZSBpcyBub1xcbitcXHRcXHQgKiBkb3dubG9hZCBzdGVwOyB0aGUgTkNJIGNvcmUgaGFzIGFscmVhZHkgZG9uZSBDT1JFX1JFU0VUICtcXG4rXFx0XFx0ICogQ09SRV9JTklULiBKdXN0IChyZSlsb2FkIHRoZSBSRiByZWdpc3RlcnMgdmlhIERVQUxfT1BUSU9OLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0gczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoaW5mbywgXFxcInNlY19zM25ybjR2X2h3cmVnLmJpblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwic2VjX3MzbnJuNHZfc3dyZWcuYmluXFxcIik7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEtlZXAgZ29pbmcgZXZlbiBpZiB0aGUgYmxvYnMgY291bGQgbm90IGJlIGxvYWRlZDogdGhlIGNoaXBcXG4rXFx0XFx0ICogc3RpbGwgZW51bWVyYXRlcyBhbmQgZmFsbHMgYmFjayB0byB0aGUgUkYgcmVnaXN0ZXJzIHByb2dyYW1tZWRcXG4rXFx0XFx0ICogaW4gaXRzIGZsYXNoLCBzbyBORkMgbWF5IHdvcmsgYW55d2F5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwicmZyZWcgY29uZmlndXJlIGZhaWxlZCAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHMzZndybjVfZmlybXdhcmVfaW5pdChpbmZvKSkge1xcbiBcXHRcXHQvL3NraXAgYm9vdGxvYWRlciBtb2RlXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNTIsMTMgKzE4OCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0ge1xcbiBcXHQub3BlbiA9IHMzZndybjVfbmNpX29wZW4sXFxuIFxcdC5jbG9zZSA9IHMzZndybjVfbmNpX2Nsb3NlLFxcbiBcXHQuc2VuZCA9IHMzZndybjVfbmNpX3NlbmQsXFxuK1xcdC5zZXR1cCA9IHMzZndybjVfbmNpX3NldHVwLFxcbiBcXHQucG9zdF9zZXR1cCA9IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAsXFxuIFxcdC5wcm9wX29wcyA9IHMzZndybjVfbmNpX3Byb3Bfb3BzLFxcbiBcXHQubl9wcm9wX29wcyA9IEFSUkFZX1NJWkUoczNmd3JuNV9uY2lfcHJvcF9vcHMpLFxcbiB9O1xcbiBcXG4gaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsXFxuLVxcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpXFxuK1xcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpXFxuIHtcXG4gXFx0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbztcXG4gXFx0aW50IHJldDtcXG5AQCAtMTcwLDYgKzIwNyw3IEBAIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxcbiBcXHRpbmZvLVxcdTAwM2VwaHlfaWQgPSBwaHlfaWQ7XFxuIFxcdGluZm8tXFx1MDAzZXBkZXYgPSBwZGV2O1xcbiBcXHRpbmZvLVxcdTAwM2VwaHlfb3BzID0gcGh5X29wcztcXG4rXFx0aW5mby1cXHUwMDNldmFyaWFudCA9IHZhcmlhbnQ7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZW11dGV4KTtcXG4gXFxuIFxcdHMzZndybjVfc2V0X21vZGUoaW5mbywgUzNGV1JONV9NT0RFX0NPTEQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xcbmluZGV4IGU5YTM0ZDI3YTM2OTg0Li44OGE0OTg4NzkxZWZkOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXFxuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xcbkBAIC0yMyw5ICsyMyw1MyBAQCBzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5IHtcXG4gXFx0c3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7XFxuIFxcdHN0cnVjdCBjbGsgKmNsaztcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE9wdGlvbmFsIGhhcmR3YXJlIGNsb2NrLXJlcXVlc3QgaGFuZHNoYWtlLiBXaGVuIGEgQ0xLX1JFUSBHUElPIGlzXFxuK1xcdCAqIHdpcmVkLCB0aGUgY2hpcCBkcml2ZXMgaXQgaGlnaCB3aGlsZSBpdCBuZWVkcyBpdHMgWEkgY2xvY2sgLS0gbm90YWJseVxcbitcXHQgKiB0byBnZW5lcmF0ZSB0aGUgcG9sbC9yZWFkZXIgY2FycmllciAtLSBhbmQgdGhlIGNsb2NrIGlzIGdhdGVkIG9uIGl0XFxuK1xcdCAqIGluc3RlYWQgb2YgYmVpbmcgbGVmdCBhbHdheXMtb24gKHdoaWNoIG5ldmVyIGxldHMgdGhlIGNoaXAncyBUWCBQTExcXG4rXFx0ICogbG9jayBvbiBhIGZyZXNoIGNsb2NrIHN0YXJ0LCBsZWF2aW5nIGl0IHVuYWJsZSB0byBwb2xsKS5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fY2xrX3JlcTtcXG4rXFx0Ym9vbCBjbGtfb247XFxuK1xcdHN0cnVjdCBtdXRleCBjbGtfbG9jaztcXHQvKiBzZXJpYWxpc2VzIGNsa19vbiBhZ2FpbnN0IHRoZSBDTEtfUkVRIGlycSAqL1xcbitcXG4gXFx0dW5zaWduZWQgaW50IGlycV9za2lwOjE7XFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19jbGtfc2V0KHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeSwgYm9vbCBvbilcXG4re1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwaHktXFx1MDAzZWNsa19sb2NrKTtcXG4rXFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2ICFwaHktXFx1MDAzZWNsa19vbikge1xcbitcXHRcXHRpbnQgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBoeS1cXHUwMDNlY2xrKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQgPT0gMClcXG4rXFx0XFx0XFx0cGh5LVxcdTAwM2VjbGtfb24gPSB0cnVlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGRldl93YXJuX29uY2UoXFx1MDAyNnBoeS1cXHUwMDNlaTJjX2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBcXFwiZmFpbGVkIHRvIGVuYWJsZSBjbG9jayAoJWQpOyBORkMgbWF5IG5vdCBwb2xsXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICByZXQpO1xcbitcXHR9IGVsc2UgaWYgKCFvbiBcXHUwMDI2XFx1MDAyNiBwaHktXFx1MDAzZWNsa19vbikge1xcbitcXHRcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LVxcdTAwM2VjbGspO1xcbitcXHRcXHRwaHktXFx1MDAzZWNsa19vbiA9IGZhbHNlO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cGh5LVxcdTAwM2VjbGtfbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHMzZndybjVfaTJjX2Nsa19kaXNhYmxlX2FjdGlvbih2b2lkICpkYXRhKVxcbit7XFxuK1xcdHMzZndybjVfaTJjX2Nsa19zZXQoZGF0YSwgZmFsc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWQoaW50IGlycSwgdm9pZCAqcGh5X2lkKVxcbit7XFxuK1xcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeSA9IHBoeV9pZDtcXG4rXFxuK1xcdHMzZndybjVfaTJjX2Nsa19zZXQocGh5LCBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAocGh5LVxcdTAwM2VncGlvX2Nsa19yZXEpIFxcdTAwM2UgMCk7XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHMzZndybjVfaTJjX3NldF9tb2RlKHZvaWQgKnBoeV9pZCwgZW51bSBzM2Z3cm41X21vZGUgbW9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHkgPSBwaHlfaWQ7XFxuQEAgLTE0Niw2ICsxOTAsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpwaHlfaWQpXFxuIFxcbiBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuIHtcXG4rXFx0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcXG4gXFx0c3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtMTcyLDE1ICsyMTcsNjMgQEAgc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbiBcXHQgKiBTM0ZXUk41IGRlcGVuZHMgb24gYSBjbG9jayBpbnB1dCAoXFxcIlhJXFxcIiBwaW4pIHRvIGZ1bmN0aW9uIHByb3Blcmx5LlxcbiBcXHQgKiBEZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gdGhpcyBjb3VsZCBiZSBhbiBhbHdheXMtb25cXG4gXFx0ICogb3NjaWxsYXRvciBvciBzb21lIGV4dGVybmFsIGNsb2NrIHRoYXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQuXFxuLVxcdCAqIE1ha2Ugc3VyZSB0aGUgY2xvY2sgaXMgcnVubmluZyBiZWZvcmUgc3RhcnRpbmcgUzNGV1JONS5cXG4rXFx0ICpcXG4rXFx0ICogSWYgYSBDTEtfUkVRIEdQSU8gaXMgd2lyZWQsIHRoZSBjaGlwIGdhdGVzIHRoZSBjbG9jayBpdHNlbGYgKGRyaXZpbmdcXG4rXFx0ICogQ0xLX1JFUSBoaWdoIHdoZW4gaXQgbmVlZHMgWEkpOyBzZXJ2aWNlIHRoYXQgaGFuZHNoYWtlLiBPdGhlcndpc2UganVzdFxcbitcXHQgKiBtYWtlIHN1cmUgdGhlIGNsb2NrIGlzIHJ1bm5pbmcgYmVmb3JlIHN0YXJ0aW5nIFMzRldSTjUuXFxuIFxcdCAqL1xcbi1cXHRwaHktXFx1MDAzZWNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgTlVMTCk7XFxuLVxcdGlmIChJU19FUlIocGh5LVxcdTAwM2VjbGspKVxcbi1cXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIFBUUl9FUlIocGh5LVxcdTAwM2VjbGspLFxcbi1cXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGNsb2NrXFxcXG5cXFwiKTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cGh5LVxcdTAwM2VjbGtfbG9jayk7XFxuK1xcdHBoeS1cXHUwMDNlZ3Bpb19jbGtfcmVxID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBcXFwiY2xrLXJlcVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBHUElPRF9JTik7XFxuK1xcdGlmIChJU19FUlIocGh5LVxcdTAwM2VncGlvX2Nsa19yZXEpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwaHktXFx1MDAzZWdwaW9fY2xrX3JlcSk7XFxuK1xcbitcXHRpZiAocGh5LVxcdTAwM2VncGlvX2Nsa19yZXEpIHtcXG4rXFx0XFx0aW50IGNsa19yZXFfaXJxO1xcbitcXG4rXFx0XFx0cGh5LVxcdTAwM2VjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBOVUxMKTtcXG4rXFx0XFx0aWYgKElTX0VSUihwaHktXFx1MDAzZWNsaykpXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgUFRSX0VSUihwaHktXFx1MDAzZWNsayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVW5saWtlIHRoZSBhbHdheXMtb24gYnJhbmNoIGJlbG93LCB0aGlzIGNsb2NrIGlzIGVuYWJsZWQgYnlcXG4rXFx0XFx0ICogaGFuZCBmcm9tIHRoZSBDTEtfUkVRIGhhbmRsZXIsIHNvIGRldm0gd2lsbCBub3QgZGlzYWJsZSBpdCBvblxcbitcXHRcXHQgKiB1bmJpbmQuIEdhdGUgaXQgb2ZmIGV4cGxpY2l0bHkgaWYgaXQgaXMgc3RpbGwgb24gYXQgdGVhcmRvd24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgczNmd3JuNV9pMmNfY2xrX2Rpc2FibGVfYWN0aW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcGh5KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdGNsa19yZXFfaXJxID0gZ3Bpb2RfdG9faXJxKHBoeS1cXHUwMDNlZ3Bpb19jbGtfcmVxKTtcXG4rXFx0XFx0aWYgKGNsa19yZXFfaXJxIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIGNsa19yZXFfaXJxO1xcbitcXG4rXFx0XFx0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIGNsa19yZXFfaXJxLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0SVJRRl9UUklHR0VSX1JJU0lORyB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdElSUUZfVFJJR0dFUl9GQUxMSU5HIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0SVJRRl9PTkVTSE9ULFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXFwiczNmd3JuNV9jbGtfcmVxXFxcIiwgcGh5KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIFNlZWQgdGhlIGNsb2NrIHN0YXRlIGZyb20gdGhlIGN1cnJlbnQgQ0xLX1JFUSBsZXZlbC4gKi9cXG4rXFx0XFx0czNmd3JuNV9pMmNfY2xrX3NldChwaHksXFxuK1xcdFxcdFxcdFxcdCAgICBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAocGh5LVxcdTAwM2VncGlvX2Nsa19yZXEpIFxcdTAwM2UgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBoeS1cXHUwMDNlY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBOVUxMKTtcXG4rXFx0XFx0aWYgKElTX0VSUihwaHktXFx1MDAzZWNsaykpXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgUFRSX0VSUihwaHktXFx1MDAzZWNsayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgY2xvY2tcXFxcblxcXCIpO1xcbitcXHR9XFxuIFxcbitcXHQvKiBObyBtYXRjaCBkYXRhIChlLmcuIGkyY19kZXZpY2VfaWQgYmluZGluZykgbWVhbnMgdGhlIGRlZmF1bHQgRldETC4gKi9cXG4rXFx0dmFyaWFudCA9ICh1aW50cHRyX3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7XFxuIFxcdHJldCA9IHMzZndybjVfcHJvYmUoXFx1MDAyNnBoeS1cXHUwMDNlY29tbW9uLm5kZXYsIHBoeSwgXFx1MDAyNnBoeS1cXHUwMDNlaTJjX2Rldi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNmkyY19waHlfb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZpMmNfcGh5X29wcywgdmFyaWFudCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjEwLDggKzMwMywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgczNmd3JuNV9pMmNfaWRfdGFibGVbXSA9IHtcXG4gfTtcXG4gTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHMzZndybjVfaTJjX2lkX3RhYmxlKTtcXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gX19tYXliZV91bnVzZWQgPSB7XFxuLVxcdHsgLmNvbXBhdGlibGUgPSBcXFwic2Ftc3VuZyxzM2Z3cm41LWkyY1xcXCIsIH0sXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwic2Ftc3VuZyxzM2Z3cm41LWkyY1xcXCIsXFxuK1xcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9GV0RMLCB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInNhbXN1bmcsczNucm40di1pMmNcXFwiLFxcbitcXHQgIC5kYXRhID0gKHZvaWQgKilTM0ZXUk41X1ZBUklBTlRfUzNOUk40ViwgfSxcXG4gXFx0e31cXG4gfTtcXG4gTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfczNmd3JuNV9pMmNfbWF0Y2gpO1xcbkBAIC0yMTksNyArMzE1LDcgQEAgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfczNmd3JuNV9pMmNfbWF0Y2gpO1xcbiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgczNmd3JuNV9pMmNfZHJpdmVyID0ge1xcbiBcXHQuZHJpdmVyID0ge1xcbiBcXHRcXHQubmFtZSA9IFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLFxcbi1cXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfczNmd3JuNV9pMmNfbWF0Y2gpLFxcbitcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9zM2Z3cm41X2kyY19tYXRjaCxcXG4gXFx0fSxcXG4gXFx0LnByb2JlID0gczNmd3JuNV9pMmNfcHJvYmUsXFxuIFxcdC5yZW1vdmUgPSBzM2Z3cm41X2kyY19yZW1vdmUsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXFxuaW5kZXggNWE5ZGUxMWJiZWNlYTQuLjA0ZjRjMzYyNjkxZTNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXFxuQEAgLTgsNiArOCw5IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGxldGlvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pbm1heC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiczNmd3JuNS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibmNpLmhcXFwiXFxuQEAgLTIwLDcgKzIzLDcgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wcm9wX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcXG4rY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcXG4gXFx0XFx0XFx0XFx0TkNJX1BST1BfU0VUX1JGUkVHKSxcXG5AQCAtNDEsNiArNDQsMTEgQEAgY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdID0ge1xcbiBcXHRcXHRcXHRcXHROQ0lfUFJPUF9GV19DRkcpLFxcbiBcXHRcXHQucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0Lm9wY29kZSA9IG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1BST1BSSUVUQVJZLFxcbitcXHRcXHRcXHRcXHROQ0lfUFJPUF9EVUFMX09QVElPTiksXFxuK1xcdFxcdC5yc3AgPSBzM2Z3cm41X25jaV9wcm9wX3JzcCxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXFxuQEAgLTExNywzICsxMjUsMTA0IEBAIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSlcXG4gXFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rXFxuKy8qXFxuKyAqIENvbmZpZ3VyZSB0aGUgcmVmZXJlbmNlIGNsb2NrLiBUaGUgUzNOUk40ViBleHBlY3RzIHRoZSBzaW5nbGUtYnl0ZSBGV19DRkdcXG4rICogZm9ybSAoanVzdCB0aGUgY2xvY2stc3BlZWQgc2VsZWN0b3IpLiBUaGUgZG93bnN0cmVhbSBzdGFjayBzZW5kcyB0aGlzIGluIHRoZVxcbisgKiBib290bG9hZGVyIGJlZm9yZSBDT1JFX1JFU0VUOyB0aGUgZWFybGllc3QgdGhlIG1haW5saW5lIE5DSSBjb3JlIGxldHMgdXMgaW5cXG4rICogaXMgdGhlIC1cXHUwMDNlc2V0dXAgaG9vayAoYWZ0ZXIgQ09SRV9SRVNFVCwgYmVmb3JlIENPUkVfSU5JVCksIHdoaWNoIHdvcmtzLlxcbisgKi9cXG4raW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcXG4re1xcbitcXHR1OCBjbGtfc3BlZWQgPSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEO1xcbitcXG4rXFx0cmV0dXJuIG5jaV9wcm9wX2NtZChpbmZvLVxcdTAwM2VuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsIFxcdTAwMjZjbGtfc3BlZWQpO1xcbit9XFxuK1xcbisvKlxcbisgKiBTM05STjRWIFJGIHJlZ2lzdGVyIHVwZGF0ZS4gVGhlIEhXIGFuZCBTVyByZWdpc3RlciBibG9icyBhcmUgbWVyZ2VkIGludG8gYVxcbisgKiBzaW5nbGUgc3RyZWFtIChIVyBmaXJzdCkgYW5kIHB1c2hlZCB2aWEgdGhlIERVQUxfT1BUSU9OIGNvbW1hbmQ6XFxuKyAqIFNUQVJUX1VQREFURSwgb25lIFNFVF9PUFRJT04gcGVyIDI1Mi1ieXRlIHNlY3Rpb24sIHRoZW4gU1RPUF9VUERBVEUgY2FycnlpbmdcXG4rICogYSAxNi1iaXQgY2hlY2tzdW0gKHJ1bm5pbmcgc3VtIG9mIHRoZSBtZXJnZWQgc3RyZWFtIGFzIDMyLWJpdCB3b3JkcykuXFxuKyAqL1xcbitpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaHdfZncgPSBOVUxMLCAqc3dfZncgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCBzZXRfb3B0aW9uO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2aW5mby1cXHUwMDNlbmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2O1xcbitcXHRzaXplX3QgbWVyZ2VkX3NpemUsIGksIGxlbjtcXG4rXFx0dTggKm1lcmdlZCA9IE5VTEw7XFxuK1xcdHU4IHN0b3BfY21kWzNdO1xcbitcXHR1MzIgY2hlY2tzdW07XFxuK1xcdHU4IHN1Yl9vaWQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFxcdTAwMjZod19mdywgaHdfbmFtZSwgZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNnN3X2Z3LCBzd19uYW1lLCBkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXRfaHc7XFxuK1xcbitcXHRtZXJnZWRfc2l6ZSA9IGh3X2Z3LVxcdTAwM2VzaXplICsgc3dfZnctXFx1MDAzZXNpemU7XFxuK1xcdG1lcmdlZCA9IGttYWxsb2MobWVyZ2VkX3NpemUsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIW1lcmdlZCkge1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRtZW1jcHkobWVyZ2VkLCBod19mdy1cXHUwMDNlZGF0YSwgaHdfZnctXFx1MDAzZXNpemUpO1xcbitcXHRtZW1jcHkobWVyZ2VkICsgaHdfZnctXFx1MDAzZXNpemUsIHN3X2Z3LVxcdTAwM2VkYXRhLCBzd19mdy1cXHUwMDNlc2l6ZSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSdW5uaW5nIHN1bSBvZiB0aGUgbWVyZ2VkIHN0cmVhbSBhcyBsaXR0bGUtZW5kaWFuIDMyLWJpdCB3b3Jkcy4gVGhlXFxuK1xcdCAqIHJmcmVnIGJsb2JzIGFyZSB3b3JkLWFsaWduZWQsIHNvIHRoZSBsb29wIGNvbnN1bWVzIHRoZSB3aG9sZSBzdHJlYW07XFxuK1xcdCAqIHNob3VsZCBhIGZ1dHVyZSBibG9iIG5vdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgaXRzIHRhaWwgd291bGQgYmVcXG4rXFx0ICogaWdub3JlZCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0Y2hlY2tzdW0gPSAwO1xcbitcXHRmb3IgKGkgPSAwOyBpICsgNCBcXHUwMDNjPSBtZXJnZWRfc2l6ZTsgaSArPSA0KVxcbitcXHRcXHRjaGVja3N1bSArPSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICsgaSk7XFxuK1xcbitcXHRkZXZfZGJnKGRldiwgXFxcInJmcmVnIGR1YWwtb3B0aW9uIHVwZGF0ZTogJXMgKyAlc1xcXFxuXFxcIiwgaHdfbmFtZSwgc3dfbmFtZSk7XFxuK1xcbitcXHQvKiBTVEFSVF9VUERBVEUgKi9cXG4rXFx0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURTtcXG4rXFx0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXFx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcXHUwMDI2c3ViX29pZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW5hYmxlIHRvIHN0YXJ0IHJmcmVnIHVwZGF0ZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBTRVRfT1BUSU9OIHBlciBzZWN0aW9uICovXFxuK1xcdHNldF9vcHRpb24uc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT047XFxuK1xcdHNldF9vcHRpb24uaW5kZXggPSAwO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWVyZ2VkX3NpemU7IGkgKz0gTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpIHtcXG4rXFx0XFx0bGVuID0gbWluX3Qoc2l6ZV90LCBtZXJnZWRfc2l6ZSAtIGksIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKTtcXG4rXFx0XFx0bWVtY3B5KHNldF9vcHRpb24uZGF0YSwgbWVyZ2VkICsgaSwgbGVuKTtcXG4rXFx0XFx0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXFx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLFxcbitcXHRcXHRcXHRcXHQgICBsZW4gKyAyLCAoX191OCAqKVxcdTAwMjZzZXRfb3B0aW9uKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJyZnJlZyB1cGRhdGUgZXJyb3IgKGNvZGU9JWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzZXRfb3B0aW9uLmluZGV4Kys7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi9cXG4rXFx0c3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTtcXG4rXFx0cHV0X3VuYWxpZ25lZF9sZTE2KGNoZWNrc3VtLCBcXHUwMDI2c3RvcF9jbWRbMV0pO1xcbitcXHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDMsIHN0b3BfY21kKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJVbmFibGUgdG8gc3RvcCByZnJlZyB1cGRhdGVcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2X2RiZyhkZXYsIFxcXCJyZnJlZyBkdWFsLW9wdGlvbiB1cGRhdGU6IHN1Y2Nlc3NcXFxcblxcXCIpO1xcbitvdXQ6XFxuK1xcdGtmcmVlKG1lcmdlZCk7XFxuK1xcdHJlbGVhc2VfZmlybXdhcmUoc3dfZncpO1xcbitvdXRfaHc6XFxuK1xcdHJlbGVhc2VfZmlybXdhcmUoaHdfZncpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXFxuaW5kZXggYmM0YmNlMmJiYzRkOTMuLjIzMTc5YmEwOTVhMWI0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXFxuQEAgLTQwLDYgKzQwLDEzIEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7XFxuIFxcbiAjZGVmaW5lIE5DSV9QUk9QX0ZXX0NGR1xcdFxcdDB4MjhcXG4gXFxuKy8qXFxuKyAqIFNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkIChjbG9jay1zcGVlZCBzZWxlY3RvcikgZm9yIHRoZSBTM05STjRWIHJlZmVyZW5jZVxcbisgKiBjbG9jay4gVGFrZW4gZnJvbSB0aGUgdmVuZG9yIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcGFydCAodGhlIGVuY29kaW5nIGlzXFxuKyAqIG5vdCBkb2N1bWVudGVkKS5cXG4rICovXFxuKyNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHX0NMS19TUEVFRFxcdDB4MTFcXG4rXFxuIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfY21kIHtcXG4gXFx0X191OCBjbGtfdHlwZTtcXG4gXFx0X191OCBjbGtfc3BlZWQ7XFxuQEAgLTUwLDcgKzU3LDMwIEBAIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfcnNwIHtcXG4gXFx0X191OCBzdGF0dXM7XFxuIH07XFxuIFxcbi1leHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdO1xcbisvKlxcbisgKiBUaGUgUzNOUk40ViB1cGRhdGVzIGl0cyBSRiByZWdpc3RlcnMgdGhyb3VnaCBhIHNpbmdsZSBcXFwiZHVhbCBvcHRpb25cXFwiIGNvbW1hbmRcXG4rICogKGEgc3ViLU9JRCBzZWxlY3RzIHRoZSBvcGVyYXRpb24pIGluc3RlYWQgb2YgdGhlIFNUQVJUL1NFVC9TVE9QX1JGUkVHXFxuKyAqIG9wY29kZXMgYWJvdmUsIGFuZCBleHBlY3RzIHRoZSBIVyBhbmQgU1cgcmVnaXN0ZXIgYmxvYnMgbWVyZ2VkIGludG8gb25lXFxuKyAqIHN0cmVhbS5cXG4rICovXFxuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9PUFRJT05cXHRcXHQweDJhXFxuK1xcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURVxcdDB4MDFcXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OXFx0MHgwMlxcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFXFx0MHgwM1xcbitcXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRVxcdDI1MlxcbitcXG4rc3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQge1xcbitcXHRfX3U4IHN1Yl9vaWQ7XFx0LyogTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTiAqL1xcbitcXHRfX3U4IGluZGV4O1xcbitcXHRfX3U4IGRhdGFbTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkVdO1xcbit9O1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s1XTtcXG4gaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKTtcXG4raW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7XFxuK2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pO1xcbiBcXG4gI2VuZGlmIC8qIF9fTE9DQUxfUzNGV1JONV9OQ0lfSF8gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxcbmluZGV4IDJiNDkyMjM2MDkwYjg1Li4yZDhjMTIwOTFmYmE1NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXFxuQEAgLTIxLDYgKzIxLDE3IEBAIGVudW0gczNmd3JuNV9tb2RlIHtcXG4gXFx0UzNGV1JONV9NT0RFX0ZXLFxcbiB9O1xcbiBcXG4rZW51bSBzM2Z3cm41X3ZhcmlhbnQge1xcbitcXHQvKiBTM0ZXUk41IC8gUzNGV1JOODI6IGZpcm13YXJlIGlzIGRvd25sb2FkZWQgYnkgdGhpcyBkcml2ZXIgKi9cXG4rXFx0UzNGV1JONV9WQVJJQU5UX0ZXREwsXFxuK1xcdC8qXFxuK1xcdCAqIFMzTlJONFY6IHNoaXBzIHdpdGggd29ya2luZyBmaXJtd2FyZSBiZWhpbmQgYSBib290bG9hZGVyIHByb3RvY29sXFxuK1xcdCAqIHRoaXMgZHJpdmVyIGRvZXMgbm90IGltcGxlbWVudDsgc2tpcCB0aGUgZG93bmxvYWQsIGNvbmZpZ3VyZSB0aGVcXG4rXFx0ICogY2xvY2sgKEZXX0NGRykgYW5kIHVwZGF0ZSB0aGUgUkYgcmVnaXN0ZXJzIHZpYSB0aGUgRFVBTF9PUFRJT04gY21kLlxcbitcXHQgKi9cXG4rXFx0UzNGV1JONV9WQVJJQU5UX1MzTlJONFYsXFxuK307XFxuK1xcbiBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzIHtcXG4gXFx0dm9pZCAoKnNldF93YWtlKSh2b2lkICppZCwgYm9vbCBzbGVlcCk7XFxuIFxcdHZvaWQgKCpzZXRfbW9kZSkodm9pZCAqaWQsIGVudW0gczNmd3JuNV9tb2RlKTtcXG5AQCAtMzYsNiArNDcsNyBAQCBzdHJ1Y3QgczNmd3JuNV9pbmZvIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcztcXG4gXFxuIFxcdHN0cnVjdCBzM2Z3cm41X2Z3X2luZm8gZndfaW5mbztcXG4rXFx0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcXG4gXFxuIFxcdHN0cnVjdCBtdXRleCBtdXRleDtcXG4gfTtcXG5AQCAtNzgsNyArOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXFxuIH1cXG4gXFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxcbi1cXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7XFxuIHZvaWQgczNmd3JuNV9yZW1vdmUoc3RydWN0IG5jaV9kZXYgKm5kZXYpO1xcbiBcXG4gaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xcbmluZGV4IDU0MGE0ZGRiMGIwNWU5Li40NzE3MmQ3MzlhNDFmNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXFxuQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgaW50IHMzZndybjgyX3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gczNmd3JuNV9wcm9iZShcXHUwMDI2cGh5LVxcdTAwM2Vjb21tb24ubmRldiwgcGh5LCBcXHUwMDI2cGh5LVxcdTAwM2VzZXJfZGV2LVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2dWFydF9waHlfb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZ1YXJ0X3BoeV9vcHMsIFMzRldSTjVfVkFSSUFOVF9GV0RMKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX3NlcmRldjtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDIwOjQ1OjA2LjM0MzI2NzM3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0Mzc3NTAwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDX1MzRldSTjVfSTJDXCIsXG4gICAgXCJORkNfUzNGV1JONVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInMzZndybjVfbmNpX3NldHVwXCIsXG4gICAgXCJzM2Z3cm41X25jaV9wb3N0X3NldHVwXCIsXG4gICAgXCJzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbFwiLFxuICAgIFwiczNmd3JuNV9uY2lfY2xrX2NmZ1wiLFxuICAgIFwiczNmd3JuNV9pMmNfY2xrX3NldFwiLFxuICAgIFwiczNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWRcIixcbiAgICBcInMzZndybjVfaTJjX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIG5ldyB2YXJpYW50IG9mIHRoZSBTYW1zdW5nIE5GQyBjb250cm9sbGVyIChTM05STjRWKSB0byB0aGUgczNmd3JuNSBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBmaXJtd2FyZSBsb2FkaW5nIHZpYSBOQ0kgcHJvcHJpZXRhcnkgY29tbWFuZHMsIGFuZCBjbG9jayBoYW5kbGluZyB2aWEgYSBuZXcgR1BJTyBpbnRlcnJ1cHQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChORkMgZHJpdmVyKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIEkyQyBkZXZpY2UgcHJvYmluZyBhbmQgTkNJIGNvcmUgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFmZWIxYWE0NzViZjA1NDZkYjg4YTQ1ODIxOTgyNDdmYWUxZjMyMTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDIwOjQ1OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxuaW5kZXggMTJiYWVlNDU3NTJjN2IuLjNlYmNkMDkzMzliODFlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXG5AQCAtMTQsMTIgKzE0LDIwIEBAIHByb3BlcnRpZXM6XG4gICAgIGVudW06XG4gICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXG4gICAgICAgLSBzYW1zdW5nLHMzZndybjgyXG4rICAgICAgLSBzYW1zdW5nLHMzbnJuNHYtaTJjXG4gXG4gICBlbi1ncGlvczpcbiAgICAgbWF4SXRlbXM6IDFcbiAgICAgZGVzY3JpcHRpb246XG4gICAgICAgT3V0cHV0IEdQSU8gcGluIHVzZWQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgY2hpcFxuIFxuKyAgY2xrLXJlcS1ncGlvczpcbisgICAgbWF4SXRlbXM6IDFcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgSW5wdXQgR1BJTyBwaW4gY29ubmVjdGVkIHRvIHRoZSBjb250cm9sbGVyJ3MgY2xvY2stcmVxdWVzdCBvdXRwdXQuIFdoZW5cbisgICAgICBwcmVzZW50LCB0aGUgcmVmZXJlbmNlIGNsb2NrIGlzIGVuYWJsZWQgaW4gcmVzcG9uc2UgdG8gdGhpcyBzaWduYWxcbisgICAgICBpbnN0ZWFkIG9mIGJlaW5nIGxlZnQgYWx3YXlzLW9uLlxuK1xuICAgaW50ZXJydXB0czpcbiAgICAgbWF4SXRlbXM6IDFcbiBcbkBAIC01OCwxMiArNjYsMjUgQEAgYWxsT2Y6XG4gICAgICAgcHJvcGVydGllczpcbiAgICAgICAgIGNvbXBhdGlibGU6XG4gICAgICAgICAgIGNvbnRhaW5zOlxuLSAgICAgICAgICAgIGNvbnN0OiBzYW1zdW5nLHMzZndybjUtaTJjXG4rICAgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm41LWkyY1xuKyAgICAgICAgICAgICAgLSBzYW1zdW5nLHMzbnJuNHYtaTJjXG4gICAgIHRoZW46XG4gICAgICAgcmVxdWlyZWQ6XG4gICAgICAgICAtIGludGVycnVwdHNcbiAgICAgICAgIC0gcmVnXG4gXG4rICAjIFRoZSBjbG9jay1yZXF1ZXN0IGhhbmRzaGFrZSBvbmx5IGV4aXN0cyBvbiB0aGUgUzNOUk40Vi5cbisgIC0gaWY6XG4rICAgICAgbm90OlxuKyAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICAgIGNvbnN0OiBzYW1zdW5nLHMzbnJuNHYtaTJjXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNsay1yZXEtZ3Bpb3M6IGZhbHNlXG4rXG4gZXhhbXBsZXM6XG4gICAtIHxcbiAgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXG5pbmRleCBhZjBmYThiZDk3MGI0Zi4uNTkzMTdlYWFkN2FjOTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcbkBAIC0xMjIsMTEgKzEyMiw0NyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBzM2Z3cm41X25jaV9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbit7XG4rXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuK1xuK1x0LypcbitcdCAqIFJ1bnMgYWZ0ZXIgQ09SRV9SRVNFVCwgYmVmb3JlIENPUkVfSU5JVC4gVGhlIFMzTlJONFYgbmVlZHMgaXRzXG4rXHQgKiByZWZlcmVuY2UgY2xvY2sgY29uZmlndXJlZCBoZXJlICh0aGUgZG93bnN0cmVhbSBzdGFjayBkb2VzIGl0IGluIHRoZVxuK1x0ICogYm9vdGxvYWRlciwgYmVmb3JlIENPUkVfUkVTRVQsIGJ1dCB0aGlzIGlzIHRoZSBlYXJsaWVzdCBob29rIHRoZSBOQ0lcbitcdCAqIGNvcmUgb2ZmZXJzIGFuZCB0aGUgY2hpcCBhY2NlcHRzIGl0KS5cbitcdCAqL1xuK1x0aWYgKGluZm8tXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40VilcbitcdFx0cmV0dXJuIHMzZndybjVfbmNpX2Nsa19jZmcoaW5mbyk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGluZm8tXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vikge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgUzNOUk40ViBzaGlwcyB3aXRoIHdvcmtpbmcgZmlybXdhcmUgYmVoaW5kIGEgYm9vdGxvYWRlclxuK1x0XHQgKiBwcm90b2NvbCB0aGlzIGRyaXZlciBkb2VzIG5vdCBpbXBsZW1lbnQsIHNvIHRoZXJlIGlzIG5vXG4rXHRcdCAqIGRvd25sb2FkIHN0ZXA7IHRoZSBOQ0kgY29yZSBoYXMgYWxyZWFkeSBkb25lIENPUkVfUkVTRVQgK1xuK1x0XHQgKiBDT1JFX0lOSVQuIEp1c3QgKHJlKWxvYWQgdGhlIFJGIHJlZ2lzdGVycyB2aWEgRFVBTF9PUFRJT04uXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChpbmZvLCBcInNlY19zM25ybjR2X2h3cmVnLmJpblwiLFxuK1x0XHRcdFx0XHRcdCAgICBcInNlY19zM25ybjR2X3N3cmVnLmJpblwiKTtcbitcdFx0LypcbitcdFx0ICogS2VlcCBnb2luZyBldmVuIGlmIHRoZSBibG9icyBjb3VsZCBub3QgYmUgbG9hZGVkOiB0aGUgY2hpcFxuK1x0XHQgKiBzdGlsbCBlbnVtZXJhdGVzIGFuZCBmYWxscyBiYWNrIHRvIHRoZSBSRiByZWdpc3RlcnMgcHJvZ3JhbW1lZFxuK1x0XHQgKiBpbiBpdHMgZmxhc2gsIHNvIE5GQyBtYXkgd29yayBhbnl3YXkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGRldl93YXJuKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJyZnJlZyBjb25maWd1cmUgZmFpbGVkICglZClcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRpZiAoczNmd3JuNV9maXJtd2FyZV9pbml0KGluZm8pKSB7XG4gXHRcdC8vc2tpcCBib290bG9hZGVyIG1vZGVcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTUyLDEzICsxODgsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHtcbiBcdC5vcGVuID0gczNmd3JuNV9uY2lfb3BlbixcbiBcdC5jbG9zZSA9IHMzZndybjVfbmNpX2Nsb3NlLFxuIFx0LnNlbmQgPSBzM2Z3cm41X25jaV9zZW5kLFxuK1x0LnNldHVwID0gczNmd3JuNV9uY2lfc2V0dXAsXG4gXHQucG9zdF9zZXR1cCA9IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAsXG4gXHQucHJvcF9vcHMgPSBzM2Z3cm41X25jaV9wcm9wX29wcyxcbiBcdC5uX3Byb3Bfb3BzID0gQVJSQVlfU0laRShzM2Z3cm41X25jaV9wcm9wX29wcyksXG4gfTtcbiBcbiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi1cdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpXG4rXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzLCBlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50KVxuIHtcbiBcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm87XG4gXHRpbnQgcmV0O1xuQEAgLTE3MCw2ICsyMDcsNyBAQCBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbiBcdGluZm8tXHUwMDNlcGh5X2lkID0gcGh5X2lkO1xuIFx0aW5mby1cdTAwM2VwZGV2ID0gcGRldjtcbiBcdGluZm8tXHUwMDNlcGh5X29wcyA9IHBoeV9vcHM7XG4rXHRpbmZvLVx1MDAzZXZhcmlhbnQgPSB2YXJpYW50O1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZpbmZvLVx1MDAzZW11dGV4KTtcbiBcbiBcdHMzZndybjVfc2V0X21vZGUoaW5mbywgUzNGV1JONV9NT0RFX0NPTEQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5pbmRleCBlOWEzNGQyN2EzNjk4NC4uODhhNDk4ODc5MWVmZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5AQCAtMjMsOSArMjMsNTMgQEAgc3RydWN0IHMzZndybjVfaTJjX3BoeSB7XG4gXHRzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2RldjtcbiBcdHN0cnVjdCBjbGsgKmNsaztcbiBcbitcdC8qXG4rXHQgKiBPcHRpb25hbCBoYXJkd2FyZSBjbG9jay1yZXF1ZXN0IGhhbmRzaGFrZS4gV2hlbiBhIENMS19SRVEgR1BJTyBpc1xuK1x0ICogd2lyZWQsIHRoZSBjaGlwIGRyaXZlcyBpdCBoaWdoIHdoaWxlIGl0IG5lZWRzIGl0cyBYSSBjbG9jayAtLSBub3RhYmx5XG4rXHQgKiB0byBnZW5lcmF0ZSB0aGUgcG9sbC9yZWFkZXIgY2FycmllciAtLSBhbmQgdGhlIGNsb2NrIGlzIGdhdGVkIG9uIGl0XG4rXHQgKiBpbnN0ZWFkIG9mIGJlaW5nIGxlZnQgYWx3YXlzLW9uICh3aGljaCBuZXZlciBsZXRzIHRoZSBjaGlwJ3MgVFggUExMXG4rXHQgKiBsb2NrIG9uIGEgZnJlc2ggY2xvY2sgc3RhcnQsIGxlYXZpbmcgaXQgdW5hYmxlIHRvIHBvbGwpLlxuK1x0ICovXG4rXHRzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX2Nsa19yZXE7XG4rXHRib29sIGNsa19vbjtcbitcdHN0cnVjdCBtdXRleCBjbGtfbG9jaztcdC8qIHNlcmlhbGlzZXMgY2xrX29uIGFnYWluc3QgdGhlIENMS19SRVEgaXJxICovXG4rXG4gXHR1bnNpZ25lZCBpbnQgaXJxX3NraXA6MTtcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIHMzZndybjVfaTJjX2Nsa19zZXQoc3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5LCBib29sIG9uKVxuK3tcbitcdG11dGV4X2xvY2soXHUwMDI2cGh5LVx1MDAzZWNsa19sb2NrKTtcbitcdGlmIChvbiBcdTAwMjZcdTAwMjYgIXBoeS1cdTAwM2VjbGtfb24pIHtcbitcdFx0aW50IHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwaHktXHUwMDNlY2xrKTtcbitcbitcdFx0aWYgKHJldCA9PSAwKVxuK1x0XHRcdHBoeS1cdTAwM2VjbGtfb24gPSB0cnVlO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZGV2X3dhcm5fb25jZShcdTAwMjZwaHktXHUwMDNlaTJjX2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgICBcImZhaWxlZCB0byBlbmFibGUgY2xvY2sgKCVkKTsgTkZDIG1heSBub3QgcG9sbFxcblwiLFxuK1x0XHRcdFx0ICAgICAgcmV0KTtcbitcdH0gZWxzZSBpZiAoIW9uIFx1MDAyNlx1MDAyNiBwaHktXHUwMDNlY2xrX29uKSB7XG4rXHRcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwaHktXHUwMDNlY2xrKTtcbitcdFx0cGh5LVx1MDAzZWNsa19vbiA9IGZhbHNlO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeS1cdTAwM2VjbGtfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHMzZndybjVfaTJjX2Nsa19kaXNhYmxlX2FjdGlvbih2b2lkICpkYXRhKVxuK3tcbitcdHMzZndybjVfaTJjX2Nsa19zZXQoZGF0YSwgZmFsc2UpO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWQoaW50IGlycSwgdm9pZCAqcGh5X2lkKVxuK3tcbitcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeSA9IHBoeV9pZDtcbitcbitcdHMzZndybjVfaTJjX2Nsa19zZXQocGh5LCBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAocGh5LVx1MDAzZWdwaW9fY2xrX3JlcSkgXHUwMDNlIDApO1xuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19zZXRfbW9kZSh2b2lkICpwaHlfaWQsIGVudW0gczNmd3JuNV9tb2RlIG1vZGUpXG4ge1xuIFx0c3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5ID0gcGh5X2lkO1xuQEAgLTE0Niw2ICsxOTAsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpwaHlfaWQpXG4gXG4gc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuIHtcbitcdGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQ7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHk7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE3MiwxNSArMjE3LDYzIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiBcdCAqIFMzRldSTjUgZGVwZW5kcyBvbiBhIGNsb2NrIGlucHV0IChcIlhJXCIgcGluKSB0byBmdW5jdGlvbiBwcm9wZXJseS5cbiBcdCAqIERlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiB0aGlzIGNvdWxkIGJlIGFuIGFsd2F5cy1vblxuIFx0ICogb3NjaWxsYXRvciBvciBzb21lIGV4dGVybmFsIGNsb2NrIHRoYXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQuXG4tXHQgKiBNYWtlIHN1cmUgdGhlIGNsb2NrIGlzIHJ1bm5pbmcgYmVmb3JlIHN0YXJ0aW5nIFMzRldSTjUuXG4rXHQgKlxuK1x0ICogSWYgYSBDTEtfUkVRIEdQSU8gaXMgd2lyZWQsIHRoZSBjaGlwIGdhdGVzIHRoZSBjbG9jayBpdHNlbGYgKGRyaXZpbmdcbitcdCAqIENMS19SRVEgaGlnaCB3aGVuIGl0IG5lZWRzIFhJKTsgc2VydmljZSB0aGF0IGhhbmRzaGFrZS4gT3RoZXJ3aXNlIGp1c3RcbitcdCAqIG1ha2Ugc3VyZSB0aGUgY2xvY2sgaXMgcnVubmluZyBiZWZvcmUgc3RhcnRpbmcgUzNGV1JONS5cbiBcdCAqL1xuLVx0cGh5LVx1MDAzZWNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIE5VTEwpO1xuLVx0aWYgKElTX0VSUihwaHktXHUwMDNlY2xrKSlcbi1cdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgUFRSX0VSUihwaHktXHUwMDNlY2xrKSxcbi1cdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IGNsb2NrXFxuXCIpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwaHktXHUwMDNlY2xrX2xvY2spO1xuK1x0cGh5LVx1MDAzZWdwaW9fY2xrX3JlcSA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFwiY2xrLXJlcVwiLFxuK1x0XHRcdFx0XHRcdCAgICBHUElPRF9JTik7XG4rXHRpZiAoSVNfRVJSKHBoeS1cdTAwM2VncGlvX2Nsa19yZXEpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKTtcbitcbitcdGlmIChwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKSB7XG4rXHRcdGludCBjbGtfcmVxX2lycTtcbitcbitcdFx0cGh5LVx1MDAzZWNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdFx0aWYgKElTX0VSUihwaHktXHUwMDNlY2xrKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBQVFJfRVJSKHBoeS1cdTAwM2VjbGspLFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBjbG9ja1xcblwiKTtcbitcbitcdFx0LypcbitcdFx0ICogVW5saWtlIHRoZSBhbHdheXMtb24gYnJhbmNoIGJlbG93LCB0aGlzIGNsb2NrIGlzIGVuYWJsZWQgYnlcbitcdFx0ICogaGFuZCBmcm9tIHRoZSBDTEtfUkVRIGhhbmRsZXIsIHNvIGRldm0gd2lsbCBub3QgZGlzYWJsZSBpdCBvblxuK1x0XHQgKiB1bmJpbmQuIEdhdGUgaXQgb2ZmIGV4cGxpY2l0bHkgaWYgaXQgaXMgc3RpbGwgb24gYXQgdGVhcmRvd24uXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldixcbitcdFx0XHRcdFx0ICAgICAgIHMzZndybjVfaTJjX2Nsa19kaXNhYmxlX2FjdGlvbixcbitcdFx0XHRcdFx0ICAgICAgIHBoeSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Y2xrX3JlcV9pcnEgPSBncGlvZF90b19pcnEocGh5LVx1MDAzZWdwaW9fY2xrX3JlcSk7XG4rXHRcdGlmIChjbGtfcmVxX2lycSBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gY2xrX3JlcV9pcnE7XG4rXG4rXHRcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgY2xrX3JlcV9pcnEsIE5VTEwsXG4rXHRcdFx0XHRcdFx0czNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWQsXG4rXHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX1JJU0lORyB8XG4rXHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX0ZBTExJTkcgfFxuK1x0XHRcdFx0XHRcdElSUUZfT05FU0hPVCxcbitcdFx0XHRcdFx0XHRcInMzZndybjVfY2xrX3JlcVwiLCBwaHkpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIFNlZWQgdGhlIGNsb2NrIHN0YXRlIGZyb20gdGhlIGN1cnJlbnQgQ0xLX1JFUSBsZXZlbC4gKi9cbitcdFx0czNmd3JuNV9pMmNfY2xrX3NldChwaHksXG4rXHRcdFx0XHQgICAgZ3Bpb2RfZ2V0X3ZhbHVlX2NhbnNsZWVwKHBoeS1cdTAwM2VncGlvX2Nsa19yZXEpIFx1MDAzZSAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBoeS1cdTAwM2VjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdFx0aWYgKElTX0VSUihwaHktXHUwMDNlY2xrKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBQVFJfRVJSKHBoeS1cdTAwM2VjbGspLFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBjbG9ja1xcblwiKTtcbitcdH1cbiBcbitcdC8qIE5vIG1hdGNoIGRhdGEgKGUuZy4gaTJjX2RldmljZV9pZCBiaW5kaW5nKSBtZWFucyB0aGUgZGVmYXVsdCBGV0RMLiAqL1xuK1x0dmFyaWFudCA9ICh1aW50cHRyX3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7XG4gXHRyZXQgPSBzM2Z3cm41X3Byb2JlKFx1MDAyNnBoeS1cdTAwM2Vjb21tb24ubmRldiwgcGh5LCBcdTAwMjZwaHktXHUwMDNlaTJjX2Rldi1cdTAwM2VkZXYsXG4tXHRcdFx0ICAgIFx1MDAyNmkyY19waHlfb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMsIHZhcmlhbnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMTAsOCArMzAzLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzM2Z3cm41X2kyY19pZF90YWJsZVtdID0ge1xuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHMzZndybjVfaTJjX2lkX3RhYmxlKTtcbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zM2Z3cm41X2kyY19tYXRjaFtdIF9fbWF5YmVfdW51c2VkID0ge1xuLVx0eyAuY29tcGF0aWJsZSA9IFwic2Ftc3VuZyxzM2Z3cm41LWkyY1wiLCB9LFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJzYW1zdW5nLHMzZndybjUtaTJjXCIsXG4rXHQgIC5kYXRhID0gKHZvaWQgKilTM0ZXUk41X1ZBUklBTlRfRldETCwgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInNhbXN1bmcsczNucm40di1pMmNcIixcbitcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9TM05STjRWLCB9LFxuIFx0e31cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTtcbkBAIC0yMTksNyArMzE1LDcgQEAgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfczNmd3JuNV9pMmNfbWF0Y2gpO1xuIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzM2Z3cm41X2kyY19kcml2ZXIgPSB7XG4gXHQuZHJpdmVyID0ge1xuIFx0XHQubmFtZSA9IFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLFxuLVx0XHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfczNmd3JuNV9pMmNfbWF0Y2gpLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9zM2Z3cm41X2kyY19tYXRjaCxcbiBcdH0sXG4gXHQucHJvYmUgPSBzM2Z3cm41X2kyY19wcm9iZSxcbiBcdC5yZW1vdmUgPSBzM2Z3cm41X2kyY19yZW1vdmUsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcbmluZGV4IDVhOWRlMTFiYmVjZWE0Li4wNGY0YzM2MjY5MWUzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcbkBAIC04LDYgKzgsOSBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJzM2Z3cm41LmhcIlxuICNpbmNsdWRlIFwibmNpLmhcIlxuQEAgLTIwLDcgKzIzLDcgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wcm9wX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1jb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7XG4rY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xuIFx0e1xuIFx0XHQub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksXG4gXHRcdFx0XHROQ0lfUFJPUF9TRVRfUkZSRUcpLFxuQEAgLTQxLDYgKzQ0LDExIEBAIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcbiBcdFx0XHRcdE5DSV9QUk9QX0ZXX0NGRyksXG4gXHRcdC5yc3AgPSBzM2Z3cm41X25jaV9wcm9wX3JzcCxcbiBcdH0sXG4rXHR7XG4rXHRcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcbitcdFx0XHRcdE5DSV9QUk9QX0RVQUxfT1BUSU9OKSxcbitcdFx0LnJzcCA9IHMzZndybjVfbmNpX3Byb3BfcnNwLFxuK1x0fSxcbiB9O1xuIFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXG5AQCAtMTE3LDMgKzEyNSwxMDQgQEAgaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKVxuIFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbitcbisvKlxuKyAqIENvbmZpZ3VyZSB0aGUgcmVmZXJlbmNlIGNsb2NrLiBUaGUgUzNOUk40ViBleHBlY3RzIHRoZSBzaW5nbGUtYnl0ZSBGV19DRkdcbisgKiBmb3JtIChqdXN0IHRoZSBjbG9jay1zcGVlZCBzZWxlY3RvcikuIFRoZSBkb3duc3RyZWFtIHN0YWNrIHNlbmRzIHRoaXMgaW4gdGhlXG4rICogYm9vdGxvYWRlciBiZWZvcmUgQ09SRV9SRVNFVDsgdGhlIGVhcmxpZXN0IHRoZSBtYWlubGluZSBOQ0kgY29yZSBsZXRzIHVzIGluXG4rICogaXMgdGhlIC1cdTAwM2VzZXR1cCBob29rIChhZnRlciBDT1JFX1JFU0VULCBiZWZvcmUgQ09SRV9JTklUKSwgd2hpY2ggd29ya3MuXG4rICovXG4raW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbit7XG4rXHR1OCBjbGtfc3BlZWQgPSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEO1xuK1xuK1x0cmV0dXJuIG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0ZXX0NGRywgMSwgXHUwMDI2Y2xrX3NwZWVkKTtcbit9XG4rXG4rLypcbisgKiBTM05STjRWIFJGIHJlZ2lzdGVyIHVwZGF0ZS4gVGhlIEhXIGFuZCBTVyByZWdpc3RlciBibG9icyBhcmUgbWVyZ2VkIGludG8gYVxuKyAqIHNpbmdsZSBzdHJlYW0gKEhXIGZpcnN0KSBhbmQgcHVzaGVkIHZpYSB0aGUgRFVBTF9PUFRJT04gY29tbWFuZDpcbisgKiBTVEFSVF9VUERBVEUsIG9uZSBTRVRfT1BUSU9OIHBlciAyNTItYnl0ZSBzZWN0aW9uLCB0aGVuIFNUT1BfVVBEQVRFIGNhcnJ5aW5nXG4rICogYSAxNi1iaXQgY2hlY2tzdW0gKHJ1bm5pbmcgc3VtIG9mIHRoZSBtZXJnZWQgc3RyZWFtIGFzIDMyLWJpdCB3b3JkcykuXG4rICovXG4raW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4rXHRcdFx0XHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpod19mdyA9IE5VTEwsICpzd19mdyA9IE5VTEw7XG4rXHRzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCBzZXRfb3B0aW9uO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2aW5mby1cdTAwM2VuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2O1xuK1x0c2l6ZV90IG1lcmdlZF9zaXplLCBpLCBsZW47XG4rXHR1OCAqbWVyZ2VkID0gTlVMTDtcbitcdHU4IHN0b3BfY21kWzNdO1xuK1x0dTMyIGNoZWNrc3VtO1xuK1x0dTggc3ViX29pZDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNmh3X2Z3LCBod19uYW1lLCBkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2c3dfZncsIHN3X25hbWUsIGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dF9odztcbitcbitcdG1lcmdlZF9zaXplID0gaHdfZnctXHUwMDNlc2l6ZSArIHN3X2Z3LVx1MDAzZXNpemU7XG4rXHRtZXJnZWQgPSBrbWFsbG9jKG1lcmdlZF9zaXplLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbWVyZ2VkKSB7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0bWVtY3B5KG1lcmdlZCwgaHdfZnctXHUwMDNlZGF0YSwgaHdfZnctXHUwMDNlc2l6ZSk7XG4rXHRtZW1jcHkobWVyZ2VkICsgaHdfZnctXHUwMDNlc2l6ZSwgc3dfZnctXHUwMDNlZGF0YSwgc3dfZnctXHUwMDNlc2l6ZSk7XG4rXG4rXHQvKlxuK1x0ICogUnVubmluZyBzdW0gb2YgdGhlIG1lcmdlZCBzdHJlYW0gYXMgbGl0dGxlLWVuZGlhbiAzMi1iaXQgd29yZHMuIFRoZVxuK1x0ICogcmZyZWcgYmxvYnMgYXJlIHdvcmQtYWxpZ25lZCwgc28gdGhlIGxvb3AgY29uc3VtZXMgdGhlIHdob2xlIHN0cmVhbTtcbitcdCAqIHNob3VsZCBhIGZ1dHVyZSBibG9iIG5vdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgaXRzIHRhaWwgd291bGQgYmVcbitcdCAqIGlnbm9yZWQgaGVyZS5cbitcdCAqL1xuK1x0Y2hlY2tzdW0gPSAwO1xuK1x0Zm9yIChpID0gMDsgaSArIDQgXHUwMDNjPSBtZXJnZWRfc2l6ZTsgaSArPSA0KVxuK1x0XHRjaGVja3N1bSArPSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICsgaSk7XG4rXG4rXHRkZXZfZGJnKGRldiwgXCJyZnJlZyBkdWFsLW9wdGlvbiB1cGRhdGU6ICVzICsgJXNcXG5cIiwgaHdfbmFtZSwgc3dfbmFtZSk7XG4rXG4rXHQvKiBTVEFSVF9VUERBVEUgKi9cbitcdHN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEU7XG4rXHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMSwgXHUwMDI2c3ViX29pZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIlVuYWJsZSB0byBzdGFydCByZnJlZyB1cGRhdGVcXG5cIik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogU0VUX09QVElPTiBwZXIgc2VjdGlvbiAqL1xuK1x0c2V0X29wdGlvbi5zdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTjtcbitcdHNldF9vcHRpb24uaW5kZXggPSAwO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWVyZ2VkX3NpemU7IGkgKz0gTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpIHtcbitcdFx0bGVuID0gbWluX3Qoc2l6ZV90LCBtZXJnZWRfc2l6ZSAtIGksIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKTtcbitcdFx0bWVtY3B5KHNldF9vcHRpb24uZGF0YSwgbWVyZ2VkICsgaSwgbGVuKTtcbitcdFx0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sXG4rXHRcdFx0XHQgICBsZW4gKyAyLCAoX191OCAqKVx1MDAyNnNldF9vcHRpb24pO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0ZGV2X2VycihkZXYsIFwicmZyZWcgdXBkYXRlIGVycm9yIChjb2RlPSVkKVxcblwiLCByZXQpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHNldF9vcHRpb24uaW5kZXgrKztcbitcdH1cbitcbitcdC8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi9cbitcdHN0b3BfY21kWzBdID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7XG4rXHRwdXRfdW5hbGlnbmVkX2xlMTYoY2hlY2tzdW0sIFx1MDAyNnN0b3BfY21kWzFdKTtcbitcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAzLCBzdG9wX2NtZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIlVuYWJsZSB0byBzdG9wIHJmcmVnIHVwZGF0ZVxcblwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRkZXZfZGJnKGRldiwgXCJyZnJlZyBkdWFsLW9wdGlvbiB1cGRhdGU6IHN1Y2Nlc3NcXG5cIik7XG4rb3V0OlxuK1x0a2ZyZWUobWVyZ2VkKTtcbitcdHJlbGVhc2VfZmlybXdhcmUoc3dfZncpO1xuK291dF9odzpcbitcdHJlbGVhc2VfZmlybXdhcmUoaHdfZncpO1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaCBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbmluZGV4IGJjNGJjZTJiYmM0ZDkzLi4yMzE3OWJhMDk1YTFiNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbkBAIC00MCw2ICs0MCwxMyBAQCBzdHJ1Y3QgbmNpX3Byb3Bfc3RvcF9yZnJlZ19yc3Age1xuIFxuICNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHXHRcdDB4MjhcbiBcbisvKlxuKyAqIFNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkIChjbG9jay1zcGVlZCBzZWxlY3RvcikgZm9yIHRoZSBTM05STjRWIHJlZmVyZW5jZVxuKyAqIGNsb2NrLiBUYWtlbiBmcm9tIHRoZSB2ZW5kb3IgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYXJ0ICh0aGUgZW5jb2RpbmcgaXNcbisgKiBub3QgZG9jdW1lbnRlZCkuXG4rICovXG4rI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEXHQweDExXG4rXG4gc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19jbWQge1xuIFx0X191OCBjbGtfdHlwZTtcbiBcdF9fdTggY2xrX3NwZWVkO1xuQEAgLTUwLDcgKzU3LDMwIEBAIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfcnNwIHtcbiBcdF9fdTggc3RhdHVzO1xuIH07XG4gXG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XTtcbisvKlxuKyAqIFRoZSBTM05STjRWIHVwZGF0ZXMgaXRzIFJGIHJlZ2lzdGVycyB0aHJvdWdoIGEgc2luZ2xlIFwiZHVhbCBvcHRpb25cIiBjb21tYW5kXG4rICogKGEgc3ViLU9JRCBzZWxlY3RzIHRoZSBvcGVyYXRpb24pIGluc3RlYWQgb2YgdGhlIFNUQVJUL1NFVC9TVE9QX1JGUkVHXG4rICogb3Bjb2RlcyBhYm92ZSwgYW5kIGV4cGVjdHMgdGhlIEhXIGFuZCBTVyByZWdpc3RlciBibG9icyBtZXJnZWQgaW50byBvbmVcbisgKiBzdHJlYW0uXG4rICovXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX09QVElPTlx0XHQweDJhXG4rXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEVcdDB4MDFcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT05cdDB4MDJcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFXHQweDAzXG4rXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRVx0MjUyXG4rXG4rc3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQge1xuK1x0X191OCBzdWJfb2lkO1x0LyogTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTiAqL1xuK1x0X191OCBpbmRleDtcbitcdF9fdTggZGF0YVtOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRV07XG4rfTtcbitcbitleHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdO1xuIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XG4raW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4rXHRcdFx0XHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpO1xuK2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pO1xuIFxuICNlbmRpZiAvKiBfX0xPQ0FMX1MzRldSTjVfTkNJX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxuaW5kZXggMmI0OTIyMzYwOTBiODUuLjJkOGMxMjA5MWZiYTU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXG5AQCAtMjEsNiArMjEsMTcgQEAgZW51bSBzM2Z3cm41X21vZGUge1xuIFx0UzNGV1JONV9NT0RFX0ZXLFxuIH07XG4gXG4rZW51bSBzM2Z3cm41X3ZhcmlhbnQge1xuK1x0LyogUzNGV1JONSAvIFMzRldSTjgyOiBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGJ5IHRoaXMgZHJpdmVyICovXG4rXHRTM0ZXUk41X1ZBUklBTlRfRldETCxcbitcdC8qXG4rXHQgKiBTM05STjRWOiBzaGlwcyB3aXRoIHdvcmtpbmcgZmlybXdhcmUgYmVoaW5kIGEgYm9vdGxvYWRlciBwcm90b2NvbFxuK1x0ICogdGhpcyBkcml2ZXIgZG9lcyBub3QgaW1wbGVtZW50OyBza2lwIHRoZSBkb3dubG9hZCwgY29uZmlndXJlIHRoZVxuK1x0ICogY2xvY2sgKEZXX0NGRykgYW5kIHVwZGF0ZSB0aGUgUkYgcmVnaXN0ZXJzIHZpYSB0aGUgRFVBTF9PUFRJT04gY21kLlxuK1x0ICovXG4rXHRTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vixcbit9O1xuK1xuIHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMge1xuIFx0dm9pZCAoKnNldF93YWtlKSh2b2lkICppZCwgYm9vbCBzbGVlcCk7XG4gXHR2b2lkICgqc2V0X21vZGUpKHZvaWQgKmlkLCBlbnVtIHMzZndybjVfbW9kZSk7XG5AQCAtMzYsNiArNDcsNyBAQCBzdHJ1Y3QgczNmd3JuNV9pbmZvIHtcbiBcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHM7XG4gXG4gXHRzdHJ1Y3QgczNmd3JuNV9md19pbmZvIGZ3X2luZm87XG4rXHRlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50O1xuIFxuIFx0c3RydWN0IG11dGV4IG11dGV4O1xuIH07XG5AQCAtNzgsNyArOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuLVx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcyk7XG4rXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzLCBlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50KTtcbiB2b2lkIHMzZndybjVfcmVtb3ZlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KTtcbiBcbiBpbnQgczNmd3JuNV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbmluZGV4IDU0MGE0ZGRiMGIwNWU5Li40NzE3MmQ3MzlhNDFmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xuQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgaW50IHMzZndybjgyX3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcbiBcdH1cbiBcbiBcdHJldCA9IHMzZndybjVfcHJvYmUoXHUwMDI2cGh5LVx1MDAzZWNvbW1vbi5uZGV2LCBwaHksIFx1MDAyNnBoeS1cdTAwM2VzZXJfZGV2LVx1MDAzZWRldixcbi1cdFx0XHQgICAgXHUwMDI2dWFydF9waHlfb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2dWFydF9waHlfb3BzLCBTM0ZXUk41X1ZBUklBTlRfRldETCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9zZXJkZXY7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QyMDo0NTowNi4zNDMyNjkwNzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njc3MDMwNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGFuZCBGdXp6aW5nIHRoZSBOZXcgTkZDIENvbnRyb2xsZXIgVmFyaWFudCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIHN1cHBvcnQgZm9yIGEgbmV3IFNhbXN1bmcgTkZDIGNvbnRyb2xsZXIgdmFyaWFudCwgdGhlIFMzTlJONFYsIGludG8gdGhlIGBzM2Z3cm41YCBkcml2ZXIuIE15IGluaXRpYWwgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgbmV3IGNvZGUgaXMgcmVhY2hhYmxlIGFuZCwgaW1wb3J0YW50bHksIGZ1enphYmxlLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gdGVzdCBpdCB0aG9yb3VnaGx5LlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGZvciB0aGUgZGV2aWNlIHRyZWUgYmluZGluZywgbW9kaWZpY2F0aW9ucyB0byBgczNmd3JuNV9uY2lfc2V0dXBgIGFuZCBgczNmd3JuNV9uY2lfcG9zdF9zZXR1cGAgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBgUzNGV1JONV9WQVJJQU5UX1MzTlJONFZgLCBhbmQgc29tZSBhZGRpdGlvbnMgdG8gaGFuZGxlIGEgYGNsay1yZXFgIEdQSU8gYW5kIGNsb2NrIGdhdGluZyBpbiBgczNmd3JuNV9pMmNfcHJvYmVgLiBXZSd2ZSBhbHNvIGdvdCBzb21lIG5ldyBmdW5jdGlvbnMgaW4gYG5jaS5jYCBhbmQgYGkyYy5jYCByZWxhdGVkIHRvIFJGIGNvbmZpZ3VyYXRpb24sIGNsb2NrIGNvbnRyb2wsIGFuZCB0aGF0IEdQSU8gaW50ZXJydXB0IGhhbmRsZXIuXG5cblNpbmNlIHRoaXMgaXMgYW4gTkZDIGRyaXZlciwgSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcuIFR5cGljYWxseSwgTkZDIGRyaXZlcnMgYXJlIGZ1enplZCB0aHJvdWdoIHRoZSBOQ0kgbGF5ZXIg4oCTIG5ldGxpbmsvc29ja2V0cyDigJMgb3IgdGhyb3VnaCB2aXJ0dWFsIGRldmljZXMuIFRoZSBgczNmd3JuNWAgZHJpdmVyIGlzIGFuIEkyQy9VQVJUIGRyaXZlciwgd2hpY2ggbGVhZHMgbWUgdG8gdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgU3l6a2FsbGVyJ3MgSTJDIHN1cHBvcnQgaXMgc3VmZmljaWVudCBmb3IgZnV6emluZyB0aGlzLiBXaGlsZSBTeXprYWxsZXIgaGFzIHNvbWUgSTJDIGNhcGFiaWxpdGllcyB2aWEgYC9kZXYvaTJjLSpgIG9yIHZpcnR1YWwgZGV2aWNlcywgaXQncyBtb3JlIGNvbW1vbiB0byBzZWUgZnV6emluZyBhdCB0aGUgTkNJIGxheWVyLlxuXG5Ob3csIHRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGRyaXZlciAqZG9lcyogcmVnaXN0ZXIgYW4gTkNJIGRldmljZSwgd2hpY2ggbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBOQ0kgY29yZS4gYHMzZndybjVfcHJvYmVgIGNhbGxzIGBuY2lfYWxsb2NhdGVfZGV2aWNlYCBhbmQgYG5jaV9yZWdpc3Rlcl9kZXZpY2VgLiBUaGUgTkNJIGNvcmUgc2hvdWxkIGJlIGhhbmRsaW5nIHRoZSBOQ0kgcHJvdG9jb2wgaXRzZWxmLiBTbywgdGhpcyBnaXZlcyB1cyBhIGhvb2suXG5cblRoZSBjcnVjaWFsIHBvaW50IGlzIHRoaXMgbmV3IGBTM0ZXUk41X1ZBUklBTlRfUzNOUk40VmAgdmFyaWFudC4gSXQncyBtYXRjaGVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2l0aCBgc2Ftc3VuZyxzM25ybjR2LWkyY2AuIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IHRvIHRyaWdnZXIgdGhlIG5ldyBjb2RlLiBUaGUgbmV3IGNvZGUgaW4gYHMzZndybjVfbmNpX3NldHVwYCBhbmQgYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgIGlzIGNsZWFybHkgZXhlY3V0ZWQgYnkgdGhlIE5DSSBjb3JlIHdoZW4gc2V0dGluZyB1cCB0aGUgZGV2aWNlLiBUaGlzIGxvb2tzIHJlYWNoYWJsZSB2aWEgdGhlIGRldmljZSBzZXR1cC4gYG5jaV9vcGVuX2RldmljZWAgLVx1MDAzZSBgbmNpX3NldHVwYCAtXHUwMDNlIGBuZGV2LVx1MDAzZW9wcy1cdTAwM2VzZXR1cGAgYW5kIGBuZGV2LVx1MDAzZW9wcy1cdTAwM2Vwb3N0X3NldHVwYCwgc28gdGhlIGNvZGUgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBOQ0kgY29yZSBkdXJpbmcgZGV2aWNlIHNldHVwLiBUaGVuLCB0aGUgbmV3IGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgZnVuY3Rpb24gaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdOKAmXMgc2VuZGluZyBOQ0kgcHJvcHJpZXRhcnkgY29tbWFuZHMsIG1lYW5pbmcgdGhhdCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBmdXp6IHRocm91Z2ggYG5jaV9wcm9wX2NtZGAuIEFuZCBsYXN0bHksIHRoYXQgaW50ZXJydXB0IGhhbmRsZXIgaW4gYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYCBpcyBhbm90aGVyIHBvaW50IHdlIG5lZWQgdG8gdGVzdC5cbk5vdyBJJ2xsIGNoZWNrIEtjb25maWcgZm9yIHRoaXMgZHJpdmVyIHRvIHNlZSBob3cgaXQncyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMjA6NDU6MTYuMDIwMzAxNzM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTU3NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORkNfUzNGV1JONVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjI6Y29uZmlnIE5GQ19TM0ZXUk41XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMDpjb25maWcgTkZDX1MzRldSTjVfSTJDXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDIwOjQ1OjE2LjA4Mjg3MDI5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzM2NDUzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBwcmVzZW50ZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyAtIEEgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBvYmplY3RpdmUgaGVyZSBpcyBjbGVhcjogYSBjb21wbGV0ZSwgdGhvcm91Z2ggYW5hbHlzaXMgaXMgbmVlZGVkLiBUaGUgZmlyc3Qgc3RlcCwgbG9naWNhbGx5LCBpcyB0byBpbW1lZGlhdGVseSBnZXQgdGhlICpmdWxsKiBLY29uZmlnIGZpbGUgaW4gZnJvbnQgb2YgbWUuIE5vIHBhcnRpYWwgdmlld3MsIG5vIHNuaXBwZXRzOyBJIG5lZWQgdGhlIHdob2xlIGVuY2hpbGFkYS4gSSBuZWVkIHRvIHNlZSB0aGUgY29tcGxldGUgY29udGV4dCwgdGhlIGRlcGVuZGVuY2llcywgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhbGwgdGhlIHZhcmlhYmxlcywgdGhlIGRlZmF1bHRzLiBXaXRob3V0IHRoaXMgY29tcHJlaGVuc2l2ZSB2aWV3LCBhbnkgYXR0ZW1wdCBhdCBpbnNpZ2h0ZnVsIGFuYWx5c2lzIGlzIGp1c3Qgc3BlY3VsYXRpb24uIEkgYW0gZ29pbmcgdG8gc2VlIHRoZSBmb3Jlc3QgYW5kIGFsbCB0aGUgdHJlZXMuIFRoaXMgaXNuJ3QganVzdCBhIGN1cnNvcnkgZ2xhbmNlOyB0aGlzIGlzIGEgZGVlcCBkaXZlLiBJJ20gcmVhZHkgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlLCB0aGUgZGVzaWduIGRlY2lzaW9ucywgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIG1vZGlmaWNhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB1bmRlcnN0YW5kaW5nIGJlZ2lucy4gTGV0J3MgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODU3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QyMDo0NToxOS40MTY1MTc5NTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBORkNfUzNGV1JONVxcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgQ29yZSBkcml2ZXIgZm9yIFNhbXN1bmcgUzNGV1JONSBORkMgY2hpcC4gQ29udGFpbnMgY29yZSB1dGlsaXRpZXNcXG4gICA3OlxcdFxcdCAgb2YgY2hpcC4gSXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFBIWXMgdG8gYXZvaWQgZHVwbGljYXRpbmcgbG90c1xcbiAgIDg6XFx0XFx0ICBvZiBjb21tb24gY29kZS5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5GQ19TM0ZXUk41X0kyQ1xcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIlNhbXN1bmcgUzNGV1JONSBJMkMgc3VwcG9ydFxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBJMkNcXG4gIDEzOlxcdFxcdHNlbGVjdCBORkNfUzNGV1JONVxcbiAgMTQ6XFx0XFx0ZGVmYXVsdCBuXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgYW4gSTJDIGludGVyZmFjZSB0byB0aGUgUzNGV1JONSBjaGlwLlxcbiAgMTc6XFx0XFx0ICBTZWxlY3QgdGhpcyBpZiB5b3VyIHBsYXRmb3JtIGlzIHVzaW5nIHRoZSBJMkMgYnVzLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBtIGhlcmUuIFRoZSBtb2R1bGUgd2lsbFxcbiAgMjA6XFx0XFx0ICBiZSBjYWxsZWQgczNmd3JuNV9pMmMua28uXFxuICAyMTpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIE5GQ19TM0ZXUk44Ml9VQVJUXFxuICAyNDpcXHQgICAgICAgIHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjgyIFVBUlQgc3VwcG9ydFxcXCJcXG4gIDI1OlxcdCAgICAgICAgZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNFUklBTF9ERVZfQlVTXFxuICAyNjpcXHQgICAgICAgIHNlbGVjdCBORkNfUzNGV1JONVxcbiAgMjc6XFx0ICAgICAgICBoZWxwXFxuICAyODpcXHQgICAgICAgICAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBhIFVBUlQgaW50ZXJmYWNlIHRvIHRoZSBTM0ZXUk44MiBjaGlwLlxcbiAgMjk6XFx0ICAgICAgICAgIFNlbGVjdCB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gaXMgdXNpbmcgdGhlIFVBUlQgYnVzLlxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDIwOjQ1OjE5LjQxNjU4MTEyOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDgyNTg3Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE5GQyBTM0ZXUk41IEkyQyBEcml2ZXI6IEEgV29ydGh3aGlsZSBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlIGZ1enphYmlsaXR5IG9mIHRoaXMgYE5GQ19TM0ZXUk41X0kyQ2AgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGUgbmV3IGNvZGUgcmVzaWRlcyBpbiBzZXZlcmFsIGZ1bmN0aW9uczogYHMzZndybjVfbmNpX3NldHVwYCwgYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgLCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AsIGBzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZGAsIGFuZCBgczNmd3JuNV9pMmNfY2xrX3NldGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgZWFzaWx5IHRoZXNlIGNhbiBiZSByZWFjaGVkLlxuXG5UaGUgSTJDIGRyaXZlciBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBJMkMgZGV2aWNlIHdpdGggdGhlIGNvbXBhdGlibGUgSUQgXCJzYW1zdW5nLHMzbnJuNHYtaTJjXCIgaXMgcHJlc2VudC4gIFN5emthbGxlciBjYW4sIGluIHRoZW9yeSwgaW5qZWN0IEkyQyBkZXZpY2VzIHVzaW5nIGBzeXpfaTJjX3NldHVwYCAoaWYgaXQgc3VwcG9ydHMgaXQpLCBhbmQgYWxzbyBoYXMgTkNJIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRocm91Z2ggdGhlIE5DSSBjb3JlLiAgVGhhdCdzIHByb21pc2luZy5cblxuU2luY2UgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUgcGFydCBvZiB0aGUgTkNJIG9wZXJhdGlvbnMsIHRoZXkgc2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgYG5jaV9vcGVuX2RldmljZWAgaWYgdGhlIGRldmljZSBpcyBzdWNjZXNzZnVsbHkgcHJvYmVkLiBOb3csIHRoZXJlIGlzIGEgcG90ZW50aWFsIGhpY2N1cCB3aXRoIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAsIHdoaWNoIHJlbGllcyBvbiBgcmVxdWVzdF9maXJtd2FyZWAuIFRoaXMgY291bGQgYmxvY2ssIG9yIGZhaWwgaWYgdGhlIGZpcm13YXJlIGlzbid0IGF2YWlsYWJsZS4gRm9ydHVuYXRlbHksIGl0IGxvb2tzIGxpa2UgaXQgcHJpbnRzIGEgd2FybmluZyBhbmQgY29udGludWVzIGlmIHRoZSBmaXJtd2FyZSBsb2FkIGZhaWxzLiBUaGF0IGFsbGV2aWF0ZXMgc29tZSBjb25jZXJuLlxuXG5UaGUgYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYCBpcyBhbiBJUlEgaGFuZGxlciBmb3IgYSBHUElPLiBTeXprYWxsZXIgZG9lc24ndCBlYXNpbHkgdHJpZ2dlciBHUElPIElSUXMgdW5sZXNzIGl0J3MgYSBjb250cm9sbGVkIHZpcnR1YWwgR1BJTyBkcml2ZXIuIFNvIHRoYXQgbWlnaHQgYmUgdHJpY2tpZXIgdG8gcmVhY2guXG5cbkhvd2V2ZXIsIGBzM2Z3cm41X25jaV9zZXR1cGAgYW5kIGBzM2Z3cm41X25jaV9wb3N0X3NldHVwYCBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgaWYgdGhlIGRldmljZSBpcyBwcm9iZWQgYW5kIG9wZW5lZC4gVGhlIGdvb2QgbmV3cyBpcywgU3l6a2FsbGVyIGhhcyBzb21lIEkyQyBmdXp6aW5nIGNhcGFiaWxpdGllcy4gSSBzZWUgc29tZSBwcm9wcmlldGFyeSBOQ0kgY29tbWFuZHMgaGF2ZSBiZWVuIGFkZGVkOiBgTkNJX1BST1BfRFVBTF9PUFRJT05gIGFuZCBgTkNJX1BST1BfRldfQ0ZHYCBpbiBgczNmd3JuNV9uY2lfcHJvcF9vcHNgLiBCdXQgdGhlc2UgYXJlIGp1c3QgcmVzcG9uc2VzIHRvIGNvbW1hbmRzIHRoZSBkcml2ZXIgc2VuZHMuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZz8gIENvbnNpZGVyaW5nIHRoZSBhZGRlZCBrZXJuZWwgZnVuY3Rpb25hbGl0eSAoYSBuZXcgTkZDIGNvbnRyb2xsZXIgdmFyaWFudCwgaW5pdGlhbGl6YXRpb24sIGZpcm13YXJlIGxvYWRpbmcsIGNsb2NrIGhhbmRsaW5nKSwgYW5kIHRoZSBmYWN0IGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAodGhlIE5GQyBkcml2ZXIpLCBteSBhc3Nlc3NtZW50IGlzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblRoZXJlZm9yZSwgdGhlIGtleSB0YXJnZXRzIGZvciBmdXp6aW5nIGFyZTogYHMzZndybjVfbmNpX3NldHVwYCwgYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgLCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AsIGBzM2Z3cm41X2kyY19jbGtfc2V0YCwgYW5kIHRvIGEgbGVzc2VyIGV4dGVudCwgYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYC5cblxuVGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgc2hvdWxkIGluY2x1ZGUgYE5GQ19TM0ZXUk41X0kyQ2AsIGBORkNfUzNGV1JONWAsIGBORkNfTkNJYCwgYW5kIGBJMkNgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlc2Ugc2V0dGluZ3MgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NzYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMjA6NDU6MzAuNDk5MTcxMDgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjU1OTI3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZDX1MzRldSTjVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZz04Mz1DT05GSUdfTkZDX1NIRExDPXlcXG5hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWc6ODQ6Q09ORklHX05GQ19TM0ZXUk41X0kyQz15XFxuYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnLTg1LUNPTkZJR19ERVZUTVBGUz15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xNzM9Q09ORklHX05GQ19TSERMQz15XFxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MTc0OkNPTkZJR19ORkNfUzNGV1JONV9JMkM9bVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTE3NS1DT05GSUdfUENJRVBPUlRCVVM9eVxcbi0tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0yMDg9Q09ORklHX05GQ19OWFBfTkNJX0kyQz1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoyMDk6Q09ORklHX05GQ19TM0ZXUk41X0kyQz1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0yMTAtQ09ORklHX1BDST15XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jPTQ4Nz1zdGF0aWMgc3RydWN0IGdwaW9fZGVzYyAqb2ZfZmluZF9ncGlvX3JlbmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy01MjYtI2VuZGlmXFxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYzo1Mjc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GQ19TM0ZXUk41X0kyQylcXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTUyOC1cXHRcXHR7IFxcXCJlblxcXCIsXFx0XFx0XFxcInMzZndybjUsZW4tZ3Bpb3NcXFwiLFxcdFxcXCJzYW1zdW5nLHMzZndybjUtaTJjXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX05GQ19OWFBfTkNJKVxcdCs9IG54cC1uY2kvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX05GQ19TM0ZXUk41KVxcdCs9IHMzZndybjUvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXFx0Kz0gc3Q5NWhmL1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjI6Y29uZmlnIE5GQ19TM0ZXUk41XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMDpjb25maWcgTkZDX1MzRldSTjVfSTJDXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEyLVxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBJMkNcXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWc6MTM6XFx0c2VsZWN0IE5GQ19TM0ZXUk41XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTE0LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnPTIzPWNvbmZpZyBORkNfUzNGV1JOODJfVUFSVFxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTI1LSAgICAgICAgZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNFUklBTF9ERVZfQlVTXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjI2OiAgICAgICAgc2VsZWN0IE5GQ19TM0ZXUk41XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTI3LSAgICAgICAgaGVscFxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZT04PXMzZndybjgyX3VhcnQtb2JqcyA9IHVhcnQub1xcbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGUtOS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19ORkNfUzNGV1JONSkgKz0gczNmd3JuNS5vXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkZDX1MzRldSTjVfSTJDKSArPSBzM2Z3cm41X2kyYy5vXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfTkZDX1MzRldSTjgyX1VBUlQpICs9IHMzZndybjgyX3VhcnQub1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmgtMTAtXFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg6MTE6I2lmbmRlZiBfX05GQ19TM0ZXUk41X1BIWV9DT01NT05fSFxcbmRyaXZlcnMvbmZjL3MzZndybjUvcGh5X2NvbW1vbi5oOjEyOiNkZWZpbmUgX19ORkNfUzNGV1JONV9QSFlfQ09NTU9OX0hcXG5kcml2ZXJzL25mYy9zM2Z3cm41L3BoeV9jb21tb24uaC0xMy1cXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvcGh5X2NvbW1vbi5oPTM2PWVudW0gczNmd3JuNV9tb2RlIHMzZndybjVfcGh5X2dldF9tb2RlKHZvaWQgKnBoeV9pZCk7XFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmgtMzctXFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg6Mzg6I2VuZGlmIC8qIF9fTkZDX1MzRldSTjVfUEhZX0NPTU1PTl9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDIwOjQ1OjMzLjA2NDc2ODk4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MzQ1MzMwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5GQyBDb25maWd1cmF0aW9uIGFuZCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYE5GQ19TM0ZXUk41X0kyQ2AgYW5kIGBORkNfUzNGV1JONWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYE5GQ19TM0ZXUk41YCBpcyBzZWxlY3RlZCBieSBgTkZDX1MzRldSTjVfSTJDYCwgbWFraW5nIGBORkNfUzNGV1JONV9JMkNgIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24uIE1ha2VzIHNlbnNlLlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBoYXZlIGV2ZXJ5dGhpbmcgZWxzZSB3ZSBuZWVkLiBBaCwgeWVzLCBgTkZDX05DSWAgYW5kIGBJMkNgIGFyZSBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGV4cGVjdGVkIGZvciB0aGlzIHR5cGUgb2Ygc2V0dXAuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgZHJpdmVyIGZ1bmN0aW9ucy4gSSd2ZSBnb3QgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHM6IGBzM2Z3cm41X25jaV9zZXR1cGAsIGBzM2Z3cm41X25jaV9wb3N0X3NldHVwYCwgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYCwgYHMzZndybjVfbmNpX2Nsa19jZmdgLCBgczNmd3JuNV9pMmNfY2xrX3NldGAsIGBzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZGAsIGFuZCBgczNmd3JuNV9pMmNfcHJvYmVgIOKAkyBlc3BlY2lhbGx5IHRoZSBsYXN0IG9uZSwgYXMgaXQgbG9va3MgbGlrZSBpdCdzIGJlZW4gbW9kaWZpZWQuXG5cbkluZGVlZCwgdGhlIG1vZGlmaWNhdGlvbiB0byBgczNmd3JuNV9pMmNfcHJvYmVgIGlzIGtleS4gSXQncyBiZWVuIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBuZXcgYGNsay1yZXFgIEdQSU8gYW5kIGNsb2NrIGdhdGluZyDigJMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGxpa2VseSByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgYW5kIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBmb3IgYW55IHRlc3RpbmcuXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBpcyByZWxldmFudD8gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYHMzZndybjVgIGRyaXZlciwgd2hpY2ggaXMgYW4gTkZDIGRyaXZlci4gSXQncyBhY2Nlc3NlZCB0aHJvdWdoIEkyQyBwcm9iaW5nIGFuZCB0aGUgTkNJIGNvcmUuIFRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSBjYW4gZnV6eiB0aGlzLiBUaGUgYW5zd2VyIGlzIHllcy4gSWYgc3l6a2FsbGVyIGNhbiBzdWNjZXNzZnVsbHkgaW5qZWN0IEkyQyBkZXZpY2VzIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBOQ0kgaW50ZXJmYWNlLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHZhcmlvdXMgY29kZSBwYXRocyB3aXRoaW4gdGhlIGRyaXZlci4gVGhlcmVmb3JlLCBJIGNhbiBjb25maWRlbnRseSBtYXJrIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC5cblxuVGltZSB0byBwcmVwYXJlIHRoZSBmaW5hbCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcxOSwiT3V0cHV0VG9rZW5zIjoyNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMjA6NDU6NDAuNjk5MzA0NTYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE3MDczMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ19TM0ZXUk41X0kyQ1wiLFxuICAgIFwiTkZDX1MzRldSTjVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzM2Z3cm41X25jaV9zZXR1cFwiLFxuICAgIFwiczNmd3JuNV9uY2lfcG9zdF9zZXR1cFwiLFxuICAgIFwiczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxcIixcbiAgICBcInMzZndybjVfbmNpX2Nsa19jZmdcIixcbiAgICBcInMzZndybjVfaTJjX2Nsa19zZXRcIixcbiAgICBcInMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkXCIsXG4gICAgXCJzM2Z3cm41X2kyY19wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgdmFyaWFudCBvZiB0aGUgU2Ftc3VuZyBORkMgY29udHJvbGxlciAoUzNOUk40VikgdG8gdGhlIHMzZndybjUgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBsb2dpYywgZmlybXdhcmUgbG9hZGluZyB2aWEgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzLCBhbmQgY2xvY2sgaGFuZGxpbmcgdmlhIGEgbmV3IEdQSU8gaW50ZXJydXB0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoTkZDIGRyaXZlcikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBJMkMgZGV2aWNlIHByb2JpbmcgYW5kIE5DSSBjb3JlIGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNfUzNGV1JONV9JMkNcIixcbiAgICBcIk5GQ19TM0ZXUk41XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiczNmd3JuNV9uY2lfc2V0dXBcIixcbiAgICBcInMzZndybjVfbmNpX3Bvc3Rfc2V0dXBcIixcbiAgICBcInMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsXCIsXG4gICAgXCJzM2Z3cm41X25jaV9jbGtfY2ZnXCIsXG4gICAgXCJzM2Z3cm41X2kyY19jbGtfc2V0XCIsXG4gICAgXCJzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZFwiLFxuICAgIFwiczNmd3JuNV9pMmNfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgbmV3IHZhcmlhbnQgb2YgdGhlIFNhbXN1bmcgTkZDIGNvbnRyb2xsZXIgKFMzTlJONFYpIHRvIHRoZSBzM2Z3cm41IGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gbG9naWMsIGZpcm13YXJlIGxvYWRpbmcgdmlhIE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcywgYW5kIGNsb2NrIGhhbmRsaW5nIHZpYSBhIG5ldyBHUElPIGludGVycnVwdC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKE5GQyBkcml2ZXIpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgSTJDIGRldmljZSBwcm9iaW5nIGFuZCBOQ0kgY29yZSBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh8ffr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 20:38:27 +0000 UTC FinishedAt: 2026-07-03 20:45:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC_S3FWRN5_I2C", "NFC_S3FWRN5" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC_S3FWRN5_I2C", "NFC_S3FWRN5" ], "series_id": "0d36a93d-11a2-4185-995e-1cd7ef2a0fe9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "s3fwrn5_nci_setup", "s3fwrn5_nci_post_setup", "s3fwrn5_nci_rf_configure_dual", "s3fwrn5_nci_clk_cfg", "s3fwrn5_i2c_clk_set", "s3fwrn5_i2c_clk_req_thread", "s3fwrn5_i2c_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDIwOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQ19TM0ZXUk41X0kyQyYjMzQ7LAogICAgJiMzNDtORkNfUzNGV1JONSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MzZndybjVfbmNpX3NldHVwJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX3Bvc3Rfc2V0dXAmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfY2xrX2NmZyYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X2kyY19jbGtfc2V0JiMzNDssCiAgICAmIzM0O3MzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkJiMzNDssCiAgICAmIzM0O3MzZndybjVfaTJjX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgdmFyaWFudCBvZiB0aGUgU2Ftc3VuZyBORkMgY29udHJvbGxlciAoUzNOUk40VikgdG8gdGhlIHMzZndybjUgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBsb2dpYywgZmlybXdhcmUgbG9hZGluZyB2aWEgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzLCBhbmQgY2xvY2sgaGFuZGxpbmcgdmlhIGEgbmV3IEdQSU8gaW50ZXJydXB0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoTkZDIGRyaXZlcikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBJMkMgZGV2aWNlIHByb2JpbmcgYW5kIE5DSSBjb3JlIGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAyMDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFmZWIxYWE0NzViZjA1NDZkYjg4YTQ1ODIxOTgyNDdmYWUxZjMyMTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDIwOjQ1OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcbmluZGV4IDEyYmFlZTQ1NzUyYzdiLi4zZWJjZDA5MzM5YjgxZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxuQEAgLTE0LDEyICYjNDM7MTQsMjAgQEAgcHJvcGVydGllczpcbiAgICAgZW51bTpcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmNcbiAgICAgICAtIHNhbXN1bmcsczNmd3JuODJcbiYjNDM7ICAgICAgLSBzYW1zdW5nLHMzbnJuNHYtaTJjXG4gXG4gICBlbi1ncGlvczpcbiAgICAgbWF4SXRlbXM6IDFcbiAgICAgZGVzY3JpcHRpb246XG4gICAgICAgT3V0cHV0IEdQSU8gcGluIHVzZWQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgY2hpcFxuIFxuJiM0MzsgIGNsay1yZXEtZ3Bpb3M6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIElucHV0IEdQSU8gcGluIGNvbm5lY3RlZCB0byB0aGUgY29udHJvbGxlciYjMzk7cyBjbG9jay1yZXF1ZXN0IG91dHB1dC4gV2hlblxuJiM0MzsgICAgICBwcmVzZW50LCB0aGUgcmVmZXJlbmNlIGNsb2NrIGlzIGVuYWJsZWQgaW4gcmVzcG9uc2UgdG8gdGhpcyBzaWduYWxcbiYjNDM7ICAgICAgaW5zdGVhZCBvZiBiZWluZyBsZWZ0IGFsd2F5cy1vbi5cbiYjNDM7XG4gICBpbnRlcnJ1cHRzOlxuICAgICBtYXhJdGVtczogMVxuIFxuQEAgLTU4LDEyICYjNDM7NjYsMjUgQEAgYWxsT2Y6XG4gICAgICAgcHJvcGVydGllczpcbiAgICAgICAgIGNvbXBhdGlibGU6XG4gICAgICAgICAgIGNvbnRhaW5zOlxuLSAgICAgICAgICAgIGNvbnN0OiBzYW1zdW5nLHMzZndybjUtaTJjXG4mIzQzOyAgICAgICAgICAgIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXG4mIzQzOyAgICAgICAgICAgICAgLSBzYW1zdW5nLHMzbnJuNHYtaTJjXG4gICAgIHRoZW46XG4gICAgICAgcmVxdWlyZWQ6XG4gICAgICAgICAtIGludGVycnVwdHNcbiAgICAgICAgIC0gcmVnXG4gXG4mIzQzOyAgIyBUaGUgY2xvY2stcmVxdWVzdCBoYW5kc2hha2Ugb25seSBleGlzdHMgb24gdGhlIFMzTlJONFYuXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgbm90OlxuJiM0MzsgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM25ybjR2LWkyY1xuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjbGstcmVxLWdwaW9zOiBmYWxzZVxuJiM0MztcbiBleGFtcGxlczpcbiAgIC0gfFxuICAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcbmluZGV4IGFmMGZhOGJkOTcwYjRmLi41OTMxN2VhYWQ3YWM5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY1xuQEAgLTEyMiwxMSAmIzQzOzEyMiw0NyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgczNmd3JuNV9uY2lfc2V0dXAoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJ1bnMgYWZ0ZXIgQ09SRV9SRVNFVCwgYmVmb3JlIENPUkVfSU5JVC4gVGhlIFMzTlJONFYgbmVlZHMgaXRzXG4mIzQzO1x0ICogcmVmZXJlbmNlIGNsb2NrIGNvbmZpZ3VyZWQgaGVyZSAodGhlIGRvd25zdHJlYW0gc3RhY2sgZG9lcyBpdCBpbiB0aGVcbiYjNDM7XHQgKiBib290bG9hZGVyLCBiZWZvcmUgQ09SRV9SRVNFVCwgYnV0IHRoaXMgaXMgdGhlIGVhcmxpZXN0IGhvb2sgdGhlIE5DSVxuJiM0MztcdCAqIGNvcmUgb2ZmZXJzIGFuZCB0aGUgY2hpcCBhY2NlcHRzIGl0KS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaW5mby1cdTAwM2V2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKVxuJiM0MztcdFx0cmV0dXJuIHMzZndybjVfbmNpX2Nsa19jZmcoaW5mbyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRpZiAoaW5mby1cdTAwM2V2YXJpYW50ID09IFMzRldSTjVfVkFSSUFOVF9TM05STjRWKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIFMzTlJONFYgc2hpcHMgd2l0aCB3b3JraW5nIGZpcm13YXJlIGJlaGluZCBhIGJvb3Rsb2FkZXJcbiYjNDM7XHRcdCAqIHByb3RvY29sIHRoaXMgZHJpdmVyIGRvZXMgbm90IGltcGxlbWVudCwgc28gdGhlcmUgaXMgbm9cbiYjNDM7XHRcdCAqIGRvd25sb2FkIHN0ZXA7IHRoZSBOQ0kgY29yZSBoYXMgYWxyZWFkeSBkb25lIENPUkVfUkVTRVQgJiM0MztcbiYjNDM7XHRcdCAqIENPUkVfSU5JVC4gSnVzdCAocmUpbG9hZCB0aGUgUkYgcmVnaXN0ZXJzIHZpYSBEVUFMX09QVElPTi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0gczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoaW5mbywgXCYjMzQ7c2VjX3MzbnJuNHZfaHdyZWcuYmluXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgXCYjMzQ7c2VjX3MzbnJuNHZfc3dyZWcuYmluXCYjMzQ7KTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBLZWVwIGdvaW5nIGV2ZW4gaWYgdGhlIGJsb2JzIGNvdWxkIG5vdCBiZSBsb2FkZWQ6IHRoZSBjaGlwXG4mIzQzO1x0XHQgKiBzdGlsbCBlbnVtZXJhdGVzIGFuZCBmYWxscyBiYWNrIHRvIHRoZSBSRiByZWdpc3RlcnMgcHJvZ3JhbW1lZFxuJiM0MztcdFx0ICogaW4gaXRzIGZsYXNoLCBzbyBORkMgbWF5IHdvcmsgYW55d2F5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRkZXZfd2FybihcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtyZnJlZyBjb25maWd1cmUgZmFpbGVkICglZClcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHMzZndybjVfZmlybXdhcmVfaW5pdChpbmZvKSkge1xuIFx0XHQvL3NraXAgYm9vdGxvYWRlciBtb2RlXG4gXHRcdHJldHVybiAwO1xuQEAgLTE1MiwxMyAmIzQzOzE4OCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0ge1xuIFx0Lm9wZW4gPSBzM2Z3cm41X25jaV9vcGVuLFxuIFx0LmNsb3NlID0gczNmd3JuNV9uY2lfY2xvc2UsXG4gXHQuc2VuZCA9IHMzZndybjVfbmNpX3NlbmQsXG4mIzQzO1x0LnNldHVwID0gczNmd3JuNV9uY2lfc2V0dXAsXG4gXHQucG9zdF9zZXR1cCA9IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAsXG4gXHQucHJvcF9vcHMgPSBzM2Z3cm41X25jaV9wcm9wX29wcyxcbiBcdC5uX3Byb3Bfb3BzID0gQVJSQVlfU0laRShzM2Z3cm41X25jaV9wcm9wX29wcyksXG4gfTtcbiBcbiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi1cdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpXG4mIzQzO1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudClcbiB7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvO1xuIFx0aW50IHJldDtcbkBAIC0xNzAsNiAmIzQzOzIwNyw3IEBAIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuIFx0aW5mby1cdTAwM2VwaHlfaWQgPSBwaHlfaWQ7XG4gXHRpbmZvLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0aW5mby1cdTAwM2VwaHlfb3BzID0gcGh5X29wcztcbiYjNDM7XHRpbmZvLVx1MDAzZXZhcmlhbnQgPSB2YXJpYW50O1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZpbmZvLVx1MDAzZW11dGV4KTtcbiBcbiBcdHMzZndybjVfc2V0X21vZGUoaW5mbywgUzNGV1JONV9NT0RFX0NPTEQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5pbmRleCBlOWEzNGQyN2EzNjk4NC4uODhhNDk4ODc5MWVmZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5AQCAtMjMsOSAmIzQzOzIzLDUzIEBAIHN0cnVjdCBzM2Z3cm41X2kyY19waHkge1xuIFx0c3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7XG4gXHRzdHJ1Y3QgY2xrICpjbGs7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPcHRpb25hbCBoYXJkd2FyZSBjbG9jay1yZXF1ZXN0IGhhbmRzaGFrZS4gV2hlbiBhIENMS19SRVEgR1BJTyBpc1xuJiM0MztcdCAqIHdpcmVkLCB0aGUgY2hpcCBkcml2ZXMgaXQgaGlnaCB3aGlsZSBpdCBuZWVkcyBpdHMgWEkgY2xvY2sgLS0gbm90YWJseVxuJiM0MztcdCAqIHRvIGdlbmVyYXRlIHRoZSBwb2xsL3JlYWRlciBjYXJyaWVyIC0tIGFuZCB0aGUgY2xvY2sgaXMgZ2F0ZWQgb24gaXRcbiYjNDM7XHQgKiBpbnN0ZWFkIG9mIGJlaW5nIGxlZnQgYWx3YXlzLW9uICh3aGljaCBuZXZlciBsZXRzIHRoZSBjaGlwJiMzOTtzIFRYIFBMTFxuJiM0MztcdCAqIGxvY2sgb24gYSBmcmVzaCBjbG9jayBzdGFydCwgbGVhdmluZyBpdCB1bmFibGUgdG8gcG9sbCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGdwaW9fZGVzYyAqZ3Bpb19jbGtfcmVxO1xuJiM0MztcdGJvb2wgY2xrX29uO1xuJiM0MztcdHN0cnVjdCBtdXRleCBjbGtfbG9jaztcdC8qIHNlcmlhbGlzZXMgY2xrX29uIGFnYWluc3QgdGhlIENMS19SRVEgaXJxICovXG4mIzQzO1xuIFx0dW5zaWduZWQgaW50IGlycV9za2lwOjE7XG4gfTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgczNmd3JuNV9pMmNfY2xrX3NldChzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHksIGJvb2wgb24pXG4mIzQzO3tcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBoeS1cdTAwM2VjbGtfbG9jayk7XG4mIzQzO1x0aWYgKG9uIFx1MDAyNlx1MDAyNiAhcGh5LVx1MDAzZWNsa19vbikge1xuJiM0MztcdFx0aW50IHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwaHktXHUwMDNlY2xrKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0ID09IDApXG4mIzQzO1x0XHRcdHBoeS1cdTAwM2VjbGtfb24gPSB0cnVlO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRkZXZfd2Fybl9vbmNlKFx1MDAyNnBoeS1cdTAwM2VpMmNfZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGNsb2NrICglZCk7IE5GQyBtYXkgbm90IHBvbGxcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgcmV0KTtcbiYjNDM7XHR9IGVsc2UgaWYgKCFvbiBcdTAwMjZcdTAwMjYgcGh5LVx1MDAzZWNsa19vbikge1xuJiM0MztcdFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBoeS1cdTAwM2VjbGspO1xuJiM0MztcdFx0cGh5LVx1MDAzZWNsa19vbiA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGh5LVx1MDAzZWNsa19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgczNmd3JuNV9pMmNfY2xrX2Rpc2FibGVfYWN0aW9uKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzM2Z3cm41X2kyY19jbGtfc2V0KGRhdGEsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkKGludCBpcnEsIHZvaWQgKnBoeV9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeSA9IHBoeV9pZDtcbiYjNDM7XG4mIzQzO1x0czNmd3JuNV9pMmNfY2xrX3NldChwaHksIGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKSBcdTAwM2UgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19zZXRfbW9kZSh2b2lkICpwaHlfaWQsIGVudW0gczNmd3JuNV9tb2RlIG1vZGUpXG4ge1xuIFx0c3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5ID0gcGh5X2lkO1xuQEAgLTE0Niw2ICYjNDM7MTkwLDcgQEAgc3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKVxuIFxuIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiB7XG4mIzQzO1x0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcbiBcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeTtcbiBcdGludCByZXQ7XG4gXG5AQCAtMTcyLDE1ICYjNDM7MjE3LDYzIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiBcdCAqIFMzRldSTjUgZGVwZW5kcyBvbiBhIGNsb2NrIGlucHV0IChcJiMzNDtYSVwmIzM0OyBwaW4pIHRvIGZ1bmN0aW9uIHByb3Blcmx5LlxuIFx0ICogRGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHRoaXMgY291bGQgYmUgYW4gYWx3YXlzLW9uXG4gXHQgKiBvc2NpbGxhdG9yIG9yIHNvbWUgZXh0ZXJuYWwgY2xvY2sgdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZC5cbi1cdCAqIE1ha2Ugc3VyZSB0aGUgY2xvY2sgaXMgcnVubmluZyBiZWZvcmUgc3RhcnRpbmcgUzNGV1JONS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElmIGEgQ0xLX1JFUSBHUElPIGlzIHdpcmVkLCB0aGUgY2hpcCBnYXRlcyB0aGUgY2xvY2sgaXRzZWxmIChkcml2aW5nXG4mIzQzO1x0ICogQ0xLX1JFUSBoaWdoIHdoZW4gaXQgbmVlZHMgWEkpOyBzZXJ2aWNlIHRoYXQgaGFuZHNoYWtlLiBPdGhlcndpc2UganVzdFxuJiM0MztcdCAqIG1ha2Ugc3VyZSB0aGUgY2xvY2sgaXMgcnVubmluZyBiZWZvcmUgc3RhcnRpbmcgUzNGV1JONS5cbiBcdCAqL1xuLVx0cGh5LVx1MDAzZWNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIE5VTEwpO1xuLVx0aWYgKElTX0VSUihwaHktXHUwMDNlY2xrKSlcbi1cdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgUFRSX0VSUihwaHktXHUwMDNlY2xrKSxcbi1cdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwaHktXHUwMDNlY2xrX2xvY2spO1xuJiM0MztcdHBoeS1cdTAwM2VncGlvX2Nsa19yZXEgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBcJiMzNDtjbGstcmVxXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgR1BJT0RfSU4pO1xuJiM0MztcdGlmIChJU19FUlIocGh5LVx1MDAzZWdwaW9fY2xrX3JlcSkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeS1cdTAwM2VncGlvX2Nsa19yZXEpIHtcbiYjNDM7XHRcdGludCBjbGtfcmVxX2lycTtcbiYjNDM7XG4mIzQzO1x0XHRwaHktXHUwMDNlY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIE5VTEwpO1xuJiM0MztcdFx0aWYgKElTX0VSUihwaHktXHUwMDNlY2xrKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgUFRSX0VSUihwaHktXHUwMDNlY2xrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFVubGlrZSB0aGUgYWx3YXlzLW9uIGJyYW5jaCBiZWxvdywgdGhpcyBjbG9jayBpcyBlbmFibGVkIGJ5XG4mIzQzO1x0XHQgKiBoYW5kIGZyb20gdGhlIENMS19SRVEgaGFuZGxlciwgc28gZGV2bSB3aWxsIG5vdCBkaXNhYmxlIGl0IG9uXG4mIzQzO1x0XHQgKiB1bmJpbmQuIEdhdGUgaXQgb2ZmIGV4cGxpY2l0bHkgaWYgaXQgaXMgc3RpbGwgb24gYXQgdGVhcmRvd24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHMzZndybjVfaTJjX2Nsa19kaXNhYmxlX2FjdGlvbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBwaHkpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRjbGtfcmVxX2lycSA9IGdwaW9kX3RvX2lycShwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKTtcbiYjNDM7XHRcdGlmIChjbGtfcmVxX2lycSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIGNsa19yZXFfaXJxO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgY2xrX3JlcV9pcnEsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkLFxuJiM0MztcdFx0XHRcdFx0XHRJUlFGX1RSSUdHRVJfUklTSU5HIHxcbiYjNDM7XHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX0ZBTExJTkcgfFxuJiM0MztcdFx0XHRcdFx0XHRJUlFGX09ORVNIT1QsXG4mIzQzO1x0XHRcdFx0XHRcdFwmIzM0O3MzZndybjVfY2xrX3JlcVwmIzM0OywgcGh5KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0LyogU2VlZCB0aGUgY2xvY2sgc3RhdGUgZnJvbSB0aGUgY3VycmVudCBDTEtfUkVRIGxldmVsLiAqL1xuJiM0MztcdFx0czNmd3JuNV9pMmNfY2xrX3NldChwaHksXG4mIzQzO1x0XHRcdFx0ICAgIGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKSBcdTAwM2UgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBoeS1cdTAwM2VjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbiYjNDM7XHRcdGlmIChJU19FUlIocGh5LVx1MDAzZWNsaykpXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFBUUl9FUlIocGh5LVx1MDAzZWNsayksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgY2xvY2tcXG5cJiMzNDspO1xuJiM0MztcdH1cbiBcbiYjNDM7XHQvKiBObyBtYXRjaCBkYXRhIChlLmcuIGkyY19kZXZpY2VfaWQgYmluZGluZykgbWVhbnMgdGhlIGRlZmF1bHQgRldETC4gKi9cbiYjNDM7XHR2YXJpYW50ID0gKHVpbnRwdHJfdClpMmNfZ2V0X21hdGNoX2RhdGEoY2xpZW50KTtcbiBcdHJldCA9IHMzZndybjVfcHJvYmUoXHUwMDI2cGh5LVx1MDAzZWNvbW1vbi5uZGV2LCBwaHksIFx1MDAyNnBoeS1cdTAwM2VpMmNfZGV2LVx1MDAzZWRldixcbi1cdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMsIHZhcmlhbnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMTAsOCAmIzQzOzMwMywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgczNmd3JuNV9pMmNfaWRfdGFibGVbXSA9IHtcbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfczNmd3JuNV9pMmNfbWF0Y2hbXSBfX21heWJlX3VudXNlZCA9IHtcbi1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtzYW1zdW5nLHMzZndybjUtaTJjXCYjMzQ7LCB9LFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zM2Z3cm41X2kyY19tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtzYW1zdW5nLHMzZndybjUtaTJjXCYjMzQ7LFxuJiM0MztcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9GV0RMLCB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtzYW1zdW5nLHMzbnJuNHYtaTJjXCYjMzQ7LFxuJiM0MztcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9TM05STjRWLCB9LFxuIFx0e31cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTtcbkBAIC0yMTksNyAmIzQzOzMxNSw3IEBAIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTtcbiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgczNmd3JuNV9pMmNfZHJpdmVyID0ge1xuIFx0LmRyaXZlciA9IHtcbiBcdFx0Lm5hbWUgPSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSxcbi1cdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9mX3MzZndybjVfaTJjX21hdGNoKSxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IG9mX3MzZndybjVfaTJjX21hdGNoLFxuIFx0fSxcbiBcdC5wcm9iZSA9IHMzZndybjVfaTJjX3Byb2JlLFxuIFx0LnJlbW92ZSA9IHMzZndybjVfaTJjX3JlbW92ZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xuaW5kZXggNWE5ZGUxMWJiZWNlYTQuLjA0ZjRjMzYyNjkxZTNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuY1xuQEAgLTgsNiAmIzQzOzgsOSBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlubWF4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7czNmd3JuNS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bmNpLmhcJiMzNDtcbkBAIC0yMCw3ICYjNDM7MjMsNyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcbiYjNDM7Y29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xuIFx0e1xuIFx0XHQub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksXG4gXHRcdFx0XHROQ0lfUFJPUF9TRVRfUkZSRUcpLFxuQEAgLTQxLDYgJiM0Mzs0NCwxMSBAQCBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7XG4gXHRcdFx0XHROQ0lfUFJPUF9GV19DRkcpLFxuIFx0XHQucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcbiYjNDM7XHRcdFx0XHROQ0lfUFJPUF9EVUFMX09QVElPTiksXG4mIzQzO1x0XHQucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsXG4mIzQzO1x0fSxcbiB9O1xuIFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXG5AQCAtMTE3LDMgJiM0MzsxMjUsMTA0IEBAIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSlcbiBcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb25maWd1cmUgdGhlIHJlZmVyZW5jZSBjbG9jay4gVGhlIFMzTlJONFYgZXhwZWN0cyB0aGUgc2luZ2xlLWJ5dGUgRldfQ0ZHXG4mIzQzOyAqIGZvcm0gKGp1c3QgdGhlIGNsb2NrLXNwZWVkIHNlbGVjdG9yKS4gVGhlIGRvd25zdHJlYW0gc3RhY2sgc2VuZHMgdGhpcyBpbiB0aGVcbiYjNDM7ICogYm9vdGxvYWRlciBiZWZvcmUgQ09SRV9SRVNFVDsgdGhlIGVhcmxpZXN0IHRoZSBtYWlubGluZSBOQ0kgY29yZSBsZXRzIHVzIGluXG4mIzQzOyAqIGlzIHRoZSAtXHUwMDNlc2V0dXAgaG9vayAoYWZ0ZXIgQ09SRV9SRVNFVCwgYmVmb3JlIENPUkVfSU5JVCksIHdoaWNoIHdvcmtzLlxuJiM0MzsgKi9cbiYjNDM7aW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHU4IGNsa19zcGVlZCA9IE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRUQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsIFx1MDAyNmNsa19zcGVlZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFMzTlJONFYgUkYgcmVnaXN0ZXIgdXBkYXRlLiBUaGUgSFcgYW5kIFNXIHJlZ2lzdGVyIGJsb2JzIGFyZSBtZXJnZWQgaW50byBhXG4mIzQzOyAqIHNpbmdsZSBzdHJlYW0gKEhXIGZpcnN0KSBhbmQgcHVzaGVkIHZpYSB0aGUgRFVBTF9PUFRJT04gY29tbWFuZDpcbiYjNDM7ICogU1RBUlRfVVBEQVRFLCBvbmUgU0VUX09QVElPTiBwZXIgMjUyLWJ5dGUgc2VjdGlvbiwgdGhlbiBTVE9QX1VQREFURSBjYXJyeWluZ1xuJiM0MzsgKiBhIDE2LWJpdCBjaGVja3N1bSAocnVubmluZyBzdW0gb2YgdGhlIG1lcmdlZCBzdHJlYW0gYXMgMzItYml0IHdvcmRzKS5cbiYjNDM7ICovXG4mIzQzO2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaHdfZncgPSBOVUxMLCAqc3dfZncgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHNldF9vcHRpb247XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2aW5mby1cdTAwM2VuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2O1xuJiM0MztcdHNpemVfdCBtZXJnZWRfc2l6ZSwgaSwgbGVuO1xuJiM0MztcdHU4ICptZXJnZWQgPSBOVUxMO1xuJiM0MztcdHU4IHN0b3BfY21kWzNdO1xuJiM0MztcdHUzMiBjaGVja3N1bTtcbiYjNDM7XHR1OCBzdWJfb2lkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2aHdfZncsIGh3X25hbWUsIGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcdTAwMjZzd19mdywgc3dfbmFtZSwgZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXRfaHc7XG4mIzQzO1xuJiM0MztcdG1lcmdlZF9zaXplID0gaHdfZnctXHUwMDNlc2l6ZSAmIzQzOyBzd19mdy1cdTAwM2VzaXplO1xuJiM0MztcdG1lcmdlZCA9IGttYWxsb2MobWVyZ2VkX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbWVyZ2VkKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdG1lbWNweShtZXJnZWQsIGh3X2Z3LVx1MDAzZWRhdGEsIGh3X2Z3LVx1MDAzZXNpemUpO1xuJiM0MztcdG1lbWNweShtZXJnZWQgJiM0MzsgaHdfZnctXHUwMDNlc2l6ZSwgc3dfZnctXHUwMDNlZGF0YSwgc3dfZnctXHUwMDNlc2l6ZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUnVubmluZyBzdW0gb2YgdGhlIG1lcmdlZCBzdHJlYW0gYXMgbGl0dGxlLWVuZGlhbiAzMi1iaXQgd29yZHMuIFRoZVxuJiM0MztcdCAqIHJmcmVnIGJsb2JzIGFyZSB3b3JkLWFsaWduZWQsIHNvIHRoZSBsb29wIGNvbnN1bWVzIHRoZSB3aG9sZSBzdHJlYW07XG4mIzQzO1x0ICogc2hvdWxkIGEgZnV0dXJlIGJsb2Igbm90IGJlIGEgbXVsdGlwbGUgb2YgNCBieXRlcyBpdHMgdGFpbCB3b3VsZCBiZVxuJiM0MztcdCAqIGlnbm9yZWQgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjaGVja3N1bSA9IDA7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSAmIzQzOyA0IFx1MDAzYz0gbWVyZ2VkX3NpemU7IGkgJiM0Mzs9IDQpXG4mIzQzO1x0XHRjaGVja3N1bSAmIzQzOz0gZ2V0X3VuYWxpZ25lZF9sZTMyKG1lcmdlZCAmIzQzOyBpKTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2RiZyhkZXYsIFwmIzM0O3JmcmVnIGR1YWwtb3B0aW9uIHVwZGF0ZTogJXMgJiM0MzsgJXNcXG5cJiMzNDssIGh3X25hbWUsIHN3X25hbWUpO1xuJiM0MztcbiYjNDM7XHQvKiBTVEFSVF9VUERBVEUgKi9cbiYjNDM7XHRzdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU1RBUlRfVVBEQVRFO1xuJiM0MztcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcdTAwMjZzdWJfb2lkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VW5hYmxlIHRvIHN0YXJ0IHJmcmVnIHVwZGF0ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNFVF9PUFRJT04gcGVyIHNlY3Rpb24gKi9cbiYjNDM7XHRzZXRfb3B0aW9uLnN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OO1xuJiM0MztcdHNldF9vcHRpb24uaW5kZXggPSAwO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1lcmdlZF9zaXplOyBpICYjNDM7PSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkge1xuJiM0MztcdFx0bGVuID0gbWluX3Qoc2l6ZV90LCBtZXJnZWRfc2l6ZSAtIGksIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKTtcbiYjNDM7XHRcdG1lbWNweShzZXRfb3B0aW9uLmRhdGEsIG1lcmdlZCAmIzQzOyBpLCBsZW4pO1xuJiM0MztcdFx0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sXG4mIzQzO1x0XHRcdFx0ICAgbGVuICYjNDM7IDIsIChfX3U4ICopXHUwMDI2c2V0X29wdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtyZnJlZyB1cGRhdGUgZXJyb3IgKGNvZGU9JWQpXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNldF9vcHRpb24uaW5kZXgmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU1RPUF9VUERBVEUgd2l0aCBjaGVja3N1bSAqL1xuJiM0MztcdHN0b3BfY21kWzBdID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7XG4mIzQzO1x0cHV0X3VuYWxpZ25lZF9sZTE2KGNoZWNrc3VtLCBcdTAwMjZzdG9wX2NtZFsxXSk7XG4mIzQzO1x0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDMsIHN0b3BfY21kKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VW5hYmxlIHRvIHN0b3AgcmZyZWcgdXBkYXRlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2X2RiZyhkZXYsIFwmIzM0O3JmcmVnIGR1YWwtb3B0aW9uIHVwZGF0ZTogc3VjY2Vzc1xcblwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShtZXJnZWQpO1xuJiM0MztcdHJlbGVhc2VfZmlybXdhcmUoc3dfZncpO1xuJiM0MztvdXRfaHc6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShod19mdyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG5pbmRleCBiYzRiY2UyYmJjNGQ5My4uMjMxNzliYTA5NWExYjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXG5AQCAtNDAsNiAmIzQzOzQwLDEzIEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7XG4gXG4gI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdcdFx0MHgyOFxuIFxuJiM0MzsvKlxuJiM0MzsgKiBTaW5nbGUtYnl0ZSBGV19DRkcgcGF5bG9hZCAoY2xvY2stc3BlZWQgc2VsZWN0b3IpIGZvciB0aGUgUzNOUk40ViByZWZlcmVuY2VcbiYjNDM7ICogY2xvY2suIFRha2VuIGZyb20gdGhlIHZlbmRvciBjb25maWd1cmF0aW9uIGZvciB0aGlzIHBhcnQgKHRoZSBlbmNvZGluZyBpc1xuJiM0MzsgKiBub3QgZG9jdW1lbnRlZCkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0ZXX0NGR19DTEtfU1BFRURcdDB4MTFcbiYjNDM7XG4gc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19jbWQge1xuIFx0X191OCBjbGtfdHlwZTtcbiBcdF9fdTggY2xrX3NwZWVkO1xuQEAgLTUwLDcgJiM0Mzs1NywzMCBAQCBzdHJ1Y3QgbmNpX3Byb3BfZndfY2ZnX3JzcCB7XG4gXHRfX3U4IHN0YXR1cztcbiB9O1xuIFxuLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF07XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBTM05STjRWIHVwZGF0ZXMgaXRzIFJGIHJlZ2lzdGVycyB0aHJvdWdoIGEgc2luZ2xlIFwmIzM0O2R1YWwgb3B0aW9uXCYjMzQ7IGNvbW1hbmRcbiYjNDM7ICogKGEgc3ViLU9JRCBzZWxlY3RzIHRoZSBvcGVyYXRpb24pIGluc3RlYWQgb2YgdGhlIFNUQVJUL1NFVC9TVE9QX1JGUkVHXG4mIzQzOyAqIG9wY29kZXMgYWJvdmUsIGFuZCBleHBlY3RzIHRoZSBIVyBhbmQgU1cgcmVnaXN0ZXIgYmxvYnMgbWVyZ2VkIGludG8gb25lXG4mIzQzOyAqIHN0cmVhbS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9PUFRJT05cdFx0MHgyYVxuJiM0MztcbiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEVcdDB4MDFcbiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OXHQweDAyXG4mIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEVcdDB4MDNcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkVcdDI1MlxuJiM0MztcbiYjNDM7c3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQge1xuJiM0MztcdF9fdTggc3ViX29pZDtcdC8qIE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT04gKi9cbiYjNDM7XHRfX3U4IGluZGV4O1xuJiM0MztcdF9fdTggZGF0YVtOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRV07XG4mIzQzO307XG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdO1xuIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XG4mIzQzO2ludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLFxuJiM0MztcdFx0XHRcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7XG4mIzQzO2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pO1xuIFxuICNlbmRpZiAvKiBfX0xPQ0FMX1MzRldSTjVfTkNJX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxuaW5kZXggMmI0OTIyMzYwOTBiODUuLjJkOGMxMjA5MWZiYTU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXG5AQCAtMjEsNiAmIzQzOzIxLDE3IEBAIGVudW0gczNmd3JuNV9tb2RlIHtcbiBcdFMzRldSTjVfTU9ERV9GVyxcbiB9O1xuIFxuJiM0MztlbnVtIHMzZndybjVfdmFyaWFudCB7XG4mIzQzO1x0LyogUzNGV1JONSAvIFMzRldSTjgyOiBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGJ5IHRoaXMgZHJpdmVyICovXG4mIzQzO1x0UzNGV1JONV9WQVJJQU5UX0ZXREwsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTM05STjRWOiBzaGlwcyB3aXRoIHdvcmtpbmcgZmlybXdhcmUgYmVoaW5kIGEgYm9vdGxvYWRlciBwcm90b2NvbFxuJiM0MztcdCAqIHRoaXMgZHJpdmVyIGRvZXMgbm90IGltcGxlbWVudDsgc2tpcCB0aGUgZG93bmxvYWQsIGNvbmZpZ3VyZSB0aGVcbiYjNDM7XHQgKiBjbG9jayAoRldfQ0ZHKSBhbmQgdXBkYXRlIHRoZSBSRiByZWdpc3RlcnMgdmlhIHRoZSBEVUFMX09QVElPTiBjbWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0UzNGV1JONV9WQVJJQU5UX1MzTlJONFYsXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMge1xuIFx0dm9pZCAoKnNldF93YWtlKSh2b2lkICppZCwgYm9vbCBzbGVlcCk7XG4gXHR2b2lkICgqc2V0X21vZGUpKHZvaWQgKmlkLCBlbnVtIHMzZndybjVfbW9kZSk7XG5AQCAtMzYsNiAmIzQzOzQ3LDcgQEAgc3RydWN0IHMzZndybjVfaW5mbyB7XG4gXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzO1xuIFxuIFx0c3RydWN0IHMzZndybjVfZndfaW5mbyBmd19pbmZvO1xuJiM0MztcdGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQ7XG4gXG4gXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XG4gfTtcbkBAIC03OCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuLVx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcyk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7XG4gdm9pZCBzM2Z3cm41X3JlbW92ZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7XG4gXG4gaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG5pbmRleCA1NDBhNGRkYjBiMDVlOS4uNDcxNzJkNzM5YTQxZjYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIHN0YXRpYyBpbnQgczNmd3JuODJfdWFydF9wcm9iZShzdHJ1Y3Qgc2VyZGV2X2RldmljZSAqc2VyZGV2KVxuIFx0fVxuIFxuIFx0cmV0ID0gczNmd3JuNV9wcm9iZShcdTAwMjZwaHktXHUwMDNlY29tbW9uLm5kZXYsIHBoeSwgXHUwMDI2cGh5LVx1MDAzZXNlcl9kZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCAgICBcdTAwMjZ1YXJ0X3BoeV9vcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2dWFydF9waHlfb3BzLCBTM0ZXUk41X1ZBUklBTlRfRldETCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9zZXJkZXY7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMjA6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDX1MzRldSTjVfSTJDJiMzNDssCiAgICAmIzM0O05GQ19TM0ZXUk41JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7czNmd3JuNV9uY2lfc2V0dXAmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfcG9zdF9zZXR1cCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9jbGtfY2ZnJiMzNDssCiAgICAmIzM0O3MzZndybjVfaTJjX2Nsa19zZXQmIzM0OywKICAgICYjMzQ7czNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWQmIzM0OywKICAgICYjMzQ7czNmd3JuNV9pMmNfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIG5ldyB2YXJpYW50IG9mIHRoZSBTYW1zdW5nIE5GQyBjb250cm9sbGVyIChTM05STjRWKSB0byB0aGUgczNmd3JuNSBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBmaXJtd2FyZSBsb2FkaW5nIHZpYSBOQ0kgcHJvcHJpZXRhcnkgY29tbWFuZHMsIGFuZCBjbG9jayBoYW5kbGluZyB2aWEgYSBuZXcgR1BJTyBpbnRlcnJ1cHQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChORkMgZHJpdmVyKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIEkyQyBkZXZpY2UgcHJvYmluZyBhbmQgTkNJIGNvcmUgaW50ZXJhY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZmViMWFhNDc1YmYwNTQ2ZGI4OGE0NTgyMTk4MjQ3ZmFlMWYzMjExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAyMDo0NTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwKaW5kZXggMTJiYWVlNDU3NTJjN2IuLjNlYmNkMDkzMzliODFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbApAQCAtMTQsMTIgJiM0MzsxNCwyMCBAQCBwcm9wZXJ0aWVzOgogICAgIGVudW06CiAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmMKICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm44MgomIzQzOyAgICAgIC0gc2Ftc3VuZyxzM25ybjR2LWkyYwogCiAgIGVuLWdwaW9zOgogICAgIG1heEl0ZW1zOiAxCiAgICAgZGVzY3JpcHRpb246CiAgICAgICBPdXRwdXQgR1BJTyBwaW4gdXNlZCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBjaGlwCiAKJiM0MzsgIGNsay1yZXEtZ3Bpb3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIElucHV0IEdQSU8gcGluIGNvbm5lY3RlZCB0byB0aGUgY29udHJvbGxlciYjMzk7cyBjbG9jay1yZXF1ZXN0IG91dHB1dC4gV2hlbgomIzQzOyAgICAgIHByZXNlbnQsIHRoZSByZWZlcmVuY2UgY2xvY2sgaXMgZW5hYmxlZCBpbiByZXNwb25zZSB0byB0aGlzIHNpZ25hbAomIzQzOyAgICAgIGluc3RlYWQgb2YgYmVpbmcgbGVmdCBhbHdheXMtb24uCiYjNDM7CiAgIGludGVycnVwdHM6CiAgICAgbWF4SXRlbXM6IDEKIApAQCAtNTgsMTIgJiM0Mzs2NiwyNSBAQCBhbGxPZjoKICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgIGNvbXBhdGlibGU6CiAgICAgICAgICAgY29udGFpbnM6Ci0gICAgICAgICAgICBjb25zdDogc2Ftc3VuZyxzM2Z3cm41LWkyYwomIzQzOyAgICAgICAgICAgIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmMKJiM0MzsgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM25ybjR2LWkyYwogICAgIHRoZW46CiAgICAgICByZXF1aXJlZDoKICAgICAgICAgLSBpbnRlcnJ1cHRzCiAgICAgICAgIC0gcmVnCiAKJiM0MzsgICMgVGhlIGNsb2NrLXJlcXVlc3QgaGFuZHNoYWtlIG9ubHkgZXhpc3RzIG9uIHRoZSBTM05STjRWLgomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBub3Q6CiYjNDM7ICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICAgIGNvbnRhaW5zOgomIzQzOyAgICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNucm40di1pMmMKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY2xrLXJlcS1ncGlvczogZmFsc2UKJiM0MzsKIGV4YW1wbGVzOgogICAtIHwKICAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmgmZ3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jCmluZGV4IGFmMGZhOGJkOTcwYjRmLi41OTMxN2VhYWQ3YWM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmMKQEAgLTEyMiwxMSAmIzQzOzEyMiw0NyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHMzZndybjVfbmNpX3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUnVucyBhZnRlciBDT1JFX1JFU0VULCBiZWZvcmUgQ09SRV9JTklULiBUaGUgUzNOUk40ViBuZWVkcyBpdHMKJiM0MzsJICogcmVmZXJlbmNlIGNsb2NrIGNvbmZpZ3VyZWQgaGVyZSAodGhlIGRvd25zdHJlYW0gc3RhY2sgZG9lcyBpdCBpbiB0aGUKJiM0MzsJICogYm9vdGxvYWRlciwgYmVmb3JlIENPUkVfUkVTRVQsIGJ1dCB0aGlzIGlzIHRoZSBlYXJsaWVzdCBob29rIHRoZSBOQ0kKJiM0MzsJICogY29yZSBvZmZlcnMgYW5kIHRoZSBjaGlwIGFjY2VwdHMgaXQpLgomIzQzOwkgKi8KJiM0MzsJaWYgKGluZm8tJmd0O3ZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpCiYjNDM7CQlyZXR1cm4gczNmd3JuNV9uY2lfY2xrX2NmZyhpbmZvKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQogewogCXN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7CiAJaW50IHJldDsKIAomIzQzOwlpZiAoaW5mby0mZ3Q7dmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40VikgewomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBTM05STjRWIHNoaXBzIHdpdGggd29ya2luZyBmaXJtd2FyZSBiZWhpbmQgYSBib290bG9hZGVyCiYjNDM7CQkgKiBwcm90b2NvbCB0aGlzIGRyaXZlciBkb2VzIG5vdCBpbXBsZW1lbnQsIHNvIHRoZXJlIGlzIG5vCiYjNDM7CQkgKiBkb3dubG9hZCBzdGVwOyB0aGUgTkNJIGNvcmUgaGFzIGFscmVhZHkgZG9uZSBDT1JFX1JFU0VUICYjNDM7CiYjNDM7CQkgKiBDT1JFX0lOSVQuIEp1c3QgKHJlKWxvYWQgdGhlIFJGIHJlZ2lzdGVycyB2aWEgRFVBTF9PUFRJT04uCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKGluZm8sICYjMzQ7c2VjX3MzbnJuNHZfaHdyZWcuYmluJiMzNDssCiYjNDM7CQkJCQkJICAgICYjMzQ7c2VjX3MzbnJuNHZfc3dyZWcuYmluJiMzNDspOwomIzQzOwkJLyoKJiM0MzsJCSAqIEtlZXAgZ29pbmcgZXZlbiBpZiB0aGUgYmxvYnMgY291bGQgbm90IGJlIGxvYWRlZDogdGhlIGNoaXAKJiM0MzsJCSAqIHN0aWxsIGVudW1lcmF0ZXMgYW5kIGZhbGxzIGJhY2sgdG8gdGhlIFJGIHJlZ2lzdGVycyBwcm9ncmFtbWVkCiYjNDM7CQkgKiBpbiBpdHMgZmxhc2gsIHNvIE5GQyBtYXkgd29yayBhbnl3YXkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWRldl93YXJuKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtyZnJlZyBjb25maWd1cmUgZmFpbGVkICglZClcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKIAlpZiAoczNmd3JuNV9maXJtd2FyZV9pbml0KGluZm8pKSB7CiAJCS8vc2tpcCBib290bG9hZGVyIG1vZGUKIAkJcmV0dXJuIDA7CkBAIC0xNTIsMTMgJiM0MzsxODgsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHsKIAkub3BlbiA9IHMzZndybjVfbmNpX29wZW4sCiAJLmNsb3NlID0gczNmd3JuNV9uY2lfY2xvc2UsCiAJLnNlbmQgPSBzM2Z3cm41X25jaV9zZW5kLAomIzQzOwkuc2V0dXAgPSBzM2Z3cm41X25jaV9zZXR1cCwKIAkucG9zdF9zZXR1cCA9IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAsCiAJLnByb3Bfb3BzID0gczNmd3JuNV9uY2lfcHJvcF9vcHMsCiAJLm5fcHJvcF9vcHMgPSBBUlJBWV9TSVpFKHMzZndybjVfbmNpX3Byb3Bfb3BzKSwKIH07CiAKIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LAotCWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpCiYjNDM7CWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpCiB7CiAJc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbzsKIAlpbnQgcmV0OwpAQCAtMTcwLDYgJiM0MzsyMDcsNyBAQCBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldiwKIAlpbmZvLSZndDtwaHlfaWQgPSBwaHlfaWQ7CiAJaW5mby0mZ3Q7cGRldiA9IHBkZXY7CiAJaW5mby0mZ3Q7cGh5X29wcyA9IHBoeV9vcHM7CiYjNDM7CWluZm8tJmd0O3ZhcmlhbnQgPSB2YXJpYW50OwogCW11dGV4X2luaXQoJmFtcDtpbmZvLSZndDttdXRleCk7CiAKIAlzM2Z3cm41X3NldF9tb2RlKGluZm8sIFMzRldSTjVfTU9ERV9DT0xEKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jCmluZGV4IGU5YTM0ZDI3YTM2OTg0Li44OGE0OTg4NzkxZWZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jCkBAIC0yMyw5ICYjNDM7MjMsNTMgQEAgc3RydWN0IHMzZndybjVfaTJjX3BoeSB7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7CiAJc3RydWN0IGNsayAqY2xrOwogCiYjNDM7CS8qCiYjNDM7CSAqIE9wdGlvbmFsIGhhcmR3YXJlIGNsb2NrLXJlcXVlc3QgaGFuZHNoYWtlLiBXaGVuIGEgQ0xLX1JFUSBHUElPIGlzCiYjNDM7CSAqIHdpcmVkLCB0aGUgY2hpcCBkcml2ZXMgaXQgaGlnaCB3aGlsZSBpdCBuZWVkcyBpdHMgWEkgY2xvY2sgLS0gbm90YWJseQomIzQzOwkgKiB0byBnZW5lcmF0ZSB0aGUgcG9sbC9yZWFkZXIgY2FycmllciAtLSBhbmQgdGhlIGNsb2NrIGlzIGdhdGVkIG9uIGl0CiYjNDM7CSAqIGluc3RlYWQgb2YgYmVpbmcgbGVmdCBhbHdheXMtb24gKHdoaWNoIG5ldmVyIGxldHMgdGhlIGNoaXAmIzM5O3MgVFggUExMCiYjNDM7CSAqIGxvY2sgb24gYSBmcmVzaCBjbG9jayBzdGFydCwgbGVhdmluZyBpdCB1bmFibGUgdG8gcG9sbCkuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX2Nsa19yZXE7CiYjNDM7CWJvb2wgY2xrX29uOwomIzQzOwlzdHJ1Y3QgbXV0ZXggY2xrX2xvY2s7CS8qIHNlcmlhbGlzZXMgY2xrX29uIGFnYWluc3QgdGhlIENMS19SRVEgaXJxICovCiYjNDM7CiAJdW5zaWduZWQgaW50IGlycV9za2lwOjE7CiB9OwogCiYjNDM7c3RhdGljIHZvaWQgczNmd3JuNV9pMmNfY2xrX3NldChzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHksIGJvb2wgb24pCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7cGh5LSZndDtjbGtfbG9jayk7CiYjNDM7CWlmIChvbiAmYW1wOyZhbXA7ICFwaHktJmd0O2Nsa19vbikgewomIzQzOwkJaW50IHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwaHktJmd0O2Nsayk7CiYjNDM7CiYjNDM7CQlpZiAocmV0ID09IDApCiYjNDM7CQkJcGh5LSZndDtjbGtfb24gPSB0cnVlOwomIzQzOwkJZWxzZQomIzQzOwkJCWRldl93YXJuX29uY2UoJmFtcDtwaHktJmd0O2kyY19kZXYtJmd0O2RldiwKJiM0MzsJCQkJICAgICAgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIGNsb2NrICglZCk7IE5GQyBtYXkgbm90IHBvbGxcbiYjMzQ7LAomIzQzOwkJCQkgICAgICByZXQpOwomIzQzOwl9IGVsc2UgaWYgKCFvbiAmYW1wOyZhbXA7IHBoeS0mZ3Q7Y2xrX29uKSB7CiYjNDM7CQljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LSZndDtjbGspOwomIzQzOwkJcGh5LSZndDtjbGtfb24gPSBmYWxzZTsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwaHktJmd0O2Nsa19sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgczNmd3JuNV9pMmNfY2xrX2Rpc2FibGVfYWN0aW9uKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzM2Z3cm41X2kyY19jbGtfc2V0KGRhdGEsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlycXJldHVybl90IHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkKGludCBpcnEsIHZvaWQgKnBoeV9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeSA9IHBoeV9pZDsKJiM0MzsKJiM0MzsJczNmd3JuNV9pMmNfY2xrX3NldChwaHksIGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChwaHktJmd0O2dwaW9fY2xrX3JlcSkgJmd0OyAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHMzZndybjVfaTJjX3NldF9tb2RlKHZvaWQgKnBoeV9pZCwgZW51bSBzM2Z3cm41X21vZGUgbW9kZSkKIHsKIAlzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHkgPSBwaHlfaWQ7CkBAIC0xNDYsNiAmIzQzOzE5MCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBzM2Z3cm41X2kyY19pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKnBoeV9pZCkKIAogc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewomIzQzOwllbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50OwogCXN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeTsKIAlpbnQgcmV0OwogCkBAIC0xNzIsMTUgJiM0MzsyMTcsNjMgQEAgc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogCSAqIFMzRldSTjUgZGVwZW5kcyBvbiBhIGNsb2NrIGlucHV0ICgmIzM0O1hJJiMzNDsgcGluKSB0byBmdW5jdGlvbiBwcm9wZXJseS4KIAkgKiBEZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gdGhpcyBjb3VsZCBiZSBhbiBhbHdheXMtb24KIAkgKiBvc2NpbGxhdG9yIG9yIHNvbWUgZXh0ZXJuYWwgY2xvY2sgdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZC4KLQkgKiBNYWtlIHN1cmUgdGhlIGNsb2NrIGlzIHJ1bm5pbmcgYmVmb3JlIHN0YXJ0aW5nIFMzRldSTjUuCiYjNDM7CSAqCiYjNDM7CSAqIElmIGEgQ0xLX1JFUSBHUElPIGlzIHdpcmVkLCB0aGUgY2hpcCBnYXRlcyB0aGUgY2xvY2sgaXRzZWxmIChkcml2aW5nCiYjNDM7CSAqIENMS19SRVEgaGlnaCB3aGVuIGl0IG5lZWRzIFhJKTsgc2VydmljZSB0aGF0IGhhbmRzaGFrZS4gT3RoZXJ3aXNlIGp1c3QKJiM0MzsJICogbWFrZSBzdXJlIHRoZSBjbG9jayBpcyBydW5uaW5nIGJlZm9yZSBzdGFydGluZyBTM0ZXUk41LgogCSAqLwotCXBoeS0mZ3Q7Y2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7Ci0JaWYgKElTX0VSUihwaHktJmd0O2NsaykpCi0JCXJldHVybiBkZXZfZXJyX3Byb2JlKCZhbXA7Y2xpZW50LSZndDtkZXYsIFBUUl9FUlIocGh5LSZndDtjbGspLAotCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGNsb2NrXG4mIzM0Oyk7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwaHktJmd0O2Nsa19sb2NrKTsKJiM0MzsJcGh5LSZndDtncGlvX2Nsa19yZXEgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCAmIzM0O2Nsay1yZXEmIzM0OywKJiM0MzsJCQkJCQkgICAgR1BJT0RfSU4pOwomIzQzOwlpZiAoSVNfRVJSKHBoeS0mZ3Q7Z3Bpb19jbGtfcmVxKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHBoeS0mZ3Q7Z3Bpb19jbGtfcmVxKTsKJiM0MzsKJiM0MzsJaWYgKHBoeS0mZ3Q7Z3Bpb19jbGtfcmVxKSB7CiYjNDM7CQlpbnQgY2xrX3JlcV9pcnE7CiYjNDM7CiYjNDM7CQlwaHktJmd0O2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBOVUxMKTsKJiM0MzsJCWlmIChJU19FUlIocGh5LSZndDtjbGspKQomIzQzOwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZhbXA7Y2xpZW50LSZndDtkZXYsIFBUUl9FUlIocGh5LSZndDtjbGspLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgY2xvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBVbmxpa2UgdGhlIGFsd2F5cy1vbiBicmFuY2ggYmVsb3csIHRoaXMgY2xvY2sgaXMgZW5hYmxlZCBieQomIzQzOwkJICogaGFuZCBmcm9tIHRoZSBDTEtfUkVRIGhhbmRsZXIsIHNvIGRldm0gd2lsbCBub3QgZGlzYWJsZSBpdCBvbgomIzQzOwkJICogdW5iaW5kLiBHYXRlIGl0IG9mZiBleHBsaWNpdGx5IGlmIGl0IGlzIHN0aWxsIG9uIGF0IHRlYXJkb3duLgomIzQzOwkJICovCiYjNDM7CQlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoJmFtcDtjbGllbnQtJmd0O2RldiwKJiM0MzsJCQkJCSAgICAgICBzM2Z3cm41X2kyY19jbGtfZGlzYWJsZV9hY3Rpb24sCiYjNDM7CQkJCQkgICAgICAgcGh5KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWNsa19yZXFfaXJxID0gZ3Bpb2RfdG9faXJxKHBoeS0mZ3Q7Z3Bpb19jbGtfcmVxKTsKJiM0MzsJCWlmIChjbGtfcmVxX2lycSAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIGNsa19yZXFfaXJxOwomIzQzOwomIzQzOwkJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBjbGtfcmVxX2lycSwgTlVMTCwKJiM0MzsJCQkJCQlzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZCwKJiM0MzsJCQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwKJiM0MzsJCQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8CiYjNDM7CQkJCQkJSVJRRl9PTkVTSE9ULAomIzQzOwkJCQkJCSYjMzQ7czNmd3JuNV9jbGtfcmVxJiMzNDssIHBoeSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBTZWVkIHRoZSBjbG9jayBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50IENMS19SRVEgbGV2ZWwuICovCiYjNDM7CQlzM2Z3cm41X2kyY19jbGtfc2V0KHBoeSwKJiM0MzsJCQkJICAgIGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChwaHktJmd0O2dwaW9fY2xrX3JlcSkgJmd0OyAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBoeS0mZ3Q7Y2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7CiYjNDM7CQlpZiAoSVNfRVJSKHBoeS0mZ3Q7Y2xrKSkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBQVFJfRVJSKHBoeS0mZ3Q7Y2xrKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGNsb2NrXG4mIzM0Oyk7CiYjNDM7CX0KIAomIzQzOwkvKiBObyBtYXRjaCBkYXRhIChlLmcuIGkyY19kZXZpY2VfaWQgYmluZGluZykgbWVhbnMgdGhlIGRlZmF1bHQgRldETC4gKi8KJiM0MzsJdmFyaWFudCA9ICh1aW50cHRyX3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7CiAJcmV0ID0gczNmd3JuNV9wcm9iZSgmYW1wO3BoeS0mZ3Q7Y29tbW9uLm5kZXYsIHBoeSwgJmFtcDtwaHktJmd0O2kyY19kZXYtJmd0O2RldiwKLQkJCSAgICAmYW1wO2kyY19waHlfb3BzKTsKJiM0MzsJCQkgICAgJmFtcDtpMmNfcGh5X29wcywgdmFyaWFudCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTIxMCw4ICYjNDM7MzAzLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzM2Z3cm41X2kyY19pZF90YWJsZVtdID0gewogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzM2Z3cm41X2kyY19pZF90YWJsZSk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gX19tYXliZV91bnVzZWQgPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICYjMzQ7c2Ftc3VuZyxzM2Z3cm41LWkyYyYjMzQ7LCB9LAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNmd3JuNS1pMmMmIzM0OywKJiM0MzsJICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX0ZXREwsIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3NhbXN1bmcsczNucm40di1pMmMmIzM0OywKJiM0MzsJICAuZGF0YSA9ICh2b2lkICopUzNGV1JONV9WQVJJQU5UX1MzTlJONFYsIH0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9zM2Z3cm41X2kyY19tYXRjaCk7CkBAIC0yMTksNyAmIzQzOzMxNSw3IEBAIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTsKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzM2Z3cm41X2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBTM0ZXUk41X0kyQ19EUklWRVJfTkFNRSwKLQkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG9mX3MzZndybjVfaTJjX21hdGNoKSwKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IG9mX3MzZndybjVfaTJjX21hdGNoLAogCX0sCiAJLnByb2JlID0gczNmd3JuNV9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9IHMzZndybjVfaTJjX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jCmluZGV4IDVhOWRlMTFiYmVjZWE0Li4wNGY0YzM2MjY5MWUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jCkBAIC04LDYgJiM0Mzs4LDkgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maXJtd2FyZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taW5tYXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtzM2Z3cm41LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtuY2kuaCYjMzQ7CkBAIC0yMCw3ICYjNDM7MjMsNyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3Byb3BfcnNwKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAwOwogfQogCi1jb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7CiYjNDM7Y29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0gewogCXsKIAkJLm9wY29kZSA9IG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1BST1BSSUVUQVJZLAogCQkJCU5DSV9QUk9QX1NFVF9SRlJFRyksCkBAIC00MSw2ICYjNDM7NDQsMTEgQEAgY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdID0gewogCQkJCU5DSV9QUk9QX0ZXX0NGRyksCiAJCS5yc3AgPSBzM2Z3cm41X25jaV9wcm9wX3JzcCwKIAl9LAomIzQzOwl7CiYjNDM7CQkub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksCiYjNDM7CQkJCU5DSV9QUk9QX0RVQUxfT1BUSU9OKSwKJiM0MzsJCS5yc3AgPSBzM2Z3cm41X25jaV9wcm9wX3JzcCwKJiM0MzsJfSwKIH07CiAKICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyCkBAIC0xMTcsMyAmIzQzOzEyNSwxMDQgQEAgaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKQogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb25maWd1cmUgdGhlIHJlZmVyZW5jZSBjbG9jay4gVGhlIFMzTlJONFYgZXhwZWN0cyB0aGUgc2luZ2xlLWJ5dGUgRldfQ0ZHCiYjNDM7ICogZm9ybSAoanVzdCB0aGUgY2xvY2stc3BlZWQgc2VsZWN0b3IpLiBUaGUgZG93bnN0cmVhbSBzdGFjayBzZW5kcyB0aGlzIGluIHRoZQomIzQzOyAqIGJvb3Rsb2FkZXIgYmVmb3JlIENPUkVfUkVTRVQ7IHRoZSBlYXJsaWVzdCB0aGUgbWFpbmxpbmUgTkNJIGNvcmUgbGV0cyB1cyBpbgomIzQzOyAqIGlzIHRoZSAtJmd0O3NldHVwIGhvb2sgKGFmdGVyIENPUkVfUkVTRVQsIGJlZm9yZSBDT1JFX0lOSVQpLCB3aGljaCB3b3Jrcy4KJiM0MzsgKi8KJiM0MztpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJdTggY2xrX3NwZWVkID0gTkNJX1BST1BfRldfQ0ZHX0NMS19TUEVFRDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5jaV9wcm9wX2NtZChpbmZvLSZndDtuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsICZhbXA7Y2xrX3NwZWVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTM05STjRWIFJGIHJlZ2lzdGVyIHVwZGF0ZS4gVGhlIEhXIGFuZCBTVyByZWdpc3RlciBibG9icyBhcmUgbWVyZ2VkIGludG8gYQomIzQzOyAqIHNpbmdsZSBzdHJlYW0gKEhXIGZpcnN0KSBhbmQgcHVzaGVkIHZpYSB0aGUgRFVBTF9PUFRJT04gY29tbWFuZDoKJiM0MzsgKiBTVEFSVF9VUERBVEUsIG9uZSBTRVRfT1BUSU9OIHBlciAyNTItYnl0ZSBzZWN0aW9uLCB0aGVuIFNUT1BfVVBEQVRFIGNhcnJ5aW5nCiYjNDM7ICogYSAxNi1iaXQgY2hlY2tzdW0gKHJ1bm5pbmcgc3VtIG9mIHRoZSBtZXJnZWQgc3RyZWFtIGFzIDMyLWJpdCB3b3JkcykuCiYjNDM7ICovCiYjNDM7aW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sCiYjNDM7CQkJCSAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaHdfZncgPSBOVUxMLCAqc3dfZncgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCBzZXRfb3B0aW9uOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO2luZm8tJmd0O25kZXYtJmd0O25mY19kZXYtJmd0O2RldjsKJiM0MzsJc2l6ZV90IG1lcmdlZF9zaXplLCBpLCBsZW47CiYjNDM7CXU4ICptZXJnZWQgPSBOVUxMOwomIzQzOwl1OCBzdG9wX2NtZFszXTsKJiM0MzsJdTMyIGNoZWNrc3VtOwomIzQzOwl1OCBzdWJfb2lkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZhbXA7aHdfZncsIGh3X25hbWUsIGRldik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO3N3X2Z3LCBzd19uYW1lLCBkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X2h3OwomIzQzOwomIzQzOwltZXJnZWRfc2l6ZSA9IGh3X2Z3LSZndDtzaXplICYjNDM7IHN3X2Z3LSZndDtzaXplOwomIzQzOwltZXJnZWQgPSBrbWFsbG9jKG1lcmdlZF9zaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtZXJnZWQpIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwltZW1jcHkobWVyZ2VkLCBod19mdy0mZ3Q7ZGF0YSwgaHdfZnctJmd0O3NpemUpOwomIzQzOwltZW1jcHkobWVyZ2VkICYjNDM7IGh3X2Z3LSZndDtzaXplLCBzd19mdy0mZ3Q7ZGF0YSwgc3dfZnctJmd0O3NpemUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSdW5uaW5nIHN1bSBvZiB0aGUgbWVyZ2VkIHN0cmVhbSBhcyBsaXR0bGUtZW5kaWFuIDMyLWJpdCB3b3Jkcy4gVGhlCiYjNDM7CSAqIHJmcmVnIGJsb2JzIGFyZSB3b3JkLWFsaWduZWQsIHNvIHRoZSBsb29wIGNvbnN1bWVzIHRoZSB3aG9sZSBzdHJlYW07CiYjNDM7CSAqIHNob3VsZCBhIGZ1dHVyZSBibG9iIG5vdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgaXRzIHRhaWwgd291bGQgYmUKJiM0MzsJICogaWdub3JlZCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJY2hlY2tzdW0gPSAwOwomIzQzOwlmb3IgKGkgPSAwOyBpICYjNDM7IDQgJmx0Oz0gbWVyZ2VkX3NpemU7IGkgJiM0Mzs9IDQpCiYjNDM7CQljaGVja3N1bSAmIzQzOz0gZ2V0X3VuYWxpZ25lZF9sZTMyKG1lcmdlZCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJZGV2X2RiZyhkZXYsICYjMzQ7cmZyZWcgZHVhbC1vcHRpb24gdXBkYXRlOiAlcyAmIzQzOyAlc1xuJiMzNDssIGh3X25hbWUsIHN3X25hbWUpOwomIzQzOwomIzQzOwkvKiBTVEFSVF9VUERBVEUgKi8KJiM0MzsJc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURTsKJiM0MzsJcmV0ID0gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCAmYW1wO3N1Yl9vaWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7VW5hYmxlIHRvIHN0YXJ0IHJmcmVnIHVwZGF0ZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU0VUX09QVElPTiBwZXIgc2VjdGlvbiAqLwomIzQzOwlzZXRfb3B0aW9uLnN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OOwomIzQzOwlzZXRfb3B0aW9uLmluZGV4ID0gMDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1lcmdlZF9zaXplOyBpICYjNDM7PSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRSkgewomIzQzOwkJbGVuID0gbWluX3Qoc2l6ZV90LCBtZXJnZWRfc2l6ZSAtIGksIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKTsKJiM0MzsJCW1lbWNweShzZXRfb3B0aW9uLmRhdGEsIG1lcmdlZCAmIzQzOyBpLCBsZW4pOwomIzQzOwkJcmV0ID0gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLAomIzQzOwkJCQkgICBsZW4gJiM0MzsgMiwgKF9fdTggKikmYW1wO3NldF9vcHRpb24pOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlkZXZfZXJyKGRldiwgJiMzNDtyZnJlZyB1cGRhdGUgZXJyb3IgKGNvZGU9JWQpXG4mIzM0OywgcmV0KTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsJCXNldF9vcHRpb24uaW5kZXgmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi8KJiM0MzsJc3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTsKJiM0MzsJcHV0X3VuYWxpZ25lZF9sZTE2KGNoZWNrc3VtLCAmYW1wO3N0b3BfY21kWzFdKTsKJiM0MzsJcmV0ID0gbmNpX3Byb3BfY21kKGluZm8tJmd0O25kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAzLCBzdG9wX2NtZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtVbmFibGUgdG8gc3RvcCByZnJlZyB1cGRhdGVcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl9kYmcoZGV2LCAmIzM0O3JmcmVnIGR1YWwtb3B0aW9uIHVwZGF0ZTogc3VjY2Vzc1xuJiMzNDspOwomIzQzO291dDoKJiM0MzsJa2ZyZWUobWVyZ2VkKTsKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShzd19mdyk7CiYjNDM7b3V0X2h3OgomIzQzOwlyZWxlYXNlX2Zpcm13YXJlKGh3X2Z3KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaAppbmRleCBiYzRiY2UyYmJjNGQ5My4uMjMxNzliYTA5NWExYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaApAQCAtNDAsNiAmIzQzOzQwLDEzIEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7CiAKICNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHCQkweDI4CiAKJiM0MzsvKgomIzQzOyAqIFNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkIChjbG9jay1zcGVlZCBzZWxlY3RvcikgZm9yIHRoZSBTM05STjRWIHJlZmVyZW5jZQomIzQzOyAqIGNsb2NrLiBUYWtlbiBmcm9tIHRoZSB2ZW5kb3IgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYXJ0ICh0aGUgZW5jb2RpbmcgaXMKJiM0MzsgKiBub3QgZG9jdW1lbnRlZCkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVECTB4MTEKJiM0MzsKIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfY21kIHsKIAlfX3U4IGNsa190eXBlOwogCV9fdTggY2xrX3NwZWVkOwpAQCAtNTAsNyAmIzQzOzU3LDMwIEBAIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfcnNwIHsKIAlfX3U4IHN0YXR1czsKIH07CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF07CiYjNDM7LyoKJiM0MzsgKiBUaGUgUzNOUk40ViB1cGRhdGVzIGl0cyBSRiByZWdpc3RlcnMgdGhyb3VnaCBhIHNpbmdsZSAmIzM0O2R1YWwgb3B0aW9uJiMzNDsgY29tbWFuZAomIzQzOyAqIChhIHN1Yi1PSUQgc2VsZWN0cyB0aGUgb3BlcmF0aW9uKSBpbnN0ZWFkIG9mIHRoZSBTVEFSVC9TRVQvU1RPUF9SRlJFRwomIzQzOyAqIG9wY29kZXMgYWJvdmUsIGFuZCBleHBlY3RzIHRoZSBIVyBhbmQgU1cgcmVnaXN0ZXIgYmxvYnMgbWVyZ2VkIGludG8gb25lCiYjNDM7ICogc3RyZWFtLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTkNJX1BST1BfRFVBTF9PUFRJT04JCTB4MmEKJiM0MzsKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURQkweDAxCiYjNDM7I2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OCTB4MDIKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFCTB4MDMKJiM0MzsKJiM0MzsjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFCTI1MgomIzQzOwomIzQzO3N0cnVjdCBuY2lfcHJvcF9kdWFsX3NldF9vcHRpb25fY21kIHsKJiM0MzsJX191OCBzdWJfb2lkOwkvKiBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OICovCiYjNDM7CV9fdTggaW5kZXg7CiYjNDM7CV9fdTggZGF0YVtOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRV07CiYjNDM7fTsKJiM0MzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdOwogaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKTsKJiM0MztpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywKJiM0MzsJCQkJICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKTsKJiM0MztpbnQgczNmd3JuNV9uY2lfY2xrX2NmZyhzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvKTsKIAogI2VuZGlmIC8qIF9fTE9DQUxfUzNGV1JONV9OQ0lfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oIGIvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmgKaW5kZXggMmI0OTIyMzYwOTBiODUuLjJkOGMxMjA5MWZiYTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaApAQCAtMjEsNiAmIzQzOzIxLDE3IEBAIGVudW0gczNmd3JuNV9tb2RlIHsKIAlTM0ZXUk41X01PREVfRlcsCiB9OwogCiYjNDM7ZW51bSBzM2Z3cm41X3ZhcmlhbnQgewomIzQzOwkvKiBTM0ZXUk41IC8gUzNGV1JOODI6IGZpcm13YXJlIGlzIGRvd25sb2FkZWQgYnkgdGhpcyBkcml2ZXIgKi8KJiM0MzsJUzNGV1JONV9WQVJJQU5UX0ZXREwsCiYjNDM7CS8qCiYjNDM7CSAqIFMzTlJONFY6IHNoaXBzIHdpdGggd29ya2luZyBmaXJtd2FyZSBiZWhpbmQgYSBib290bG9hZGVyIHByb3RvY29sCiYjNDM7CSAqIHRoaXMgZHJpdmVyIGRvZXMgbm90IGltcGxlbWVudDsgc2tpcCB0aGUgZG93bmxvYWQsIGNvbmZpZ3VyZSB0aGUKJiM0MzsJICogY2xvY2sgKEZXX0NGRykgYW5kIHVwZGF0ZSB0aGUgUkYgcmVnaXN0ZXJzIHZpYSB0aGUgRFVBTF9PUFRJT04gY21kLgomIzQzOwkgKi8KJiM0MzsJUzNGV1JONV9WQVJJQU5UX1MzTlJONFYsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgewogCXZvaWQgKCpzZXRfd2FrZSkodm9pZCAqaWQsIGJvb2wgc2xlZXApOwogCXZvaWQgKCpzZXRfbW9kZSkodm9pZCAqaWQsIGVudW0gczNmd3JuNV9tb2RlKTsKQEAgLTM2LDYgJiM0Mzs0Nyw3IEBAIHN0cnVjdCBzM2Z3cm41X2luZm8gewogCWNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHM7CiAKIAlzdHJ1Y3QgczNmd3JuNV9md19pbmZvIGZ3X2luZm87CiYjNDM7CWVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQ7CiAKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiB9OwpAQCAtNzgsNyAmIzQzOzkwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgczNmd3JuNV93cml0ZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldiwKLQljb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKTsKJiM0MzsJY29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7CiB2b2lkIHMzZndybjVfcmVtb3ZlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KTsKIAogaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMKaW5kZXggNTQwYTRkZGIwYjA1ZTkuLjQ3MTcyZDczOWE0MWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuYwpAQCAtMTM3LDcgJiM0MzsxMzcsNyBAQCBzdGF0aWMgaW50IHMzZndybjgyX3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldikKIAl9CiAKIAlyZXQgPSBzM2Z3cm41X3Byb2JlKCZhbXA7cGh5LSZndDtjb21tb24ubmRldiwgcGh5LCAmYW1wO3BoeS0mZ3Q7c2VyX2Rldi0mZ3Q7ZGV2LAotCQkJICAgICZhbXA7dWFydF9waHlfb3BzKTsKJiM0MzsJCQkgICAgJmFtcDt1YXJ0X3BoeV9vcHMsIFMzRldSTjVfVkFSSUFOVF9GV0RMKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnJfc2VyZGV2OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgYW5kIEZ1enppbmcgdGhlIE5ldyBORkMgQ29udHJvbGxlciBWYXJpYW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyBTYW1zdW5nIE5GQyBjb250cm9sbGVyIHZhcmlhbnQsIHRoZSBTM05STjRWLCBpbnRvIHRoZSBgczNmd3JuNWAgZHJpdmVyLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIG5ldyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQsIGltcG9ydGFudGx5LCBmdXp6YWJsZS4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIHRlc3QgaXQgdGhvcm91Z2hseS4KClRoZSBwYXRjaCBpdHNlbGYgbG9va3Mgc3RyYWlnaHRmb3J3YXJkIOKAkyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgZm9yIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nLCBtb2RpZmljYXRpb25zIHRvIGBzM2Z3cm41X25jaV9zZXR1cGAgYW5kIGBzM2Z3cm41X25jaV9wb3N0X3NldHVwYCB0byBhY2NvdW50IGZvciB0aGUgbmV3IGBTM0ZXUk41X1ZBUklBTlRfUzNOUk40VmAsIGFuZCBzb21lIGFkZGl0aW9ucyB0byBoYW5kbGUgYSBgY2xrLXJlcWAgR1BJTyBhbmQgY2xvY2sgZ2F0aW5nIGluIGBzM2Z3cm41X2kyY19wcm9iZWAuIFdlJiMzOTt2ZSBhbHNvIGdvdCBzb21lIG5ldyBmdW5jdGlvbnMgaW4gYG5jaS5jYCBhbmQgYGkyYy5jYCByZWxhdGVkIHRvIFJGIGNvbmZpZ3VyYXRpb24sIGNsb2NrIGNvbnRyb2wsIGFuZCB0aGF0IEdQSU8gaW50ZXJydXB0IGhhbmRsZXIuCgpTaW5jZSB0aGlzIGlzIGFuIE5GQyBkcml2ZXIsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZnV6emluZy4gVHlwaWNhbGx5LCBORkMgZHJpdmVycyBhcmUgZnV6emVkIHRocm91Z2ggdGhlIE5DSSBsYXllciDigJMgbmV0bGluay9zb2NrZXRzIOKAkyBvciB0aHJvdWdoIHZpcnR1YWwgZGV2aWNlcy4gVGhlIGBzM2Z3cm41YCBkcml2ZXIgaXMgYW4gSTJDL1VBUlQgZHJpdmVyLCB3aGljaCBsZWFkcyBtZSB0byB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciBTeXprYWxsZXImIzM5O3MgSTJDIHN1cHBvcnQgaXMgc3VmZmljaWVudCBmb3IgZnV6emluZyB0aGlzLiBXaGlsZSBTeXprYWxsZXIgaGFzIHNvbWUgSTJDIGNhcGFiaWxpdGllcyB2aWEgYC9kZXYvaTJjLSpgIG9yIHZpcnR1YWwgZGV2aWNlcywgaXQmIzM5O3MgbW9yZSBjb21tb24gdG8gc2VlIGZ1enppbmcgYXQgdGhlIE5DSSBsYXllci4KCk5vdywgdGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoaXMgZHJpdmVyICpkb2VzKiByZWdpc3RlciBhbiBOQ0kgZGV2aWNlLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBOQ0kgY29yZS4gYHMzZndybjVfcHJvYmVgIGNhbGxzIGBuY2lfYWxsb2NhdGVfZGV2aWNlYCBhbmQgYG5jaV9yZWdpc3Rlcl9kZXZpY2VgLiBUaGUgTkNJIGNvcmUgc2hvdWxkIGJlIGhhbmRsaW5nIHRoZSBOQ0kgcHJvdG9jb2wgaXRzZWxmLiBTbywgdGhpcyBnaXZlcyB1cyBhIGhvb2suCgpUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGlzIG5ldyBgUzNGV1JONV9WQVJJQU5UX1MzTlJONFZgIHZhcmlhbnQuIEl0JiMzOTtzIG1hdGNoZWQgdmlhIHRoZSBkZXZpY2UgdHJlZSB3aXRoIGBzYW1zdW5nLHMzbnJuNHYtaTJjYC4gVGhpcyBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgdG8gdHJpZ2dlciB0aGUgbmV3IGNvZGUuIFRoZSBuZXcgY29kZSBpbiBgczNmd3JuNV9uY2lfc2V0dXBgIGFuZCBgczNmd3JuNV9uY2lfcG9zdF9zZXR1cGAgaXMgY2xlYXJseSBleGVjdXRlZCBieSB0aGUgTkNJIGNvcmUgd2hlbiBzZXR0aW5nIHVwIHRoZSBkZXZpY2UuIFRoaXMgbG9va3MgcmVhY2hhYmxlIHZpYSB0aGUgZGV2aWNlIHNldHVwLiBgbmNpX29wZW5fZGV2aWNlYCAtJmd0OyBgbmNpX3NldHVwYCAtJmd0OyBgbmRldi0mZ3Q7b3BzLSZndDtzZXR1cGAgYW5kIGBuZGV2LSZndDtvcHMtJmd0O3Bvc3Rfc2V0dXBgLCBzbyB0aGUgY29kZSBpcyB0cmlnZ2VyZWQgYnkgdGhlIE5DSSBjb3JlIGR1cmluZyBkZXZpY2Ugc2V0dXAuIFRoZW4sIHRoZSBuZXcgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYCBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl04oCZcyBzZW5kaW5nIE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcywgbWVhbmluZyB0aGF0IHdlIGNvdWxkIHBvdGVudGlhbGx5IGZ1enogdGhyb3VnaCBgbmNpX3Byb3BfY21kYC4gQW5kIGxhc3RseSwgdGhhdCBpbnRlcnJ1cHQgaGFuZGxlciBpbiBgczNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWRgIGlzIGFub3RoZXIgcG9pbnQgd2UgbmVlZCB0byB0ZXN0LgpOb3cgSSYjMzk7bGwgY2hlY2sgS2NvbmZpZyBmb3IgdGhpcyBkcml2ZXIgdG8gc2VlIGhvdyBpdCYjMzk7cyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORkNfUzNGV1JONSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoyOmNvbmZpZyBORkNfUzNGV1JONVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjEwOmNvbmZpZyBORkNfUzNGV1JONV9JMkNcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1NhbXN1bmcgUzNGV1JONSBJMkMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODU3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBwcmVzZW50ZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtjb25maWcgLSBBIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBvYmplY3RpdmUgaGVyZSBpcyBjbGVhcjogYSBjb21wbGV0ZSwgdGhvcm91Z2ggYW5hbHlzaXMgaXMgbmVlZGVkLiBUaGUgZmlyc3Qgc3RlcCwgbG9naWNhbGx5LCBpcyB0byBpbW1lZGlhdGVseSBnZXQgdGhlICpmdWxsKiBLY29uZmlnIGZpbGUgaW4gZnJvbnQgb2YgbWUuIE5vIHBhcnRpYWwgdmlld3MsIG5vIHNuaXBwZXRzOyBJIG5lZWQgdGhlIHdob2xlIGVuY2hpbGFkYS4gSSBuZWVkIHRvIHNlZSB0aGUgY29tcGxldGUgY29udGV4dCwgdGhlIGRlcGVuZGVuY2llcywgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhbGwgdGhlIHZhcmlhYmxlcywgdGhlIGRlZmF1bHRzLiBXaXRob3V0IHRoaXMgY29tcHJlaGVuc2l2ZSB2aWV3LCBhbnkgYXR0ZW1wdCBhdCBpbnNpZ2h0ZnVsIGFuYWx5c2lzIGlzIGp1c3Qgc3BlY3VsYXRpb24uIEkgYW0gZ29pbmcgdG8gc2VlIHRoZSBmb3Jlc3QgYW5kIGFsbCB0aGUgdHJlZXMuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjdXJzb3J5IGdsYW5jZTsgdGhpcyBpcyBhIGRlZXAgZGl2ZS4gSSYjMzk7bSByZWFkeSB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBkZXNpZ24gZGVjaXNpb25zLCBhbmQgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgbW9kaWZpY2F0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHVuZGVyc3RhbmRpbmcgYmVnaW5zLiBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTkZDX1MzRldSTjVcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIENvcmUgZHJpdmVyIGZvciBTYW1zdW5nIFMzRldSTjUgTkZDIGNoaXAuIENvbnRhaW5zIGNvcmUgdXRpbGl0aWVzXG4gICA3Olx0XHQgIG9mIGNoaXAuIEl0JiMzOTtzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgUEhZcyB0byBhdm9pZCBkdXBsaWNhdGluZyBsb3RzXG4gICA4Olx0XHQgIG9mIGNvbW1vbiBjb2RlLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBORkNfUzNGV1JONV9JMkNcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1NhbXN1bmcgUzNGV1JONSBJMkMgc3VwcG9ydFwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBJMkNcbiAgMTM6XHRcdHNlbGVjdCBORkNfUzNGV1JONVxuICAxNDpcdFx0ZGVmYXVsdCBuXG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgYW4gSTJDIGludGVyZmFjZSB0byB0aGUgUzNGV1JONSBjaGlwLlxuICAxNzpcdFx0ICBTZWxlY3QgdGhpcyBpZiB5b3VyIHBsYXRmb3JtIGlzIHVzaW5nIHRoZSBJMkMgYnVzLlxuICAxODpcdFxuICAxOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgbSBoZXJlLiBUaGUgbW9kdWxlIHdpbGxcbiAgMjA6XHRcdCAgYmUgY2FsbGVkIHMzZndybjVfaTJjLmtvLlxuICAyMTpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIE5GQ19TM0ZXUk44Ml9VQVJUXG4gIDI0Olx0ICAgICAgICB0cmlzdGF0ZSBcJiMzNDtTYW1zdW5nIFMzRldSTjgyIFVBUlQgc3VwcG9ydFwmIzM0O1xuICAyNTpcdCAgICAgICAgZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTRVJJQUxfREVWX0JVU1xuICAyNjpcdCAgICAgICAgc2VsZWN0IE5GQ19TM0ZXUk41XG4gIDI3Olx0ICAgICAgICBoZWxwXG4gIDI4Olx0ICAgICAgICAgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgYSBVQVJUIGludGVyZmFjZSB0byB0aGUgUzNGV1JOODIgY2hpcC5cbiAgMjk6XHQgICAgICAgICAgU2VsZWN0IHRoaXMgaWYgeW91ciBwbGF0Zm9ybSBpcyB1c2luZyB0aGUgVUFSVCBidXMuXG4gIDMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NzYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE5GQyBTM0ZXUk41IEkyQyBEcml2ZXI6IEEgV29ydGh3aGlsZSBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyB0aGUgZnV6emFiaWxpdHkgb2YgdGhpcyBgTkZDX1MzRldSTjVfSTJDYCBkcml2ZXIuIFRoZSBjb3JlIG9mIHRoZSBuZXcgY29kZSByZXNpZGVzIGluIHNldmVyYWwgZnVuY3Rpb25zOiBgczNmd3JuNV9uY2lfc2V0dXBgLCBgczNmd3JuNV9uY2lfcG9zdF9zZXR1cGAsIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAsIGBzM2Z3cm41X25jaV9jbGtfY2ZnYCwgYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYCwgYW5kIGBzM2Z3cm41X2kyY19jbGtfc2V0YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGhvdyBlYXNpbHkgdGhlc2UgY2FuIGJlIHJlYWNoZWQuCgpUaGUgSTJDIGRyaXZlciBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBJMkMgZGV2aWNlIHdpdGggdGhlIGNvbXBhdGlibGUgSUQgJiMzNDtzYW1zdW5nLHMzbnJuNHYtaTJjJiMzNDsgaXMgcHJlc2VudC4gIFN5emthbGxlciBjYW4sIGluIHRoZW9yeSwgaW5qZWN0IEkyQyBkZXZpY2VzIHVzaW5nIGBzeXpfaTJjX3NldHVwYCAoaWYgaXQgc3VwcG9ydHMgaXQpLCBhbmQgYWxzbyBoYXMgTkNJIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRocm91Z2ggdGhlIE5DSSBjb3JlLiAgVGhhdCYjMzk7cyBwcm9taXNpbmcuCgpTaW5jZSB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHRoZSBOQ0kgb3BlcmF0aW9ucywgdGhleSBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyBgbmNpX29wZW5fZGV2aWNlYCBpZiB0aGUgZGV2aWNlIGlzIHN1Y2Nlc3NmdWxseSBwcm9iZWQuIE5vdywgdGhlcmUgaXMgYSBwb3RlbnRpYWwgaGljY3VwIHdpdGggYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYCwgd2hpY2ggcmVsaWVzIG9uIGByZXF1ZXN0X2Zpcm13YXJlYC4gVGhpcyBjb3VsZCBibG9jaywgb3IgZmFpbCBpZiB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IGF2YWlsYWJsZS4gRm9ydHVuYXRlbHksIGl0IGxvb2tzIGxpa2UgaXQgcHJpbnRzIGEgd2FybmluZyBhbmQgY29udGludWVzIGlmIHRoZSBmaXJtd2FyZSBsb2FkIGZhaWxzLiBUaGF0IGFsbGV2aWF0ZXMgc29tZSBjb25jZXJuLgoKVGhlIGBzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZGAgaXMgYW4gSVJRIGhhbmRsZXIgZm9yIGEgR1BJTy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGVhc2lseSB0cmlnZ2VyIEdQSU8gSVJRcyB1bmxlc3MgaXQmIzM5O3MgYSBjb250cm9sbGVkIHZpcnR1YWwgR1BJTyBkcml2ZXIuIFNvIHRoYXQgbWlnaHQgYmUgdHJpY2tpZXIgdG8gcmVhY2guCgpIb3dldmVyLCBgczNmd3JuNV9uY2lfc2V0dXBgIGFuZCBgczNmd3JuNV9uY2lfcG9zdF9zZXR1cGAgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGlmIHRoZSBkZXZpY2UgaXMgcHJvYmVkIGFuZCBvcGVuZWQuIFRoZSBnb29kIG5ld3MgaXMsIFN5emthbGxlciBoYXMgc29tZSBJMkMgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkgc2VlIHNvbWUgcHJvcHJpZXRhcnkgTkNJIGNvbW1hbmRzIGhhdmUgYmVlbiBhZGRlZDogYE5DSV9QUk9QX0RVQUxfT1BUSU9OYCBhbmQgYE5DSV9QUk9QX0ZXX0NGR2AgaW4gYHMzZndybjVfbmNpX3Byb3Bfb3BzYC4gQnV0IHRoZXNlIGFyZSBqdXN0IHJlc3BvbnNlcyB0byBjb21tYW5kcyB0aGUgZHJpdmVyIHNlbmRzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nPyAgQ29uc2lkZXJpbmcgdGhlIGFkZGVkIGtlcm5lbCBmdW5jdGlvbmFsaXR5IChhIG5ldyBORkMgY29udHJvbGxlciB2YXJpYW50LCBpbml0aWFsaXphdGlvbiwgZmlybXdhcmUgbG9hZGluZywgY2xvY2sgaGFuZGxpbmcpLCBhbmQgdGhlIGZhY3QgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljICh0aGUgTkZDIGRyaXZlciksIG15IGFzc2Vzc21lbnQgaXMgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZXJlZm9yZSwgdGhlIGtleSB0YXJnZXRzIGZvciBmdXp6aW5nIGFyZTogYHMzZndybjVfbmNpX3NldHVwYCwgYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgLCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AsIGBzM2Z3cm41X2kyY19jbGtfc2V0YCwgYW5kIHRvIGEgbGVzc2VyIGV4dGVudCwgYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYC4KClRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBpbmNsdWRlIGBORkNfUzNGV1JONV9JMkNgLCBgTkZDX1MzRldSTjVgLCBgTkZDX05DSWAsIGFuZCBgSTJDYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZXNlIHNldHRpbmdzIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMjA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX1MzRldSTjUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnPTgzPUNPTkZJR19ORkNfU0hETEM9eVxuYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnOjg0OkNPTkZJR19ORkNfUzNGV1JONV9JMkM9eVxuYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnLTg1LUNPTkZJR19ERVZUTVBGUz15XG4tLVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc9MTczPUNPTkZJR19ORkNfU0hETEM9eVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MTc0OkNPTkZJR19ORkNfUzNGV1JONV9JMkM9bVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWctMTc1LUNPTkZJR19QQ0lFUE9SVEJVUz15XG4tLVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0yMDg9Q09ORklHX05GQ19OWFBfTkNJX0kyQz1tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjIwOTpDT05GSUdfTkZDX1MzRldSTjVfSTJDPW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMjEwLUNPTkZJR19QQ0k9eVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmM9NDg3PXN0YXRpYyBzdHJ1Y3QgZ3Bpb19kZXNjICpvZl9maW5kX2dwaW9fcmVuYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy01MjYtI2VuZGlmXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jOjUyNzojaWYgSVNfRU5BQkxFRChDT05GSUdfTkZDX1MzRldSTjVfSTJDKVxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy01MjgtXHRcdHsgXCYjMzQ7ZW5cJiMzNDssXHRcdFwmIzM0O3MzZndybjUsZW4tZ3Bpb3NcJiMzNDssXHRcJiMzNDtzYW1zdW5nLHMzZndybjUtaTJjXCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX05GQ19OWFBfTkNJKVx0JiM0Mzs9IG54cC1uY2kvXG5kcml2ZXJzL25mYy9NYWtlZmlsZToxODpvYmotJChDT05GSUdfTkZDX1MzRldSTjUpXHQmIzQzOz0gczNmd3JuNS9cbmRyaXZlcnMvbmZjL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVx0JiM0Mzs9IHN0OTVoZi9cbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoyOmNvbmZpZyBORkNfUzNGV1JONVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjEwOmNvbmZpZyBORkNfUzNGV1JONV9JMkNcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1NhbXN1bmcgUzNGV1JONSBJMkMgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEyLVx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBJMkNcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMzpcdHNlbGVjdCBORkNfUzNGV1JONVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTE0LVx0ZGVmYXVsdCBuXG4tLVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnPTIzPWNvbmZpZyBORkNfUzNGV1JOODJfVUFSVFxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0yNS0gICAgICAgIGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgU0VSSUFMX0RFVl9CVVNcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoyNjogICAgICAgIHNlbGVjdCBORkNfUzNGV1JONVxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTI3LSAgICAgICAgaGVscFxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGU9OD1zM2Z3cm44Ml91YXJ0LW9ianMgPSB1YXJ0Lm9cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGUtOS1cbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX05GQ19TM0ZXUk41KSAmIzQzOz0gczNmd3JuNS5vXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19ORkNfUzNGV1JONV9JMkMpICYjNDM7PSBzM2Z3cm41X2kyYy5vXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19ORkNfUzNGV1JOODJfVUFSVCkgJiM0Mzs9IHMzZndybjgyX3VhcnQub1xuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvcGh5X2NvbW1vbi5oLTEwLVxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg6MTE6I2lmbmRlZiBfX05GQ19TM0ZXUk41X1BIWV9DT01NT05fSFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg6MTI6I2RlZmluZSBfX05GQ19TM0ZXUk41X1BIWV9DT01NT05fSFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmgtMTMtXG4tLVxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg9MzY9ZW51bSBzM2Z3cm41X21vZGUgczNmd3JuNV9waHlfZ2V0X21vZGUodm9pZCAqcGh5X2lkKTtcbmRyaXZlcnMvbmZjL3MzZndybjUvcGh5X2NvbW1vbi5oLTM3LVxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg6Mzg6I2VuZGlmIC8qIF9fTkZDX1MzRldSTjVfUEhZX0NPTU1PTl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMjA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MTkKCQkJCQkJCW91dHB1dDogMjU2CgkJCQkJCQl0aG91Z2h0czogMzcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBORkMgQ29uZmlndXJhdGlvbiBhbmQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYE5GQ19TM0ZXUk41X0kyQ2AgYW5kIGBORkNfUzNGV1JONWAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBORkNfUzNGV1JONWAgaXMgc2VsZWN0ZWQgYnkgYE5GQ19TM0ZXUk41X0kyQ2AsIG1ha2luZyBgTkZDX1MzRldSTjVfSTJDYCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uLiBNYWtlcyBzZW5zZS4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGhhdmUgZXZlcnl0aGluZyBlbHNlIHdlIG5lZWQuIEFoLCB5ZXMsIGBORkNfTkNJYCBhbmQgYEkyQ2AgYXJlIGRlcGVuZGVuY2llcywgd2hpY2ggaXMgZXhwZWN0ZWQgZm9yIHRoaXMgdHlwZSBvZiBzZXR1cC4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIGRyaXZlciBmdW5jdGlvbnMuIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9sczogYHMzZndybjVfbmNpX3NldHVwYCwgYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgLCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AsIGBzM2Z3cm41X2kyY19jbGtfc2V0YCwgYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYCwgYW5kIGBzM2Z3cm41X2kyY19wcm9iZWAg4oCTIGVzcGVjaWFsbHkgdGhlIGxhc3Qgb25lLCBhcyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlZW4gbW9kaWZpZWQuCgpJbmRlZWQsIHRoZSBtb2RpZmljYXRpb24gdG8gYHMzZndybjVfaTJjX3Byb2JlYCBpcyBrZXkuIEl0JiMzOTtzIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyBgY2xrLXJlcWAgR1BJTyBhbmQgY2xvY2sgZ2F0aW5nIOKAkyBhIHNpZ25pZmljYW50IGNoYW5nZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGZvciBhbnkgdGVzdGluZy4KCkFscmlnaHQsIHdoYXQgZWxzZSBpcyByZWxldmFudD8gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYHMzZndybjVgIGRyaXZlciwgd2hpY2ggaXMgYW4gTkZDIGRyaXZlci4gSXQmIzM5O3MgYWNjZXNzZWQgdGhyb3VnaCBJMkMgcHJvYmluZyBhbmQgdGhlIE5DSSBjb3JlLiBUaGUgYmlnIHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIGZ1enogdGhpcy4gVGhlIGFuc3dlciBpcyB5ZXMuIElmIHN5emthbGxlciBjYW4gc3VjY2Vzc2Z1bGx5IGluamVjdCBJMkMgZGV2aWNlcyBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgTkNJIGludGVyZmFjZSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB2YXJpb3VzIGNvZGUgcGF0aHMgd2l0aGluIHRoZSBkcml2ZXIuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpUaW1lIHRvIHByZXBhcmUgdGhlIGZpbmFsIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkNfUzNGV1JONV9JMkMmIzM0OywKICAgICYjMzQ7TkZDX1MzRldSTjUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzM2Z3cm41X25jaV9zZXR1cCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X25jaV9wb3N0X3NldHVwJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX2Nsa19jZmcmIzM0OywKICAgICYjMzQ7czNmd3JuNV9pMmNfY2xrX3NldCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZCYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X2kyY19wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgbmV3IHZhcmlhbnQgb2YgdGhlIFNhbXN1bmcgTkZDIGNvbnRyb2xsZXIgKFMzTlJONFYpIHRvIHRoZSBzM2Z3cm41IGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gbG9naWMsIGZpcm13YXJlIGxvYWRpbmcgdmlhIE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcywgYW5kIGNsb2NrIGhhbmRsaW5nIHZpYSBhIG5ldyBHUElPIGludGVycnVwdC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKE5GQyBkcml2ZXIpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgSTJDIGRldmljZSBwcm9iaW5nIGFuZCBOQ0kgY29yZSBpbnRlcmFjdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQ19TM0ZXUk41X0kyQyYjMzQ7LAogICAgJiMzNDtORkNfUzNGV1JONSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MzZndybjVfbmNpX3NldHVwJiMzNDssCiAgICAmIzM0O3MzZndybjVfbmNpX3Bvc3Rfc2V0dXAmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwmIzM0OywKICAgICYjMzQ7czNmd3JuNV9uY2lfY2xrX2NmZyYjMzQ7LAogICAgJiMzNDtzM2Z3cm41X2kyY19jbGtfc2V0JiMzNDssCiAgICAmIzM0O3MzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkJiMzNDssCiAgICAmIzM0O3MzZndybjVfaTJjX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgdmFyaWFudCBvZiB0aGUgU2Ftc3VuZyBORkMgY29udHJvbGxlciAoUzNOUk40VikgdG8gdGhlIHMzZndybjUgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBsb2dpYywgZmlybXdhcmUgbG9hZGluZyB2aWEgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzLCBhbmQgY2xvY2sgaGFuZGxpbmcgdmlhIGEgbmV3IEdQSU8gaW50ZXJydXB0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoTkZDIGRyaXZlcikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBJMkMgZGV2aWNlIHByb2JpbmcgYW5kIE5DSSBjb3JlIGludGVyYWN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDIwOjQ1OjA1Ljg0NzA3MTEyM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTMzOTU1Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ19TM0ZXUk41X0kyQ1wiLFxuICAgIFwiTkZDX1MzRldSTjVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzM2Z3cm41X25jaV9zZXR1cFwiLFxuICAgIFwiczNmd3JuNV9uY2lfcG9zdF9zZXR1cFwiLFxuICAgIFwiczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxcIixcbiAgICBcInMzZndybjVfbmNpX2Nsa19jZmdcIixcbiAgICBcInMzZndybjVfaTJjX2Nsa19zZXRcIixcbiAgICBcInMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkXCIsXG4gICAgXCJzM2Z3cm41X2kyY19wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgdmFyaWFudCBvZiB0aGUgU2Ftc3VuZyBORkMgY29udHJvbGxlciAoUzNOUk40VikgdG8gdGhlIHMzZndybjUgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBsb2dpYywgZmlybXdhcmUgbG9hZGluZyB2aWEgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzLCBhbmQgY2xvY2sgaGFuZGxpbmcgdmlhIGEgbmV3IEdQSU8gaW50ZXJydXB0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoTkZDIGRyaXZlcikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBJMkMgZGV2aWNlIHByb2JpbmcgYW5kIE5DSSBjb3JlIGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMjA6NDU6MDUuODQ3MDc3MzIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU0MjY4MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZmViMWFhNDc1YmYwNTQ2ZGI4OGE0NTgyMTk4MjQ3ZmFlMWYzMjExXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMjA6NDU6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxcbmluZGV4IDEyYmFlZTQ1NzUyYzdiLi4zZWJjZDA5MzM5YjgxZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXFxuQEAgLTE0LDEyICsxNCwyMCBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgZW51bTpcXG4gICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXFxuICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm44MlxcbisgICAgICAtIHNhbXN1bmcsczNucm40di1pMmNcXG4gXFxuICAgZW4tZ3Bpb3M6XFxuICAgICBtYXhJdGVtczogMVxcbiAgICAgZGVzY3JpcHRpb246XFxuICAgICAgIE91dHB1dCBHUElPIHBpbiB1c2VkIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGNoaXBcXG4gXFxuKyAgY2xrLXJlcS1ncGlvczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgSW5wdXQgR1BJTyBwaW4gY29ubmVjdGVkIHRvIHRoZSBjb250cm9sbGVyJ3MgY2xvY2stcmVxdWVzdCBvdXRwdXQuIFdoZW5cXG4rICAgICAgcHJlc2VudCwgdGhlIHJlZmVyZW5jZSBjbG9jayBpcyBlbmFibGVkIGluIHJlc3BvbnNlIHRvIHRoaXMgc2lnbmFsXFxuKyAgICAgIGluc3RlYWQgb2YgYmVpbmcgbGVmdCBhbHdheXMtb24uXFxuK1xcbiAgIGludGVycnVwdHM6XFxuICAgICBtYXhJdGVtczogMVxcbiBcXG5AQCAtNTgsMTIgKzY2LDI1IEBAIGFsbE9mOlxcbiAgICAgICBwcm9wZXJ0aWVzOlxcbiAgICAgICAgIGNvbXBhdGlibGU6XFxuICAgICAgICAgICBjb250YWluczpcXG4tICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNmd3JuNS1pMmNcXG4rICAgICAgICAgICAgZW51bTpcXG4rICAgICAgICAgICAgICAtIHNhbXN1bmcsczNmd3JuNS1pMmNcXG4rICAgICAgICAgICAgICAtIHNhbXN1bmcsczNucm40di1pMmNcXG4gICAgIHRoZW46XFxuICAgICAgIHJlcXVpcmVkOlxcbiAgICAgICAgIC0gaW50ZXJydXB0c1xcbiAgICAgICAgIC0gcmVnXFxuIFxcbisgICMgVGhlIGNsb2NrLXJlcXVlc3QgaGFuZHNoYWtlIG9ubHkgZXhpc3RzIG9uIHRoZSBTM05STjRWLlxcbisgIC0gaWY6XFxuKyAgICAgIG5vdDpcXG4rICAgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgICAgY29udGFpbnM6XFxuKyAgICAgICAgICAgICAgY29uc3Q6IHNhbXN1bmcsczNucm40di1pMmNcXG4rICAgIHRoZW46XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY2xrLXJlcS1ncGlvczogZmFsc2VcXG4rXFxuIGV4YW1wbGVzOlxcbiAgIC0gfFxcbiAgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXFxuaW5kZXggYWYwZmE4YmQ5NzBiNGYuLjU5MzE3ZWFhZDdhYzk4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXFxuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcXG5AQCAtMTIyLDExICsxMjIsNDcgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9zZW5kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBzM2Z3cm41X25jaV9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUnVucyBhZnRlciBDT1JFX1JFU0VULCBiZWZvcmUgQ09SRV9JTklULiBUaGUgUzNOUk40ViBuZWVkcyBpdHNcXG4rXFx0ICogcmVmZXJlbmNlIGNsb2NrIGNvbmZpZ3VyZWQgaGVyZSAodGhlIGRvd25zdHJlYW0gc3RhY2sgZG9lcyBpdCBpbiB0aGVcXG4rXFx0ICogYm9vdGxvYWRlciwgYmVmb3JlIENPUkVfUkVTRVQsIGJ1dCB0aGlzIGlzIHRoZSBlYXJsaWVzdCBob29rIHRoZSBOQ0lcXG4rXFx0ICogY29yZSBvZmZlcnMgYW5kIHRoZSBjaGlwIGFjY2VwdHMgaXQpLlxcbitcXHQgKi9cXG4rXFx0aWYgKGluZm8tXFx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpXFxuK1xcdFxcdHJldHVybiBzM2Z3cm41X25jaV9jbGtfY2ZnKGluZm8pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgczNmd3JuNV9uY2lfcG9zdF9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKGluZm8tXFx1MDAzZXZhcmlhbnQgPT0gUzNGV1JONV9WQVJJQU5UX1MzTlJONFYpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIFMzTlJONFYgc2hpcHMgd2l0aCB3b3JraW5nIGZpcm13YXJlIGJlaGluZCBhIGJvb3Rsb2FkZXJcXG4rXFx0XFx0ICogcHJvdG9jb2wgdGhpcyBkcml2ZXIgZG9lcyBub3QgaW1wbGVtZW50LCBzbyB0aGVyZSBpcyBub1xcbitcXHRcXHQgKiBkb3dubG9hZCBzdGVwOyB0aGUgTkNJIGNvcmUgaGFzIGFscmVhZHkgZG9uZSBDT1JFX1JFU0VUICtcXG4rXFx0XFx0ICogQ09SRV9JTklULiBKdXN0IChyZSlsb2FkIHRoZSBSRiByZWdpc3RlcnMgdmlhIERVQUxfT1BUSU9OLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0gczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoaW5mbywgXFxcInNlY19zM25ybjR2X2h3cmVnLmJpblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwic2VjX3MzbnJuNHZfc3dyZWcuYmluXFxcIik7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEtlZXAgZ29pbmcgZXZlbiBpZiB0aGUgYmxvYnMgY291bGQgbm90IGJlIGxvYWRlZDogdGhlIGNoaXBcXG4rXFx0XFx0ICogc3RpbGwgZW51bWVyYXRlcyBhbmQgZmFsbHMgYmFjayB0byB0aGUgUkYgcmVnaXN0ZXJzIHByb2dyYW1tZWRcXG4rXFx0XFx0ICogaW4gaXRzIGZsYXNoLCBzbyBORkMgbWF5IHdvcmsgYW55d2F5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwicmZyZWcgY29uZmlndXJlIGZhaWxlZCAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHMzZndybjVfZmlybXdhcmVfaW5pdChpbmZvKSkge1xcbiBcXHRcXHQvL3NraXAgYm9vdGxvYWRlciBtb2RlXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNTIsMTMgKzE4OCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgczNmd3JuNV9uY2lfb3BzID0ge1xcbiBcXHQub3BlbiA9IHMzZndybjVfbmNpX29wZW4sXFxuIFxcdC5jbG9zZSA9IHMzZndybjVfbmNpX2Nsb3NlLFxcbiBcXHQuc2VuZCA9IHMzZndybjVfbmNpX3NlbmQsXFxuK1xcdC5zZXR1cCA9IHMzZndybjVfbmNpX3NldHVwLFxcbiBcXHQucG9zdF9zZXR1cCA9IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAsXFxuIFxcdC5wcm9wX29wcyA9IHMzZndybjVfbmNpX3Byb3Bfb3BzLFxcbiBcXHQubl9wcm9wX29wcyA9IEFSUkFZX1NJWkUoczNmd3JuNV9uY2lfcHJvcF9vcHMpLFxcbiB9O1xcbiBcXG4gaW50IHMzZndybjVfcHJvYmUoc3RydWN0IG5jaV9kZXYgKipuZGV2LCB2b2lkICpwaHlfaWQsIHN0cnVjdCBkZXZpY2UgKnBkZXYsXFxuLVxcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpXFxuK1xcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMsIGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQpXFxuIHtcXG4gXFx0c3RydWN0IHMzZndybjVfaW5mbyAqaW5mbztcXG4gXFx0aW50IHJldDtcXG5AQCAtMTcwLDYgKzIwNyw3IEBAIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxcbiBcXHRpbmZvLVxcdTAwM2VwaHlfaWQgPSBwaHlfaWQ7XFxuIFxcdGluZm8tXFx1MDAzZXBkZXYgPSBwZGV2O1xcbiBcXHRpbmZvLVxcdTAwM2VwaHlfb3BzID0gcGh5X29wcztcXG4rXFx0aW5mby1cXHUwMDNldmFyaWFudCA9IHZhcmlhbnQ7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZW11dGV4KTtcXG4gXFxuIFxcdHMzZndybjVfc2V0X21vZGUoaW5mbywgUzNGV1JONV9NT0RFX0NPTEQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xcbmluZGV4IGU5YTM0ZDI3YTM2OTg0Li44OGE0OTg4NzkxZWZkOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXFxuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9pMmMuY1xcbkBAIC0yMyw5ICsyMyw1MyBAQCBzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5IHtcXG4gXFx0c3RydWN0IGkyY19jbGllbnQgKmkyY19kZXY7XFxuIFxcdHN0cnVjdCBjbGsgKmNsaztcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE9wdGlvbmFsIGhhcmR3YXJlIGNsb2NrLXJlcXVlc3QgaGFuZHNoYWtlLiBXaGVuIGEgQ0xLX1JFUSBHUElPIGlzXFxuK1xcdCAqIHdpcmVkLCB0aGUgY2hpcCBkcml2ZXMgaXQgaGlnaCB3aGlsZSBpdCBuZWVkcyBpdHMgWEkgY2xvY2sgLS0gbm90YWJseVxcbitcXHQgKiB0byBnZW5lcmF0ZSB0aGUgcG9sbC9yZWFkZXIgY2FycmllciAtLSBhbmQgdGhlIGNsb2NrIGlzIGdhdGVkIG9uIGl0XFxuK1xcdCAqIGluc3RlYWQgb2YgYmVpbmcgbGVmdCBhbHdheXMtb24gKHdoaWNoIG5ldmVyIGxldHMgdGhlIGNoaXAncyBUWCBQTExcXG4rXFx0ICogbG9jayBvbiBhIGZyZXNoIGNsb2NrIHN0YXJ0LCBsZWF2aW5nIGl0IHVuYWJsZSB0byBwb2xsKS5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fY2xrX3JlcTtcXG4rXFx0Ym9vbCBjbGtfb247XFxuK1xcdHN0cnVjdCBtdXRleCBjbGtfbG9jaztcXHQvKiBzZXJpYWxpc2VzIGNsa19vbiBhZ2FpbnN0IHRoZSBDTEtfUkVRIGlycSAqL1xcbitcXG4gXFx0dW5zaWduZWQgaW50IGlycV9za2lwOjE7XFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19jbGtfc2V0KHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeSwgYm9vbCBvbilcXG4re1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwaHktXFx1MDAzZWNsa19sb2NrKTtcXG4rXFx0aWYgKG9uIFxcdTAwMjZcXHUwMDI2ICFwaHktXFx1MDAzZWNsa19vbikge1xcbitcXHRcXHRpbnQgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBoeS1cXHUwMDNlY2xrKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQgPT0gMClcXG4rXFx0XFx0XFx0cGh5LVxcdTAwM2VjbGtfb24gPSB0cnVlO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGRldl93YXJuX29uY2UoXFx1MDAyNnBoeS1cXHUwMDNlaTJjX2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBcXFwiZmFpbGVkIHRvIGVuYWJsZSBjbG9jayAoJWQpOyBORkMgbWF5IG5vdCBwb2xsXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICByZXQpO1xcbitcXHR9IGVsc2UgaWYgKCFvbiBcXHUwMDI2XFx1MDAyNiBwaHktXFx1MDAzZWNsa19vbikge1xcbitcXHRcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LVxcdTAwM2VjbGspO1xcbitcXHRcXHRwaHktXFx1MDAzZWNsa19vbiA9IGZhbHNlO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cGh5LVxcdTAwM2VjbGtfbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHMzZndybjVfaTJjX2Nsa19kaXNhYmxlX2FjdGlvbih2b2lkICpkYXRhKVxcbit7XFxuK1xcdHMzZndybjVfaTJjX2Nsa19zZXQoZGF0YSwgZmFsc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWQoaW50IGlycSwgdm9pZCAqcGh5X2lkKVxcbit7XFxuK1xcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeSA9IHBoeV9pZDtcXG4rXFxuK1xcdHMzZndybjVfaTJjX2Nsa19zZXQocGh5LCBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAocGh5LVxcdTAwM2VncGlvX2Nsa19yZXEpIFxcdTAwM2UgMCk7XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHMzZndybjVfaTJjX3NldF9tb2RlKHZvaWQgKnBoeV9pZCwgZW51bSBzM2Z3cm41X21vZGUgbW9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHkgPSBwaHlfaWQ7XFxuQEAgLTE0Niw2ICsxOTAsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpwaHlfaWQpXFxuIFxcbiBzdGF0aWMgaW50IHMzZndybjVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuIHtcXG4rXFx0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcXG4gXFx0c3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtMTcyLDE1ICsyMTcsNjMgQEAgc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbiBcXHQgKiBTM0ZXUk41IGRlcGVuZHMgb24gYSBjbG9jayBpbnB1dCAoXFxcIlhJXFxcIiBwaW4pIHRvIGZ1bmN0aW9uIHByb3Blcmx5LlxcbiBcXHQgKiBEZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gdGhpcyBjb3VsZCBiZSBhbiBhbHdheXMtb25cXG4gXFx0ICogb3NjaWxsYXRvciBvciBzb21lIGV4dGVybmFsIGNsb2NrIHRoYXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQuXFxuLVxcdCAqIE1ha2Ugc3VyZSB0aGUgY2xvY2sgaXMgcnVubmluZyBiZWZvcmUgc3RhcnRpbmcgUzNGV1JONS5cXG4rXFx0ICpcXG4rXFx0ICogSWYgYSBDTEtfUkVRIEdQSU8gaXMgd2lyZWQsIHRoZSBjaGlwIGdhdGVzIHRoZSBjbG9jayBpdHNlbGYgKGRyaXZpbmdcXG4rXFx0ICogQ0xLX1JFUSBoaWdoIHdoZW4gaXQgbmVlZHMgWEkpOyBzZXJ2aWNlIHRoYXQgaGFuZHNoYWtlLiBPdGhlcndpc2UganVzdFxcbitcXHQgKiBtYWtlIHN1cmUgdGhlIGNsb2NrIGlzIHJ1bm5pbmcgYmVmb3JlIHN0YXJ0aW5nIFMzRldSTjUuXFxuIFxcdCAqL1xcbi1cXHRwaHktXFx1MDAzZWNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgTlVMTCk7XFxuLVxcdGlmIChJU19FUlIocGh5LVxcdTAwM2VjbGspKVxcbi1cXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIFBUUl9FUlIocGh5LVxcdTAwM2VjbGspLFxcbi1cXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGNsb2NrXFxcXG5cXFwiKTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cGh5LVxcdTAwM2VjbGtfbG9jayk7XFxuK1xcdHBoeS1cXHUwMDNlZ3Bpb19jbGtfcmVxID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBcXFwiY2xrLXJlcVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBHUElPRF9JTik7XFxuK1xcdGlmIChJU19FUlIocGh5LVxcdTAwM2VncGlvX2Nsa19yZXEpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwaHktXFx1MDAzZWdwaW9fY2xrX3JlcSk7XFxuK1xcbitcXHRpZiAocGh5LVxcdTAwM2VncGlvX2Nsa19yZXEpIHtcXG4rXFx0XFx0aW50IGNsa19yZXFfaXJxO1xcbitcXG4rXFx0XFx0cGh5LVxcdTAwM2VjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBOVUxMKTtcXG4rXFx0XFx0aWYgKElTX0VSUihwaHktXFx1MDAzZWNsaykpXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgUFRSX0VSUihwaHktXFx1MDAzZWNsayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVW5saWtlIHRoZSBhbHdheXMtb24gYnJhbmNoIGJlbG93LCB0aGlzIGNsb2NrIGlzIGVuYWJsZWQgYnlcXG4rXFx0XFx0ICogaGFuZCBmcm9tIHRoZSBDTEtfUkVRIGhhbmRsZXIsIHNvIGRldm0gd2lsbCBub3QgZGlzYWJsZSBpdCBvblxcbitcXHRcXHQgKiB1bmJpbmQuIEdhdGUgaXQgb2ZmIGV4cGxpY2l0bHkgaWYgaXQgaXMgc3RpbGwgb24gYXQgdGVhcmRvd24uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgczNmd3JuNV9pMmNfY2xrX2Rpc2FibGVfYWN0aW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcGh5KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdGNsa19yZXFfaXJxID0gZ3Bpb2RfdG9faXJxKHBoeS1cXHUwMDNlZ3Bpb19jbGtfcmVxKTtcXG4rXFx0XFx0aWYgKGNsa19yZXFfaXJxIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIGNsa19yZXFfaXJxO1xcbitcXG4rXFx0XFx0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIGNsa19yZXFfaXJxLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0SVJRRl9UUklHR0VSX1JJU0lORyB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdElSUUZfVFJJR0dFUl9GQUxMSU5HIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0SVJRRl9PTkVTSE9ULFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXFwiczNmd3JuNV9jbGtfcmVxXFxcIiwgcGh5KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIFNlZWQgdGhlIGNsb2NrIHN0YXRlIGZyb20gdGhlIGN1cnJlbnQgQ0xLX1JFUSBsZXZlbC4gKi9cXG4rXFx0XFx0czNmd3JuNV9pMmNfY2xrX3NldChwaHksXFxuK1xcdFxcdFxcdFxcdCAgICBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAocGh5LVxcdTAwM2VncGlvX2Nsa19yZXEpIFxcdTAwM2UgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBoeS1cXHUwMDNlY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBOVUxMKTtcXG4rXFx0XFx0aWYgKElTX0VSUihwaHktXFx1MDAzZWNsaykpXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgUFRSX0VSUihwaHktXFx1MDAzZWNsayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgY2xvY2tcXFxcblxcXCIpO1xcbitcXHR9XFxuIFxcbitcXHQvKiBObyBtYXRjaCBkYXRhIChlLmcuIGkyY19kZXZpY2VfaWQgYmluZGluZykgbWVhbnMgdGhlIGRlZmF1bHQgRldETC4gKi9cXG4rXFx0dmFyaWFudCA9ICh1aW50cHRyX3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7XFxuIFxcdHJldCA9IHMzZndybjVfcHJvYmUoXFx1MDAyNnBoeS1cXHUwMDNlY29tbW9uLm5kZXYsIHBoeSwgXFx1MDAyNnBoeS1cXHUwMDNlaTJjX2Rldi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNmkyY19waHlfb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZpMmNfcGh5X29wcywgdmFyaWFudCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjEwLDggKzMwMywxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgczNmd3JuNV9pMmNfaWRfdGFibGVbXSA9IHtcXG4gfTtcXG4gTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHMzZndybjVfaTJjX2lkX3RhYmxlKTtcXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gX19tYXliZV91bnVzZWQgPSB7XFxuLVxcdHsgLmNvbXBhdGlibGUgPSBcXFwic2Ftc3VuZyxzM2Z3cm41LWkyY1xcXCIsIH0sXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwic2Ftc3VuZyxzM2Z3cm41LWkyY1xcXCIsXFxuK1xcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9GV0RMLCB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInNhbXN1bmcsczNucm40di1pMmNcXFwiLFxcbitcXHQgIC5kYXRhID0gKHZvaWQgKilTM0ZXUk41X1ZBUklBTlRfUzNOUk40ViwgfSxcXG4gXFx0e31cXG4gfTtcXG4gTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfczNmd3JuNV9pMmNfbWF0Y2gpO1xcbkBAIC0yMTksNyArMzE1LDcgQEAgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfczNmd3JuNV9pMmNfbWF0Y2gpO1xcbiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgczNmd3JuNV9pMmNfZHJpdmVyID0ge1xcbiBcXHQuZHJpdmVyID0ge1xcbiBcXHRcXHQubmFtZSA9IFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLFxcbi1cXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfczNmd3JuNV9pMmNfbWF0Y2gpLFxcbitcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9zM2Z3cm41X2kyY19tYXRjaCxcXG4gXFx0fSxcXG4gXFx0LnByb2JlID0gczNmd3JuNV9pMmNfcHJvYmUsXFxuIFxcdC5yZW1vdmUgPSBzM2Z3cm41X2kyY19yZW1vdmUsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXFxuaW5kZXggNWE5ZGUxMWJiZWNlYTQuLjA0ZjRjMzYyNjkxZTNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5jXFxuQEAgLTgsNiArOCw5IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGxldGlvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pbm1heC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiczNmd3JuNS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibmNpLmhcXFwiXFxuQEAgLTIwLDcgKzIzLDcgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wcm9wX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcXG4rY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcXG4gXFx0XFx0XFx0XFx0TkNJX1BST1BfU0VUX1JGUkVHKSxcXG5AQCAtNDEsNiArNDQsMTEgQEAgY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdID0ge1xcbiBcXHRcXHRcXHRcXHROQ0lfUFJPUF9GV19DRkcpLFxcbiBcXHRcXHQucnNwID0gczNmd3JuNV9uY2lfcHJvcF9yc3AsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0Lm9wY29kZSA9IG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1BST1BSSUVUQVJZLFxcbitcXHRcXHRcXHRcXHROQ0lfUFJPUF9EVUFMX09QVElPTiksXFxuK1xcdFxcdC5yc3AgPSBzM2Z3cm41X25jaV9wcm9wX3JzcCxcXG4rXFx0fSxcXG4gfTtcXG4gXFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXFxuQEAgLTExNywzICsxMjUsMTA0IEBAIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSlcXG4gXFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rXFxuKy8qXFxuKyAqIENvbmZpZ3VyZSB0aGUgcmVmZXJlbmNlIGNsb2NrLiBUaGUgUzNOUk40ViBleHBlY3RzIHRoZSBzaW5nbGUtYnl0ZSBGV19DRkdcXG4rICogZm9ybSAoanVzdCB0aGUgY2xvY2stc3BlZWQgc2VsZWN0b3IpLiBUaGUgZG93bnN0cmVhbSBzdGFjayBzZW5kcyB0aGlzIGluIHRoZVxcbisgKiBib290bG9hZGVyIGJlZm9yZSBDT1JFX1JFU0VUOyB0aGUgZWFybGllc3QgdGhlIG1haW5saW5lIE5DSSBjb3JlIGxldHMgdXMgaW5cXG4rICogaXMgdGhlIC1cXHUwMDNlc2V0dXAgaG9vayAoYWZ0ZXIgQ09SRV9SRVNFVCwgYmVmb3JlIENPUkVfSU5JVCksIHdoaWNoIHdvcmtzLlxcbisgKi9cXG4raW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcXG4re1xcbitcXHR1OCBjbGtfc3BlZWQgPSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEO1xcbitcXG4rXFx0cmV0dXJuIG5jaV9wcm9wX2NtZChpbmZvLVxcdTAwM2VuZGV2LCBOQ0lfUFJPUF9GV19DRkcsIDEsIFxcdTAwMjZjbGtfc3BlZWQpO1xcbit9XFxuK1xcbisvKlxcbisgKiBTM05STjRWIFJGIHJlZ2lzdGVyIHVwZGF0ZS4gVGhlIEhXIGFuZCBTVyByZWdpc3RlciBibG9icyBhcmUgbWVyZ2VkIGludG8gYVxcbisgKiBzaW5nbGUgc3RyZWFtIChIVyBmaXJzdCkgYW5kIHB1c2hlZCB2aWEgdGhlIERVQUxfT1BUSU9OIGNvbW1hbmQ6XFxuKyAqIFNUQVJUX1VQREFURSwgb25lIFNFVF9PUFRJT04gcGVyIDI1Mi1ieXRlIHNlY3Rpb24sIHRoZW4gU1RPUF9VUERBVEUgY2FycnlpbmdcXG4rICogYSAxNi1iaXQgY2hlY2tzdW0gKHJ1bm5pbmcgc3VtIG9mIHRoZSBtZXJnZWQgc3RyZWFtIGFzIDMyLWJpdCB3b3JkcykuXFxuKyAqL1xcbitpbnQgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWwoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCBjaGFyICpod19uYW1lLCBjb25zdCBjaGFyICpzd19uYW1lKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaHdfZncgPSBOVUxMLCAqc3dfZncgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCBzZXRfb3B0aW9uO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2aW5mby1cXHUwMDNlbmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2O1xcbitcXHRzaXplX3QgbWVyZ2VkX3NpemUsIGksIGxlbjtcXG4rXFx0dTggKm1lcmdlZCA9IE5VTEw7XFxuK1xcdHU4IHN0b3BfY21kWzNdO1xcbitcXHR1MzIgY2hlY2tzdW07XFxuK1xcdHU4IHN1Yl9vaWQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFxcdTAwMjZod19mdywgaHdfbmFtZSwgZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXFx1MDAyNnN3X2Z3LCBzd19uYW1lLCBkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXRfaHc7XFxuK1xcbitcXHRtZXJnZWRfc2l6ZSA9IGh3X2Z3LVxcdTAwM2VzaXplICsgc3dfZnctXFx1MDAzZXNpemU7XFxuK1xcdG1lcmdlZCA9IGttYWxsb2MobWVyZ2VkX3NpemUsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIW1lcmdlZCkge1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRtZW1jcHkobWVyZ2VkLCBod19mdy1cXHUwMDNlZGF0YSwgaHdfZnctXFx1MDAzZXNpemUpO1xcbitcXHRtZW1jcHkobWVyZ2VkICsgaHdfZnctXFx1MDAzZXNpemUsIHN3X2Z3LVxcdTAwM2VkYXRhLCBzd19mdy1cXHUwMDNlc2l6ZSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSdW5uaW5nIHN1bSBvZiB0aGUgbWVyZ2VkIHN0cmVhbSBhcyBsaXR0bGUtZW5kaWFuIDMyLWJpdCB3b3Jkcy4gVGhlXFxuK1xcdCAqIHJmcmVnIGJsb2JzIGFyZSB3b3JkLWFsaWduZWQsIHNvIHRoZSBsb29wIGNvbnN1bWVzIHRoZSB3aG9sZSBzdHJlYW07XFxuK1xcdCAqIHNob3VsZCBhIGZ1dHVyZSBibG9iIG5vdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgaXRzIHRhaWwgd291bGQgYmVcXG4rXFx0ICogaWdub3JlZCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0Y2hlY2tzdW0gPSAwO1xcbitcXHRmb3IgKGkgPSAwOyBpICsgNCBcXHUwMDNjPSBtZXJnZWRfc2l6ZTsgaSArPSA0KVxcbitcXHRcXHRjaGVja3N1bSArPSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICsgaSk7XFxuK1xcbitcXHRkZXZfZGJnKGRldiwgXFxcInJmcmVnIGR1YWwtb3B0aW9uIHVwZGF0ZTogJXMgKyAlc1xcXFxuXFxcIiwgaHdfbmFtZSwgc3dfbmFtZSk7XFxuK1xcbitcXHQvKiBTVEFSVF9VUERBVEUgKi9cXG4rXFx0c3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURTtcXG4rXFx0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXFx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAxLCBcXHUwMDI2c3ViX29pZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW5hYmxlIHRvIHN0YXJ0IHJmcmVnIHVwZGF0ZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBTRVRfT1BUSU9OIHBlciBzZWN0aW9uICovXFxuK1xcdHNldF9vcHRpb24uc3ViX29pZCA9IE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT047XFxuK1xcdHNldF9vcHRpb24uaW5kZXggPSAwO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWVyZ2VkX3NpemU7IGkgKz0gTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpIHtcXG4rXFx0XFx0bGVuID0gbWluX3Qoc2l6ZV90LCBtZXJnZWRfc2l6ZSAtIGksIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKTtcXG4rXFx0XFx0bWVtY3B5KHNldF9vcHRpb24uZGF0YSwgbWVyZ2VkICsgaSwgbGVuKTtcXG4rXFx0XFx0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXFx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLFxcbitcXHRcXHRcXHRcXHQgICBsZW4gKyAyLCAoX191OCAqKVxcdTAwMjZzZXRfb3B0aW9uKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJyZnJlZyB1cGRhdGUgZXJyb3IgKGNvZGU9JWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzZXRfb3B0aW9uLmluZGV4Kys7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi9cXG4rXFx0c3RvcF9jbWRbMF0gPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVE9QX1VQREFURTtcXG4rXFx0cHV0X3VuYWxpZ25lZF9sZTE2KGNoZWNrc3VtLCBcXHUwMDI2c3RvcF9jbWRbMV0pO1xcbitcXHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sIDMsIHN0b3BfY21kKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJVbmFibGUgdG8gc3RvcCByZnJlZyB1cGRhdGVcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2X2RiZyhkZXYsIFxcXCJyZnJlZyBkdWFsLW9wdGlvbiB1cGRhdGU6IHN1Y2Nlc3NcXFxcblxcXCIpO1xcbitvdXQ6XFxuK1xcdGtmcmVlKG1lcmdlZCk7XFxuK1xcdHJlbGVhc2VfZmlybXdhcmUoc3dfZncpO1xcbitvdXRfaHc6XFxuK1xcdHJlbGVhc2VfZmlybXdhcmUoaHdfZncpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXFxuaW5kZXggYmM0YmNlMmJiYzRkOTMuLjIzMTc5YmEwOTVhMWI0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L25jaS5oXFxuQEAgLTQwLDYgKzQwLDEzIEBAIHN0cnVjdCBuY2lfcHJvcF9zdG9wX3JmcmVnX3JzcCB7XFxuIFxcbiAjZGVmaW5lIE5DSV9QUk9QX0ZXX0NGR1xcdFxcdDB4MjhcXG4gXFxuKy8qXFxuKyAqIFNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkIChjbG9jay1zcGVlZCBzZWxlY3RvcikgZm9yIHRoZSBTM05STjRWIHJlZmVyZW5jZVxcbisgKiBjbG9jay4gVGFrZW4gZnJvbSB0aGUgdmVuZG9yIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcGFydCAodGhlIGVuY29kaW5nIGlzXFxuKyAqIG5vdCBkb2N1bWVudGVkKS5cXG4rICovXFxuKyNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHX0NMS19TUEVFRFxcdDB4MTFcXG4rXFxuIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfY21kIHtcXG4gXFx0X191OCBjbGtfdHlwZTtcXG4gXFx0X191OCBjbGtfc3BlZWQ7XFxuQEAgLTUwLDcgKzU3LDMwIEBAIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfcnNwIHtcXG4gXFx0X191OCBzdGF0dXM7XFxuIH07XFxuIFxcbi1leHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzRdO1xcbisvKlxcbisgKiBUaGUgUzNOUk40ViB1cGRhdGVzIGl0cyBSRiByZWdpc3RlcnMgdGhyb3VnaCBhIHNpbmdsZSBcXFwiZHVhbCBvcHRpb25cXFwiIGNvbW1hbmRcXG4rICogKGEgc3ViLU9JRCBzZWxlY3RzIHRoZSBvcGVyYXRpb24pIGluc3RlYWQgb2YgdGhlIFNUQVJUL1NFVC9TVE9QX1JGUkVHXFxuKyAqIG9wY29kZXMgYWJvdmUsIGFuZCBleHBlY3RzIHRoZSBIVyBhbmQgU1cgcmVnaXN0ZXIgYmxvYnMgbWVyZ2VkIGludG8gb25lXFxuKyAqIHN0cmVhbS5cXG4rICovXFxuKyNkZWZpbmUgTkNJX1BST1BfRFVBTF9PUFRJT05cXHRcXHQweDJhXFxuK1xcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUQVJUX1VQREFURVxcdDB4MDFcXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TRVRfT1BUSU9OXFx0MHgwMlxcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFXFx0MHgwM1xcbitcXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRVxcdDI1MlxcbitcXG4rc3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQge1xcbitcXHRfX3U4IHN1Yl9vaWQ7XFx0LyogTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTiAqL1xcbitcXHRfX3U4IGluZGV4O1xcbitcXHRfX3U4IGRhdGFbTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkVdO1xcbit9O1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s1XTtcXG4gaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKTtcXG4raW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqaHdfbmFtZSwgY29uc3QgY2hhciAqc3dfbmFtZSk7XFxuK2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pO1xcbiBcXG4gI2VuZGlmIC8qIF9fTE9DQUxfUzNGV1JONV9OQ0lfSF8gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxcbmluZGV4IDJiNDkyMjM2MDkwYjg1Li4yZDhjMTIwOTFmYmE1NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXFxuQEAgLTIxLDYgKzIxLDE3IEBAIGVudW0gczNmd3JuNV9tb2RlIHtcXG4gXFx0UzNGV1JONV9NT0RFX0ZXLFxcbiB9O1xcbiBcXG4rZW51bSBzM2Z3cm41X3ZhcmlhbnQge1xcbitcXHQvKiBTM0ZXUk41IC8gUzNGV1JOODI6IGZpcm13YXJlIGlzIGRvd25sb2FkZWQgYnkgdGhpcyBkcml2ZXIgKi9cXG4rXFx0UzNGV1JONV9WQVJJQU5UX0ZXREwsXFxuK1xcdC8qXFxuK1xcdCAqIFMzTlJONFY6IHNoaXBzIHdpdGggd29ya2luZyBmaXJtd2FyZSBiZWhpbmQgYSBib290bG9hZGVyIHByb3RvY29sXFxuK1xcdCAqIHRoaXMgZHJpdmVyIGRvZXMgbm90IGltcGxlbWVudDsgc2tpcCB0aGUgZG93bmxvYWQsIGNvbmZpZ3VyZSB0aGVcXG4rXFx0ICogY2xvY2sgKEZXX0NGRykgYW5kIHVwZGF0ZSB0aGUgUkYgcmVnaXN0ZXJzIHZpYSB0aGUgRFVBTF9PUFRJT04gY21kLlxcbitcXHQgKi9cXG4rXFx0UzNGV1JONV9WQVJJQU5UX1MzTlJONFYsXFxuK307XFxuK1xcbiBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzIHtcXG4gXFx0dm9pZCAoKnNldF93YWtlKSh2b2lkICppZCwgYm9vbCBzbGVlcCk7XFxuIFxcdHZvaWQgKCpzZXRfbW9kZSkodm9pZCAqaWQsIGVudW0gczNmd3JuNV9tb2RlKTtcXG5AQCAtMzYsNiArNDcsNyBAQCBzdHJ1Y3QgczNmd3JuNV9pbmZvIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcztcXG4gXFxuIFxcdHN0cnVjdCBzM2Z3cm41X2Z3X2luZm8gZndfaW5mbztcXG4rXFx0ZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudDtcXG4gXFxuIFxcdHN0cnVjdCBtdXRleCBtdXRleDtcXG4gfTtcXG5AQCAtNzgsNyArOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXFxuIH1cXG4gXFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxcbi1cXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzKTtcXG4rXFx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcywgZW51bSBzM2Z3cm41X3ZhcmlhbnQgdmFyaWFudCk7XFxuIHZvaWQgczNmd3JuNV9yZW1vdmUoc3RydWN0IG5jaV9kZXYgKm5kZXYpO1xcbiBcXG4gaW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xcbmluZGV4IDU0MGE0ZGRiMGIwNWU5Li40NzE3MmQ3MzlhNDFmNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXFxuQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgaW50IHMzZndybjgyX3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gczNmd3JuNV9wcm9iZShcXHUwMDI2cGh5LVxcdTAwM2Vjb21tb24ubmRldiwgcGh5LCBcXHUwMDI2cGh5LVxcdTAwM2VzZXJfZGV2LVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2dWFydF9waHlfb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZ1YXJ0X3BoeV9vcHMsIFMzRldSTjVfVkFSSUFOVF9GV0RMKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX3NlcmRldjtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDIwOjQ1OjA2LjM0MzI2NzM3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0Mzc3NTAwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDX1MzRldSTjVfSTJDXCIsXG4gICAgXCJORkNfUzNGV1JONVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInMzZndybjVfbmNpX3NldHVwXCIsXG4gICAgXCJzM2Z3cm41X25jaV9wb3N0X3NldHVwXCIsXG4gICAgXCJzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbFwiLFxuICAgIFwiczNmd3JuNV9uY2lfY2xrX2NmZ1wiLFxuICAgIFwiczNmd3JuNV9pMmNfY2xrX3NldFwiLFxuICAgIFwiczNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWRcIixcbiAgICBcInMzZndybjVfaTJjX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhIG5ldyB2YXJpYW50IG9mIHRoZSBTYW1zdW5nIE5GQyBjb250cm9sbGVyIChTM05STjRWKSB0byB0aGUgczNmd3JuNSBkcml2ZXIuIEl0IGludHJvZHVjZXMgbmV3IGluaXRpYWxpemF0aW9uIGxvZ2ljLCBmaXJtd2FyZSBsb2FkaW5nIHZpYSBOQ0kgcHJvcHJpZXRhcnkgY29tbWFuZHMsIGFuZCBjbG9jayBoYW5kbGluZyB2aWEgYSBuZXcgR1BJTyBpbnRlcnJ1cHQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChORkMgZHJpdmVyKSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIEkyQyBkZXZpY2UgcHJvYmluZyBhbmQgTkNJIGNvcmUgaW50ZXJhY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFmZWIxYWE0NzViZjA1NDZkYjg4YTQ1ODIxOTgyNDdmYWUxZjMyMTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDIwOjQ1OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zYW1zdW5nLHMzZndybjUueWFtbFxuaW5kZXggMTJiYWVlNDU3NTJjN2IuLjNlYmNkMDkzMzliODFlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc2Ftc3VuZyxzM2Z3cm41LnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3NhbXN1bmcsczNmd3JuNS55YW1sXG5AQCAtMTQsMTIgKzE0LDIwIEBAIHByb3BlcnRpZXM6XG4gICAgIGVudW06XG4gICAgICAgLSBzYW1zdW5nLHMzZndybjUtaTJjXG4gICAgICAgLSBzYW1zdW5nLHMzZndybjgyXG4rICAgICAgLSBzYW1zdW5nLHMzbnJuNHYtaTJjXG4gXG4gICBlbi1ncGlvczpcbiAgICAgbWF4SXRlbXM6IDFcbiAgICAgZGVzY3JpcHRpb246XG4gICAgICAgT3V0cHV0IEdQSU8gcGluIHVzZWQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgY2hpcFxuIFxuKyAgY2xrLXJlcS1ncGlvczpcbisgICAgbWF4SXRlbXM6IDFcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgSW5wdXQgR1BJTyBwaW4gY29ubmVjdGVkIHRvIHRoZSBjb250cm9sbGVyJ3MgY2xvY2stcmVxdWVzdCBvdXRwdXQuIFdoZW5cbisgICAgICBwcmVzZW50LCB0aGUgcmVmZXJlbmNlIGNsb2NrIGlzIGVuYWJsZWQgaW4gcmVzcG9uc2UgdG8gdGhpcyBzaWduYWxcbisgICAgICBpbnN0ZWFkIG9mIGJlaW5nIGxlZnQgYWx3YXlzLW9uLlxuK1xuICAgaW50ZXJydXB0czpcbiAgICAgbWF4SXRlbXM6IDFcbiBcbkBAIC01OCwxMiArNjYsMjUgQEAgYWxsT2Y6XG4gICAgICAgcHJvcGVydGllczpcbiAgICAgICAgIGNvbXBhdGlibGU6XG4gICAgICAgICAgIGNvbnRhaW5zOlxuLSAgICAgICAgICAgIGNvbnN0OiBzYW1zdW5nLHMzZndybjUtaTJjXG4rICAgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAgIC0gc2Ftc3VuZyxzM2Z3cm41LWkyY1xuKyAgICAgICAgICAgICAgLSBzYW1zdW5nLHMzbnJuNHYtaTJjXG4gICAgIHRoZW46XG4gICAgICAgcmVxdWlyZWQ6XG4gICAgICAgICAtIGludGVycnVwdHNcbiAgICAgICAgIC0gcmVnXG4gXG4rICAjIFRoZSBjbG9jay1yZXF1ZXN0IGhhbmRzaGFrZSBvbmx5IGV4aXN0cyBvbiB0aGUgUzNOUk40Vi5cbisgIC0gaWY6XG4rICAgICAgbm90OlxuKyAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICAgIGNvbnN0OiBzYW1zdW5nLHMzbnJuNHYtaTJjXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNsay1yZXEtZ3Bpb3M6IGZhbHNlXG4rXG4gZXhhbXBsZXM6XG4gICAtIHxcbiAgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jXG5pbmRleCBhZjBmYThiZDk3MGI0Zi4uNTkzMTdlYWFkN2FjOTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmNcbkBAIC0xMjIsMTEgKzEyMiw0NyBAQCBzdGF0aWMgaW50IHMzZndybjVfbmNpX3NlbmQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBzM2Z3cm41X25jaV9zZXR1cChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbit7XG4rXHRzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuK1xuK1x0LypcbitcdCAqIFJ1bnMgYWZ0ZXIgQ09SRV9SRVNFVCwgYmVmb3JlIENPUkVfSU5JVC4gVGhlIFMzTlJONFYgbmVlZHMgaXRzXG4rXHQgKiByZWZlcmVuY2UgY2xvY2sgY29uZmlndXJlZCBoZXJlICh0aGUgZG93bnN0cmVhbSBzdGFjayBkb2VzIGl0IGluIHRoZVxuK1x0ICogYm9vdGxvYWRlciwgYmVmb3JlIENPUkVfUkVTRVQsIGJ1dCB0aGlzIGlzIHRoZSBlYXJsaWVzdCBob29rIHRoZSBOQ0lcbitcdCAqIGNvcmUgb2ZmZXJzIGFuZCB0aGUgY2hpcCBhY2NlcHRzIGl0KS5cbitcdCAqL1xuK1x0aWYgKGluZm8tXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40VilcbitcdFx0cmV0dXJuIHMzZndybjVfbmNpX2Nsa19jZmcoaW5mbyk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBzM2Z3cm41X25jaV9wb3N0X3NldHVwKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGluZm8tXHUwMDNldmFyaWFudCA9PSBTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vikge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgUzNOUk40ViBzaGlwcyB3aXRoIHdvcmtpbmcgZmlybXdhcmUgYmVoaW5kIGEgYm9vdGxvYWRlclxuK1x0XHQgKiBwcm90b2NvbCB0aGlzIGRyaXZlciBkb2VzIG5vdCBpbXBsZW1lbnQsIHNvIHRoZXJlIGlzIG5vXG4rXHRcdCAqIGRvd25sb2FkIHN0ZXA7IHRoZSBOQ0kgY29yZSBoYXMgYWxyZWFkeSBkb25lIENPUkVfUkVTRVQgK1xuK1x0XHQgKiBDT1JFX0lOSVQuIEp1c3QgKHJlKWxvYWQgdGhlIFJGIHJlZ2lzdGVycyB2aWEgRFVBTF9PUFRJT04uXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbChpbmZvLCBcInNlY19zM25ybjR2X2h3cmVnLmJpblwiLFxuK1x0XHRcdFx0XHRcdCAgICBcInNlY19zM25ybjR2X3N3cmVnLmJpblwiKTtcbitcdFx0LypcbitcdFx0ICogS2VlcCBnb2luZyBldmVuIGlmIHRoZSBibG9icyBjb3VsZCBub3QgYmUgbG9hZGVkOiB0aGUgY2hpcFxuK1x0XHQgKiBzdGlsbCBlbnVtZXJhdGVzIGFuZCBmYWxscyBiYWNrIHRvIHRoZSBSRiByZWdpc3RlcnMgcHJvZ3JhbW1lZFxuK1x0XHQgKiBpbiBpdHMgZmxhc2gsIHNvIE5GQyBtYXkgd29yayBhbnl3YXkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGRldl93YXJuKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJyZnJlZyBjb25maWd1cmUgZmFpbGVkICglZClcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRpZiAoczNmd3JuNV9maXJtd2FyZV9pbml0KGluZm8pKSB7XG4gXHRcdC8vc2tpcCBib290bG9hZGVyIG1vZGVcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTUyLDEzICsxODgsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuY2lfb3BzIHMzZndybjVfbmNpX29wcyA9IHtcbiBcdC5vcGVuID0gczNmd3JuNV9uY2lfb3BlbixcbiBcdC5jbG9zZSA9IHMzZndybjVfbmNpX2Nsb3NlLFxuIFx0LnNlbmQgPSBzM2Z3cm41X25jaV9zZW5kLFxuK1x0LnNldHVwID0gczNmd3JuNV9uY2lfc2V0dXAsXG4gXHQucG9zdF9zZXR1cCA9IHMzZndybjVfbmNpX3Bvc3Rfc2V0dXAsXG4gXHQucHJvcF9vcHMgPSBzM2Z3cm41X25jaV9wcm9wX29wcyxcbiBcdC5uX3Byb3Bfb3BzID0gQVJSQVlfU0laRShzM2Z3cm41X25jaV9wcm9wX29wcyksXG4gfTtcbiBcbiBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbi1cdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHMpXG4rXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzLCBlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50KVxuIHtcbiBcdHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm87XG4gXHRpbnQgcmV0O1xuQEAgLTE3MCw2ICsyMDcsNyBAQCBpbnQgczNmd3JuNV9wcm9iZShzdHJ1Y3QgbmNpX2RldiAqKm5kZXYsIHZvaWQgKnBoeV9pZCwgc3RydWN0IGRldmljZSAqcGRldixcbiBcdGluZm8tXHUwMDNlcGh5X2lkID0gcGh5X2lkO1xuIFx0aW5mby1cdTAwM2VwZGV2ID0gcGRldjtcbiBcdGluZm8tXHUwMDNlcGh5X29wcyA9IHBoeV9vcHM7XG4rXHRpbmZvLVx1MDAzZXZhcmlhbnQgPSB2YXJpYW50O1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZpbmZvLVx1MDAzZW11dGV4KTtcbiBcbiBcdHMzZndybjVfc2V0X21vZGUoaW5mbywgUzNGV1JONV9NT0RFX0NPTEQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvaTJjLmMgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5pbmRleCBlOWEzNGQyN2EzNjk4NC4uODhhNDk4ODc5MWVmZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L2kyYy5jXG5AQCAtMjMsOSArMjMsNTMgQEAgc3RydWN0IHMzZndybjVfaTJjX3BoeSB7XG4gXHRzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2RldjtcbiBcdHN0cnVjdCBjbGsgKmNsaztcbiBcbitcdC8qXG4rXHQgKiBPcHRpb25hbCBoYXJkd2FyZSBjbG9jay1yZXF1ZXN0IGhhbmRzaGFrZS4gV2hlbiBhIENMS19SRVEgR1BJTyBpc1xuK1x0ICogd2lyZWQsIHRoZSBjaGlwIGRyaXZlcyBpdCBoaWdoIHdoaWxlIGl0IG5lZWRzIGl0cyBYSSBjbG9jayAtLSBub3RhYmx5XG4rXHQgKiB0byBnZW5lcmF0ZSB0aGUgcG9sbC9yZWFkZXIgY2FycmllciAtLSBhbmQgdGhlIGNsb2NrIGlzIGdhdGVkIG9uIGl0XG4rXHQgKiBpbnN0ZWFkIG9mIGJlaW5nIGxlZnQgYWx3YXlzLW9uICh3aGljaCBuZXZlciBsZXRzIHRoZSBjaGlwJ3MgVFggUExMXG4rXHQgKiBsb2NrIG9uIGEgZnJlc2ggY2xvY2sgc3RhcnQsIGxlYXZpbmcgaXQgdW5hYmxlIHRvIHBvbGwpLlxuK1x0ICovXG4rXHRzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX2Nsa19yZXE7XG4rXHRib29sIGNsa19vbjtcbitcdHN0cnVjdCBtdXRleCBjbGtfbG9jaztcdC8qIHNlcmlhbGlzZXMgY2xrX29uIGFnYWluc3QgdGhlIENMS19SRVEgaXJxICovXG4rXG4gXHR1bnNpZ25lZCBpbnQgaXJxX3NraXA6MTtcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIHMzZndybjVfaTJjX2Nsa19zZXQoc3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5LCBib29sIG9uKVxuK3tcbitcdG11dGV4X2xvY2soXHUwMDI2cGh5LVx1MDAzZWNsa19sb2NrKTtcbitcdGlmIChvbiBcdTAwMjZcdTAwMjYgIXBoeS1cdTAwM2VjbGtfb24pIHtcbitcdFx0aW50IHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwaHktXHUwMDNlY2xrKTtcbitcbitcdFx0aWYgKHJldCA9PSAwKVxuK1x0XHRcdHBoeS1cdTAwM2VjbGtfb24gPSB0cnVlO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZGV2X3dhcm5fb25jZShcdTAwMjZwaHktXHUwMDNlaTJjX2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgICBcImZhaWxlZCB0byBlbmFibGUgY2xvY2sgKCVkKTsgTkZDIG1heSBub3QgcG9sbFxcblwiLFxuK1x0XHRcdFx0ICAgICAgcmV0KTtcbitcdH0gZWxzZSBpZiAoIW9uIFx1MDAyNlx1MDAyNiBwaHktXHUwMDNlY2xrX29uKSB7XG4rXHRcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwaHktXHUwMDNlY2xrKTtcbitcdFx0cGh5LVx1MDAzZWNsa19vbiA9IGZhbHNlO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeS1cdTAwM2VjbGtfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHMzZndybjVfaTJjX2Nsa19kaXNhYmxlX2FjdGlvbih2b2lkICpkYXRhKVxuK3tcbitcdHMzZndybjVfaTJjX2Nsa19zZXQoZGF0YSwgZmFsc2UpO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWQoaW50IGlycSwgdm9pZCAqcGh5X2lkKVxuK3tcbitcdHN0cnVjdCBzM2Z3cm41X2kyY19waHkgKnBoeSA9IHBoeV9pZDtcbitcbitcdHMzZndybjVfaTJjX2Nsa19zZXQocGh5LCBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAocGh5LVx1MDAzZWdwaW9fY2xrX3JlcSkgXHUwMDNlIDApO1xuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzM2Z3cm41X2kyY19zZXRfbW9kZSh2b2lkICpwaHlfaWQsIGVudW0gczNmd3JuNV9tb2RlIG1vZGUpXG4ge1xuIFx0c3RydWN0IHMzZndybjVfaTJjX3BoeSAqcGh5ID0gcGh5X2lkO1xuQEAgLTE0Niw2ICsxOTAsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgczNmd3JuNV9pMmNfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpwaHlfaWQpXG4gXG4gc3RhdGljIGludCBzM2Z3cm41X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuIHtcbitcdGVudW0gczNmd3JuNV92YXJpYW50IHZhcmlhbnQ7XG4gXHRzdHJ1Y3QgczNmd3JuNV9pMmNfcGh5ICpwaHk7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE3MiwxNSArMjE3LDYzIEBAIHN0YXRpYyBpbnQgczNmd3JuNV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbiBcdCAqIFMzRldSTjUgZGVwZW5kcyBvbiBhIGNsb2NrIGlucHV0IChcIlhJXCIgcGluKSB0byBmdW5jdGlvbiBwcm9wZXJseS5cbiBcdCAqIERlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiB0aGlzIGNvdWxkIGJlIGFuIGFsd2F5cy1vblxuIFx0ICogb3NjaWxsYXRvciBvciBzb21lIGV4dGVybmFsIGNsb2NrIHRoYXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQuXG4tXHQgKiBNYWtlIHN1cmUgdGhlIGNsb2NrIGlzIHJ1bm5pbmcgYmVmb3JlIHN0YXJ0aW5nIFMzRldSTjUuXG4rXHQgKlxuK1x0ICogSWYgYSBDTEtfUkVRIEdQSU8gaXMgd2lyZWQsIHRoZSBjaGlwIGdhdGVzIHRoZSBjbG9jayBpdHNlbGYgKGRyaXZpbmdcbitcdCAqIENMS19SRVEgaGlnaCB3aGVuIGl0IG5lZWRzIFhJKTsgc2VydmljZSB0aGF0IGhhbmRzaGFrZS4gT3RoZXJ3aXNlIGp1c3RcbitcdCAqIG1ha2Ugc3VyZSB0aGUgY2xvY2sgaXMgcnVubmluZyBiZWZvcmUgc3RhcnRpbmcgUzNGV1JONS5cbiBcdCAqL1xuLVx0cGh5LVx1MDAzZWNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIE5VTEwpO1xuLVx0aWYgKElTX0VSUihwaHktXHUwMDNlY2xrKSlcbi1cdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgUFRSX0VSUihwaHktXHUwMDNlY2xrKSxcbi1cdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IGNsb2NrXFxuXCIpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwaHktXHUwMDNlY2xrX2xvY2spO1xuK1x0cGh5LVx1MDAzZWdwaW9fY2xrX3JlcSA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFwiY2xrLXJlcVwiLFxuK1x0XHRcdFx0XHRcdCAgICBHUElPRF9JTik7XG4rXHRpZiAoSVNfRVJSKHBoeS1cdTAwM2VncGlvX2Nsa19yZXEpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKTtcbitcbitcdGlmIChwaHktXHUwMDNlZ3Bpb19jbGtfcmVxKSB7XG4rXHRcdGludCBjbGtfcmVxX2lycTtcbitcbitcdFx0cGh5LVx1MDAzZWNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdFx0aWYgKElTX0VSUihwaHktXHUwMDNlY2xrKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBQVFJfRVJSKHBoeS1cdTAwM2VjbGspLFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBjbG9ja1xcblwiKTtcbitcbitcdFx0LypcbitcdFx0ICogVW5saWtlIHRoZSBhbHdheXMtb24gYnJhbmNoIGJlbG93LCB0aGlzIGNsb2NrIGlzIGVuYWJsZWQgYnlcbitcdFx0ICogaGFuZCBmcm9tIHRoZSBDTEtfUkVRIGhhbmRsZXIsIHNvIGRldm0gd2lsbCBub3QgZGlzYWJsZSBpdCBvblxuK1x0XHQgKiB1bmJpbmQuIEdhdGUgaXQgb2ZmIGV4cGxpY2l0bHkgaWYgaXQgaXMgc3RpbGwgb24gYXQgdGVhcmRvd24uXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldixcbitcdFx0XHRcdFx0ICAgICAgIHMzZndybjVfaTJjX2Nsa19kaXNhYmxlX2FjdGlvbixcbitcdFx0XHRcdFx0ICAgICAgIHBoeSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Y2xrX3JlcV9pcnEgPSBncGlvZF90b19pcnEocGh5LVx1MDAzZWdwaW9fY2xrX3JlcSk7XG4rXHRcdGlmIChjbGtfcmVxX2lycSBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gY2xrX3JlcV9pcnE7XG4rXG4rXHRcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgY2xrX3JlcV9pcnEsIE5VTEwsXG4rXHRcdFx0XHRcdFx0czNmd3JuNV9pMmNfY2xrX3JlcV90aHJlYWQsXG4rXHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX1JJU0lORyB8XG4rXHRcdFx0XHRcdFx0SVJRRl9UUklHR0VSX0ZBTExJTkcgfFxuK1x0XHRcdFx0XHRcdElSUUZfT05FU0hPVCxcbitcdFx0XHRcdFx0XHRcInMzZndybjVfY2xrX3JlcVwiLCBwaHkpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIFNlZWQgdGhlIGNsb2NrIHN0YXRlIGZyb20gdGhlIGN1cnJlbnQgQ0xLX1JFUSBsZXZlbC4gKi9cbitcdFx0czNmd3JuNV9pMmNfY2xrX3NldChwaHksXG4rXHRcdFx0XHQgICAgZ3Bpb2RfZ2V0X3ZhbHVlX2NhbnNsZWVwKHBoeS1cdTAwM2VncGlvX2Nsa19yZXEpIFx1MDAzZSAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBoeS1cdTAwM2VjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdFx0aWYgKElTX0VSUihwaHktXHUwMDNlY2xrKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBQVFJfRVJSKHBoeS1cdTAwM2VjbGspLFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBjbG9ja1xcblwiKTtcbitcdH1cbiBcbitcdC8qIE5vIG1hdGNoIGRhdGEgKGUuZy4gaTJjX2RldmljZV9pZCBiaW5kaW5nKSBtZWFucyB0aGUgZGVmYXVsdCBGV0RMLiAqL1xuK1x0dmFyaWFudCA9ICh1aW50cHRyX3QpaTJjX2dldF9tYXRjaF9kYXRhKGNsaWVudCk7XG4gXHRyZXQgPSBzM2Z3cm41X3Byb2JlKFx1MDAyNnBoeS1cdTAwM2Vjb21tb24ubmRldiwgcGh5LCBcdTAwMjZwaHktXHUwMDNlaTJjX2Rldi1cdTAwM2VkZXYsXG4tXHRcdFx0ICAgIFx1MDAyNmkyY19waHlfb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2aTJjX3BoeV9vcHMsIHZhcmlhbnQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMTAsOCArMzAzLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzM2Z3cm41X2kyY19pZF90YWJsZVtdID0ge1xuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHMzZndybjVfaTJjX2lkX3RhYmxlKTtcbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zM2Z3cm41X2kyY19tYXRjaFtdIF9fbWF5YmVfdW51c2VkID0ge1xuLVx0eyAuY29tcGF0aWJsZSA9IFwic2Ftc3VuZyxzM2Z3cm41LWkyY1wiLCB9LFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3MzZndybjVfaTJjX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJzYW1zdW5nLHMzZndybjUtaTJjXCIsXG4rXHQgIC5kYXRhID0gKHZvaWQgKilTM0ZXUk41X1ZBUklBTlRfRldETCwgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInNhbXN1bmcsczNucm40di1pMmNcIixcbitcdCAgLmRhdGEgPSAodm9pZCAqKVMzRldSTjVfVkFSSUFOVF9TM05STjRWLCB9LFxuIFx0e31cbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3MzZndybjVfaTJjX21hdGNoKTtcbkBAIC0yMTksNyArMzE1LDcgQEAgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfczNmd3JuNV9pMmNfbWF0Y2gpO1xuIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzM2Z3cm41X2kyY19kcml2ZXIgPSB7XG4gXHQuZHJpdmVyID0ge1xuIFx0XHQubmFtZSA9IFMzRldSTjVfSTJDX0RSSVZFUl9OQU1FLFxuLVx0XHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfczNmd3JuNV9pMmNfbWF0Y2gpLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9zM2Z3cm41X2kyY19tYXRjaCxcbiBcdH0sXG4gXHQucHJvYmUgPSBzM2Z3cm41X2kyY19wcm9iZSxcbiBcdC5yZW1vdmUgPSBzM2Z3cm41X2kyY19yZW1vdmUsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuYyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcbmluZGV4IDVhOWRlMTFiYmVjZWE0Li4wNGY0YzM2MjY5MWUzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmNcbkBAIC04LDYgKzgsOSBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taW5tYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJzM2Z3cm41LmhcIlxuICNpbmNsdWRlIFwibmNpLmhcIlxuQEAgLTIwLDcgKzIzLDcgQEAgc3RhdGljIGludCBzM2Z3cm41X25jaV9wcm9wX3JzcChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1jb25zdCBzdHJ1Y3QgbmNpX2RyaXZlcl9vcHMgczNmd3JuNV9uY2lfcHJvcF9vcHNbNF0gPSB7XG4rY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdID0ge1xuIFx0e1xuIFx0XHQub3Bjb2RlID0gbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUFJPUFJJRVRBUlksXG4gXHRcdFx0XHROQ0lfUFJPUF9TRVRfUkZSRUcpLFxuQEAgLTQxLDYgKzQ0LDExIEBAIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XSA9IHtcbiBcdFx0XHRcdE5DSV9QUk9QX0ZXX0NGRyksXG4gXHRcdC5yc3AgPSBzM2Z3cm41X25jaV9wcm9wX3JzcCxcbiBcdH0sXG4rXHR7XG4rXHRcdC5vcGNvZGUgPSBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9QUk9QUklFVEFSWSxcbitcdFx0XHRcdE5DSV9QUk9QX0RVQUxfT1BUSU9OKSxcbitcdFx0LnJzcCA9IHMzZndybjVfbmNpX3Byb3BfcnNwLFxuK1x0fSxcbiB9O1xuIFxuICNkZWZpbmUgUzNGV1JONV9SRlJFR19TRUNUSU9OX1NJWkUgMjUyXG5AQCAtMTE3LDMgKzEyNSwxMDQgQEAgaW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZShzdHJ1Y3QgczNmd3JuNV9pbmZvICppbmZvLCBjb25zdCBjaGFyICpmd19uYW1lKVxuIFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbitcbisvKlxuKyAqIENvbmZpZ3VyZSB0aGUgcmVmZXJlbmNlIGNsb2NrLiBUaGUgUzNOUk40ViBleHBlY3RzIHRoZSBzaW5nbGUtYnl0ZSBGV19DRkdcbisgKiBmb3JtIChqdXN0IHRoZSBjbG9jay1zcGVlZCBzZWxlY3RvcikuIFRoZSBkb3duc3RyZWFtIHN0YWNrIHNlbmRzIHRoaXMgaW4gdGhlXG4rICogYm9vdGxvYWRlciBiZWZvcmUgQ09SRV9SRVNFVDsgdGhlIGVhcmxpZXN0IHRoZSBtYWlubGluZSBOQ0kgY29yZSBsZXRzIHVzIGluXG4rICogaXMgdGhlIC1cdTAwM2VzZXR1cCBob29rIChhZnRlciBDT1JFX1JFU0VULCBiZWZvcmUgQ09SRV9JTklUKSwgd2hpY2ggd29ya3MuXG4rICovXG4raW50IHMzZndybjVfbmNpX2Nsa19jZmcoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbylcbit7XG4rXHR1OCBjbGtfc3BlZWQgPSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEO1xuK1xuK1x0cmV0dXJuIG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0ZXX0NGRywgMSwgXHUwMDI2Y2xrX3NwZWVkKTtcbit9XG4rXG4rLypcbisgKiBTM05STjRWIFJGIHJlZ2lzdGVyIHVwZGF0ZS4gVGhlIEhXIGFuZCBTVyByZWdpc3RlciBibG9icyBhcmUgbWVyZ2VkIGludG8gYVxuKyAqIHNpbmdsZSBzdHJlYW0gKEhXIGZpcnN0KSBhbmQgcHVzaGVkIHZpYSB0aGUgRFVBTF9PUFRJT04gY29tbWFuZDpcbisgKiBTVEFSVF9VUERBVEUsIG9uZSBTRVRfT1BUSU9OIHBlciAyNTItYnl0ZSBzZWN0aW9uLCB0aGVuIFNUT1BfVVBEQVRFIGNhcnJ5aW5nXG4rICogYSAxNi1iaXQgY2hlY2tzdW0gKHJ1bm5pbmcgc3VtIG9mIHRoZSBtZXJnZWQgc3RyZWFtIGFzIDMyLWJpdCB3b3JkcykuXG4rICovXG4raW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4rXHRcdFx0XHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpod19mdyA9IE5VTEwsICpzd19mdyA9IE5VTEw7XG4rXHRzdHJ1Y3QgbmNpX3Byb3BfZHVhbF9zZXRfb3B0aW9uX2NtZCBzZXRfb3B0aW9uO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2aW5mby1cdTAwM2VuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2O1xuK1x0c2l6ZV90IG1lcmdlZF9zaXplLCBpLCBsZW47XG4rXHR1OCAqbWVyZ2VkID0gTlVMTDtcbitcdHU4IHN0b3BfY21kWzNdO1xuK1x0dTMyIGNoZWNrc3VtO1xuK1x0dTggc3ViX29pZDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNmh3X2Z3LCBod19uYW1lLCBkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2c3dfZncsIHN3X25hbWUsIGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dF9odztcbitcbitcdG1lcmdlZF9zaXplID0gaHdfZnctXHUwMDNlc2l6ZSArIHN3X2Z3LVx1MDAzZXNpemU7XG4rXHRtZXJnZWQgPSBrbWFsbG9jKG1lcmdlZF9zaXplLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbWVyZ2VkKSB7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0bWVtY3B5KG1lcmdlZCwgaHdfZnctXHUwMDNlZGF0YSwgaHdfZnctXHUwMDNlc2l6ZSk7XG4rXHRtZW1jcHkobWVyZ2VkICsgaHdfZnctXHUwMDNlc2l6ZSwgc3dfZnctXHUwMDNlZGF0YSwgc3dfZnctXHUwMDNlc2l6ZSk7XG4rXG4rXHQvKlxuK1x0ICogUnVubmluZyBzdW0gb2YgdGhlIG1lcmdlZCBzdHJlYW0gYXMgbGl0dGxlLWVuZGlhbiAzMi1iaXQgd29yZHMuIFRoZVxuK1x0ICogcmZyZWcgYmxvYnMgYXJlIHdvcmQtYWxpZ25lZCwgc28gdGhlIGxvb3AgY29uc3VtZXMgdGhlIHdob2xlIHN0cmVhbTtcbitcdCAqIHNob3VsZCBhIGZ1dHVyZSBibG9iIG5vdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMgaXRzIHRhaWwgd291bGQgYmVcbitcdCAqIGlnbm9yZWQgaGVyZS5cbitcdCAqL1xuK1x0Y2hlY2tzdW0gPSAwO1xuK1x0Zm9yIChpID0gMDsgaSArIDQgXHUwMDNjPSBtZXJnZWRfc2l6ZTsgaSArPSA0KVxuK1x0XHRjaGVja3N1bSArPSBnZXRfdW5hbGlnbmVkX2xlMzIobWVyZ2VkICsgaSk7XG4rXG4rXHRkZXZfZGJnKGRldiwgXCJyZnJlZyBkdWFsLW9wdGlvbiB1cGRhdGU6ICVzICsgJXNcXG5cIiwgaHdfbmFtZSwgc3dfbmFtZSk7XG4rXG4rXHQvKiBTVEFSVF9VUERBVEUgKi9cbitcdHN1Yl9vaWQgPSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEU7XG4rXHRyZXQgPSBuY2lfcHJvcF9jbWQoaW5mby1cdTAwM2VuZGV2LCBOQ0lfUFJPUF9EVUFMX09QVElPTiwgMSwgXHUwMDI2c3ViX29pZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIlVuYWJsZSB0byBzdGFydCByZnJlZyB1cGRhdGVcXG5cIik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LyogU0VUX09QVElPTiBwZXIgc2VjdGlvbiAqL1xuK1x0c2V0X29wdGlvbi5zdWJfb2lkID0gTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTjtcbitcdHNldF9vcHRpb24uaW5kZXggPSAwO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWVyZ2VkX3NpemU7IGkgKz0gTkNJX1BST1BfRFVBTF9TRUNUSU9OX1NJWkUpIHtcbitcdFx0bGVuID0gbWluX3Qoc2l6ZV90LCBtZXJnZWRfc2l6ZSAtIGksIE5DSV9QUk9QX0RVQUxfU0VDVElPTl9TSVpFKTtcbitcdFx0bWVtY3B5KHNldF9vcHRpb24uZGF0YSwgbWVyZ2VkICsgaSwgbGVuKTtcbitcdFx0cmV0ID0gbmNpX3Byb3BfY21kKGluZm8tXHUwMDNlbmRldiwgTkNJX1BST1BfRFVBTF9PUFRJT04sXG4rXHRcdFx0XHQgICBsZW4gKyAyLCAoX191OCAqKVx1MDAyNnNldF9vcHRpb24pO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0ZGV2X2VycihkZXYsIFwicmZyZWcgdXBkYXRlIGVycm9yIChjb2RlPSVkKVxcblwiLCByZXQpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHNldF9vcHRpb24uaW5kZXgrKztcbitcdH1cbitcbitcdC8qIFNUT1BfVVBEQVRFIHdpdGggY2hlY2tzdW0gKi9cbitcdHN0b3BfY21kWzBdID0gTkNJX1BST1BfRFVBTF9TVUJfU1RPUF9VUERBVEU7XG4rXHRwdXRfdW5hbGlnbmVkX2xlMTYoY2hlY2tzdW0sIFx1MDAyNnN0b3BfY21kWzFdKTtcbitcdHJldCA9IG5jaV9wcm9wX2NtZChpbmZvLVx1MDAzZW5kZXYsIE5DSV9QUk9QX0RVQUxfT1BUSU9OLCAzLCBzdG9wX2NtZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIlVuYWJsZSB0byBzdG9wIHJmcmVnIHVwZGF0ZVxcblwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRkZXZfZGJnKGRldiwgXCJyZnJlZyBkdWFsLW9wdGlvbiB1cGRhdGU6IHN1Y2Nlc3NcXG5cIik7XG4rb3V0OlxuK1x0a2ZyZWUobWVyZ2VkKTtcbitcdHJlbGVhc2VfZmlybXdhcmUoc3dfZncpO1xuK291dF9odzpcbitcdHJlbGVhc2VfZmlybXdhcmUoaHdfZncpO1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9uY2kuaCBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbmluZGV4IGJjNGJjZTJiYmM0ZDkzLi4yMzE3OWJhMDk1YTFiNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvbmNpLmhcbkBAIC00MCw2ICs0MCwxMyBAQCBzdHJ1Y3QgbmNpX3Byb3Bfc3RvcF9yZnJlZ19yc3Age1xuIFxuICNkZWZpbmUgTkNJX1BST1BfRldfQ0ZHXHRcdDB4MjhcbiBcbisvKlxuKyAqIFNpbmdsZS1ieXRlIEZXX0NGRyBwYXlsb2FkIChjbG9jay1zcGVlZCBzZWxlY3RvcikgZm9yIHRoZSBTM05STjRWIHJlZmVyZW5jZVxuKyAqIGNsb2NrLiBUYWtlbiBmcm9tIHRoZSB2ZW5kb3IgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYXJ0ICh0aGUgZW5jb2RpbmcgaXNcbisgKiBub3QgZG9jdW1lbnRlZCkuXG4rICovXG4rI2RlZmluZSBOQ0lfUFJPUF9GV19DRkdfQ0xLX1NQRUVEXHQweDExXG4rXG4gc3RydWN0IG5jaV9wcm9wX2Z3X2NmZ19jbWQge1xuIFx0X191OCBjbGtfdHlwZTtcbiBcdF9fdTggY2xrX3NwZWVkO1xuQEAgLTUwLDcgKzU3LDMwIEBAIHN0cnVjdCBuY2lfcHJvcF9md19jZmdfcnNwIHtcbiBcdF9fdTggc3RhdHVzO1xuIH07XG4gXG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBuY2lfZHJpdmVyX29wcyBzM2Z3cm41X25jaV9wcm9wX29wc1s0XTtcbisvKlxuKyAqIFRoZSBTM05STjRWIHVwZGF0ZXMgaXRzIFJGIHJlZ2lzdGVycyB0aHJvdWdoIGEgc2luZ2xlIFwiZHVhbCBvcHRpb25cIiBjb21tYW5kXG4rICogKGEgc3ViLU9JRCBzZWxlY3RzIHRoZSBvcGVyYXRpb24pIGluc3RlYWQgb2YgdGhlIFNUQVJUL1NFVC9TVE9QX1JGUkVHXG4rICogb3Bjb2RlcyBhYm92ZSwgYW5kIGV4cGVjdHMgdGhlIEhXIGFuZCBTVyByZWdpc3RlciBibG9icyBtZXJnZWQgaW50byBvbmVcbisgKiBzdHJlYW0uXG4rICovXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX09QVElPTlx0XHQweDJhXG4rXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NVQl9TVEFSVF9VUERBVEVcdDB4MDFcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NFVF9PUFRJT05cdDB4MDJcbisjZGVmaW5lIE5DSV9QUk9QX0RVQUxfU1VCX1NUT1BfVVBEQVRFXHQweDAzXG4rXG4rI2RlZmluZSBOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRVx0MjUyXG4rXG4rc3RydWN0IG5jaV9wcm9wX2R1YWxfc2V0X29wdGlvbl9jbWQge1xuK1x0X191OCBzdWJfb2lkO1x0LyogTkNJX1BST1BfRFVBTF9TVUJfU0VUX09QVElPTiAqL1xuK1x0X191OCBpbmRleDtcbitcdF9fdTggZGF0YVtOQ0lfUFJPUF9EVUFMX1NFQ1RJT05fU0laRV07XG4rfTtcbitcbitleHRlcm4gY29uc3Qgc3RydWN0IG5jaV9kcml2ZXJfb3BzIHMzZndybjVfbmNpX3Byb3Bfb3BzWzVdO1xuIGludCBzM2Z3cm41X25jaV9yZl9jb25maWd1cmUoc3RydWN0IHMzZndybjVfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZndfbmFtZSk7XG4raW50IHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sXG4rXHRcdFx0XHQgIGNvbnN0IGNoYXIgKmh3X25hbWUsIGNvbnN0IGNoYXIgKnN3X25hbWUpO1xuK2ludCBzM2Z3cm41X25jaV9jbGtfY2ZnKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8pO1xuIFxuICNlbmRpZiAvKiBfX0xPQ0FMX1MzRldSTjVfTkNJX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmggYi9kcml2ZXJzL25mYy9zM2Z3cm41L3MzZndybjUuaFxuaW5kZXggMmI0OTIyMzYwOTBiODUuLjJkOGMxMjA5MWZiYTU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZmMvczNmd3JuNS9zM2Z3cm41LmhcbisrKyBiL2RyaXZlcnMvbmZjL3MzZndybjUvczNmd3JuNS5oXG5AQCAtMjEsNiArMjEsMTcgQEAgZW51bSBzM2Z3cm41X21vZGUge1xuIFx0UzNGV1JONV9NT0RFX0ZXLFxuIH07XG4gXG4rZW51bSBzM2Z3cm41X3ZhcmlhbnQge1xuK1x0LyogUzNGV1JONSAvIFMzRldSTjgyOiBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGJ5IHRoaXMgZHJpdmVyICovXG4rXHRTM0ZXUk41X1ZBUklBTlRfRldETCxcbitcdC8qXG4rXHQgKiBTM05STjRWOiBzaGlwcyB3aXRoIHdvcmtpbmcgZmlybXdhcmUgYmVoaW5kIGEgYm9vdGxvYWRlciBwcm90b2NvbFxuK1x0ICogdGhpcyBkcml2ZXIgZG9lcyBub3QgaW1wbGVtZW50OyBza2lwIHRoZSBkb3dubG9hZCwgY29uZmlndXJlIHRoZVxuK1x0ICogY2xvY2sgKEZXX0NGRykgYW5kIHVwZGF0ZSB0aGUgUkYgcmVnaXN0ZXJzIHZpYSB0aGUgRFVBTF9PUFRJT04gY21kLlxuK1x0ICovXG4rXHRTM0ZXUk41X1ZBUklBTlRfUzNOUk40Vixcbit9O1xuK1xuIHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMge1xuIFx0dm9pZCAoKnNldF93YWtlKSh2b2lkICppZCwgYm9vbCBzbGVlcCk7XG4gXHR2b2lkICgqc2V0X21vZGUpKHZvaWQgKmlkLCBlbnVtIHMzZndybjVfbW9kZSk7XG5AQCAtMzYsNiArNDcsNyBAQCBzdHJ1Y3QgczNmd3JuNV9pbmZvIHtcbiBcdGNvbnN0IHN0cnVjdCBzM2Z3cm41X3BoeV9vcHMgKnBoeV9vcHM7XG4gXG4gXHRzdHJ1Y3QgczNmd3JuNV9md19pbmZvIGZ3X2luZm87XG4rXHRlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50O1xuIFxuIFx0c3RydWN0IG11dGV4IG11dGV4O1xuIH07XG5AQCAtNzgsNyArOTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzM2Z3cm41X3dyaXRlKHN0cnVjdCBzM2Z3cm41X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIGludCBzM2Z3cm41X3Byb2JlKHN0cnVjdCBuY2lfZGV2ICoqbmRldiwgdm9pZCAqcGh5X2lkLCBzdHJ1Y3QgZGV2aWNlICpwZGV2LFxuLVx0Y29uc3Qgc3RydWN0IHMzZndybjVfcGh5X29wcyAqcGh5X29wcyk7XG4rXHRjb25zdCBzdHJ1Y3QgczNmd3JuNV9waHlfb3BzICpwaHlfb3BzLCBlbnVtIHMzZndybjVfdmFyaWFudCB2YXJpYW50KTtcbiB2b2lkIHMzZndybjVfcmVtb3ZlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KTtcbiBcbiBpbnQgczNmd3JuNV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jIGIvZHJpdmVycy9uZmMvczNmd3JuNS91YXJ0LmNcbmluZGV4IDU0MGE0ZGRiMGIwNWU5Li40NzE3MmQ3MzlhNDFmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3MzZndybjUvdWFydC5jXG4rKysgYi9kcml2ZXJzL25mYy9zM2Z3cm41L3VhcnQuY1xuQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgaW50IHMzZndybjgyX3VhcnRfcHJvYmUoc3RydWN0IHNlcmRldl9kZXZpY2UgKnNlcmRldilcbiBcdH1cbiBcbiBcdHJldCA9IHMzZndybjVfcHJvYmUoXHUwMDI2cGh5LVx1MDAzZWNvbW1vbi5uZGV2LCBwaHksIFx1MDAyNnBoeS1cdTAwM2VzZXJfZGV2LVx1MDAzZWRldixcbi1cdFx0XHQgICAgXHUwMDI2dWFydF9waHlfb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2dWFydF9waHlfb3BzLCBTM0ZXUk41X1ZBUklBTlRfRldETCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9zZXJkZXY7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QyMDo0NTowNi4zNDMyNjkwNzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njc3MDMwNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGFuZCBGdXp6aW5nIHRoZSBOZXcgTkZDIENvbnRyb2xsZXIgVmFyaWFudCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIHN1cHBvcnQgZm9yIGEgbmV3IFNhbXN1bmcgTkZDIGNvbnRyb2xsZXIgdmFyaWFudCwgdGhlIFMzTlJONFYsIGludG8gdGhlIGBzM2Z3cm41YCBkcml2ZXIuIE15IGluaXRpYWwgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgbmV3IGNvZGUgaXMgcmVhY2hhYmxlIGFuZCwgaW1wb3J0YW50bHksIGZ1enphYmxlLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gdGVzdCBpdCB0aG9yb3VnaGx5LlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGZvciB0aGUgZGV2aWNlIHRyZWUgYmluZGluZywgbW9kaWZpY2F0aW9ucyB0byBgczNmd3JuNV9uY2lfc2V0dXBgIGFuZCBgczNmd3JuNV9uY2lfcG9zdF9zZXR1cGAgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBgUzNGV1JONV9WQVJJQU5UX1MzTlJONFZgLCBhbmQgc29tZSBhZGRpdGlvbnMgdG8gaGFuZGxlIGEgYGNsay1yZXFgIEdQSU8gYW5kIGNsb2NrIGdhdGluZyBpbiBgczNmd3JuNV9pMmNfcHJvYmVgLiBXZSd2ZSBhbHNvIGdvdCBzb21lIG5ldyBmdW5jdGlvbnMgaW4gYG5jaS5jYCBhbmQgYGkyYy5jYCByZWxhdGVkIHRvIFJGIGNvbmZpZ3VyYXRpb24sIGNsb2NrIGNvbnRyb2wsIGFuZCB0aGF0IEdQSU8gaW50ZXJydXB0IGhhbmRsZXIuXG5cblNpbmNlIHRoaXMgaXMgYW4gTkZDIGRyaXZlciwgSSdtIHRoaW5raW5nIGFib3V0IGZ1enppbmcuIFR5cGljYWxseSwgTkZDIGRyaXZlcnMgYXJlIGZ1enplZCB0aHJvdWdoIHRoZSBOQ0kgbGF5ZXIg4oCTIG5ldGxpbmsvc29ja2V0cyDigJMgb3IgdGhyb3VnaCB2aXJ0dWFsIGRldmljZXMuIFRoZSBgczNmd3JuNWAgZHJpdmVyIGlzIGFuIEkyQy9VQVJUIGRyaXZlciwgd2hpY2ggbGVhZHMgbWUgdG8gdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgU3l6a2FsbGVyJ3MgSTJDIHN1cHBvcnQgaXMgc3VmZmljaWVudCBmb3IgZnV6emluZyB0aGlzLiBXaGlsZSBTeXprYWxsZXIgaGFzIHNvbWUgSTJDIGNhcGFiaWxpdGllcyB2aWEgYC9kZXYvaTJjLSpgIG9yIHZpcnR1YWwgZGV2aWNlcywgaXQncyBtb3JlIGNvbW1vbiB0byBzZWUgZnV6emluZyBhdCB0aGUgTkNJIGxheWVyLlxuXG5Ob3csIHRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGRyaXZlciAqZG9lcyogcmVnaXN0ZXIgYW4gTkNJIGRldmljZSwgd2hpY2ggbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBOQ0kgY29yZS4gYHMzZndybjVfcHJvYmVgIGNhbGxzIGBuY2lfYWxsb2NhdGVfZGV2aWNlYCBhbmQgYG5jaV9yZWdpc3Rlcl9kZXZpY2VgLiBUaGUgTkNJIGNvcmUgc2hvdWxkIGJlIGhhbmRsaW5nIHRoZSBOQ0kgcHJvdG9jb2wgaXRzZWxmLiBTbywgdGhpcyBnaXZlcyB1cyBhIGhvb2suXG5cblRoZSBjcnVjaWFsIHBvaW50IGlzIHRoaXMgbmV3IGBTM0ZXUk41X1ZBUklBTlRfUzNOUk40VmAgdmFyaWFudC4gSXQncyBtYXRjaGVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2l0aCBgc2Ftc3VuZyxzM25ybjR2LWkyY2AuIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IHRvIHRyaWdnZXIgdGhlIG5ldyBjb2RlLiBUaGUgbmV3IGNvZGUgaW4gYHMzZndybjVfbmNpX3NldHVwYCBhbmQgYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgIGlzIGNsZWFybHkgZXhlY3V0ZWQgYnkgdGhlIE5DSSBjb3JlIHdoZW4gc2V0dGluZyB1cCB0aGUgZGV2aWNlLiBUaGlzIGxvb2tzIHJlYWNoYWJsZSB2aWEgdGhlIGRldmljZSBzZXR1cC4gYG5jaV9vcGVuX2RldmljZWAgLVx1MDAzZSBgbmNpX3NldHVwYCAtXHUwMDNlIGBuZGV2LVx1MDAzZW9wcy1cdTAwM2VzZXR1cGAgYW5kIGBuZGV2LVx1MDAzZW9wcy1cdTAwM2Vwb3N0X3NldHVwYCwgc28gdGhlIGNvZGUgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBOQ0kgY29yZSBkdXJpbmcgZGV2aWNlIHNldHVwLiBUaGVuLCB0aGUgbmV3IGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAgZnVuY3Rpb24gaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdOKAmXMgc2VuZGluZyBOQ0kgcHJvcHJpZXRhcnkgY29tbWFuZHMsIG1lYW5pbmcgdGhhdCB3ZSBjb3VsZCBwb3RlbnRpYWxseSBmdXp6IHRocm91Z2ggYG5jaV9wcm9wX2NtZGAuIEFuZCBsYXN0bHksIHRoYXQgaW50ZXJydXB0IGhhbmRsZXIgaW4gYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYCBpcyBhbm90aGVyIHBvaW50IHdlIG5lZWQgdG8gdGVzdC5cbk5vdyBJJ2xsIGNoZWNrIEtjb25maWcgZm9yIHRoaXMgZHJpdmVyIHRvIHNlZSBob3cgaXQncyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMjA6NDU6MTYuMDIwMzAxNzM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTU3NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORkNfUzNGV1JONVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjI6Y29uZmlnIE5GQ19TM0ZXUk41XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMDpjb25maWcgTkZDX1MzRldSTjVfSTJDXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDIwOjQ1OjE2LjA4Mjg3MDI5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzM2NDUzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBwcmVzZW50ZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyAtIEEgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBvYmplY3RpdmUgaGVyZSBpcyBjbGVhcjogYSBjb21wbGV0ZSwgdGhvcm91Z2ggYW5hbHlzaXMgaXMgbmVlZGVkLiBUaGUgZmlyc3Qgc3RlcCwgbG9naWNhbGx5LCBpcyB0byBpbW1lZGlhdGVseSBnZXQgdGhlICpmdWxsKiBLY29uZmlnIGZpbGUgaW4gZnJvbnQgb2YgbWUuIE5vIHBhcnRpYWwgdmlld3MsIG5vIHNuaXBwZXRzOyBJIG5lZWQgdGhlIHdob2xlIGVuY2hpbGFkYS4gSSBuZWVkIHRvIHNlZSB0aGUgY29tcGxldGUgY29udGV4dCwgdGhlIGRlcGVuZGVuY2llcywgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhbGwgdGhlIHZhcmlhYmxlcywgdGhlIGRlZmF1bHRzLiBXaXRob3V0IHRoaXMgY29tcHJlaGVuc2l2ZSB2aWV3LCBhbnkgYXR0ZW1wdCBhdCBpbnNpZ2h0ZnVsIGFuYWx5c2lzIGlzIGp1c3Qgc3BlY3VsYXRpb24uIEkgYW0gZ29pbmcgdG8gc2VlIHRoZSBmb3Jlc3QgYW5kIGFsbCB0aGUgdHJlZXMuIFRoaXMgaXNuJ3QganVzdCBhIGN1cnNvcnkgZ2xhbmNlOyB0aGlzIGlzIGEgZGVlcCBkaXZlLiBJJ20gcmVhZHkgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlLCB0aGUgZGVzaWduIGRlY2lzaW9ucywgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIG1vZGlmaWNhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB1bmRlcnN0YW5kaW5nIGJlZ2lucy4gTGV0J3MgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODU3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QyMDo0NToxOS40MTY1MTc5NTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBORkNfUzNGV1JONVxcbiAgIDM6XFx0XFx0dHJpc3RhdGVcXG4gICA0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgQ29yZSBkcml2ZXIgZm9yIFNhbXN1bmcgUzNGV1JONSBORkMgY2hpcC4gQ29udGFpbnMgY29yZSB1dGlsaXRpZXNcXG4gICA3OlxcdFxcdCAgb2YgY2hpcC4gSXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFBIWXMgdG8gYXZvaWQgZHVwbGljYXRpbmcgbG90c1xcbiAgIDg6XFx0XFx0ICBvZiBjb21tb24gY29kZS5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5GQ19TM0ZXUk41X0kyQ1xcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIlNhbXN1bmcgUzNGV1JONSBJMkMgc3VwcG9ydFxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBJMkNcXG4gIDEzOlxcdFxcdHNlbGVjdCBORkNfUzNGV1JONVxcbiAgMTQ6XFx0XFx0ZGVmYXVsdCBuXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgYW4gSTJDIGludGVyZmFjZSB0byB0aGUgUzNGV1JONSBjaGlwLlxcbiAgMTc6XFx0XFx0ICBTZWxlY3QgdGhpcyBpZiB5b3VyIHBsYXRmb3JtIGlzIHVzaW5nIHRoZSBJMkMgYnVzLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBtIGhlcmUuIFRoZSBtb2R1bGUgd2lsbFxcbiAgMjA6XFx0XFx0ICBiZSBjYWxsZWQgczNmd3JuNV9pMmMua28uXFxuICAyMTpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIE5GQ19TM0ZXUk44Ml9VQVJUXFxuICAyNDpcXHQgICAgICAgIHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjgyIFVBUlQgc3VwcG9ydFxcXCJcXG4gIDI1OlxcdCAgICAgICAgZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNFUklBTF9ERVZfQlVTXFxuICAyNjpcXHQgICAgICAgIHNlbGVjdCBORkNfUzNGV1JONVxcbiAgMjc6XFx0ICAgICAgICBoZWxwXFxuICAyODpcXHQgICAgICAgICAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBhIFVBUlQgaW50ZXJmYWNlIHRvIHRoZSBTM0ZXUk44MiBjaGlwLlxcbiAgMjk6XFx0ICAgICAgICAgIFNlbGVjdCB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gaXMgdXNpbmcgdGhlIFVBUlQgYnVzLlxcbiAgMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDIwOjQ1OjE5LjQxNjU4MTEyOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDgyNTg3Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE5GQyBTM0ZXUk41IEkyQyBEcml2ZXI6IEEgV29ydGh3aGlsZSBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlIGZ1enphYmlsaXR5IG9mIHRoaXMgYE5GQ19TM0ZXUk41X0kyQ2AgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGUgbmV3IGNvZGUgcmVzaWRlcyBpbiBzZXZlcmFsIGZ1bmN0aW9uczogYHMzZndybjVfbmNpX3NldHVwYCwgYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgLCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AsIGBzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZGAsIGFuZCBgczNmd3JuNV9pMmNfY2xrX3NldGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgZWFzaWx5IHRoZXNlIGNhbiBiZSByZWFjaGVkLlxuXG5UaGUgSTJDIGRyaXZlciBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBJMkMgZGV2aWNlIHdpdGggdGhlIGNvbXBhdGlibGUgSUQgXCJzYW1zdW5nLHMzbnJuNHYtaTJjXCIgaXMgcHJlc2VudC4gIFN5emthbGxlciBjYW4sIGluIHRoZW9yeSwgaW5qZWN0IEkyQyBkZXZpY2VzIHVzaW5nIGBzeXpfaTJjX3NldHVwYCAoaWYgaXQgc3VwcG9ydHMgaXQpLCBhbmQgYWxzbyBoYXMgTkNJIGZ1enppbmcgY2FwYWJpbGl0aWVzIHRocm91Z2ggdGhlIE5DSSBjb3JlLiAgVGhhdCdzIHByb21pc2luZy5cblxuU2luY2UgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUgcGFydCBvZiB0aGUgTkNJIG9wZXJhdGlvbnMsIHRoZXkgc2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgYG5jaV9vcGVuX2RldmljZWAgaWYgdGhlIGRldmljZSBpcyBzdWNjZXNzZnVsbHkgcHJvYmVkLiBOb3csIHRoZXJlIGlzIGEgcG90ZW50aWFsIGhpY2N1cCB3aXRoIGBzM2Z3cm41X25jaV9yZl9jb25maWd1cmVfZHVhbGAsIHdoaWNoIHJlbGllcyBvbiBgcmVxdWVzdF9maXJtd2FyZWAuIFRoaXMgY291bGQgYmxvY2ssIG9yIGZhaWwgaWYgdGhlIGZpcm13YXJlIGlzbid0IGF2YWlsYWJsZS4gRm9ydHVuYXRlbHksIGl0IGxvb2tzIGxpa2UgaXQgcHJpbnRzIGEgd2FybmluZyBhbmQgY29udGludWVzIGlmIHRoZSBmaXJtd2FyZSBsb2FkIGZhaWxzLiBUaGF0IGFsbGV2aWF0ZXMgc29tZSBjb25jZXJuLlxuXG5UaGUgYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYCBpcyBhbiBJUlEgaGFuZGxlciBmb3IgYSBHUElPLiBTeXprYWxsZXIgZG9lc24ndCBlYXNpbHkgdHJpZ2dlciBHUElPIElSUXMgdW5sZXNzIGl0J3MgYSBjb250cm9sbGVkIHZpcnR1YWwgR1BJTyBkcml2ZXIuIFNvIHRoYXQgbWlnaHQgYmUgdHJpY2tpZXIgdG8gcmVhY2guXG5cbkhvd2V2ZXIsIGBzM2Z3cm41X25jaV9zZXR1cGAgYW5kIGBzM2Z3cm41X25jaV9wb3N0X3NldHVwYCBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgaWYgdGhlIGRldmljZSBpcyBwcm9iZWQgYW5kIG9wZW5lZC4gVGhlIGdvb2QgbmV3cyBpcywgU3l6a2FsbGVyIGhhcyBzb21lIEkyQyBmdXp6aW5nIGNhcGFiaWxpdGllcy4gSSBzZWUgc29tZSBwcm9wcmlldGFyeSBOQ0kgY29tbWFuZHMgaGF2ZSBiZWVuIGFkZGVkOiBgTkNJX1BST1BfRFVBTF9PUFRJT05gIGFuZCBgTkNJX1BST1BfRldfQ0ZHYCBpbiBgczNmd3JuNV9uY2lfcHJvcF9vcHNgLiBCdXQgdGhlc2UgYXJlIGp1c3QgcmVzcG9uc2VzIHRvIGNvbW1hbmRzIHRoZSBkcml2ZXIgc2VuZHMuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZz8gIENvbnNpZGVyaW5nIHRoZSBhZGRlZCBrZXJuZWwgZnVuY3Rpb25hbGl0eSAoYSBuZXcgTkZDIGNvbnRyb2xsZXIgdmFyaWFudCwgaW5pdGlhbGl6YXRpb24sIGZpcm13YXJlIGxvYWRpbmcsIGNsb2NrIGhhbmRsaW5nKSwgYW5kIHRoZSBmYWN0IGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAodGhlIE5GQyBkcml2ZXIpLCBteSBhc3Nlc3NtZW50IGlzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblRoZXJlZm9yZSwgdGhlIGtleSB0YXJnZXRzIGZvciBmdXp6aW5nIGFyZTogYHMzZndybjVfbmNpX3NldHVwYCwgYHMzZndybjVfbmNpX3Bvc3Rfc2V0dXBgLCBgczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxgLCBgczNmd3JuNV9uY2lfY2xrX2NmZ2AsIGBzM2Z3cm41X2kyY19jbGtfc2V0YCwgYW5kIHRvIGEgbGVzc2VyIGV4dGVudCwgYHMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkYC5cblxuVGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgc2hvdWxkIGluY2x1ZGUgYE5GQ19TM0ZXUk41X0kyQ2AsIGBORkNfUzNGV1JONWAsIGBORkNfTkNJYCwgYW5kIGBJMkNgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlc2Ugc2V0dGluZ3MgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NzYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMjA6NDU6MzAuNDk5MTcxMDgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjU1OTI3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZDX1MzRldSTjVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL2NvbmZpZ3MvZXh5bm9zX2RlZmNvbmZpZz04Mz1DT05GSUdfTkZDX1NIRExDPXlcXG5hcmNoL2FybS9jb25maWdzL2V4eW5vc19kZWZjb25maWc6ODQ6Q09ORklHX05GQ19TM0ZXUk41X0kyQz15XFxuYXJjaC9hcm0vY29uZmlncy9leHlub3NfZGVmY29uZmlnLTg1LUNPTkZJR19ERVZUTVBGUz15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xNzM9Q09ORklHX05GQ19TSERMQz15XFxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc6MTc0OkNPTkZJR19ORkNfUzNGV1JONV9JMkM9bVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTE3NS1DT05GSUdfUENJRVBPUlRCVVM9eVxcbi0tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0yMDg9Q09ORklHX05GQ19OWFBfTkNJX0kyQz1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoyMDk6Q09ORklHX05GQ19TM0ZXUk41X0kyQz1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0yMTAtQ09ORklHX1BDST15XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jPTQ4Nz1zdGF0aWMgc3RydWN0IGdwaW9fZGVzYyAqb2ZfZmluZF9ncGlvX3JlbmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYy01MjYtI2VuZGlmXFxuZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYzo1Mjc6I2lmIElTX0VOQUJMRUQoQ09ORklHX05GQ19TM0ZXUk41X0kyQylcXG5kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jLTUyOC1cXHRcXHR7IFxcXCJlblxcXCIsXFx0XFx0XFxcInMzZndybjUsZW4tZ3Bpb3NcXFwiLFxcdFxcXCJzYW1zdW5nLHMzZndybjUtaTJjXFxcIiB9LFxcbi0tXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX05GQ19OWFBfTkNJKVxcdCs9IG54cC1uY2kvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX05GQ19TM0ZXUk41KVxcdCs9IHMzZndybjUvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXFx0Kz0gc3Q5NWhmL1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjI6Y29uZmlnIE5GQ19TM0ZXUk41XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy05LVxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMDpjb25maWcgTkZDX1MzRldSTjVfSTJDXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEyLVxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBJMkNcXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWc6MTM6XFx0c2VsZWN0IE5GQ19TM0ZXUk41XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTE0LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnPTIzPWNvbmZpZyBORkNfUzNGV1JOODJfVUFSVFxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTI1LSAgICAgICAgZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNFUklBTF9ERVZfQlVTXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjI2OiAgICAgICAgc2VsZWN0IE5GQ19TM0ZXUk41XFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTI3LSAgICAgICAgaGVscFxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZT04PXMzZndybjgyX3VhcnQtb2JqcyA9IHVhcnQub1xcbmRyaXZlcnMvbmZjL3MzZndybjUvTWFrZWZpbGUtOS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19ORkNfUzNGV1JONSkgKz0gczNmd3JuNS5vXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkZDX1MzRldSTjVfSTJDKSArPSBzM2Z3cm41X2kyYy5vXFxuZHJpdmVycy9uZmMvczNmd3JuNS9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfTkZDX1MzRldSTjgyX1VBUlQpICs9IHMzZndybjgyX3VhcnQub1xcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmgtMTAtXFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg6MTE6I2lmbmRlZiBfX05GQ19TM0ZXUk41X1BIWV9DT01NT05fSFxcbmRyaXZlcnMvbmZjL3MzZndybjUvcGh5X2NvbW1vbi5oOjEyOiNkZWZpbmUgX19ORkNfUzNGV1JONV9QSFlfQ09NTU9OX0hcXG5kcml2ZXJzL25mYy9zM2Z3cm41L3BoeV9jb21tb24uaC0xMy1cXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvcGh5X2NvbW1vbi5oPTM2PWVudW0gczNmd3JuNV9tb2RlIHMzZndybjVfcGh5X2dldF9tb2RlKHZvaWQgKnBoeV9pZCk7XFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmgtMzctXFxuZHJpdmVycy9uZmMvczNmd3JuNS9waHlfY29tbW9uLmg6Mzg6I2VuZGlmIC8qIF9fTkZDX1MzRldSTjVfUEhZX0NPTU1PTl9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDIwOjQ1OjMzLjA2NDc2ODk4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MzQ1MzMwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5GQyBDb25maWd1cmF0aW9uIGFuZCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYE5GQ19TM0ZXUk41X0kyQ2AgYW5kIGBORkNfUzNGV1JONWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYE5GQ19TM0ZXUk41YCBpcyBzZWxlY3RlZCBieSBgTkZDX1MzRldSTjVfSTJDYCwgbWFraW5nIGBORkNfUzNGV1JONV9JMkNgIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24uIE1ha2VzIHNlbnNlLlxuXG5Ob3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBoYXZlIGV2ZXJ5dGhpbmcgZWxzZSB3ZSBuZWVkLiBBaCwgeWVzLCBgTkZDX05DSWAgYW5kIGBJMkNgIGFyZSBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGV4cGVjdGVkIGZvciB0aGlzIHR5cGUgb2Ygc2V0dXAuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgZHJpdmVyIGZ1bmN0aW9ucy4gSSd2ZSBnb3QgYSBsaXN0IG9mIGZvY3VzIHN5bWJvbHM6IGBzM2Z3cm41X25jaV9zZXR1cGAsIGBzM2Z3cm41X25jaV9wb3N0X3NldHVwYCwgYHMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsYCwgYHMzZndybjVfbmNpX2Nsa19jZmdgLCBgczNmd3JuNV9pMmNfY2xrX3NldGAsIGBzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZGAsIGFuZCBgczNmd3JuNV9pMmNfcHJvYmVgIOKAkyBlc3BlY2lhbGx5IHRoZSBsYXN0IG9uZSwgYXMgaXQgbG9va3MgbGlrZSBpdCdzIGJlZW4gbW9kaWZpZWQuXG5cbkluZGVlZCwgdGhlIG1vZGlmaWNhdGlvbiB0byBgczNmd3JuNV9pMmNfcHJvYmVgIGlzIGtleS4gSXQncyBiZWVuIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBuZXcgYGNsay1yZXFgIEdQSU8gYW5kIGNsb2NrIGdhdGluZyDigJMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGxpa2VseSByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgYW5kIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBmb3IgYW55IHRlc3RpbmcuXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBpcyByZWxldmFudD8gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgYHMzZndybjVgIGRyaXZlciwgd2hpY2ggaXMgYW4gTkZDIGRyaXZlci4gSXQncyBhY2Nlc3NlZCB0aHJvdWdoIEkyQyBwcm9iaW5nIGFuZCB0aGUgTkNJIGNvcmUuIFRoZSBiaWcgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSBjYW4gZnV6eiB0aGlzLiBUaGUgYW5zd2VyIGlzIHllcy4gSWYgc3l6a2FsbGVyIGNhbiBzdWNjZXNzZnVsbHkgaW5qZWN0IEkyQyBkZXZpY2VzIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBOQ0kgaW50ZXJmYWNlLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIHZhcmlvdXMgY29kZSBwYXRocyB3aXRoaW4gdGhlIGRyaXZlci4gVGhlcmVmb3JlLCBJIGNhbiBjb25maWRlbnRseSBtYXJrIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC5cblxuVGltZSB0byBwcmVwYXJlIHRoZSBmaW5hbCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcxOSwiT3V0cHV0VG9rZW5zIjoyNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMjA6NDU6NDAuNjk5MzA0NTYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE3MDczMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ19TM0ZXUk41X0kyQ1wiLFxuICAgIFwiTkZDX1MzRldSTjVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzM2Z3cm41X25jaV9zZXR1cFwiLFxuICAgIFwiczNmd3JuNV9uY2lfcG9zdF9zZXR1cFwiLFxuICAgIFwiczNmd3JuNV9uY2lfcmZfY29uZmlndXJlX2R1YWxcIixcbiAgICBcInMzZndybjVfbmNpX2Nsa19jZmdcIixcbiAgICBcInMzZndybjVfaTJjX2Nsa19zZXRcIixcbiAgICBcInMzZndybjVfaTJjX2Nsa19yZXFfdGhyZWFkXCIsXG4gICAgXCJzM2Z3cm41X2kyY19wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYSBuZXcgdmFyaWFudCBvZiB0aGUgU2Ftc3VuZyBORkMgY29udHJvbGxlciAoUzNOUk40VikgdG8gdGhlIHMzZndybjUgZHJpdmVyLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbml0aWFsaXphdGlvbiBsb2dpYywgZmlybXdhcmUgbG9hZGluZyB2aWEgTkNJIHByb3ByaWV0YXJ5IGNvbW1hbmRzLCBhbmQgY2xvY2sgaGFuZGxpbmcgdmlhIGEgbmV3IEdQSU8gaW50ZXJydXB0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoTkZDIGRyaXZlcikgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBJMkMgZGV2aWNlIHByb2JpbmcgYW5kIE5DSSBjb3JlIGludGVyYWN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNfUzNGV1JONV9JMkNcIixcbiAgICBcIk5GQ19TM0ZXUk41XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiczNmd3JuNV9uY2lfc2V0dXBcIixcbiAgICBcInMzZndybjVfbmNpX3Bvc3Rfc2V0dXBcIixcbiAgICBcInMzZndybjVfbmNpX3JmX2NvbmZpZ3VyZV9kdWFsXCIsXG4gICAgXCJzM2Z3cm41X25jaV9jbGtfY2ZnXCIsXG4gICAgXCJzM2Z3cm41X2kyY19jbGtfc2V0XCIsXG4gICAgXCJzM2Z3cm41X2kyY19jbGtfcmVxX3RocmVhZFwiLFxuICAgIFwiczNmd3JuNV9pMmNfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgbmV3IHZhcmlhbnQgb2YgdGhlIFNhbXN1bmcgTkZDIGNvbnRyb2xsZXIgKFMzTlJONFYpIHRvIHRoZSBzM2Z3cm41IGRyaXZlci4gSXQgaW50cm9kdWNlcyBuZXcgaW5pdGlhbGl6YXRpb24gbG9naWMsIGZpcm13YXJlIGxvYWRpbmcgdmlhIE5DSSBwcm9wcmlldGFyeSBjb21tYW5kcywgYW5kIGNsb2NrIGhhbmRsaW5nIHZpYSBhIG5ldyBHUElPIGludGVycnVwdC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKE5GQyBkcml2ZXIpIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgSTJDIGRldmljZSBwcm9iaW5nIGFuZCBOQ0kgY29yZSBpbnRlcmFjdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowh8ffr[1] Phase: Succeeded StartedAt: 2026-07-03 20:45:52 +0000 UTC FinishedAt: 2026-07-03 20:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-03 20:45:52 +0000 UTC FinishedAt: 2026-07-03 20:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2] Phase: Succeeded StartedAt: 2026-07-03 20:45:52 +0000 UTC FinishedAt: 2026-07-03 22:54:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-03 20:45:52 +0000 UTC FinishedAt: 2026-07-03 22:54:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-03 20:45:52 +0000 UTC FinishedAt: 2026-07-03 20:46:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-03 20:45:52 +0000 UTC FinishedAt: 2026-07-03 20:45:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowh8ffr/series-workflowh8ffr-convert-artifact-3303094516/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-03 20:46:02 +0000 UTC FinishedAt: 2026-07-03 21:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-03 20:46:02 +0000 UTC FinishedAt: 2026-07-03 21:30:40 +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:*58c43245-4359-4af6-b18d-03bccf0d6500,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-workflowh8ffr/series-workflowh8ffr-convert-artifact-3303094516/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": "ece523d1-f7ed-41cc-b2ee-30b9f9dd36be", "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-workflowh8ffr/series-workflowh8ffr-build-action-3196788210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-03 20:46:02 +0000 UTC FinishedAt: 2026-07-03 21:30:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*58c43245-4359-4af6-b18d-03bccf0d6500,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-workflowh8ffr/series-workflowh8ffr-convert-artifact-3303094516/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": "ece523d1-f7ed-41cc-b2ee-30b9f9dd36be", "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-workflowh8ffr/series-workflowh8ffr-build-action-3196788210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-03 21:30:40 +0000 UTC FinishedAt: 2026-07-03 21:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-03 21:30:40 +0000 UTC FinishedAt: 2026-07-03 21:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-03 21:30:40 +0000 UTC FinishedAt: 2026-07-03 21:31:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-03 21:30:40 +0000 UTC FinishedAt: 2026-07-03 21:30:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowh8ffr/series-workflowh8ffr-convert-artifact-298363571/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-03 21:31:01 +0000 UTC FinishedAt: 2026-07-03 21:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-03 21:31:01 +0000 UTC FinishedAt: 2026-07-03 21:33:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ece523d1-f7ed-41cc-b2ee-30b9f9dd36be,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-workflowh8ffr/series-workflowh8ffr-build-action-3196788210/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-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-03 21:33:35 +0000 UTC FinishedAt: 2026-07-03 21:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-03 21:33:35 +0000 UTC FinishedAt: 2026-07-03 21:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-03 21:33:35 +0000 UTC FinishedAt: 2026-07-03 21:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-03 21:33:35 +0000 UTC FinishedAt: 2026-07-03 21:56:20 +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:*58c43245-4359-4af6-b18d-03bccf0d6500,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-workflowh8ffr/series-workflowh8ffr-convert-artifact-298363571/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": "6d1f1b6b-56da-4a13-adb6-3ea73ecdc4d3", "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-workflowh8ffr/series-workflowh8ffr-build-action-3249124199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-03 21:33:35 +0000 UTC FinishedAt: 2026-07-03 21:56:10 +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:*58c43245-4359-4af6-b18d-03bccf0d6500,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-workflowh8ffr/series-workflowh8ffr-convert-artifact-298363571/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": "6d1f1b6b-56da-4a13-adb6-3ea73ecdc4d3", "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-workflowh8ffr/series-workflowh8ffr-build-action-3249124199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-03 21:56:20 +0000 UTC FinishedAt: 2026-07-03 21:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-03 21:56:20 +0000 UTC FinishedAt: 2026-07-03 21:56:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-03 21:56:20 +0000 UTC FinishedAt: 2026-07-03 21:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-03 21:56:20 +0000 UTC FinishedAt: 2026-07-03 21:58:25 +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:*6d1f1b6b-56da-4a13-adb6-3ea73ecdc4d3,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-workflowh8ffr/series-workflowh8ffr-build-action-3249124199/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-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-03 21:58:35 +0000 UTC FinishedAt: 2026-07-03 22:54:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-03 21:58:35 +0000 UTC FinishedAt: 2026-07-03 22:54:25 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ece523d1-f7ed-41cc-b2ee-30b9f9dd36be,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d1f1b6b-56da-4a13-adb6-3ea73ecdc4d3,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-workflowh8ffr/series-workflowh8ffr-build-action-3196788210/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-workflowh8ffr/series-workflowh8ffr-build-action-3249124199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-03 21:58:35 +0000 UTC FinishedAt: 2026-07-03 21:58:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-03 21:58:35 +0000 UTC FinishedAt: 2026-07-03 21:58:41 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowh8ffr/series-workflowh8ffr-convert-artifact-2341881260/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-03 21:58:35 +0000 UTC FinishedAt: 2026-07-03 21:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-03 21:58:35 +0000 UTC FinishedAt: 2026-07-03 21:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-03 21:58:35 +0000 UTC FinishedAt: 2026-07-03 21:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-03 21:58:45 +0000 UTC FinishedAt: 2026-07-03 22:54:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh8ffr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["s3fwrn5_nci_setup","s3fwrn5_nci_post_setup","s3fwrn5_nci_rf_configure_dual","s3fwrn5_nci_clk_cfg","s3fwrn5_i2c_clk_set","s3fwrn5_i2c_clk_req_thread","s3fwrn5_i2c_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC_S3FWRN5_I2C","NFC_S3FWRN5"],"series_id":"0d36a93d-11a2-4185-995e-1cd7ef2a0fe9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-03 21:58:45 +0000 UTC FinishedAt: 2026-07-03 22:54:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ece523d1-f7ed-41cc-b2ee-30b9f9dd36be,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d1f1b6b-56da-4a13-adb6-3ea73ecdc4d3,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-workflowh8ffr/series-workflowh8ffr-build-action-3196788210/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-workflowh8ffr/series-workflowh8ffr-build-action-3249124199/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-workflowh8ffr/series-workflowh8ffr-convert-artifact-2341881260/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,}