Name: series-workflowrdpj7 Phase: Succeeded StartedAt: 2026-08-01 05:56:49 +0000 UTC FinishedAt: 2026-08-01 07:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[0] Phase: Succeeded StartedAt: 2026-08-01 05:56:49 +0000 UTC FinishedAt: 2026-08-01 06:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 05:56:49 +0000 UTC FinishedAt: 2026-08-01 06:26:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8fd62901d6bf03f274a49dd0060793cc07dd51b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "BRCMFMAC_PCIE", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8fd62901d6bf03f274a49dd0060793cc07dd51b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "BRCMFMAC_PCIE", "CFG80211" ], "series_id": "b6b8bcfe-f6f1-416d-9bbf-7451eb693da2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brcmf_cfg80211_set_pmksa", "brcmf_cfg80211_del_pmksa", "brcmf_cfg80211_flush_pmksa", "brcmf_netif_mon_rx" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhJiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2RlbF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9uZXRpZl9tb25fcngmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWMiBQTUtTQSBjYWNoZSBvcGVyYXRpb25zIGluIHRoZSBicmNtZm1hYyBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY2ZnODAyMTEgbmV0bGluayBjb21tYW5kcyB3aGVuIGEgQnJvYWRjb20gV2ktRmkgZGV2aWNlIGlzIHByZXNlbnQuIFN5emthbGxlciBjYW4gZW11bGF0ZSBzdWNoIGEgZGV2aWNlIHZpYSBpdHMgVVNCIGZ1enplciwgbWFraW5nIHRoaXMgbmV3IGxvZ2ljIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIHJhZGlvdGFwIGhlYWRlciBpbnNlcnRpb24gaW4gbW9uaXRvciBtb2RlIGFuZCBQQ0llIG1haWxib3ggcG9sbGluZywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBmZTE2N2U0NTZkYTFjYWY5MjgyNjk5Mjk1MzMxOTVhM2ZjYTMxMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA2OjE3OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbmluZGV4IDBiNTVkNDQ1ODk1ZjIuLjdkN2U1ZWNlY2QyMjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbkBAIC0zOTg5LDEyICYjNDM7Mzk4OSwxMCBAQCBzdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBicmNtZl9kZWxheSh1MzIgbXMpXG4ge1xuLVx0aWYgKG1zIFx1MDAzYyAxMDAwIC8gSFopIHtcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHRcdG1kZWxheShtcyk7XG4tXHR9IGVsc2Uge1xuJiM0MztcdGlmIChtcyBcdTAwM2M9IDIwKVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKG1zICogMTAwMCwgbXMgKiAxMDAwICYjNDM7IDEwMDApO1xuJiM0MztcdGVsc2VcbiBcdFx0bXNsZWVwKG1zKTtcbi1cdH1cbiB9XG4gXG4gc3RhdGljIHMzMiBicmNtZl9jb25maWdfd293bF9wYXR0ZXJuKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1OCBjbWRbNF0sXG5AQCAtNDM2NCw2ICYjNDM7NDM2MiwxMDQgQEAgYnJjbWZfcG1rc2FfdjNfb3Aoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJyY21mX3Bta3NhX3YyX29wIC0gdXBkYXRlIGZpcm13YXJlIFBNS1NBIGNhY2hlIHVzaW5nIHRoZSBWMiBsaXN0IGludGVyZmFjZS5cbiYjNDM7ICpcbiYjNDM7ICogVjIgZmlybXdhcmUgKHJldmlzaW9uIDEyKSB1c2VzIGEgdmVyc2lvbmVkIGZsYXQgbGlzdCBzdHJ1Y3R1cmVcbiYjNDM7ICogKGJyY21mX3Bta19saXN0X3YyX2xlKSByYXRoZXIgdGhhbiB0aGUgcGVyLWVudHJ5IG9wZXJhdGlvbiBtb2RlbCBvZiBWMy5cbiYjNDM7ICogRWFjaCBlbnRyeSBjYXJyaWVzIEZJTFMtc3BlY2lmaWMgZmllbGRzIChyYXcgUE1LIG1hdGVyaWFsLCBTU0lELCBhbmRcbiYjNDM7ICogZmlsc19jYWNoZV9pZCkgaW4gYWRkaXRpb24gdG8gdGhlIGJhc2ljIEJTU0lEICYjNDM7IFBNS0lEIHBhaXIsIGVuYWJsaW5nXG4mIzQzOyAqIEZJTFMgZmFzdC1yb2FtaW5nIG9uIGRldmljZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBWMy5cbiYjNDM7ICpcbiYjNDM7ICogQGNmZzogICBkcml2ZXIgY29uZmlnIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBzaGFkb3cgVjIgUE1LU0EgbGlzdFxuJiM0MzsgKiBAaWZwOiAgIGludGVyZmFjZSBwb2ludGVyXG4mIzQzOyAqIEBwbWtzYTogdGhlIFBNS1NBIHRvIGFkZC9yZW1vdmUsIG9yIE5VTEwgZm9yIGEgZmx1c2hcbiYjNDM7ICogQGFsaXZlOiB0cnVlID0gYWRkIChzZXQgdGltZV9sZWZ0IHRvIG5vLWV4cGlyeSksIGZhbHNlID0gcmVtb3ZlL2ZsdXNoXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgczMyXG4mIzQzO2JyY21mX3Bta3NhX3YyX29wKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwLFxuJiM0MztcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLCBib29sIGFsaXZlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGNmZy1cdTAwM2VwdWI7XG4mIzQzO1x0c3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlICpsaXN0ID0gXHUwMDI2Y2ZnLVx1MDAzZXBta19saXN0X3YyO1xuJiM0MztcdHN0cnVjdCBicmNtZl9wbWtzYV92MiAqcG1rID0gbGlzdC1cdTAwM2VwbWs7XG4mIzQzO1x0dTMyIG5wbWsgPSBsZTE2X3RvX2NwdShsaXN0LVx1MDAzZWxlbmd0aCk7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdC8qIG5wbWsgaGVyZSBzdG9yZXMgdGhlIGNvdW50IG9mIHZhbGlkIGVudHJpZXMsIHJlcHVycG9zaW5nIHRoZVxuJiM0MztcdCAqIGxlbmd0aCBmaWVsZCBvZiB0aGUgc2hhZG93IGxpc3QgYXMgYSBjb3VudGVyLiAgV2UgY29udmVydCB0b1xuJiM0MztcdCAqIHRoZSB3aXJlIGZvcm1hdCAoYnl0ZSBsZW5ndGgpIHdoZW4gc2VuZGluZyB0byBmaXJtd2FyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXBta3NhKSB7XG4mIzQzO1x0XHQvKiBGbHVzaDogemVybyB0aGUgc2hhZG93IGxpc3QgYW5kIHB1c2ggYW4gZW1wdHkgVjIgbGlzdC4gKi9cbiYjNDM7XHRcdG1lbXNldChsaXN0LCAwLCBzaXplb2YoKmxpc3QpKTtcbiYjNDM7XHRcdGdvdG8gc2VuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhbGl2ZSkge1xuJiM0MztcdFx0LyogU2V0OiBzZWFyY2ggZm9yIGV4aXN0aW5nIEJTU0lEIG1hdGNoIGZpcnN0LiAqL1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBtazsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGlmICghbWVtY21wKHBta3NhLVx1MDAzZWJzc2lkLCBwbWtbaV0uYnNzaWQsIEVUSF9BTEVOKSlcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaSBcdTAwM2U9IEJSQ01GX01BWFBNS0lEKSB7XG4mIzQzO1x0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O1YyIFBNS1NBIGNhY2hlIGZ1bGwgKCVkIGVudHJpZXMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBucG1rKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KFx1MDAyNnBta1tpXSwgMCwgc2l6ZW9mKHBta1tpXSkpO1xuJiM0MztcdFx0cG1rW2ldLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIpKTtcbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2Vic3NpZClcbiYjNDM7XHRcdFx0bWVtY3B5KHBta1tpXS5ic3NpZCwgcG1rc2EtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2VwbWtpZClcbiYjNDM7XHRcdFx0bWVtY3B5KHBta1tpXS5wbWtpZCwgcG1rc2EtXHUwMDNlcG1raWQsIFdMQU5fUE1LSURfTEVOKTtcbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2VwbWsgXHUwMDI2XHUwMDI2IHBta3NhLVx1MDAzZXBta19sZW4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcG1rc2EtXHUwMDNlcG1rX2xlbiBcdTAwM2M9IFdMQU5fUE1LX0xFTl9TVUlURV9CXzE5Mikge1xuJiM0MztcdFx0XHRtZW1jcHkocG1rW2ldLnBtaywgcG1rc2EtXHUwMDNlcG1rLCBwbWtzYS1cdTAwM2VwbWtfbGVuKTtcbiYjNDM7XHRcdFx0cG1rW2ldLnBta19sZW4gPSBjcHVfdG9fbGUxNihwbWtzYS1cdTAwM2VwbWtfbGVuKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2Vzc2lkIFx1MDAyNlx1MDAyNiBwbWtzYS1cdTAwM2Vzc2lkX2xlbikge1xuJiM0MztcdFx0XHRtZW1jcHkocG1rW2ldLnNzaWQuU1NJRCwgcG1rc2EtXHUwMDNlc3NpZCwgcG1rc2EtXHUwMDNlc3NpZF9sZW4pO1xuJiM0MztcdFx0XHRwbWtbaV0uc3NpZC5TU0lEX2xlbiA9IHBta3NhLVx1MDAzZXNzaWRfbGVuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHBta3NhLVx1MDAzZWZpbHNfY2FjaGVfaWQpXG4mIzQzO1x0XHRcdHBta1tpXS5maWxzX2NhY2hlX2lkID0gKnBta3NhLVx1MDAzZWZpbHNfY2FjaGVfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgPT0gbnBtaylcbiYjNDM7XHRcdFx0bnBtayYjNDM7JiM0Mzs7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIERlbGV0ZTogZmluZCBieSBCU1NJRCBhbmQgY29tcGFjdCB0aGUgbGlzdC4gKi9cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wbWs7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRpZiAoIW1lbWNtcChwbWtzYS1cdTAwM2Vic3NpZCwgcG1rW2ldLmJzc2lkLCBFVEhfQUxFTikpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNlPSBucG1rKSB7XG4mIzQzO1x0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O1YyIFBNS1NBIGVudHJ5IG5vdCBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGZvciAoOyBpIFx1MDAzYyBucG1rIC0gMTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZwbWtbaV0sIFx1MDAyNnBta1tpICYjNDM7IDFdLCBzaXplb2YocG1rW2ldKSk7XG4mIzQzO1x0XHRtZW1zZXQoXHUwMDI2cG1rW25wbWsgLSAxXSwgMCwgc2l6ZW9mKHBta1tucG1rIC0gMV0pKTtcbiYjNDM7XHRcdG5wbWstLTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFVwZGF0ZSBzaGFkb3cgZW50cnkgY291bnQgKHN0b3JlZCBpbiBsZW5ndGggZmllbGQpLiAqL1xuJiM0MztcdGxpc3QtXHUwMDNlbGVuZ3RoID0gY3B1X3RvX2xlMTYobnBtayk7XG4mIzQzO1xuJiM0MztzZW5kOlxuJiM0MztcdC8qIEJ1aWxkIHRoZSB3aXJlLWZvcm1hdCBoZWFkZXIgYW5kIHNlbmQgdGhlIGZ1bGwgbGlzdCB0byBmaXJtd2FyZS5cbiYjNDM7XHQgKiB2ZXJzaW9uIGFuZCBsZW5ndGggb24gdGhlIHdpcmUgcmVmbGVjdCB0aGUgYWN0dWFsIGJ5dGUgZm9vdHByaW50LlxuJiM0MztcdCAqL1xuJiM0MztcdGxpc3QtXHUwMDNldmVyc2lvbiA9IGNwdV90b19sZTE2KEJSQ01GX1BNS1NBX1ZFUl8yKTtcbiYjNDM7XHRsaXN0LVx1MDAzZWxlbmd0aCAgPSBjcHVfdG9fbGUxNihvZmZzZXRvZihzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUsIHBtaykgJiM0MztcbiYjNDM7XHRcdFx0XHQgICBucG1rICogc2l6ZW9mKHN0cnVjdCBicmNtZl9wbWtzYV92MikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7cG1raWRfaW5mb1wmIzM0OywgbGlzdCwgc2l6ZW9mKCpsaXN0KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1xuIHN0YXRpYyBfX3VzZWQgczMyXG4gYnJjbWZfdXBkYXRlX3Bta2xpc3Qoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywgc3RydWN0IGJyY21mX2lmICppZnApXG4ge1xuQEAgLTQ0MDIsOCAmIzQzOzQ0OTgsOCBAQCBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXG4gXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCB0cnVlKTtcbi1cbi1cdC8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqL1xuJiM0MztcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcbiYjNDM7XHRcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIHRydWUpO1xuIFxuIFx0bnBtayA9IGxlMzJfdG9fY3B1KGNmZy1cdTAwM2VwbWtfbGlzdC5ucG1rKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wbWs7IGkmIzQzOyYjNDM7KVxuQEAgLTQ0NDYsOCAmIzQzOzQ1NDIsOCBAQCBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXG4gXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCBmYWxzZSk7XG4tXG4tXHQvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi9cbiYjNDM7XHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXG4mIzQzO1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCBmYWxzZSk7XG4gXG4gXHRucG1rID0gbGUzMl90b19jcHUoY2ZnLVx1MDAzZXBta19saXN0Lm5wbWspO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBtazsgaSYjNDM7JiM0MzspXG5AQCAtNDQ4Nyw4ICYjNDM7NDU4Myw4IEBAIGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxuIFx0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBOVUxMLCBmYWxzZSk7XG4tXG4tXHQvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi9cbiYjNDM7XHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXG4mIzQzO1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTtcbiBcbiBcdG1lbXNldChcdTAwMjZjZmctXHUwMDNlcG1rX2xpc3QsIDAsIHNpemVvZihjZmctXHUwMDNlcG1rX2xpc3QpKTtcbiBcdGVyciA9IGJyY21mX3VwZGF0ZV9wbWtsaXN0KGNmZywgaWZwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5pbmRleCA2Y2ViMzAxNDI5MDU0Li41NzE2N2ZkZTViYTE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5AQCAtMzQ0LDcgJiM0MzszNDQsOCBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfd293bCB7XG4gICogQGJzc19saXN0OiBic3NfbGlzdCBob2xkaW5nIHNjYW5uZWQgYXAgaW5mb3JtYXRpb24uXG4gICogQGJzc19pbmZvOiBic3MgaW5mb3JtYXRpb24gZm9yIGNmZzgwMjExIGxheWVyLlxuICAqIEBjb25uX2luZm86IGFzc29jaWF0aW9uIGluZm8uXG4tICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0LlxuJiM0MzsgKiBAcG1rX2xpc3Q6IHdwYTIgcG1rIGxpc3QgKFYxIGZpcm13YXJlKS5cbiYjNDM7ICogQHBta19saXN0X3YyOiB3cGEyIHBtayBsaXN0IGZvciBWMiBmaXJtd2FyZSAoRklMUy1jYXBhYmxlLCBmaXJtd2FyZSByZXYgMTIpLlxuICAqIEBzY2FuX3N0YXR1czogc2NhbiBhY3Rpdml0eSBvbiB0aGUgZG9uZ2xlLlxuICAqIEBwdWI6IGNvbW1vbiBkcml2ZXIgaW5mb3JtYXRpb24uXG4gICogQGNoYW5uZWw6IGN1cnJlbnQgY2hhbm5lbC5cbkBAIC0zNzYsNiAmIzQzOzM3Nyw3IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvIHtcbiBcdHN0cnVjdCB3bF9jZmc4MDIxMV9ic3NfaW5mbyAqYnNzX2luZm87XG4gXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvIGNvbm5faW5mbztcbiBcdHN0cnVjdCBicmNtZl9wbWtfbGlzdF9sZSBwbWtfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUgcG1rX2xpc3RfdjI7XG4gXHR1bnNpZ25lZCBsb25nIHNjYW5fc3RhdHVzO1xuIFx0c3RydWN0IGJyY21mX3B1YiAqcHViO1xuIFx0dTMyIGNoYW5uZWw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcbmluZGV4IGVjMTcwNjQ3ODAwZGEuLjY3M2YwMDAwMzg5Y2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXG5AQCAtNDMxLDQ1ICYjNDM7NDMxLDUxIEBAIHZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRuZXRpZl9yeChza2IpO1xuIH1cbiBcbiYjNDM7c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8ge1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIGhkcjtcbiYjNDM7XHRzOCBkYm1fYW50c2lnbmFsO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiB2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9NT05JVE9SX0ZNVF9SQURJT1RBUCkpIHtcbi1cdFx0LyogRG8gbm90aGluZyAqL1xuJiM0MztcdFx0LyogRmlybXdhcmUgYWxyZWFkeSBwcm92aWRlZCBhIGZ1bGwgcmFkaW90YXAgaGVhZGVyOyBkbyBub3RoaW5nICovXG4gXHR9IGVsc2UgaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfSFdfUlhfSERSKSkge1xuIFx0XHRzdHJ1Y3Qgd2xjX2QxMXJ4aGRyICp3bGNfcnhoZHIgPSAoc3RydWN0IHdsY19kMTFyeGhkciAqKXNrYi1cdTAwM2VkYXRhO1xuLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XG4mIzQzO1x0XHRzdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyAqcnRhcDtcbiBcdFx0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcdFx0dTE2IFJ4U3RhdHVzMTtcbiYjNDM7XHRcdHM4IHJzc2k7XG4gXG4gXHRcdFJ4U3RhdHVzMSA9IGxlMTZfdG9fY3B1KHdsY19yeGhkci1cdTAwM2VyeGhkci5SeFN0YXR1czEpO1xuJiM0MztcdFx0cnNzaSA9IHdsY19yeGhkci1cdTAwM2Vyc3NpO1xuIFxuIFx0XHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHdsY19kMTFyeGhkcik7XG4tXHRcdC8qIE1BQyBpbnNlcnRzIDIgcGFkIGJ5dGVzIGZvciBhNCBoZWFkZXJzIG9yIFFvUyBvciBBLU1TRFVcbi1cdFx0ICogc3ViZnJhbWVzXG4tXHRcdCAqL1xuJiM0MztcdFx0LyogTUFDIGluc2VydHMgMiBwYWQgYnl0ZXMgZm9yIGE0IGhlYWRlcnMgb3IgUW9TIG9yIEEtTVNEVSBzdWJmcmFtZXMgKi9cbiBcdFx0aWYgKFJ4U3RhdHVzMSBcdTAwMjYgUlhTX1BCUFJFUylcbiBcdFx0XHRvZmZzZXQgJiM0Mzs9IDI7XG4gXHRcdG9mZnNldCAmIzQzOz0gRDExX1BIWV9IRFJfTEVOO1xuIFxuIFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gXG4tXHRcdC8qIFRPRE86IHVzZSBSWCBoZWFkZXIgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi9cbi1cdFx0cmFkaW90YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcmFkaW90YXApKTtcbi1cdFx0bWVtc2V0KHJhZGlvdGFwLCAwLCBzaXplb2YoKnJhZGlvdGFwKSk7XG4tXHRcdHJhZGlvdGFwLVx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcbiYjNDM7XHRcdC8qIEluc2VydCBvdXIgcmFkaW90YXAgaGVhZGVyIHdpdGggUlNTSSBkYXRhICovXG4mIzQzO1x0XHRydGFwID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnJ0YXApKTtcbiYjNDM7XHRcdG1lbXNldChydGFwLCAwLCBzaXplb2YoKnJ0YXApKTtcbiYjNDM7XHRcdHJ0YXAtXHUwMDNlaGRyLml0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcnRhcCkpO1xuJiM0MztcdFx0cnRhcC1cdTAwM2VoZHIuaXRfcHJlc2VudCA9IGNwdV90b19sZTMyKDEgXHUwMDNjXHUwMDNjIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMKTtcbiYjNDM7XHRcdHJ0YXAtXHUwMDNlZGJtX2FudHNpZ25hbCA9IHJzc2k7XG4gXG4tXHRcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cbi1cdFx0c2tiLVx1MDAzZWxlbiAtPSA0O1xuJiM0MztcdFx0LyogU3RyaXAgdGhlIDQtYnl0ZSByZWNlaXZlIHN0YXR1cyAvIEZDUyB0YWlsICovXG4mIzQzO1x0XHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSA0KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpyYWRpb3RhcDtcbiBcbi1cdFx0LyogVE9ETzogdXNlIFJYIHN0YXR1cyB0byBmaWxsIHNvbWUgcmFkaW90YXAgZGF0YSAqL1xuIFx0XHRyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpO1xuIFx0XHRtZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTtcbiBcdFx0cmFkaW90YXAtXHUwMDNlaXRfbGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpyYWRpb3RhcCkpO1xuIFxuLVx0XHQvKiBUT0RPOiA0IGJ5dGVzIHdpdGggcmVjZWl2ZSBzdGF0dXM/ICovXG4tXHRcdHNrYi1cdTAwM2VsZW4gLT0gNDtcbiYjNDM7XHRcdC8qIFN0cmlwIHRoZSA0LWJ5dGUgcmVjZWl2ZSBzdGF0dXMgLyBGQ1MgdGFpbCAqL1xuJiM0MztcdFx0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gNCk7XG4gXHR9XG4gXG4gXHRza2ItXHUwMDNlZGV2ID0gaWZwLVx1MDAzZW5kZXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuY1xuaW5kZXggMzVjYmNlYTBhYmM5YS4uYjljNTE4OTM5ZjUwNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuY1xuQEAgLTE4MiwxMCAmIzQzOzE4Miw4IEBAIHN0YXRpYyB2b2lkIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCxcbiBcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZjtcbiBcdHN0cnVjdCBicmNtZl9wdWIgKmRydnI7XG4gXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcbi1cdGJvb2wgY3VycmVudGx5X2Jsb2NrZWQ7XG4tXHRpbnQgaTtcbi1cdHU4IGlmaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1OCBpZmlkeDtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTE5NCwyMyAmIzQzOzE5Miw1NCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Zmxvdy1cdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdGlmaWR4ID0gYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGZsb3dpZCk7XG4gXG4tXHRjdXJyZW50bHlfYmxvY2tlZCA9IGZhbHNlO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmxvdy1cdTAwM2Vucm9mcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmICgoZmxvdy1cdTAwM2VyaW5nc1tpXSkgXHUwMDI2XHUwMDI2IChpICE9IGZsb3dpZCkpIHtcbi1cdFx0XHRyaW5nID0gZmxvdy1cdTAwM2VyaW5nc1tpXTtcbi1cdFx0XHRpZiAoKHJpbmctXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgaSkgPT0gaWZpZHgpKSB7XG4tXHRcdFx0XHRpZiAocmluZy1cdTAwM2VibG9ja2VkKSB7XG4tXHRcdFx0XHRcdGN1cnJlbnRseV9ibG9ja2VkID0gdHJ1ZTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuJiM0MztcdGlmaWR4ID0gYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGZsb3dpZCk7XG4mIzQzO1x0cmluZy1cdTAwM2VibG9ja2VkID0gYmxvY2tlZDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWludGFpbiB0aGUgcGVyLWludGVyZmFjZSBibG9ja2VkLXJpbmcgY291bnRlci5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdlIHVzZSByaW5nLVx1MDAzZWNvdW50ZWRfaW5fYmxvY2tlZCByYXRoZXIgdGhhbiBjaGVja2luZ1xuJiM0MztcdCAqIHJpbmctXHUwMDNlc3RhdHVzIGhlcmUuICBBIHJpbmcgdGhhdCBiZWNhbWUgYmxvY2tlZCB3aGlsZVxuJiM0MztcdCAqIFJJTkdfT1BFTiBoYXMgYWxyZWFkeSBiZWVuIGNvdW50ZWQgKGNvdW50ZWRfaW5fYmxvY2tlZD10cnVlKS5cbiYjNDM7XHQgKiBCeSB0aGUgdGltZSB3ZSB1bmJsb2NrIGl0IGR1cmluZyB0ZWFyZG93biBpdHMgc3RhdHVzIG1heSBoYXZlXG4mIzQzO1x0ICogYWR2YW5jZWQgdG8gUklOR19DTE9TSU5HLCBzbyB0ZXN0aW5nIFJJTkdfT1BFTiB3b3VsZCB3cm9uZ2x5XG4mIzQzO1x0ICogc2tpcCB0aGUgYXRvbWljX2RlYyBhbmQgcGVybWFuZW50bHkgbGVhayB0aGUgY291bnRlciwgbGVhdmluZ1xuJiM0MztcdCAqIHRoZSBuZXRpZiBxdWV1ZSBzdG9wcGVkIGZvcmV2ZXIuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBSdWxlOlxuJiM0MztcdCAqICAgYmxvY2sgdHJhbnNpdGlvbiAgKHVuYmxvY2tlZOKGkmJsb2NrZWQpOiBjb3VudCBvbmx5IGlmIFJJTkdfT1BFTixcbiYjNDM7XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBjb3VudGVkX2luX2Jsb2NrZWQuXG4mIzQzO1x0ICogICB1bmJsb2NrIHRyYW5zaXRpb24gKGJsb2NrZWTihpJ1bmJsb2NrZWQpOiBkZWNyZW1lbnQgb25seSBpZiB3ZVxuJiM0MztcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBjb3VudGVkIGl0LFxuJiM0MztcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgY291bnRlZF9pbl9ibG9ja2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChibG9ja2VkKSB7XG4mIzQzO1x0XHRpZiAocmluZy1cdTAwM2VzdGF0dXMgPT0gUklOR19PUEVOKSB7XG4mIzQzO1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZWNvdW50ZWRfaW5fYmxvY2tlZCA9IHRydWU7XG4gXHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkKSB7XG4mIzQzO1x0XHRcdGF0b21pY19kZWMoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZWNvdW50ZWRfaW5fYmxvY2tlZCA9IGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmx5IHByb3BhZ2F0ZSBhIG5ldGlmIHF1ZXVlLXN0b3Avd2FrZSB3aGVuIHRoZSBpbnRlcmZhY2VcbiYjNDM7XHQgKiB0cmFuc2l0aW9ucyBiZXR3ZWVuIGZ1bGx5LWNsZWFyIGFuZCBhdC1sZWFzdC1vbmUtYmxvY2tlZC5cbiYjNDM7XHQgKiBSZWFkaW5nIHRoZSBhdG9taWMgaXMgc2FmZSBoZXJlOiB3ZSBob2xkIGJsb2NrX2xvY2ssIHNvIG5vXG4mIzQzO1x0ICogY29uY3VycmVudCBicmNtZl9mbG93cmluZ19ibG9jaygpIGNhbGwgY2FuIHJhY2UgdGhlIHVwZGF0ZVxuJiM0MztcdCAqIHdlIGp1c3QgbWFkZSBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYmxvY2tlZCBcdTAwMjZcdTAwMjYgYXRvbWljX3JlYWQoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDEpIHtcbiYjNDM7XHRcdC8qIEFub3RoZXIgcmluZyB3YXMgYWxyZWFkeSBibG9ja2VkOyBubyBuZXcgcXVldWUtc3RvcCBuZWVkZWQuICovXG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0cmV0dXJuO1xuIFx0fVxuLVx0Zmxvdy1cdTAwM2VyaW5nc1tmbG93aWRdLVx1MDAzZWJsb2NrZWQgPSBibG9ja2VkO1xuLVx0aWYgKGN1cnJlbnRseV9ibG9ja2VkKSB7XG4mIzQzO1x0aWYgKCFibG9ja2VkIFx1MDAyNlx1MDAyNiBhdG9taWNfcmVhZChcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSkgIT0gMCkge1xuJiM0MztcdFx0LyogTW9yZSByaW5ncyBzdGlsbCBibG9ja2VkOyBkbyBub3Qgd2FrZSB0aGUgcXVldWUgeWV0LiAqL1xuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMzY3LDYgJiM0MzszOTYsOCBAQCBzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmJyY21mX2Zsb3dyaW5nX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUxNiBucm9mcmluZ3MpXG4gXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jayk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZmxvdy1cdTAwM2VhZGRyX21vZGUpOyBpJiM0MzsmIzQzOylcbiBcdFx0XHRmbG93LVx1MDAzZWFkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXHUwMDNlaWZfYmxvY2tlZF9jbnQpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2ldLCAwKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbG93LVx1MDAzZWhhc2gpOyBpJiM0MzsmIzQzOylcbiBcdFx0XHRmbG93LVx1MDAzZWhhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcbmluZGV4IGYzZDUxMWY5YTNjOWEuLmFmZGVhOGIzZjhhYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcbkBAIC01LDYgJiM0Mzs1LDggQEBcbiAjaWZuZGVmIEJSQ01GTUFDX0ZMT1dSSU5HX0hcbiAjZGVmaW5lIEJSQ01GTUFDX0ZMT1dSSU5HX0hcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiYjNDM7XG4gXG4gI2RlZmluZSBCUkNNRl9GTE9XUklOR19IQVNIU0laRVx0XHQ1MTJcdFx0LyogaGFzIHRvIGJlIDJeeCAqL1xuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSU5WQUxJRF9JRFx0MHhGRkZGRkZGRlxuQEAgLTI2LDYgJiM0MzsyOCwxNiBAQCBlbnVtIHJpbmdfc3RhdHVzIHtcbiBzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfcmluZyB7XG4gXHR1MTYgaGFzaF9pZDtcbiBcdGJvb2wgYmxvY2tlZDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRydWUgd2hlbiB0aGlzIHJpbmcgaGFzIGJlZW4gY291bnRlZCBpbiB0aGUgcGVyLWludGVyZmFjZVxuJiM0MztcdCAqIGlmX2Jsb2NrZWRfY250W10uICBTZXQgdG8gdHJ1ZSB3aGVuZXZlciB0aGUgcmluZyB0cmFuc2l0aW9uc1xuJiM0MztcdCAqIHVuYmxvY2tlZOKGkmJsb2NrZWQgd2hpbGUgUklOR19PUEVOOyBjbGVhcmVkIG9uIHRoZSBtYXRjaGluZ1xuJiM0MztcdCAqIGJsb2NrZWTihpJ1bmJsb2NrZWQgdHJhbnNpdGlvbi4gIE5lZWRlZCBzbyB0aGF0IGEgcmluZyB0aGF0XG4mIzQzO1x0ICogYmVjb21lcyBibG9ja2VkIHdoaWxlIFJJTkdfT1BFTiBhbmQgaXMgbGF0ZXIgbW92ZWQgdG9cbiYjNDM7XHQgKiBSSU5HX0NMT1NJTkcgc3RpbGwgY29ycmVjdGx5IGRlY3JlbWVudHMgdGhlIGNvdW50ZXIgYXRcbiYjNDM7XHQgKiB0ZWFyZG93biwgZXZlbiB0aG91Z2ggaXRzIHN0YXR1cyBpcyBubyBsb25nZXIgUklOR19PUEVOLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgY291bnRlZF9pbl9ibG9ja2VkO1xuIFx0ZW51bSByaW5nX3N0YXR1cyBzdGF0dXM7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYmxpc3Q7XG4gfTtcbkBAIC00MCw2ICYjNDM7NTIsMTIgQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nIHtcbiBcdHN0cnVjdCBicmNtZl9mbG93cmluZ19oYXNoIGhhc2hbQlJDTUZfRkxPV1JJTkdfSEFTSFNJWkVdO1xuIFx0c3BpbmxvY2tfdCBibG9ja19sb2NrO1xuIFx0ZW51bSBwcm90b19hZGRyX21vZGUgYWRkcl9tb2RlW0JSQ01GX01BWF9JRlNdO1xuJiM0MztcdC8qIFBlci1pbnRlcmZhY2UgY291bnQgb2YgY3VycmVudGx5IGJsb2NrZWQgb3BlbiByaW5ncy5cbiYjNDM7XHQgKiBNYWludGFpbmVkIGF0b21pY2FsbHkgc28gYnJjbWZfZmxvd3JpbmdfYmxvY2soKSBjYW4gY2hlY2tcbiYjNDM7XHQgKiB3aGV0aGVyIGFueSBzaWJsaW5nIHJpbmcgaXMgYWxyZWFkeSBibG9ja2VkIGluIE8oMSkgd2l0aG91dFxuJiM0MztcdCAqIGhvbGRpbmcgYmxvY2tfbG9jayBhY3Jvc3MgYW4gTyhucm9mcmluZ3MpIHdhbGsuXG4mIzQzO1x0ICovXG4mIzQzO1x0YXRvbWljX3QgaWZfYmxvY2tlZF9jbnRbQlJDTUZfTUFYX0lGU107XG4gXHR1MTYgbnJvZnJpbmdzO1xuIFx0Ym9vbCB0ZGxzX2FjdGl2ZTtcbiBcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICp0ZGxzX2VudHJ5O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmNcbmluZGV4IGE0M2YxYTM4YjBlMzAuLjNjMWNhMzU1ZThlZWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmNcbkBAIC0xMDM3LDcgJiM0MzsxMDM3LDkgQEAgaW50IGJyY21mX2Z3c19tYWNkZXNjX2luZGljYXRlKHN0cnVjdCBicmNtZl9md3NfaW5mbyAqZndzLCB1OCB0eXBlLCB1OCAqZGF0YSlcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O3VzZSBleGlzdGluZ1xcblwmIzM0Oyk7XG4gXHRcdFx0V0FSTl9PTihlbnRyeS1cdTAwM2VtYWNfaGFuZGxlICE9IG1hY19oYW5kbGUpO1xuLVx0XHRcdC8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovXG4mIzQzO1x0XHRcdC8qIEZpcm13YXJlIHJlLXNlbnQgQUREIGZvciB0aGUgc2FtZSBNQUMgaGFuZGxlLlxuJiM0MztcdFx0XHQgKiBObyBhY3Rpb24gcmVxdWlyZWQ7IGl0IGlzIGEgc2FmZSBuby1vcC5cbiYjNDM7XHRcdFx0ICovXG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG5AQCAtNDgsNyAmIzQzOzQ4LDE5IEBAXG4gI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJcdFx0MHgxM1xuICNkZWZpbmUgTVNHQlVGX1RZUEVfTFBCS19ETUFYRkVSX0NNUExUXHRcdDB4MTRcbiBcbi0jZGVmaW5lIE5SX1RYX1BLVElEU1x0XHRcdFx0MjA0OFxuJiM0MzsvKlxuJiM0MzsgKiBOUl9UWF9QS1RJRFM6IG51bWJlciBvZiBzaW11bHRhbmVvdXNseSBpbi1mbGlnaHQgVFggcGFja2V0IElEcy5cbiYjNDM7ICogRWFjaCBvdXRzdGFuZGluZyBUWCBmcmFtZSBjb25zdW1lcyBvbmUgSUQgdW50aWwgdGhlIGRvbmdsZSByZXR1cm5zXG4mIzQzOyAqIGEgVFgtc3RhdHVzIGNvbXBsZXRpb24uICBUaGUgb3JpZ2luYWwgMjA0OC1lbnRyeSBwb29sIGV4aGF1c3RlZCB1bmRlclxuJiM0MzsgKiDiiaU0IGNvbmN1cnJlbnQgaXBlcmYzIHN0cmVhbXMgb24gV2ktRmkgNS82ICg4MDIuMTFhYy9heCkgZGV2aWNlcyxcbiYjNDM7ICogY2F1c2luZyBcJiMzNDtObyBQS1RJRCBhdmFpbGFibGVcJiMzNDsgZHJvcHMgYW5kIFRDUCByZXRyYW5zbWl0cy4gIDQwOTYgZ2l2ZXNcbiYjNDM7ICogaGVhZHJvb20gZm9yIGhpZ2gtYWdncmVnYXRpb24gc2NlbmFyaW9zIHdoaWxlIHN0aWxsIGZpdHRpbmcgaW4gYVxuJiM0MzsgKiBtb2Rlc3QgYW1vdW50IG9mIGhvc3QgbWVtb3J5ICh+NDggS0IgZm9yIHRoZSBwa3RpZCB0YWJsZSBlbnRyaWVzKS5cbiYjNDM7ICpcbiYjNDM7ICogTlJfUlhfUEtUSURTOiBSWCBwb3N0IGJ1ZmZlcnMgcHJlLWFsbG9jYXRlZCB0byB0aGUgZG9uZ2xlLiAgMTAyNCBpc1xuJiM0MzsgKiBzdWZmaWNpZW50IGZvciBjdXJyZW50IGhhcmR3YXJlIFJYIHJpbmcgZGVwdGhzOyBsZWF2ZSB1bmNoYW5nZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE5SX1RYX1BLVElEU1x0XHRcdFx0NDA5NlxuICNkZWZpbmUgTlJfUlhfUEtUSURTXHRcdFx0XHQxMDI0XG4gXG4gI2RlZmluZSBCUkNNRl9JT0NUTF9SRVFfUEtUSURcdFx0XHQweEZGRkVcbkBAIC02NCw4ICYjNDM7NzYsMjkgQEBcbiAjZGVmaW5lIEJSQ01GX01TR0JVRl9QS1RfRkxBR1NfRlJBTUVfTUFTS1x0MHgwN1xuICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19QUklPX1NISUZUXHQ1XG4gXG4tI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMVx0XHQzMlxuLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDJcdFx0OTZcbiYjNDM7LypcbiYjNDM7ICogVFggZmx1c2ggLyBkb29yYmVsbC1yaW5nIHRocmVzaG9sZHMuXG4mIzQzOyAqXG4mIzQzOyAqIENOVDEgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIGluIHRoZSBjb21tb25yaW5nXG4mIzQzOyAqIGJlZm9yZSB0aGUgZmlyc3QgaW50ZXJtZWRpYXRlIHdyaXRlX2NvbXBsZXRlKCkgKGRvb3JiZWxsIHJpbmcpIGlzXG4mIzQzOyAqIGlzc3VlZCBtaWQtYmF0Y2guICBDTlQyIGlzIHRoZSBoYXJkIGZsdXNoIGludGVydmFsOiBhZnRlciB0aGlzIG1hbnlcbiYjNDM7ICogZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuIHNpbmNlIHRoZSBsYXN0IGZsdXNoLCB3ZSB1bmNvbmRpdGlvbmFsbHlcbiYjNDM7ICogcmluZyB0aGUgYmVsbCBhbmQgcmVzZXQgdGhlIGNvdW50ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFJhaXNpbmcgYm90aCBmcm9tIHRoZSBvcmlnaW5hbCAzMi85NiB0byA2NC8xMjggZG91YmxlcyB0aGUgYXZlcmFnZVxuJiM0MzsgKiBudW1iZXIgb2YgVFggZGVzY3JpcHRvcnMgY29tbWl0dGVkIHBlciBNTUlPIHdyaXRlLCBoYWx2aW5nIHRoZSBQQ0llXG4mIzQzOyAqIGRvb3JiZWxsIHJhdGUgb24gc3VzdGFpbmVkIHRocm91Z2hwdXQgd29ya2xvYWRzLiAgVGhlIHRyYWRlb2ZmIGlzIGFcbiYjNDM7ICogbWFyZ2luYWxseSBoaWdoZXIgd29yc3QtY2FzZSBsYXRlbmN5IGZvciB0aGUgbGFzdCBmcmFtZXMgaW4gYSBidXJzdCxcbiYjNDM7ICogd2hpY2ggaW4gcHJhY3RpY2UgaXMgaGlkZGVuIGJ5IHRoZSB0aW1lIHRoZSBkb25nbGUgRE1BIGVuZ2luZSBkcmFpbnNcbiYjNDM7ICogdGhlIHByZXZpb3VzIGJhdGNoLlxuJiM0MzsgKlxuJiM0MzsgKiBUUklDS0xFX1RYV09SS0VSX1RIUlMgZ292ZXJucyBob3cgb2Z0ZW4gYnJjbWZfbXNnYnVmX3R4X3F1ZXVlX2RhdGEoKVxuJiM0MzsgKiBmb3JjZXMgYSB3b3JrcXVldWUgc2NoZWR1bGUgd2hlbiB0aGUgcXVldWUgZGVwdGggaXMgbm90IGEgbXVsdGlwbGUgb2ZcbiYjNDM7ICogdGhpcyB2YWx1ZS4gIEtlZXBpbmcgaXQgYXQgaGFsZiBvZiBDTlQxICgzMikgcHJlc2VydmVzIHJlc3BvbnNpdmVuZXNzXG4mIzQzOyAqIGZvciBsb3ctcmF0ZSBmbG93cyAoZS5nLiBWb0lQLCBJQ01QKSB0aGF0IG5ldmVyIGFjY3VtdWxhdGUgNjQgZnJhbWVzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMVx0XHQ2NFxuJiM0MzsjZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQyXHRcdDEyOFxuIFxuICNkZWZpbmUgQlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlNcdDk2XG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfVFJJQ0tMRV9UWFdPUktFUl9USFJTXHQzMlxuQEAgLTc4NywxMCAmIzQzOzgyMCwzMCBAQCBzdGF0aWMgaW50IGJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGEoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB1MzIgZmxvd2lkLFxuIHtcbiBcdHN0cnVjdCBicmNtZl9jb21tb25yaW5nICpjb21tb25yaW5nO1xuIFxuLVx0c2V0X2JpdChmbG93aWQsIG1zZ2J1Zi1cdTAwM2VmbG93X21hcCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGUgYml0IHdhcyBhbHJlYWR5IHNldCwgYSB0eGZsb3dfd29yayBpdGVtIGlzIGFscmVhZHlcbiYjNDM7XHQgKiBxdWV1ZWQgb3IgcnVubmluZyBmb3IgdGhpcyByaW5nLiAgSW4gdGhhdCBjYXNlIHRoZSBleGlzdGluZ1xuJiM0MztcdCAqIHdvcmtlciB3aWxsIGRyYWluIG91ciBmcmVzaGx5IGVucXVldWVkIGZyYW1lIHdoZW4gaXQgcnVucyxcbiYjNDM7XHQgKiBzbyB3ZSBvbmx5IG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhlciB3b3JrIGl0ZW0gd2hlbiB0aGVcbiYjNDM7XHQgKiBmb3JjZSBmbGFnIGlzIHNldCBvciB0aGUgcmluZyBpcyBiZWxvdyB0aGUgZGVsYXkgdGhyZXNob2xkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSWYgdGhlIGJpdCB3YXMgTk9UIHNldCAodGVzdF9hbmRfc2V0X2JpdCByZXR1cm5zIGZhbHNlKSwgbm9cbiYjNDM7XHQgKiB3b3JrZXIgaXMgcGVuZGluZyBmb3IgdGhpcyByaW5nIGF0IGFsbC4gIFdlIE1VU1Qgc2NoZWR1bGVcbiYjNDM7XHQgKiBvbmUgdW5jb25kaXRpb25hbGx5LCBvdGhlcndpc2UgdGhlIGZyYW1lIHdlIGp1c3QgZW5xdWV1ZWRcbiYjNDM7XHQgKiB3aWxsIHNpdCBpbiB0aGUgZmxvd3JpbmcgdW5zZW50IHVudGlsIHNvbWUgdW5yZWxhdGVkIGV2ZW50XG4mIzQzO1x0ICogdHJpZ2dlcnMgdGhlIHdvcmtxdWV1ZSDigJQgY2F1c2luZyBzaWxlbnQgVFggc3RhbGxzIHVuZGVyXG4mIzQzO1x0ICogaGlnaCBsb2FkIHdoZW4gb3V0c3RhbmRpbmdfdHggXHUwMDNlPSBERUxBWV9UWFdPUktFUl9USFJTLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChmbG93aWQsIG1zZ2J1Zi1cdTAwM2VmbG93X21hcCkpIHtcbiYjNDM7XHRcdC8qIEJpdCB3YXMgY2xlYXI6IG5vIHdvcmtlciBwZW5kaW5nLCBhbHdheXMgc2NoZWR1bGUuICovXG4mIzQzO1x0XHRxdWV1ZV93b3JrKG1zZ2J1Zi1cdTAwM2V0eGZsb3dfd3EsIFx1MDAyNm1zZ2J1Zi1cdTAwM2V0eGZsb3dfd29yayk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEJpdCB3YXMgYWxyZWFkeSBzZXQ6IHdvcmtlciBwZW5kaW5nLCBhcHBseSBjb2FsZXNjaW5nIGhldXJpc3RpYy4gKi9cbiBcdGNvbW1vbnJpbmcgPSBtc2didWYtXHUwMDNlZmxvd3JpbmdzW2Zsb3dpZF07XG4tXHRpZiAoKGZvcmNlKSB8fCAoYXRvbWljX3JlYWQoXHUwMDI2Y29tbW9ucmluZy1cdTAwM2VvdXRzdGFuZGluZ190eCkgXHUwMDNjXG4tXHRcdFx0QlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlMpKVxuJiM0MztcdGlmIChmb3JjZSB8fCAoYXRvbWljX3JlYWQoXHUwMDI2Y29tbW9ucmluZy1cdTAwM2VvdXRzdGFuZGluZ190eCkgXHUwMDNjXG4mIzQzO1x0XHQgICAgICBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSUykpXG4gXHRcdHF1ZXVlX3dvcmsobXNnYnVmLVx1MDAzZXR4Zmxvd193cSwgXHUwMDI2bXNnYnVmLVx1MDAzZXR4Zmxvd193b3JrKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE2MjEsMTEgJiM0MzsxNjc0LDExIEBAIGludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4gXHRkbyB7XG4gXHRcdGJyY21mX21zZ2J1Zl9yeGJ1Zl9kYXRhX2ZpbGwobXNnYnVmKTtcbiBcdFx0aWYgKG1zZ2J1Zi1cdTAwM2VtYXhfcnhidWZwb3N0ICE9IG1zZ2J1Zi1cdTAwM2VyeGJ1ZnBvc3QpXG4tXHRcdFx0bXNsZWVwKDEwKTtcbiYjNDM7XHRcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFx0XHRlbHNlXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNvdW50JiM0MzsmIzQzOztcbi1cdH0gd2hpbGUgKGNvdW50IFx1MDAzYyAxMCk7XG4mIzQzO1x0fSB3aGlsZSAoY291bnQgXHUwMDNjIDEwMCk7XG4gXHRicmNtZl9tc2didWZfcnhidWZfZXZlbnRfcG9zdChtc2didWYpO1xuIFx0YnJjbWZfbXNnYnVmX3J4YnVmX2lvY3RscmVzcF9wb3N0KG1zZ2J1Zik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcbmluZGV4IDEzNjYyYWE0YjRlYTYuLjkzMzhhNWZhYTI2MGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXG5AQCAtMjY4LDYgJiM0MzsyNjgsMjcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9maXJtd2FyZV9tYXBwaW5nIGJyY21mX3BjaWVfZnduYW1lc1tdID0ge1xuIFxuICNkZWZpbmUgQlJDTUZfUENJRV9NQkRBVEFfVElNRU9VVFx0XHRtc2Vjc190b19qaWZmaWVzKDIwMDApXG4gXG4mIzQzOy8qXG4mIzQzOyAqIEgyRCBtYWlsYm94IHBvbGwgdGltaW5nIHBhcmFtZXRlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBkb25nbGUgdHlwaWNhbGx5IGNsZWFycyB0aGUgSDJEIG1haWxib3ggcmVnaXN0ZXIgd2l0aGluIGEgZmV3XG4mIzQzOyAqIGh1bmRyZWQgbWljcm9zZWNvbmRzIGFmdGVyIHRoZSBkb29yYmVsbCBpbnRlcnJ1cHQgZmlyZXMuICBUaGVcbiYjNDM7ICogb3JpZ2luYWwgY29kZSB1c2VkIG1zbGVlcCgxMCkgKiAxMDAgaXRlcmF0aW9ucywgbWVhbmluZyB0aGVcbiYjNDM7ICogbWluaW11bSBvYnNlcnZhYmxlIGxhdGVuY3kgd2FzIDEwbXMgZXZlbiB3aGVuIHRoZSBkb25nbGUgd2FzIGZhc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFdlIGluc3RlYWQgc3RhcnQgd2l0aCBhIHNob3J0IHNsZWVwIGFuZCBkb3VibGUgaXQgZWFjaCBpdGVyYXRpb25cbiYjNDM7ICogKGV4cG9uZW50aWFsIGJhY2tvZmYpIHVwIHRvIEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMsIHN0YXlpbmdcbiYjNDM7ICogd2l0aGluIHRoZSBzYW1lIDEtc2Vjb25kIGFic29sdXRlIHRpbWVvdXQuXG4mIzQzOyAqXG4mIzQzOyAqIE1JTl9VUyAvIElOSVRJQUxfTUFYX1VTIDogdXNsZWVwX3JhbmdlIGJvdW5kcyBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbi5cbiYjNDM7ICogTUFYX1VTICAgICA6IGNhcCBvbiB0aGUgcGVyLWl0ZXJhdGlvbiBzbGVlcCAowrVzKS5cbiYjNDM7ICogVElNRU9VVF9VUyA6IHRvdGFsIGJ1ZGdldCBiZWZvcmUgZ2l2aW5nIHVwICgxIHNlY29uZCkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVNcdFx0NDBcbiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfSU5JVElBTF9NQVhfVVNcdDUwXG4mIzQzOyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX01BWF9VU1x0XHQ1MDAwXG4mIzQzOyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX1RJTUVPVVRfVVNcdFx0MTAwMDAwMFxuJiM0MztcbiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX1NUQVRVU19DTURcdFx0MHg0XG4gI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19QTV9DU1JcdFx0MHg0Q1xuICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfTVNJX0NBUFx0XHQweDU4XG5AQCAtNzY2LDcgJiM0Mzs3ODcsOCBAQCBicmNtZl9wY2llX3NlbmRfbWJfZGF0YShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgaHRvZF9tYl9kYXRhKVxuIFx0c3RydWN0IGJyY21mX2NvcmUgKmNvcmU7XG4gXHR1MzIgYWRkcjtcbiBcdHUzMiBjdXJfaHRvZF9tYl9kYXRhO1xuLVx0dTMyIGk7XG4mIzQzO1x0dTMyIGVsYXBzZWRfdXMgPSAwO1xuJiM0MztcdHUzMiBzbGVlcF91cyA9IEJSQ01GX1BDSUVfTUJfUE9MTF9JTklUSUFMX01BWF9VUztcbiBcbiBcdHNoYXJlZCA9IFx1MDAyNmRldmluZm8tXHUwMDNlc2hhcmVkO1xuIFx0YWRkciA9IHNoYXJlZC1cdTAwM2VodG9kX21iX2RhdGFfYWRkcjtcbkBAIC03NzYsMTIgJiM0Mzs3OTgsNDAgQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSlcbiBcdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O01CIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgcGVuZGluZyAweCUwNHhcXG5cJiMzNDssXG4gXHRcdFx0ICBjdXJfaHRvZF9tYl9kYXRhKTtcbiBcbi1cdGkgPSAwO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2FpdCBmb3IgdGhlIGRvbmdsZSB0byBjb25zdW1lIHRoZSBwcmV2aW91cyBIMkQgbWFpbGJveCBtZXNzYWdlLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlcmUgaXMgbm8gaW50ZXJydXB0IHRoYXQgc2lnbmFscyB3aGVuIHRoZSBkb25nbGUgY2xlYXJzIHRoaXNcbiYjNDM7XHQgKiByZWdpc3Rlciwgc28gcG9sbGluZyBpcyB1bmF2b2lkYWJsZS4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWRcbiYjNDM7XHQgKiBtc2xlZXAoMTApIHBlciBpdGVyYXRpb24sIGluY3VycmluZyBhdCBsZWFzdCAxMG1zIG9mIGxhdGVuY3lcbiYjNDM7XHQgKiBldmVuIHdoZW4gdGhlIGRvbmdsZSByZXNwb25kZWQgaW4gbWljcm9zZWNvbmRzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogV2UgdXNlIHVzbGVlcF9yYW5nZSgpIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiBpbnN0ZWFkOlxuJiM0MztcdCAqICAgLSBGaXJzdCBpdGVyYXRpb24gc2xlZXBzIH41MMK1cyAoZmFzdCBwYXRoIGZvciByZXNwb25zaXZlIGRvbmdsZSkuXG4mIzQzO1x0ICogICAtIEVhY2ggc3Vic2VxdWVudCBpdGVyYXRpb24gZG91YmxlcyB0aGUgc2xlZXAsIGNhcHBlZCBhdCA1bXMsXG4mIzQzO1x0ICogICAgIHNvIGxvbmcgd2FpdHMgc3RpbGwgeWllbGQgdGhlIENQVSB3aXRob3V0IGJ1c3ktc3Bpbm5pbmcuXG4mIzQzO1x0ICogICAtIFRvdGFsIHRpbWVvdXQgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgMS1zZWNvbmQgbGltaXQuXG4mIzQzO1x0ICogICAtIFdlIGJhaWwgZWFybHkgaWYgdGhlIGRldmljZSBoYXMgZ29uZSBkb3duIHNvIHRoYXQgYSBkZWFkXG4mIzQzO1x0ICogICAgIGRvbmdsZSBkb2VzIG5vdCBob2xkIHRoZSBjYWxsZXIgZm9yIGEgZnVsbCBzZWNvbmQuXG4mIzQzO1x0ICovXG4gXHR3aGlsZSAoY3VyX2h0b2RfbWJfZGF0YSAhPSAwKSB7XG4tXHRcdG1zbGVlcCgxMCk7XG4tXHRcdGkmIzQzOyYjNDM7O1xuLVx0XHRpZiAoaSBcdTAwM2UgMTAwKVxuJiM0MztcdFx0aWYgKGRldmluZm8tXHUwMDNlc3RhdGUgPT0gQlJDTUZNQUNfUENJRV9TVEFURV9ET1dOKSB7XG4mIzQzO1x0XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtEZXZpY2UgZG93biwgYWJvcnRpbmcgTUIgc2VuZFxcblwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVsYXBzZWRfdXMgXHUwMDNlPSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUykge1xuJiM0MztcdFx0XHRicmNtZl9lcnIoXCYjMzQ7VGltZW91dCB3YWl0aW5nIGZvciBIMkQgTUIgc2xvdCBhZnRlciAldSB1c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgIGVsYXBzZWRfdXMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR1c2xlZXBfcmFuZ2UoQlJDTUZfUENJRV9NQl9QT0xMX01JTl9VUywgc2xlZXBfdXMpO1xuJiM0MztcdFx0ZWxhcHNlZF91cyAmIzQzOz0gc2xlZXBfdXM7XG4mIzQzO1xuJiM0MztcdFx0LyogRXhwb25lbnRpYWwgYmFja29mZiwgY2FwcGVkIGF0IEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMgKi9cbiYjNDM7XHRcdHNsZWVwX3VzID0gbWluKHNsZWVwX3VzICogMiwgKHUzMilCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTKTtcbiYjNDM7XG4gXHRcdGN1cl9odG9kX21iX2RhdGEgPSBicmNtZl9wY2llX3JlYWRfdGNtMzIoZGV2aW5mbywgYWRkcik7XG4gXHR9XG4gXG5AQCAtMTAwMSwxMCAmIzQzOzEwNTEsMTAgQEAgc3RhdGljIHZvaWQgYnJjbWZfcGNpZV9yZWxlYXNlX2lycShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvKVxuIFx0ZnJlZV9pcnEocGRldi1cdTAwM2VpcnEsIGRldmluZm8pO1xuIFx0cGNpX2Rpc2FibGVfbXNpKHBkZXYpO1xuIFxuLVx0bXNsZWVwKDUwKTtcbiYjNDM7XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXHRjb3VudCA9IDA7XG4tXHR3aGlsZSAoKGRldmluZm8tXHUwMDNlaW5faXJxKSBcdTAwMjZcdTAwMjYgKGNvdW50IFx1MDAzYyAyMCkpIHtcbi1cdFx0bXNsZWVwKDUwKTtcbiYjNDM7XHR3aGlsZSAoKGRldmluZm8tXHUwMDNlaW5faXJxKSBcdTAwMjZcdTAwMjYgKGNvdW50IFx1MDAzYyAxMDAwKSkge1xuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gXHR9XG4gXHRpZiAoZGV2aW5mby1cdTAwM2Vpbl9pcnEpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcbmluZGV4IGI3MjVjNjRlNWI1YzYuLjRlNDE0NDAzZDc0NzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jXG5AQCAtMTY0NSwzNyAmIzQzOzE2NDUsNDMgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKVxuIFxuIFx0XHRyZF9uZXcuc2VxX251bSA9IHJ4c2VxO1xuIFx0XHRyZF9uZXcubGVuID0gZGxlbjtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2xhaW0gdGhlIGhvc3Qgb25jZSBmb3IgdGhlIGVudGlyZSBoZWFkZXItcGFyc2luZyBwaGFzZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBicmNtZl9zZGlvX2hkcGFyc2UoKSBvcGVyYXRlcyBvbiBkYXRhIGFscmVhZHkgaW4gaG9zdFxuJiM0MztcdFx0ICogbWVtb3J5LCBidXQgbWF5IGNhbGwgYnJjbWZfc2Rpb19yeGZhaWwoKSBvbiBlcnJvciwgd2hpY2hcbiYjNDM7XHRcdCAqIHdyaXRlcyBTRElPIEZ1bmMxIHJlZ2lzdGVycyBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIHRoZVxuJiM0MztcdFx0ICogaG9zdCB0byBiZSBjbGFpbWVkLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIHNrYl9wdWxsKCkgYW5kIHRoZSBudW0gY291bnRlciBhcmUgcHVyZSBob3N0LW1lbW9yeVxuJiM0MztcdFx0ICogb3BlcmF0aW9uczsga2VlcCB0aGVtIG91dHNpZGUgdGhlIGxvY2sgdG8gbWluaW1pc2UgdGhlXG4mIzQzO1x0XHQgKiBob2xkIHRpbWUuICBCb3RoIGhkcGFyc2UgY2FsbHMgKHN1cGVyZnJhbWUgaGVhZGVyIGFuZFxuJiM0MztcdFx0ICogZWFjaCBzdWJmcmFtZSBoZWFkZXIpIGFyZSBncm91cGVkIHVuZGVyIGEgc2luZ2xlIGNsYWltL1xuJiM0MztcdFx0ICogcmVsZWFzZSwgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBOJiM0MzsxIHNlcGFyYXRlIHBhaXJzLlxuJiM0MztcdFx0ICovXG4gXHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4gXHRcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtXHUwMDNlZGF0YSwgXHUwMDI2cmRfbmV3LFxuIFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VQRVIpO1xuLVx0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdGJ1cy1cdTAwM2VjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSBcdTAwM2NcdTAwM2MgNDtcbi1cbi1cdFx0LyogUmVtb3ZlIHN1cGVyZnJhbWUgaGVhZGVyLCByZW1lbWJlciBvZmZzZXQgKi9cbi1cdFx0c2tiX3B1bGwocGZpcnN0LCByZF9uZXcuZGF0X29mZnNldCk7XG4tXHRcdG51bSA9IDA7XG4tXG4tXHRcdC8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqL1xuLVx0XHRza2JfcXVldWVfd2FsayhcdTAwMjZidXMtXHUwMDNlZ2xvbSwgcG5leHQpIHtcbi1cdFx0XHQvKiBsZWF2ZSB3aGVuIGludmFsaWQgc3ViZnJhbWUgaXMgZm91bmQgKi9cbi1cdFx0XHRpZiAoZXJyY29kZSlcbi1cdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdHJkX25ldy5sZW4gPSBwbmV4dC1cdTAwM2VsZW47XG4tXHRcdFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcSYjNDM7JiM0Mzs7XG4tXHRcdFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbi1cdFx0XHRlcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtXHUwMDNlZGF0YSwgXHUwMDI2cmRfbmV3LFxuLVx0XHRcdFx0XHRcdCAgICAgQlJDTUZfU0RJT19GVF9TVUIpO1xuLVx0XHRcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbi1cdFx0XHRicmNtZl9kYmdfaGV4X2R1bXAoQlJDTUZfR0xPTV9PTigpLFxuLVx0XHRcdFx0XHQgICBwbmV4dC1cdTAwM2VkYXRhLCAzMiwgXCYjMzQ7c3ViZnJhbWU6XFxuXCYjMzQ7KTtcbi1cbi1cdFx0XHRudW0mIzQzOyYjNDM7O1xuJiM0MztcdFx0LyogVmFsaWRhdGUgYWxsIHRoZSBzdWJmcmFtZSBoZWFkZXJzIHdoaWxlIGhvc3QgaXMgY2xhaW1lZCAqL1xuJiM0MztcdFx0aWYgKCFlcnJjb2RlKSB7XG4mIzQzO1x0XHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNmJ1cy1cdTAwM2VnbG9tLCBwbmV4dCkge1xuJiM0MztcdFx0XHRcdHJkX25ldy5sZW4gPSBwbmV4dC1cdTAwM2VsZW47XG4mIzQzO1x0XHRcdFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0ZXJyY29kZSA9IGJyY21mX3NkaW9faGRwYXJzZShidXMsIHBuZXh0LVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyZF9uZXcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBCUkNNRl9TRElPX0ZUX1NVQik7XG4mIzQzO1x0XHRcdFx0YnJjbWZfZGJnX2hleF9kdW1wKEJSQ01GX0dMT01fT04oKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcG5leHQtXHUwMDNlZGF0YSwgMzIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFwmIzM0O3N1YmZyYW1lOlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0aWYgKGVycmNvZGUpXG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChlcnJjb2RlKSB7XG4tXHRcdFx0LyogVGVybWluYXRlIGZyYW1lIG9uIGVycm9yICovXG4tXHRcdFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbiYjNDM7XHRcdFx0LyogVGVybWluYXRlIGZyYW1lIG9uIGVycm9yLCBzdGlsbCBob2xkaW5nIHRoZSBob3N0ICovXG4gXHRcdFx0YnJjbWZfc2Rpb19yeGZhaWwoYnVzLCB0cnVlLCBmYWxzZSk7XG4gXHRcdFx0YnVzLVx1MDAzZXNkY250LnJ4Z2xvbWZhaWwmIzQzOyYjNDM7O1xuIFx0XHRcdGJyY21mX3NkaW9fZnJlZV9nbG9tKGJ1cyk7XG5AQCAtMTY4Myw2ICYjNDM7MTY4OSwxNCBAQCBzdGF0aWMgdTggYnJjbWZfc2Rpb19yeGdsb20oc3RydWN0IGJyY21mX3NkaW8gKmJ1cywgdTggcnhzZXEpXG4gXHRcdFx0YnVzLVx1MDAzZWN1cl9yZWFkLmxlbiA9IDA7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiYjNDM7XHRcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBIb3N0IHJlbGVhc2VkOyBub3cgZG8gdGhlIHB1cmUtbWVtb3J5IGJvb2trZWVwaW5nICovXG4mIzQzO1x0XHRidXMtXHUwMDNlY3VyX3JlYWQubGVuID0gcmRfbmV3Lmxlbl9ueHRmcm0gXHUwMDNjXHUwMDNjIDQ7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVtb3ZlIHN1cGVyZnJhbWUgaGVhZGVyLCByZW1lbWJlciBvZmZzZXQgKi9cbiYjNDM7XHRcdHNrYl9wdWxsKHBmaXJzdCwgcmRfbmV3LmRhdF9vZmZzZXQpO1xuJiM0MztcdFx0bnVtID0gMDtcbiBcbiBcdFx0LyogQmFzaWMgU0QgZnJhbWluZyBsb29rcyBvayAtIHByb2Nlc3MgZWFjaCBwYWNrZXQgKGhlYWRlcikgKi9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXG5pbmRleCBmYzdhNWRkMmU1ZDg2Li4zZmQ4YmRiZDM1ZTU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXG5AQCAtNTE2LDEyICYjNDM7NTE2LDExIEBAIGludCBicmNtc19jX2FtcGR1X2FkZF9mcmFtZShzdHJ1Y3QgYnJjbXNfYW1wZHVfc2Vzc2lvbiAqc2Vzc2lvbixcbiBcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiBcbiBcdFx0Lypcbi1cdFx0ICogV2UgYXJlbiYjMzk7dCByZWFsbHkgb3V0IG9mIHNwYWNlIGlmIHRoZSBuZXcgZnJhbWUgaXMgb2Zcbi1cdFx0ICogYSBkaWZmZXJlbnQgcHJpb3JpdHksIGJ1dCB3ZSB3YW50IHRoZSBzYW1lIGJlaGF2aW91clxuLVx0XHQgKiBzbyByZXR1cm4gLUVOT1NQQyBhbnl3YXkuXG4tXHRcdCAqXG4tXHRcdCAqIFhYWDogVGhlIG9sZCBBTVBEVSBjb2RlIGRpZCB0aGlzLCBidXQgaXMgaXQgcmVhbGx5XG4tXHRcdCAqIG5lY2Vzc2FyeT9cbiYjNDM7XHRcdCAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW5cbiYjNDM7XHRcdCAqIEEtTVBEVSBiZWxvbmcgdG8gdGhlIHNhbWUgVElEIChUcmFmZmljIElkZW50aWZpZXIpLlxuJiM0MztcdFx0ICogU2luY2UgcHJpb3JpdHkgbWFwcyB0byBUSUQsIGEgZGlmZmVyZW50IHByaW9yaXR5IG1lYW5zXG4mIzQzO1x0XHQgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLFxuJiM0MztcdFx0ICogc28gd2UgcmV0dXJuIC1FTk9TUEMgaGVyZS5cbiBcdFx0ICovXG4gXHRcdGZpcnN0ID0gc2tiX3BlZWsoXHUwMDI2c2Vzc2lvbi1cdTAwM2Vza2JfbGlzdCk7XG4gXHRcdGlmIChwLVx1MDAzZXByaW9yaXR5ICE9IGZpcnN0LVx1MDAzZXByaW9yaXR5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19VU0ImIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfUENJRSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9kZWxfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVjIgUE1LU0EgY2FjaGUgb3BlcmF0aW9ucyBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNmZzgwMjExIG5ldGxpbmsgY29tbWFuZHMgd2hlbiBhIEJyb2FkY29tIFdpLUZpIGRldmljZSBpcyBwcmVzZW50LiBTeXprYWxsZXIgY2FuIGVtdWxhdGUgc3VjaCBhIGRldmljZSB2aWEgaXRzIFVTQiBmdXp6ZXIsIG1ha2luZyB0aGlzIG5ldyBsb2dpYyByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyByYWRpb3RhcCBoZWFkZXIgaW5zZXJ0aW9uIGluIG1vbml0b3IgbW9kZSBhbmQgUENJZSBtYWlsYm94IHBvbGxpbmcsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZmUxNjdlNDU2ZGExY2FmOTI4MjY5OTI5NTMzMTk1YTNmY2EzMTJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwNjoxNzo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKaW5kZXggMGI1NWQ0NDU4OTVmMi4uN2Q3ZTVlY2VjZDIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKQEAgLTM5ODksMTIgJiM0MzszOTg5LDEwIEBAIHN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdG9wKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBicmNtZl9kZWxheSh1MzIgbXMpCiB7Ci0JaWYgKG1zICZsdDsgMTAwMCAvIEhaKSB7Ci0JCWNvbmRfcmVzY2hlZCgpOwotCQltZGVsYXkobXMpOwotCX0gZWxzZSB7CiYjNDM7CWlmIChtcyAmbHQ7PSAyMCkKJiM0MzsJCXVzbGVlcF9yYW5nZShtcyAqIDEwMDAsIG1zICogMTAwMCAmIzQzOyAxMDAwKTsKJiM0MzsJZWxzZQogCQltc2xlZXAobXMpOwotCX0KIH0KIAogc3RhdGljIHMzMiBicmNtZl9jb25maWdfd293bF9wYXR0ZXJuKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1OCBjbWRbNF0sCkBAIC00MzY0LDYgJiM0Mzs0MzYyLDEwNCBAQCBicmNtZl9wbWtzYV92M19vcChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IGNmZzgwMjExX3Bta3NhICpwbWtzYSwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnJjbWZfcG1rc2FfdjJfb3AgLSB1cGRhdGUgZmlybXdhcmUgUE1LU0EgY2FjaGUgdXNpbmcgdGhlIFYyIGxpc3QgaW50ZXJmYWNlLgomIzQzOyAqCiYjNDM7ICogVjIgZmlybXdhcmUgKHJldmlzaW9uIDEyKSB1c2VzIGEgdmVyc2lvbmVkIGZsYXQgbGlzdCBzdHJ1Y3R1cmUKJiM0MzsgKiAoYnJjbWZfcG1rX2xpc3RfdjJfbGUpIHJhdGhlciB0aGFuIHRoZSBwZXItZW50cnkgb3BlcmF0aW9uIG1vZGVsIG9mIFYzLgomIzQzOyAqIEVhY2ggZW50cnkgY2FycmllcyBGSUxTLXNwZWNpZmljIGZpZWxkcyAocmF3IFBNSyBtYXRlcmlhbCwgU1NJRCwgYW5kCiYjNDM7ICogZmlsc19jYWNoZV9pZCkgaW4gYWRkaXRpb24gdG8gdGhlIGJhc2ljIEJTU0lEICYjNDM7IFBNS0lEIHBhaXIsIGVuYWJsaW5nCiYjNDM7ICogRklMUyBmYXN0LXJvYW1pbmcgb24gZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFYzLgomIzQzOyAqCiYjNDM7ICogQGNmZzogICBkcml2ZXIgY29uZmlnIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBzaGFkb3cgVjIgUE1LU0EgbGlzdAomIzQzOyAqIEBpZnA6ICAgaW50ZXJmYWNlIHBvaW50ZXIKJiM0MzsgKiBAcG1rc2E6IHRoZSBQTUtTQSB0byBhZGQvcmVtb3ZlLCBvciBOVUxMIGZvciBhIGZsdXNoCiYjNDM7ICogQGFsaXZlOiB0cnVlID0gYWRkIChzZXQgdGltZV9sZWZ0IHRvIG5vLWV4cGlyeSksIGZhbHNlID0gcmVtb3ZlL2ZsdXNoCiYjNDM7ICovCiYjNDM7c3RhdGljIHMzMgomIzQzO2JyY21mX3Bta3NhX3YyX29wKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwLAomIzQzOwkJICBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLCBib29sIGFsaXZlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGNmZy0mZ3Q7cHViOwomIzQzOwlzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUgKmxpc3QgPSAmYW1wO2NmZy0mZ3Q7cG1rX2xpc3RfdjI7CiYjNDM7CXN0cnVjdCBicmNtZl9wbWtzYV92MiAqcG1rID0gbGlzdC0mZ3Q7cG1rOwomIzQzOwl1MzIgbnBtayA9IGxlMTZfdG9fY3B1KGxpc3QtJmd0O2xlbmd0aCk7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwkvKiBucG1rIGhlcmUgc3RvcmVzIHRoZSBjb3VudCBvZiB2YWxpZCBlbnRyaWVzLCByZXB1cnBvc2luZyB0aGUKJiM0MzsJICogbGVuZ3RoIGZpZWxkIG9mIHRoZSBzaGFkb3cgbGlzdCBhcyBhIGNvdW50ZXIuICBXZSBjb252ZXJ0IHRvCiYjNDM7CSAqIHRoZSB3aXJlIGZvcm1hdCAoYnl0ZSBsZW5ndGgpIHdoZW4gc2VuZGluZyB0byBmaXJtd2FyZS4KJiM0MzsJICovCiYjNDM7CWlmICghcG1rc2EpIHsKJiM0MzsJCS8qIEZsdXNoOiB6ZXJvIHRoZSBzaGFkb3cgbGlzdCBhbmQgcHVzaCBhbiBlbXB0eSBWMiBsaXN0LiAqLwomIzQzOwkJbWVtc2V0KGxpc3QsIDAsIHNpemVvZigqbGlzdCkpOwomIzQzOwkJZ290byBzZW5kOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChhbGl2ZSkgewomIzQzOwkJLyogU2V0OiBzZWFyY2ggZm9yIGV4aXN0aW5nIEJTU0lEIG1hdGNoIGZpcnN0LiAqLwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wbWs7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlmICghbWVtY21wKHBta3NhLSZndDtic3NpZCwgcG1rW2ldLmJzc2lkLCBFVEhfQUxFTikpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKGkgJmd0Oz0gQlJDTUZfTUFYUE1LSUQpIHsKJiM0MzsJCQlicGh5X2VycihkcnZyLCAmIzM0O1YyIFBNS1NBIGNhY2hlIGZ1bGwgKCVkIGVudHJpZXMpXG4mIzM0OywKJiM0MzsJCQkJIG5wbWspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVtc2V0KCZhbXA7cG1rW2ldLCAwLCBzaXplb2YocG1rW2ldKSk7CiYjNDM7CQlwbWtbaV0ubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBicmNtZl9wbWtzYV92MikpOwomIzQzOwkJaWYgKHBta3NhLSZndDtic3NpZCkKJiM0MzsJCQltZW1jcHkocG1rW2ldLmJzc2lkLCBwbWtzYS0mZ3Q7YnNzaWQsIEVUSF9BTEVOKTsKJiM0MzsJCWlmIChwbWtzYS0mZ3Q7cG1raWQpCiYjNDM7CQkJbWVtY3B5KHBta1tpXS5wbWtpZCwgcG1rc2EtJmd0O3Bta2lkLCBXTEFOX1BNS0lEX0xFTik7CiYjNDM7CQlpZiAocG1rc2EtJmd0O3BtayAmYW1wOyZhbXA7IHBta3NhLSZndDtwbWtfbGVuICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwbWtzYS0mZ3Q7cG1rX2xlbiAmbHQ7PSBXTEFOX1BNS19MRU5fU1VJVEVfQl8xOTIpIHsKJiM0MzsJCQltZW1jcHkocG1rW2ldLnBtaywgcG1rc2EtJmd0O3BtaywgcG1rc2EtJmd0O3Bta19sZW4pOwomIzQzOwkJCXBta1tpXS5wbWtfbGVuID0gY3B1X3RvX2xlMTYocG1rc2EtJmd0O3Bta19sZW4pOwomIzQzOwkJfQomIzQzOwkJaWYgKHBta3NhLSZndDtzc2lkICZhbXA7JmFtcDsgcG1rc2EtJmd0O3NzaWRfbGVuKSB7CiYjNDM7CQkJbWVtY3B5KHBta1tpXS5zc2lkLlNTSUQsIHBta3NhLSZndDtzc2lkLCBwbWtzYS0mZ3Q7c3NpZF9sZW4pOwomIzQzOwkJCXBta1tpXS5zc2lkLlNTSURfbGVuID0gcG1rc2EtJmd0O3NzaWRfbGVuOwomIzQzOwkJfQomIzQzOwkJaWYgKHBta3NhLSZndDtmaWxzX2NhY2hlX2lkKQomIzQzOwkJCXBta1tpXS5maWxzX2NhY2hlX2lkID0gKnBta3NhLSZndDtmaWxzX2NhY2hlX2lkOwomIzQzOwomIzQzOwkJaWYgKGkgPT0gbnBtaykKJiM0MzsJCQlucG1rJiM0MzsmIzQzOzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIERlbGV0ZTogZmluZCBieSBCU1NJRCBhbmQgY29tcGFjdCB0aGUgbGlzdC4gKi8KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucG1rOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlpZiAoIW1lbWNtcChwbWtzYS0mZ3Q7YnNzaWQsIHBta1tpXS5ic3NpZCwgRVRIX0FMRU4pKQomIzQzOwkJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChpICZndDs9IG5wbWspIHsKJiM0MzsJCQlicGh5X2VycihkcnZyLCAmIzM0O1YyIFBNS1NBIGVudHJ5IG5vdCBmb3VuZFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yICg7IGkgJmx0OyBucG1rIC0gMTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJbWVtY3B5KCZhbXA7cG1rW2ldLCAmYW1wO3Bta1tpICYjNDM7IDFdLCBzaXplb2YocG1rW2ldKSk7CiYjNDM7CQltZW1zZXQoJmFtcDtwbWtbbnBtayAtIDFdLCAwLCBzaXplb2YocG1rW25wbWsgLSAxXSkpOwomIzQzOwkJbnBtay0tOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFVwZGF0ZSBzaGFkb3cgZW50cnkgY291bnQgKHN0b3JlZCBpbiBsZW5ndGggZmllbGQpLiAqLwomIzQzOwlsaXN0LSZndDtsZW5ndGggPSBjcHVfdG9fbGUxNihucG1rKTsKJiM0MzsKJiM0MztzZW5kOgomIzQzOwkvKiBCdWlsZCB0aGUgd2lyZS1mb3JtYXQgaGVhZGVyIGFuZCBzZW5kIHRoZSBmdWxsIGxpc3QgdG8gZmlybXdhcmUuCiYjNDM7CSAqIHZlcnNpb24gYW5kIGxlbmd0aCBvbiB0aGUgd2lyZSByZWZsZWN0IHRoZSBhY3R1YWwgYnl0ZSBmb290cHJpbnQuCiYjNDM7CSAqLwomIzQzOwlsaXN0LSZndDt2ZXJzaW9uID0gY3B1X3RvX2xlMTYoQlJDTUZfUE1LU0FfVkVSXzIpOwomIzQzOwlsaXN0LSZndDtsZW5ndGggID0gY3B1X3RvX2xlMTYob2Zmc2V0b2Yoc3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlLCBwbWspICYjNDM7CiYjNDM7CQkJCSAgIG5wbWsgKiBzaXplb2Yoc3RydWN0IGJyY21mX3Bta3NhX3YyKSk7CiYjNDM7CiYjNDM7CXJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCAmIzM0O3Bta2lkX2luZm8mIzM0OywgbGlzdCwgc2l6ZW9mKCpsaXN0KSk7CiYjNDM7fQomIzQzOwomIzQzOwogc3RhdGljIF9fdXNlZCBzMzIKIGJyY21mX3VwZGF0ZV9wbWtsaXN0KHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwKQogewpAQCAtNDQwMiw4ICYjNDM7NDQ5OCw4IEBAIGJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAogCWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YzKSkKIAkJcmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgcG1rc2EsIHRydWUpOwotCi0JLyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovCiYjNDM7CWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSkKJiM0MzsJCXJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIHRydWUpOwogCiAJbnBtayA9IGxlMzJfdG9fY3B1KGNmZy0mZ3Q7cG1rX2xpc3QubnBtayk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5wbWs7IGkmIzQzOyYjNDM7KQpAQCAtNDQ0Niw4ICYjNDM7NDU0Miw4IEBAIGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAogCWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YzKSkKIAkJcmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgcG1rc2EsIGZhbHNlKTsKLQotCS8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqLwomIzQzOwlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpCiYjNDM7CQlyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCBmYWxzZSk7CiAKIAlucG1rID0gbGUzMl90b19jcHUoY2ZnLSZndDtwbWtfbGlzdC5ucG1rKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnBtazsgaSYjNDM7JiM0MzspCkBAIC00NDg3LDggJiM0Mzs0NTgzLDggQEAgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAKIAlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpCiAJCXJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIE5VTEwsIGZhbHNlKTsKLQotCS8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqLwomIzQzOwlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpCiYjNDM7CQlyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTsKIAogCW1lbXNldCgmYW1wO2NmZy0mZ3Q7cG1rX2xpc3QsIDAsIHNpemVvZihjZmctJmd0O3Bta19saXN0KSk7CiAJZXJyID0gYnJjbWZfdXBkYXRlX3Bta2xpc3QoY2ZnLCBpZnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaAppbmRleCA2Y2ViMzAxNDI5MDU0Li41NzE2N2ZkZTViYTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaApAQCAtMzQ0LDcgJiM0MzszNDQsOCBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfd293bCB7CiAgKiBAYnNzX2xpc3Q6IGJzc19saXN0IGhvbGRpbmcgc2Nhbm5lZCBhcCBpbmZvcm1hdGlvbi4KICAqIEBic3NfaW5mbzogYnNzIGluZm9ybWF0aW9uIGZvciBjZmc4MDIxMSBsYXllci4KICAqIEBjb25uX2luZm86IGFzc29jaWF0aW9uIGluZm8uCi0gKiBAcG1rX2xpc3Q6IHdwYTIgcG1rIGxpc3QuCiYjNDM7ICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0IChWMSBmaXJtd2FyZSkuCiYjNDM7ICogQHBta19saXN0X3YyOiB3cGEyIHBtayBsaXN0IGZvciBWMiBmaXJtd2FyZSAoRklMUy1jYXBhYmxlLCBmaXJtd2FyZSByZXYgMTIpLgogICogQHNjYW5fc3RhdHVzOiBzY2FuIGFjdGl2aXR5IG9uIHRoZSBkb25nbGUuCiAgKiBAcHViOiBjb21tb24gZHJpdmVyIGluZm9ybWF0aW9uLgogICogQGNoYW5uZWw6IGN1cnJlbnQgY2hhbm5lbC4KQEAgLTM3Niw2ICYjNDM7Mzc3LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gewogCXN0cnVjdCB3bF9jZmc4MDIxMV9ic3NfaW5mbyAqYnNzX2luZm87CiAJc3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyBjb25uX2luZm87CiAJc3RydWN0IGJyY21mX3Bta19saXN0X2xlIHBta19saXN0OwomIzQzOwlzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUgcG1rX2xpc3RfdjI7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3N0YXR1czsKIAlzdHJ1Y3QgYnJjbWZfcHViICpwdWI7CiAJdTMyIGNoYW5uZWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYwppbmRleCBlYzE3MDY0NzgwMGRhLi42NzNmMDAwMDM4OWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMKQEAgLTQzMSw0NSAmIzQzOzQzMSw1MSBAQCB2b2lkIGJyY21mX25ldGlmX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCW5ldGlmX3J4KHNrYik7CiB9CiAKJiM0MztzdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIGhkcjsKJiM0MzsJczggZGJtX2FudHNpZ25hbDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwogdm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfUkFESU9UQVApKSB7Ci0JCS8qIERvIG5vdGhpbmcgKi8KJiM0MzsJCS8qIEZpcm13YXJlIGFscmVhZHkgcHJvdmlkZWQgYSBmdWxsIHJhZGlvdGFwIGhlYWRlcjsgZG8gbm90aGluZyAqLwogCX0gZWxzZSBpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9NT05JVE9SX0ZNVF9IV19SWF9IRFIpKSB7CiAJCXN0cnVjdCB3bGNfZDExcnhoZHIgKndsY19yeGhkciA9IChzdHJ1Y3Qgd2xjX2QxMXJ4aGRyICopc2tiLSZndDtkYXRhOwotCQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7CiYjNDM7CQlzdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyAqcnRhcDsKIAkJdW5zaWduZWQgaW50IG9mZnNldDsKIAkJdTE2IFJ4U3RhdHVzMTsKJiM0MzsJCXM4IHJzc2k7CiAKIAkJUnhTdGF0dXMxID0gbGUxNl90b19jcHUod2xjX3J4aGRyLSZndDtyeGhkci5SeFN0YXR1czEpOwomIzQzOwkJcnNzaSA9IHdsY19yeGhkci0mZ3Q7cnNzaTsKIAogCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHdsY19kMTFyeGhkcik7Ci0JCS8qIE1BQyBpbnNlcnRzIDIgcGFkIGJ5dGVzIGZvciBhNCBoZWFkZXJzIG9yIFFvUyBvciBBLU1TRFUKLQkJICogc3ViZnJhbWVzCi0JCSAqLwomIzQzOwkJLyogTUFDIGluc2VydHMgMiBwYWQgYnl0ZXMgZm9yIGE0IGhlYWRlcnMgb3IgUW9TIG9yIEEtTVNEVSBzdWJmcmFtZXMgKi8KIAkJaWYgKFJ4U3RhdHVzMSAmYW1wOyBSWFNfUEJQUkVTKQogCQkJb2Zmc2V0ICYjNDM7PSAyOwogCQlvZmZzZXQgJiM0Mzs9IEQxMV9QSFlfSERSX0xFTjsKIAogCQlza2JfcHVsbChza2IsIG9mZnNldCk7CiAKLQkJLyogVE9ETzogdXNlIFJYIGhlYWRlciB0byBmaWxsIHNvbWUgcmFkaW90YXAgZGF0YSAqLwotCQlyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpOwotCQltZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTsKLQkJcmFkaW90YXAtJmd0O2l0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTsKJiM0MzsJCS8qIEluc2VydCBvdXIgcmFkaW90YXAgaGVhZGVyIHdpdGggUlNTSSBkYXRhICovCiYjNDM7CQlydGFwID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnJ0YXApKTsKJiM0MzsJCW1lbXNldChydGFwLCAwLCBzaXplb2YoKnJ0YXApKTsKJiM0MzsJCXJ0YXAtJmd0O2hkci5pdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJ0YXApKTsKJiM0MzsJCXJ0YXAtJmd0O2hkci5pdF9wcmVzZW50ID0gY3B1X3RvX2xlMzIoMSAmbHQ7Jmx0OyBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCk7CiYjNDM7CQlydGFwLSZndDtkYm1fYW50c2lnbmFsID0gcnNzaTsKIAotCQkvKiBUT0RPOiA0IGJ5dGVzIHdpdGggcmVjZWl2ZSBzdGF0dXM/ICovCi0JCXNrYi0mZ3Q7bGVuIC09IDQ7CiYjNDM7CQkvKiBTdHJpcCB0aGUgNC1ieXRlIHJlY2VpdmUgc3RhdHVzIC8gRkNTIHRhaWwgKi8KJiM0MzsJCXNrYl90cmltKHNrYiwgc2tiLSZndDtsZW4gLSA0KTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7CiAKLQkJLyogVE9ETzogdXNlIFJYIHN0YXR1cyB0byBmaWxsIHNvbWUgcmFkaW90YXAgZGF0YSAqLwogCQlyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpOwogCQltZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTsKIAkJcmFkaW90YXAtJmd0O2l0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTsKIAotCQkvKiBUT0RPOiA0IGJ5dGVzIHdpdGggcmVjZWl2ZSBzdGF0dXM/ICovCi0JCXNrYi0mZ3Q7bGVuIC09IDQ7CiYjNDM7CQkvKiBTdHJpcCB0aGUgNC1ieXRlIHJlY2VpdmUgc3RhdHVzIC8gRkNTIHRhaWwgKi8KJiM0MzsJCXNrYl90cmltKHNrYiwgc2tiLSZndDtsZW4gLSA0KTsKIAl9CiAKIAlza2ItJmd0O2RldiA9IGlmcC0mZ3Q7bmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMKaW5kZXggMzVjYmNlYTBhYmM5YS4uYjljNTE4OTM5ZjUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMKQEAgLTE4MiwxMCAmIzQzOzE4Miw4IEBAIHN0YXRpYyB2b2lkIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCwKIAlzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWY7CiAJc3RydWN0IGJyY21mX3B1YiAqZHJ2cjsKIAlzdHJ1Y3QgYnJjbWZfaWYgKmlmcDsKLQlib29sIGN1cnJlbnRseV9ibG9ja2VkOwotCWludCBpOwotCXU4IGlmaWR4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXU4IGlmaWR4OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtmbG93LSZndDtibG9ja19sb2NrLCBmbGFncyk7CiAKQEAgLTE5NCwyMyAmIzQzOzE5Miw1NCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtmbG93LSZndDtibG9ja19sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9Ci0JaWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTsKIAotCWN1cnJlbnRseV9ibG9ja2VkID0gZmFsc2U7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGZsb3ctJmd0O25yb2ZyaW5nczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKChmbG93LSZndDtyaW5nc1tpXSkgJmFtcDsmYW1wOyAoaSAhPSBmbG93aWQpKSB7Ci0JCQlyaW5nID0gZmxvdy0mZ3Q7cmluZ3NbaV07Ci0JCQlpZiAoKHJpbmctJmd0O3N0YXR1cyA9PSBSSU5HX09QRU4pICZhbXA7JmFtcDsKLQkJCSAgICAoYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGkpID09IGlmaWR4KSkgewotCQkJCWlmIChyaW5nLSZndDtibG9ja2VkKSB7Ci0JCQkJCWN1cnJlbnRseV9ibG9ja2VkID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQomIzQzOwlpZmlkeCA9IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChmbG93LCBmbG93aWQpOwomIzQzOwlyaW5nLSZndDtibG9ja2VkID0gYmxvY2tlZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFpbnRhaW4gdGhlIHBlci1pbnRlcmZhY2UgYmxvY2tlZC1yaW5nIGNvdW50ZXIuCiYjNDM7CSAqCiYjNDM7CSAqIFdlIHVzZSByaW5nLSZndDtjb3VudGVkX2luX2Jsb2NrZWQgcmF0aGVyIHRoYW4gY2hlY2tpbmcKJiM0MzsJICogcmluZy0mZ3Q7c3RhdHVzIGhlcmUuICBBIHJpbmcgdGhhdCBiZWNhbWUgYmxvY2tlZCB3aGlsZQomIzQzOwkgKiBSSU5HX09QRU4gaGFzIGFscmVhZHkgYmVlbiBjb3VudGVkIChjb3VudGVkX2luX2Jsb2NrZWQ9dHJ1ZSkuCiYjNDM7CSAqIEJ5IHRoZSB0aW1lIHdlIHVuYmxvY2sgaXQgZHVyaW5nIHRlYXJkb3duIGl0cyBzdGF0dXMgbWF5IGhhdmUKJiM0MzsJICogYWR2YW5jZWQgdG8gUklOR19DTE9TSU5HLCBzbyB0ZXN0aW5nIFJJTkdfT1BFTiB3b3VsZCB3cm9uZ2x5CiYjNDM7CSAqIHNraXAgdGhlIGF0b21pY19kZWMgYW5kIHBlcm1hbmVudGx5IGxlYWsgdGhlIGNvdW50ZXIsIGxlYXZpbmcKJiM0MzsJICogdGhlIG5ldGlmIHF1ZXVlIHN0b3BwZWQgZm9yZXZlci4KJiM0MzsJICoKJiM0MzsJICogUnVsZToKJiM0MzsJICogICBibG9jayB0cmFuc2l0aW9uICAodW5ibG9ja2Vk4oaSYmxvY2tlZCk6IGNvdW50IG9ubHkgaWYgUklOR19PUEVOLAomIzQzOwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBjb3VudGVkX2luX2Jsb2NrZWQuCiYjNDM7CSAqICAgdW5ibG9jayB0cmFuc2l0aW9uIChibG9ja2Vk4oaSdW5ibG9ja2VkKTogZGVjcmVtZW50IG9ubHkgaWYgd2UKJiM0MzsJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGNvdW50ZWQgaXQsCiYjNDM7CSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgY291bnRlZF9pbl9ibG9ja2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGJsb2NrZWQpIHsKJiM0MzsJCWlmIChyaW5nLSZndDtzdGF0dXMgPT0gUklOR19PUEVOKSB7CiYjNDM7CQkJYXRvbWljX2luYygmYW1wO2Zsb3ctJmd0O2lmX2Jsb2NrZWRfY250W2lmaWR4XSk7CiYjNDM7CQkJcmluZy0mZ3Q7Y291bnRlZF9pbl9ibG9ja2VkID0gdHJ1ZTsKIAkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHJpbmctJmd0O2NvdW50ZWRfaW5fYmxvY2tlZCkgewomIzQzOwkJCWF0b21pY19kZWMoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpZmlkeF0pOwomIzQzOwkJCXJpbmctJmd0O2NvdW50ZWRfaW5fYmxvY2tlZCA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgcHJvcGFnYXRlIGEgbmV0aWYgcXVldWUtc3RvcC93YWtlIHdoZW4gdGhlIGludGVyZmFjZQomIzQzOwkgKiB0cmFuc2l0aW9ucyBiZXR3ZWVuIGZ1bGx5LWNsZWFyIGFuZCBhdC1sZWFzdC1vbmUtYmxvY2tlZC4KJiM0MzsJICogUmVhZGluZyB0aGUgYXRvbWljIGlzIHNhZmUgaGVyZTogd2UgaG9sZCBibG9ja19sb2NrLCBzbyBubwomIzQzOwkgKiBjb25jdXJyZW50IGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FsbCBjYW4gcmFjZSB0aGUgdXBkYXRlCiYjNDM7CSAqIHdlIGp1c3QgbWFkZSBhYm92ZS4KJiM0MzsJICovCiYjNDM7CWlmIChibG9ja2VkICZhbXA7JmFtcDsgYXRvbWljX3JlYWQoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDEpIHsKJiM0MzsJCS8qIEFub3RoZXIgcmluZyB3YXMgYWxyZWFkeSBibG9ja2VkOyBubyBuZXcgcXVldWUtc3RvcCBuZWVkZWQuICovCiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Zmxvdy0mZ3Q7YmxvY2tfbG9jaywgZmxhZ3MpOwomIzQzOwkJcmV0dXJuOwogCX0KLQlmbG93LSZndDtyaW5nc1tmbG93aWRdLSZndDtibG9ja2VkID0gYmxvY2tlZDsKLQlpZiAoY3VycmVudGx5X2Jsb2NrZWQpIHsKJiM0MzsJaWYgKCFibG9ja2VkICZhbXA7JmFtcDsgYXRvbWljX3JlYWQoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDApIHsKJiM0MzsJCS8qIE1vcmUgcmluZ3Mgc3RpbGwgYmxvY2tlZDsgZG8gbm90IHdha2UgdGhlIHF1ZXVlIHlldC4gKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Zsb3ctJmd0O2Jsb2NrX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM2Nyw2ICYjNDM7Mzk2LDggQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nICpicmNtZl9mbG93cmluZ19hdHRhY2goc3RydWN0IGRldmljZSAqZGV2LCB1MTYgbnJvZnJpbmdzKQogCQlzcGluX2xvY2tfaW5pdCgmYW1wO2Zsb3ctJmd0O2Jsb2NrX2xvY2spOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShmbG93LSZndDthZGRyX21vZGUpOyBpJiM0MzsmIzQzOykKIAkJCWZsb3ctJmd0O2FkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShmbG93LSZndDtpZl9ibG9ja2VkX2NudCk7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWF0b21pY19zZXQoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpXSwgMCk7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGZsb3ctJmd0O2hhc2gpOyBpJiM0MzsmIzQzOykKIAkJCWZsb3ctJmd0O2hhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgKaW5kZXggZjNkNTExZjlhM2M5YS4uYWZkZWE4YjNmOGFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgKQEAgLTUsNiAmIzQzOzUsOCBAQAogI2lmbmRlZiBCUkNNRk1BQ19GTE9XUklOR19ICiAjZGVmaW5lIEJSQ01GTUFDX0ZMT1dSSU5HX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsKJiM0MzsKIAogI2RlZmluZSBCUkNNRl9GTE9XUklOR19IQVNIU0laRQkJNTEyCQkvKiBoYXMgdG8gYmUgMl54ICovCiAjZGVmaW5lIEJSQ01GX0ZMT1dSSU5HX0lOVkFMSURfSUQJMHhGRkZGRkZGRgpAQCAtMjYsNiAmIzQzOzI4LDE2IEBAIGVudW0gcmluZ19zdGF0dXMgewogc3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgewogCXUxNiBoYXNoX2lkOwogCWJvb2wgYmxvY2tlZDsKJiM0MzsJLyoKJiM0MzsJICogVHJ1ZSB3aGVuIHRoaXMgcmluZyBoYXMgYmVlbiBjb3VudGVkIGluIHRoZSBwZXItaW50ZXJmYWNlCiYjNDM7CSAqIGlmX2Jsb2NrZWRfY250W10uICBTZXQgdG8gdHJ1ZSB3aGVuZXZlciB0aGUgcmluZyB0cmFuc2l0aW9ucwomIzQzOwkgKiB1bmJsb2NrZWTihpJibG9ja2VkIHdoaWxlIFJJTkdfT1BFTjsgY2xlYXJlZCBvbiB0aGUgbWF0Y2hpbmcKJiM0MzsJICogYmxvY2tlZOKGknVuYmxvY2tlZCB0cmFuc2l0aW9uLiAgTmVlZGVkIHNvIHRoYXQgYSByaW5nIHRoYXQKJiM0MzsJICogYmVjb21lcyBibG9ja2VkIHdoaWxlIFJJTkdfT1BFTiBhbmQgaXMgbGF0ZXIgbW92ZWQgdG8KJiM0MzsJICogUklOR19DTE9TSU5HIHN0aWxsIGNvcnJlY3RseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyIGF0CiYjNDM7CSAqIHRlYXJkb3duLCBldmVuIHRob3VnaCBpdHMgc3RhdHVzIGlzIG5vIGxvbmdlciBSSU5HX09QRU4uCiYjNDM7CSAqLwomIzQzOwlib29sIGNvdW50ZWRfaW5fYmxvY2tlZDsKIAllbnVtIHJpbmdfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYmxpc3Q7CiB9OwpAQCAtNDAsNiAmIzQzOzUyLDEyIEBAIHN0cnVjdCBicmNtZl9mbG93cmluZyB7CiAJc3RydWN0IGJyY21mX2Zsb3dyaW5nX2hhc2ggaGFzaFtCUkNNRl9GTE9XUklOR19IQVNIU0laRV07CiAJc3BpbmxvY2tfdCBibG9ja19sb2NrOwogCWVudW0gcHJvdG9fYWRkcl9tb2RlIGFkZHJfbW9kZVtCUkNNRl9NQVhfSUZTXTsKJiM0MzsJLyogUGVyLWludGVyZmFjZSBjb3VudCBvZiBjdXJyZW50bHkgYmxvY2tlZCBvcGVuIHJpbmdzLgomIzQzOwkgKiBNYWludGFpbmVkIGF0b21pY2FsbHkgc28gYnJjbWZfZmxvd3JpbmdfYmxvY2soKSBjYW4gY2hlY2sKJiM0MzsJICogd2hldGhlciBhbnkgc2libGluZyByaW5nIGlzIGFscmVhZHkgYmxvY2tlZCBpbiBPKDEpIHdpdGhvdXQKJiM0MzsJICogaG9sZGluZyBibG9ja19sb2NrIGFjcm9zcyBhbiBPKG5yb2ZyaW5ncykgd2Fsay4KJiM0MzsJICovCiYjNDM7CWF0b21pY190IGlmX2Jsb2NrZWRfY250W0JSQ01GX01BWF9JRlNdOwogCXUxNiBucm9mcmluZ3M7CiAJYm9vbCB0ZGxzX2FjdGl2ZTsKIAlzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfdGRsc19lbnRyeSAqdGRsc19lbnRyeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMKaW5kZXggYTQzZjFhMzhiMGUzMC4uM2MxY2EzNTVlOGVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMKQEAgLTEwMzcsNyAmIzQzOzEwMzcsOSBAQCBpbnQgYnJjbWZfZndzX21hY2Rlc2NfaW5kaWNhdGUoc3RydWN0IGJyY21mX2Z3c19pbmZvICpmd3MsIHU4IHR5cGUsIHU4ICpkYXRhKQogCQl9IGVsc2UgewogCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O3VzZSBleGlzdGluZ1xuJiMzNDspOwogCQkJV0FSTl9PTihlbnRyeS0mZ3Q7bWFjX2hhbmRsZSAhPSBtYWNfaGFuZGxlKTsKLQkJCS8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovCiYjNDM7CQkJLyogRmlybXdhcmUgcmUtc2VudCBBREQgZm9yIHRoZSBzYW1lIE1BQyBoYW5kbGUuCiYjNDM7CQkJICogTm8gYWN0aW9uIHJlcXVpcmVkOyBpdCBpcyBhIHNhZmUgbm8tb3AuCiYjNDM7CQkJICovCiAJCX0KIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMKaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYwpAQCAtNDgsNyAmIzQzOzQ4LDE5IEBACiAjZGVmaW5lIE1TR0JVRl9UWVBFX0xQQktfRE1BWEZFUgkJMHgxMwogI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJfQ01QTFQJCTB4MTQKIAotI2RlZmluZSBOUl9UWF9QS1RJRFMJCQkJMjA0OAomIzQzOy8qCiYjNDM7ICogTlJfVFhfUEtUSURTOiBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzbHkgaW4tZmxpZ2h0IFRYIHBhY2tldCBJRHMuCiYjNDM7ICogRWFjaCBvdXRzdGFuZGluZyBUWCBmcmFtZSBjb25zdW1lcyBvbmUgSUQgdW50aWwgdGhlIGRvbmdsZSByZXR1cm5zCiYjNDM7ICogYSBUWC1zdGF0dXMgY29tcGxldGlvbi4gIFRoZSBvcmlnaW5hbCAyMDQ4LWVudHJ5IHBvb2wgZXhoYXVzdGVkIHVuZGVyCiYjNDM7ICog4omlNCBjb25jdXJyZW50IGlwZXJmMyBzdHJlYW1zIG9uIFdpLUZpIDUvNiAoODAyLjExYWMvYXgpIGRldmljZXMsCiYjNDM7ICogY2F1c2luZyAmIzM0O05vIFBLVElEIGF2YWlsYWJsZSYjMzQ7IGRyb3BzIGFuZCBUQ1AgcmV0cmFuc21pdHMuICA0MDk2IGdpdmVzCiYjNDM7ICogaGVhZHJvb20gZm9yIGhpZ2gtYWdncmVnYXRpb24gc2NlbmFyaW9zIHdoaWxlIHN0aWxsIGZpdHRpbmcgaW4gYQomIzQzOyAqIG1vZGVzdCBhbW91bnQgb2YgaG9zdCBtZW1vcnkgKH40OCBLQiBmb3IgdGhlIHBrdGlkIHRhYmxlIGVudHJpZXMpLgomIzQzOyAqCiYjNDM7ICogTlJfUlhfUEtUSURTOiBSWCBwb3N0IGJ1ZmZlcnMgcHJlLWFsbG9jYXRlZCB0byB0aGUgZG9uZ2xlLiAgMTAyNCBpcwomIzQzOyAqIHN1ZmZpY2llbnQgZm9yIGN1cnJlbnQgaGFyZHdhcmUgUlggcmluZyBkZXB0aHM7IGxlYXZlIHVuY2hhbmdlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE5SX1RYX1BLVElEUwkJCQk0MDk2CiAjZGVmaW5lIE5SX1JYX1BLVElEUwkJCQkxMDI0CiAKICNkZWZpbmUgQlJDTUZfSU9DVExfUkVRX1BLVElECQkJMHhGRkZFCkBAIC02NCw4ICYjNDM7NzYsMjkgQEAKICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19GUkFNRV9NQVNLCTB4MDcKICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19QUklPX1NISUZUCTUKIAotI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMQkJMzIKLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDIJCTk2CiYjNDM7LyoKJiM0MzsgKiBUWCBmbHVzaCAvIGRvb3JiZWxsLXJpbmcgdGhyZXNob2xkcy4KJiM0MzsgKgomIzQzOyAqIENOVDEgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIGluIHRoZSBjb21tb25yaW5nCiYjNDM7ICogYmVmb3JlIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgd3JpdGVfY29tcGxldGUoKSAoZG9vcmJlbGwgcmluZykgaXMKJiM0MzsgKiBpc3N1ZWQgbWlkLWJhdGNoLiAgQ05UMiBpcyB0aGUgaGFyZCBmbHVzaCBpbnRlcnZhbDogYWZ0ZXIgdGhpcyBtYW55CiYjNDM7ICogZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuIHNpbmNlIHRoZSBsYXN0IGZsdXNoLCB3ZSB1bmNvbmRpdGlvbmFsbHkKJiM0MzsgKiByaW5nIHRoZSBiZWxsIGFuZCByZXNldCB0aGUgY291bnRlci4KJiM0MzsgKgomIzQzOyAqIFJhaXNpbmcgYm90aCBmcm9tIHRoZSBvcmlnaW5hbCAzMi85NiB0byA2NC8xMjggZG91YmxlcyB0aGUgYXZlcmFnZQomIzQzOyAqIG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyBjb21taXR0ZWQgcGVyIE1NSU8gd3JpdGUsIGhhbHZpbmcgdGhlIFBDSWUKJiM0MzsgKiBkb29yYmVsbCByYXRlIG9uIHN1c3RhaW5lZCB0aHJvdWdocHV0IHdvcmtsb2Fkcy4gIFRoZSB0cmFkZW9mZiBpcyBhCiYjNDM7ICogbWFyZ2luYWxseSBoaWdoZXIgd29yc3QtY2FzZSBsYXRlbmN5IGZvciB0aGUgbGFzdCBmcmFtZXMgaW4gYSBidXJzdCwKJiM0MzsgKiB3aGljaCBpbiBwcmFjdGljZSBpcyBoaWRkZW4gYnkgdGhlIHRpbWUgdGhlIGRvbmdsZSBETUEgZW5naW5lIGRyYWlucwomIzQzOyAqIHRoZSBwcmV2aW91cyBiYXRjaC4KJiM0MzsgKgomIzQzOyAqIFRSSUNLTEVfVFhXT1JLRVJfVEhSUyBnb3Zlcm5zIGhvdyBvZnRlbiBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YSgpCiYjNDM7ICogZm9yY2VzIGEgd29ya3F1ZXVlIHNjaGVkdWxlIHdoZW4gdGhlIHF1ZXVlIGRlcHRoIGlzIG5vdCBhIG11bHRpcGxlIG9mCiYjNDM7ICogdGhpcyB2YWx1ZS4gIEtlZXBpbmcgaXQgYXQgaGFsZiBvZiBDTlQxICgzMikgcHJlc2VydmVzIHJlc3BvbnNpdmVuZXNzCiYjNDM7ICogZm9yIGxvdy1yYXRlIGZsb3dzIChlLmcuIFZvSVAsIElDTVApIHRoYXQgbmV2ZXIgYWNjdW11bGF0ZSA2NCBmcmFtZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMQkJNjQKJiM0MzsjZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQyCQkxMjgKIAogI2RlZmluZSBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSUwk5NgogI2RlZmluZSBCUkNNRl9NU0dCVUZfVFJJQ0tMRV9UWFdPUktFUl9USFJTCTMyCkBAIC03ODcsMTAgJiM0Mzs4MjAsMzAgQEAgc3RhdGljIGludCBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZiwgdTMyIGZsb3dpZCwKIHsKIAlzdHJ1Y3QgYnJjbWZfY29tbW9ucmluZyAqY29tbW9ucmluZzsKIAotCXNldF9iaXQoZmxvd2lkLCBtc2didWYtJmd0O2Zsb3dfbWFwKTsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIGJpdCB3YXMgYWxyZWFkeSBzZXQsIGEgdHhmbG93X3dvcmsgaXRlbSBpcyBhbHJlYWR5CiYjNDM7CSAqIHF1ZXVlZCBvciBydW5uaW5nIGZvciB0aGlzIHJpbmcuICBJbiB0aGF0IGNhc2UgdGhlIGV4aXN0aW5nCiYjNDM7CSAqIHdvcmtlciB3aWxsIGRyYWluIG91ciBmcmVzaGx5IGVucXVldWVkIGZyYW1lIHdoZW4gaXQgcnVucywKJiM0MzsJICogc28gd2Ugb25seSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgd29yayBpdGVtIHdoZW4gdGhlCiYjNDM7CSAqIGZvcmNlIGZsYWcgaXMgc2V0IG9yIHRoZSByaW5nIGlzIGJlbG93IHRoZSBkZWxheSB0aHJlc2hvbGQuCiYjNDM7CSAqCiYjNDM7CSAqIElmIHRoZSBiaXQgd2FzIE5PVCBzZXQgKHRlc3RfYW5kX3NldF9iaXQgcmV0dXJucyBmYWxzZSksIG5vCiYjNDM7CSAqIHdvcmtlciBpcyBwZW5kaW5nIGZvciB0aGlzIHJpbmcgYXQgYWxsLiAgV2UgTVVTVCBzY2hlZHVsZQomIzQzOwkgKiBvbmUgdW5jb25kaXRpb25hbGx5LCBvdGhlcndpc2UgdGhlIGZyYW1lIHdlIGp1c3QgZW5xdWV1ZWQKJiM0MzsJICogd2lsbCBzaXQgaW4gdGhlIGZsb3dyaW5nIHVuc2VudCB1bnRpbCBzb21lIHVucmVsYXRlZCBldmVudAomIzQzOwkgKiB0cmlnZ2VycyB0aGUgd29ya3F1ZXVlIOKAlCBjYXVzaW5nIHNpbGVudCBUWCBzdGFsbHMgdW5kZXIKJiM0MzsJICogaGlnaCBsb2FkIHdoZW4gb3V0c3RhbmRpbmdfdHggJmd0Oz0gREVMQVlfVFhXT1JLRVJfVEhSUy4KJiM0MzsJICovCiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChmbG93aWQsIG1zZ2J1Zi0mZ3Q7Zmxvd19tYXApKSB7CiYjNDM7CQkvKiBCaXQgd2FzIGNsZWFyOiBubyB3b3JrZXIgcGVuZGluZywgYWx3YXlzIHNjaGVkdWxlLiAqLwomIzQzOwkJcXVldWVfd29yayhtc2didWYtJmd0O3R4Zmxvd193cSwgJmFtcDttc2didWYtJmd0O3R4Zmxvd193b3JrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEJpdCB3YXMgYWxyZWFkeSBzZXQ6IHdvcmtlciBwZW5kaW5nLCBhcHBseSBjb2FsZXNjaW5nIGhldXJpc3RpYy4gKi8KIAljb21tb25yaW5nID0gbXNnYnVmLSZndDtmbG93cmluZ3NbZmxvd2lkXTsKLQlpZiAoKGZvcmNlKSB8fCAoYXRvbWljX3JlYWQoJmFtcDtjb21tb25yaW5nLSZndDtvdXRzdGFuZGluZ190eCkgJmx0OwotCQkJQlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlMpKQomIzQzOwlpZiAoZm9yY2UgfHwgKGF0b21pY19yZWFkKCZhbXA7Y29tbW9ucmluZy0mZ3Q7b3V0c3RhbmRpbmdfdHgpICZsdDsKJiM0MzsJCSAgICAgIEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSkKIAkJcXVldWVfd29yayhtc2didWYtJmd0O3R4Zmxvd193cSwgJmFtcDttc2didWYtJmd0O3R4Zmxvd193b3JrKTsKIAogCXJldHVybiAwOwpAQCAtMTYyMSwxMSAmIzQzOzE2NzQsMTEgQEAgaW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cikKIAlkbyB7CiAJCWJyY21mX21zZ2J1Zl9yeGJ1Zl9kYXRhX2ZpbGwobXNnYnVmKTsKIAkJaWYgKG1zZ2J1Zi0mZ3Q7bWF4X3J4YnVmcG9zdCAhPSBtc2didWYtJmd0O3J4YnVmcG9zdCkKLQkJCW1zbGVlcCgxMCk7CiYjNDM7CQkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCQllbHNlCiAJCQlicmVhazsKIAkJY291bnQmIzQzOyYjNDM7OwotCX0gd2hpbGUgKGNvdW50ICZsdDsgMTApOwomIzQzOwl9IHdoaWxlIChjb3VudCAmbHQ7IDEwMCk7CiAJYnJjbWZfbXNnYnVmX3J4YnVmX2V2ZW50X3Bvc3QobXNnYnVmKTsKIAlicmNtZl9tc2didWZfcnhidWZfaW9jdGxyZXNwX3Bvc3QobXNnYnVmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMKaW5kZXggMTM2NjJhYTRiNGVhNi4uOTMzOGE1ZmFhMjYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jCkBAIC0yNjgsNiAmIzQzOzI2OCwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2Zpcm13YXJlX21hcHBpbmcgYnJjbWZfcGNpZV9md25hbWVzW10gPSB7CiAKICNkZWZpbmUgQlJDTUZfUENJRV9NQkRBVEFfVElNRU9VVAkJbXNlY3NfdG9famlmZmllcygyMDAwKQogCiYjNDM7LyoKJiM0MzsgKiBIMkQgbWFpbGJveCBwb2xsIHRpbWluZyBwYXJhbWV0ZXJzLgomIzQzOyAqCiYjNDM7ICogVGhlIGRvbmdsZSB0eXBpY2FsbHkgY2xlYXJzIHRoZSBIMkQgbWFpbGJveCByZWdpc3RlciB3aXRoaW4gYSBmZXcKJiM0MzsgKiBodW5kcmVkIG1pY3Jvc2Vjb25kcyBhZnRlciB0aGUgZG9vcmJlbGwgaW50ZXJydXB0IGZpcmVzLiAgVGhlCiYjNDM7ICogb3JpZ2luYWwgY29kZSB1c2VkIG1zbGVlcCgxMCkgKiAxMDAgaXRlcmF0aW9ucywgbWVhbmluZyB0aGUKJiM0MzsgKiBtaW5pbXVtIG9ic2VydmFibGUgbGF0ZW5jeSB3YXMgMTBtcyBldmVuIHdoZW4gdGhlIGRvbmdsZSB3YXMgZmFzdC4KJiM0MzsgKgomIzQzOyAqIFdlIGluc3RlYWQgc3RhcnQgd2l0aCBhIHNob3J0IHNsZWVwIGFuZCBkb3VibGUgaXQgZWFjaCBpdGVyYXRpb24KJiM0MzsgKiAoZXhwb25lbnRpYWwgYmFja29mZikgdXAgdG8gQlJDTUZfUENJRV9NQl9QT0xMX01BWF9VUywgc3RheWluZwomIzQzOyAqIHdpdGhpbiB0aGUgc2FtZSAxLXNlY29uZCBhYnNvbHV0ZSB0aW1lb3V0LgomIzQzOyAqCiYjNDM7ICogTUlOX1VTIC8gSU5JVElBTF9NQVhfVVMgOiB1c2xlZXBfcmFuZ2UgYm91bmRzIGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uLgomIzQzOyAqIE1BWF9VUyAgICAgOiBjYXAgb24gdGhlIHBlci1pdGVyYXRpb24gc2xlZXAgKMK1cykuCiYjNDM7ICogVElNRU9VVF9VUyA6IHRvdGFsIGJ1ZGdldCBiZWZvcmUgZ2l2aW5nIHVwICgxIHNlY29uZCkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfTUlOX1VTCQk0MAomIzQzOyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX0lOSVRJQUxfTUFYX1VTCTUwCiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTCQk1MDAwCiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUwkJMTAwMDAwMAomIzQzOwogI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19TVEFUVVNfQ01ECQkweDQKICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfUE1fQ1NSCQkweDRDCiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX01TSV9DQVAJCTB4NTgKQEAgLTc2Niw3ICYjNDM7Nzg3LDggQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSkKIAlzdHJ1Y3QgYnJjbWZfY29yZSAqY29yZTsKIAl1MzIgYWRkcjsKIAl1MzIgY3VyX2h0b2RfbWJfZGF0YTsKLQl1MzIgaTsKJiM0MzsJdTMyIGVsYXBzZWRfdXMgPSAwOwomIzQzOwl1MzIgc2xlZXBfdXMgPSBCUkNNRl9QQ0lFX01CX1BPTExfSU5JVElBTF9NQVhfVVM7CiAKIAlzaGFyZWQgPSAmYW1wO2RldmluZm8tJmd0O3NoYXJlZDsKIAlhZGRyID0gc2hhcmVkLSZndDtodG9kX21iX2RhdGFfYWRkcjsKQEAgLTc3NiwxMiAmIzQzOzc5OCw0MCBAQCBicmNtZl9wY2llX3NlbmRfbWJfZGF0YShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgaHRvZF9tYl9kYXRhKQogCQlicmNtZl9kYmcoUENJRSwgJiMzNDtNQiB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5IHBlbmRpbmcgMHglMDR4XG4mIzM0OywKIAkJCSAgY3VyX2h0b2RfbWJfZGF0YSk7CiAKLQlpID0gMDsKJiM0MzsJLyoKJiM0MzsJICogV2FpdCBmb3IgdGhlIGRvbmdsZSB0byBjb25zdW1lIHRoZSBwcmV2aW91cyBIMkQgbWFpbGJveCBtZXNzYWdlLgomIzQzOwkgKgomIzQzOwkgKiBUaGVyZSBpcyBubyBpbnRlcnJ1cHQgdGhhdCBzaWduYWxzIHdoZW4gdGhlIGRvbmdsZSBjbGVhcnMgdGhpcwomIzQzOwkgKiByZWdpc3Rlciwgc28gcG9sbGluZyBpcyB1bmF2b2lkYWJsZS4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQKJiM0MzsJICogbXNsZWVwKDEwKSBwZXIgaXRlcmF0aW9uLCBpbmN1cnJpbmcgYXQgbGVhc3QgMTBtcyBvZiBsYXRlbmN5CiYjNDM7CSAqIGV2ZW4gd2hlbiB0aGUgZG9uZ2xlIHJlc3BvbmRlZCBpbiBtaWNyb3NlY29uZHMuCiYjNDM7CSAqCiYjNDM7CSAqIFdlIHVzZSB1c2xlZXBfcmFuZ2UoKSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYgaW5zdGVhZDoKJiM0MzsJICogICAtIEZpcnN0IGl0ZXJhdGlvbiBzbGVlcHMgfjUwwrVzIChmYXN0IHBhdGggZm9yIHJlc3BvbnNpdmUgZG9uZ2xlKS4KJiM0MzsJICogICAtIEVhY2ggc3Vic2VxdWVudCBpdGVyYXRpb24gZG91YmxlcyB0aGUgc2xlZXAsIGNhcHBlZCBhdCA1bXMsCiYjNDM7CSAqICAgICBzbyBsb25nIHdhaXRzIHN0aWxsIHlpZWxkIHRoZSBDUFUgd2l0aG91dCBidXN5LXNwaW5uaW5nLgomIzQzOwkgKiAgIC0gVG90YWwgdGltZW91dCBtYXRjaGVzIHRoZSBvcmlnaW5hbCAxLXNlY29uZCBsaW1pdC4KJiM0MzsJICogICAtIFdlIGJhaWwgZWFybHkgaWYgdGhlIGRldmljZSBoYXMgZ29uZSBkb3duIHNvIHRoYXQgYSBkZWFkCiYjNDM7CSAqICAgICBkb25nbGUgZG9lcyBub3QgaG9sZCB0aGUgY2FsbGVyIGZvciBhIGZ1bGwgc2Vjb25kLgomIzQzOwkgKi8KIAl3aGlsZSAoY3VyX2h0b2RfbWJfZGF0YSAhPSAwKSB7Ci0JCW1zbGVlcCgxMCk7Ci0JCWkmIzQzOyYjNDM7OwotCQlpZiAoaSAmZ3Q7IDEwMCkKJiM0MzsJCWlmIChkZXZpbmZvLSZndDtzdGF0ZSA9PSBCUkNNRk1BQ19QQ0lFX1NUQVRFX0RPV04pIHsKJiM0MzsJCQlicmNtZl9kYmcoUENJRSwgJiMzNDtEZXZpY2UgZG93biwgYWJvcnRpbmcgTUIgc2VuZFxuJiMzNDspOwogCQkJcmV0dXJuIC1FSU87CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoZWxhcHNlZF91cyAmZ3Q7PSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUykgewomIzQzOwkJCWJyY21mX2VycigmIzM0O1RpbWVvdXQgd2FpdGluZyBmb3IgSDJEIE1CIHNsb3QgYWZ0ZXIgJXUgdXNcbiYjMzQ7LAomIzQzOwkJCQkgIGVsYXBzZWRfdXMpOwomIzQzOwkJCXJldHVybiAtRUlPOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdXNsZWVwX3JhbmdlKEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVMsIHNsZWVwX3VzKTsKJiM0MzsJCWVsYXBzZWRfdXMgJiM0Mzs9IHNsZWVwX3VzOwomIzQzOwomIzQzOwkJLyogRXhwb25lbnRpYWwgYmFja29mZiwgY2FwcGVkIGF0IEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMgKi8KJiM0MzsJCXNsZWVwX3VzID0gbWluKHNsZWVwX3VzICogMiwgKHUzMilCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTKTsKJiM0MzsKIAkJY3VyX2h0b2RfbWJfZGF0YSA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTsKIAl9CiAKQEAgLTEwMDEsMTAgJiM0MzsxMDUxLDEwIEBAIHN0YXRpYyB2b2lkIGJyY21mX3BjaWVfcmVsZWFzZV9pcnEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbykKIAlmcmVlX2lycShwZGV2LSZndDtpcnEsIGRldmluZm8pOwogCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKIAotCW1zbGVlcCg1MCk7CiYjNDM7CXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAljb3VudCA9IDA7Ci0Jd2hpbGUgKChkZXZpbmZvLSZndDtpbl9pcnEpICZhbXA7JmFtcDsgKGNvdW50ICZsdDsgMjApKSB7Ci0JCW1zbGVlcCg1MCk7CiYjNDM7CXdoaWxlICgoZGV2aW5mby0mZ3Q7aW5faXJxKSAmYW1wOyZhbXA7IChjb3VudCAmbHQ7IDEwMDApKSB7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJCWNvdW50JiM0MzsmIzQzOzsKIAl9CiAJaWYgKGRldmluZm8tJmd0O2luX2lycSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jCmluZGV4IGI3MjVjNjRlNWI1YzYuLjRlNDE0NDAzZDc0NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYwpAQCAtMTY0NSwzNyAmIzQzOzE2NDUsNDMgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKQogCiAJCXJkX25ldy5zZXFfbnVtID0gcnhzZXE7CiAJCXJkX25ldy5sZW4gPSBkbGVuOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENsYWltIHRoZSBob3N0IG9uY2UgZm9yIHRoZSBlbnRpcmUgaGVhZGVyLXBhcnNpbmcgcGhhc2UuCiYjNDM7CQkgKgomIzQzOwkJICogYnJjbWZfc2Rpb19oZHBhcnNlKCkgb3BlcmF0ZXMgb24gZGF0YSBhbHJlYWR5IGluIGhvc3QKJiM0MzsJCSAqIG1lbW9yeSwgYnV0IG1heSBjYWxsIGJyY21mX3NkaW9fcnhmYWlsKCkgb24gZXJyb3IsIHdoaWNoCiYjNDM7CQkgKiB3cml0ZXMgU0RJTyBGdW5jMSByZWdpc3RlcnMgYW5kIHRoZXJlZm9yZSByZXF1aXJlcyB0aGUKJiM0MzsJCSAqIGhvc3QgdG8gYmUgY2xhaW1lZC4KJiM0MzsJCSAqCiYjNDM7CQkgKiBza2JfcHVsbCgpIGFuZCB0aGUgbnVtIGNvdW50ZXIgYXJlIHB1cmUgaG9zdC1tZW1vcnkKJiM0MzsJCSAqIG9wZXJhdGlvbnM7IGtlZXAgdGhlbSBvdXRzaWRlIHRoZSBsb2NrIHRvIG1pbmltaXNlIHRoZQomIzQzOwkJICogaG9sZCB0aW1lLiAgQm90aCBoZHBhcnNlIGNhbGxzIChzdXBlcmZyYW1lIGhlYWRlciBhbmQKJiM0MzsJCSAqIGVhY2ggc3ViZnJhbWUgaGVhZGVyKSBhcmUgZ3JvdXBlZCB1bmRlciBhIHNpbmdsZSBjbGFpbS8KJiM0MzsJCSAqIHJlbGVhc2UsIHJlcGxhY2luZyB0aGUgb3JpZ2luYWwgTiYjNDM7MSBzZXBhcmF0ZSBwYWlycy4KJiM0MzsJCSAqLwogCQlzZGlvX2NsYWltX2hvc3QoYnVzLSZndDtzZGlvZGV2LSZndDtmdW5jMSk7CiAJCWVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtJmd0O2RhdGEsICZhbXA7cmRfbmV3LAogCQkJCQkgICAgIEJSQ01GX1NESU9fRlRfU1VQRVIpOwotCQlzZGlvX3JlbGVhc2VfaG9zdChidXMtJmd0O3NkaW9kZXYtJmd0O2Z1bmMxKTsKLQkJYnVzLSZndDtjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSAmbHQ7Jmx0OyA0OwotCi0JCS8qIFJlbW92ZSBzdXBlcmZyYW1lIGhlYWRlciwgcmVtZW1iZXIgb2Zmc2V0ICovCi0JCXNrYl9wdWxsKHBmaXJzdCwgcmRfbmV3LmRhdF9vZmZzZXQpOwotCQludW0gPSAwOwotCi0JCS8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqLwotCQlza2JfcXVldWVfd2FsaygmYW1wO2J1cy0mZ3Q7Z2xvbSwgcG5leHQpIHsKLQkJCS8qIGxlYXZlIHdoZW4gaW52YWxpZCBzdWJmcmFtZSBpcyBmb3VuZCAqLwotCQkJaWYgKGVycmNvZGUpCi0JCQkJYnJlYWs7CiAKLQkJCXJkX25ldy5sZW4gPSBwbmV4dC0mZ3Q7bGVuOwotCQkJcmRfbmV3LnNlcV9udW0gPSByeHNlcSYjNDM7JiM0Mzs7Ci0JCQlzZGlvX2NsYWltX2hvc3QoYnVzLSZndDtzZGlvZGV2LSZndDtmdW5jMSk7Ci0JCQllcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtJmd0O2RhdGEsICZhbXA7cmRfbmV3LAotCQkJCQkJICAgICBCUkNNRl9TRElPX0ZUX1NVQik7Ci0JCQlzZGlvX3JlbGVhc2VfaG9zdChidXMtJmd0O3NkaW9kZXYtJmd0O2Z1bmMxKTsKLQkJCWJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksCi0JCQkJCSAgIHBuZXh0LSZndDtkYXRhLCAzMiwgJiMzNDtzdWJmcmFtZTpcbiYjMzQ7KTsKLQotCQkJbnVtJiM0MzsmIzQzOzsKJiM0MzsJCS8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyB3aGlsZSBob3N0IGlzIGNsYWltZWQgKi8KJiM0MzsJCWlmICghZXJyY29kZSkgewomIzQzOwkJCXNrYl9xdWV1ZV93YWxrKCZhbXA7YnVzLSZndDtnbG9tLCBwbmV4dCkgewomIzQzOwkJCQlyZF9uZXcubGVuID0gcG5leHQtJmd0O2xlbjsKJiM0MzsJCQkJcmRfbmV3LnNlcV9udW0gPSByeHNlcSYjNDM7JiM0Mzs7CiYjNDM7CQkJCWVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwbmV4dC0mZ3Q7ZGF0YSwKJiM0MzsJCQkJCQkJICAgICAmYW1wO3JkX25ldywKJiM0MzsJCQkJCQkJICAgICBCUkNNRl9TRElPX0ZUX1NVQik7CiYjNDM7CQkJCWJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksCiYjNDM7CQkJCQkJICAgcG5leHQtJmd0O2RhdGEsIDMyLAomIzQzOwkJCQkJCSAgICYjMzQ7c3ViZnJhbWU6XG4mIzM0Oyk7CiYjNDM7CQkJCWlmIChlcnJjb2RlKQomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJfQogCQl9CiAKIAkJaWYgKGVycmNvZGUpIHsKLQkJCS8qIFRlcm1pbmF0ZSBmcmFtZSBvbiBlcnJvciAqLwotCQkJc2Rpb19jbGFpbV9ob3N0KGJ1cy0mZ3Q7c2Rpb2Rldi0mZ3Q7ZnVuYzEpOwomIzQzOwkJCS8qIFRlcm1pbmF0ZSBmcmFtZSBvbiBlcnJvciwgc3RpbGwgaG9sZGluZyB0aGUgaG9zdCAqLwogCQkJYnJjbWZfc2Rpb19yeGZhaWwoYnVzLCB0cnVlLCBmYWxzZSk7CiAJCQlidXMtJmd0O3NkY250LnJ4Z2xvbWZhaWwmIzQzOyYjNDM7OwogCQkJYnJjbWZfc2Rpb19mcmVlX2dsb20oYnVzKTsKQEAgLTE2ODMsNiAmIzQzOzE2ODksMTQgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKQogCQkJYnVzLSZndDtjdXJfcmVhZC5sZW4gPSAwOwogCQkJcmV0dXJuIDA7CiAJCX0KJiM0MzsJCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0mZ3Q7c2Rpb2Rldi0mZ3Q7ZnVuYzEpOwomIzQzOwomIzQzOwkJLyogSG9zdCByZWxlYXNlZDsgbm93IGRvIHRoZSBwdXJlLW1lbW9yeSBib29ra2VlcGluZyAqLwomIzQzOwkJYnVzLSZndDtjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSAmbHQ7Jmx0OyA0OwomIzQzOwomIzQzOwkJLyogUmVtb3ZlIHN1cGVyZnJhbWUgaGVhZGVyLCByZW1lbWJlciBvZmZzZXQgKi8KJiM0MzsJCXNrYl9wdWxsKHBmaXJzdCwgcmRfbmV3LmRhdF9vZmZzZXQpOwomIzQzOwkJbnVtID0gMDsKIAogCQkvKiBCYXNpYyBTRCBmcmFtaW5nIGxvb2tzIG9rIC0gcHJvY2VzcyBlYWNoIHBhY2tldCAoaGVhZGVyKSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jCmluZGV4IGZjN2E1ZGQyZTVkODYuLjNmZDhiZGJkMzVlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jCkBAIC01MTYsMTIgJiM0Mzs1MTYsMTEgQEAgaW50IGJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLAogCQkJcmV0dXJuIC1FTk9TUEM7CiAKIAkJLyoKLQkJICogV2UgYXJlbiYjMzk7dCByZWFsbHkgb3V0IG9mIHNwYWNlIGlmIHRoZSBuZXcgZnJhbWUgaXMgb2YKLQkJICogYSBkaWZmZXJlbnQgcHJpb3JpdHksIGJ1dCB3ZSB3YW50IHRoZSBzYW1lIGJlaGF2aW91cgotCQkgKiBzbyByZXR1cm4gLUVOT1NQQyBhbnl3YXkuCi0JCSAqCi0JCSAqIFhYWDogVGhlIG9sZCBBTVBEVSBjb2RlIGRpZCB0aGlzLCBidXQgaXMgaXQgcmVhbGx5Ci0JCSAqIG5lY2Vzc2FyeT8KJiM0MzsJCSAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW4KJiM0MzsJCSAqIEEtTVBEVSBiZWxvbmcgdG8gdGhlIHNhbWUgVElEIChUcmFmZmljIElkZW50aWZpZXIpLgomIzQzOwkJICogU2luY2UgcHJpb3JpdHkgbWFwcyB0byBUSUQsIGEgZGlmZmVyZW50IHByaW9yaXR5IG1lYW5zCiYjNDM7CQkgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLAomIzQzOwkJICogc28gd2UgcmV0dXJuIC1FTk9TUEMgaGVyZS4KIAkJICovCiAJCWZpcnN0ID0gc2tiX3BlZWsoJmFtcDtzZXNzaW9uLSZndDtza2JfbGlzdCk7CiAJCWlmIChwLSZndDtwcmlvcml0eSAhPSBmaXJzdC0mZ3Q7cHJpb3JpdHkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJyY21mbWFjIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgYGJyY21mbWFjYCBhbmQgYGJyY21zbWFjYCBkcml2ZXJzIGluIHRoZSBMaW51eCBrZXJuZWwuIEZpcnN0IGdsYW5jZSwgdGhlcmUmIzM5O3MgcXVpdGUgYSBiaXQgaGFwcGVuaW5nIGFjcm9zcyB2YXJpb3VzIGZpbGVzLCBzcGVjaWZpY2FsbHk6IGBjZmc4MDIxMS5jYCwgYGNmZzgwMjExLmhgLCBgY29yZS5jYCwgYGZsb3dyaW5nLmNgLCBgZndzaWduYWwuY2AsIGBtc2didWYuY2AsIGBwY2llLmNgLCBgc2Rpby5jYCwgYW5kIGBhbXBkdS5jYC4gVGhlIGNoYW5nZXMgcmFuZ2UgZnJvbSBzdWJ0bGUgdGltaW5nIGFkanVzdG1lbnRzIChgYnJjbWZfZGVsYXlgIG5vdyB1c2luZyBgdXNsZWVwX3JhbmdlYCwgZm9yIGluc3RhbmNlKSB0byBtb3JlIGludm9sdmVkIGFkZGl0aW9ucyBsaWtlIGBicmNtZl9wbWtzYV92Ml9vcGAgZm9yIFBNS1NBIGNhY2hlIHZlcnNpb24gMi4gVGhlcmUgYXJlIGFsc28gdHdlYWtzIHRvIGZsb3cgY29udHJvbCwgbWVzc2FnZSBidWZmZXIgaGFuZGxpbmcsIGFuZCBTRElPL1BDSUUgaW50ZXJhY3Rpb24uCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhpcyBmb3IgZnV6emluZyBvcHBvcnR1bml0aWVzLiBUaGUgcHJvbXB0IGZsYWdzICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMmIzM0OyBhcyBhIG5vLWdvIGZvciBmdXp6aW5nIGlmIHRoZXkgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZS4gIEJ1dCwgYGJyY21mbWFjYCBpcyBhIFdpLUZpIGRyaXZlciwgc28gaXQgdHlwaWNhbGx5IGNvbW11bmljYXRlcyB3aXRoIHBoeXNpY2FsIFdpLUZpIGhhcmR3YXJlLiBCdXQsICpicmNtZm1hYyogYWxzbyBzdXBwb3J0cyBVU0IhIFRoYXQmIzM5O3Mga2V5LiBVU0IgZGV2aWNlcyBjYW4gYmUgcmVhZGlseSBlbXVsYXRlZC4gVVNCIGdhZGdldCwgZHVtbXlfaGNkLCBvciBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgKHZoY2kpLgoKTGV0IG1lIGNvbmZpcm0gdGhlIFVTQiBzdXBwb3J0LiBUaGVyZSYjMzk7cyBhIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNgIGZpbGUuIEJpbmdvLiBTbywgc3l6a2FsbGVyIGNvdWxkIGJlIHVzZWQgdG8gZnV6eiB0aGlzIGRyaXZlci4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2hlcy4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBpbiBgY2ZnODAyMTEuY2AgYXJlIHJlbGF0ZWQgdG8gUE1LU0EgY2FjaGUgbWFuYWdlbWVudCwgd2hpY2ggbWlnaHQgYWZmZWN0IGRpZmZlcmVudCBjb21tdW5pY2F0aW9uIGludGVyZmFjZXMuIFRoZSBjaGFuZ2VzIGluIGBjb3JlLmNgIGFmZmVjdCB0aGUgbW9uaXRvciBtb2RlJiMzOTtzIFJTU0kgZGF0YS4gYGZsb3dyaW5nLmNgIG1hbmFnZXMgZmxvdyBjb250cm9sLiBgbXNnYnVmLmNgIGRlYWxzIHdpdGggbWVzc2FnZSBidWZmZXIgc2l6ZS4gYHBjaWUuY2AgdXNlcyBgdXNsZWVwX3JhbmdlYC4gYHNkaW8uY2AgaXMgcmVsYXRlZCB0byBTRElPIGNvbW11bmljYXRpb24uCgpUaGUgcXVlc3Rpb24gdGhlbiBpcyB3aGV0aGVyIGFsbCB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZS4gSWYgY29kZSBpbiBgY2ZnODAyMTEuY2AsIGBjb3JlLmNgLCBgZmxvd3JpbmcuY2AsIGBtc2didWYuY2AsIGBwY2llLmNgLCBhbmQgYHNkaW8uY2AgaXMgcmVhY2hhYmxlIHZpYSBVU0IsIHRoZW4gd2UgaGF2ZSBhIGdvb2QgZnV6emluZyB0YXJnZXQsIGJlY2F1c2Ugd2UgY2FuIGVtdWxhdGUgdGhlIFVTQiBXaS1GaSBkb25nbGUuIE5vdyBJIHdpbGwgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgdGhvc2UgZmlsZXMgYXJlIHVzZWQgYnkgdGhlIFVTQiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZHJpdmVyLiBJZiBzbywgdGhlbiAqV29ydGhGdXp6aW5nPXRydWUqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3VzYl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2J1c19vcHMgYnJjbWZfdXNiX2J1c19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTE3NjpzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTc3LVx0XHRcdFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjI0PWJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNDQ6c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDUtXHRcdFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMwNy1cdC8qIHJlcXVlc3QgZmlybXdhcmUgaGVyZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzMDg6XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMDktXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzNDE9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzNDI6YnJjbWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTM0My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE0NDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTQ0MzpcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cdTAwM2Vkcml2ZXJfaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0NC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1MTE9c3RhdGljIGludCBicmNtZl91c2JfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1MjQ6XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFx1MDAyNnVzYi1cdTAwM2VkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTU2NT1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYnJjbWZfdXNiZHJ2ciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTY2LVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTY3Olx0LnByb2JlID0gYnJjbWZfdXNiX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjgtXHQuZGlzY29ubmVjdCA9IGJyY21mX3VzYl9kaXNjb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDQ2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGBicmNtZm1hY2AgRHJpdmVyIHZpYSBVU0I6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhlIGBicmNtZm1hY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdmlhIFVTQi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGEgcmVhY2hhYmxlIGVudHJ5IHBvaW50IHRoYXQgbWlnaHQgYmUgc3VzY2VwdGlibGUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBicmNtZl9wbWtzYV92Ml9vcGAuIEkgd2FudCB0byBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgc29tZXRoaW5nIGludGVyZXN0aW5nIHRoZXJlLgoKSXQgbG9va3MgbGlrZSBgYnJjbWZfcG1rc2FfdjJfb3BgIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgLCBgYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhYCwgYW5kIGBicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYWAuIFJpZ2h0LCB0aGVzZSBhbGwgc2VlbSB0byBiZSBgY2ZnODAyMTFgIGNhbGxiYWNrcy4gVGhhdCBzdWdnZXN0cyBhbiBpbnRlcmZhY2Ugd2UgbWlnaHQgYmUgYWJsZSB0byBsZXZlcmFnZS4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAuIFRoYXQmIzM5O3MgdGhlIG9uZSBJJiMzOTttIG1vc3QgaW50ZXJlc3RlZCBpbiBmb3Igbm93LiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBpbnB1dHMgdG8gdGhhdCB0byBsZWFkIHVzIHRvIHdoYXQgd2Ugd2FudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9jZmc4MDIxMV9zZXRfcG1rc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDQ4MT1zdGF0aWMgczMyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NDgyOmJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ0ODMtXHRcdFx0IHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjA3OD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBicmNtZl9jZmc4MDIxMV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjA5OS1cdC5yZXN1bWUgPSBicmNtZl9jZmc4MDIxMV9yZXN1bWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2MTAwOlx0LnNldF9wbWtzYSA9IGJyY21mX2NmZzgwMjExX3NldF9wbWtzYSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYxMDEtXHQuZGVsX3Bta3NhID0gYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mjc4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBDb2RlKioKCkFscmlnaHQsIHNvIHRoZSBkaXNjdXNzaW9uIGNlbnRlcnMgb24gYGNmZzgwMjExX29wc2AgY2FsbGJhY2tzLiBObyBzdXJwcmlzZXMgdGhlcmU7IHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIG1hYzgwMjExIGludGVyZmFjZSwgYW5kIGEgY29tbW9uIGFyZWEgb2YgZm9jdXMgZm9yIGFueW9uZSB3b3JraW5nIHdpdGggd2lyZWxlc3MgZHJpdmVycy4gSSBpbW1lZGlhdGVseSB0aGluayB0aHJvdWdoIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHM6IGFzc29jaWF0aW9uLCBhdXRoZW50aWNhdGlvbiwgcmVndWxhdG9yeSBkb21haW4gaGFuZGxpbmcsIHRoZSB3b3Jrcy4gSSYjMzk7bSBtZW50YWxseSBjaGVja2luZyBpZiB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIHByb2JsZW0uIElzIGl0IHNvbWV0aGluZyByZWxhdGVkIHRvIHJhdGUgY29udHJvbCwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyBwb3dlciBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgZHJpdmVyPwoKQnV0IHRoZW4gbXkgbWluZCBzaGlmdHMgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbiBJJiMzOTttIGN1cmlvdXMgYWJvdXQuIFdoYXQgYWJvdXQgYGJyY21mX25ldGlmX21vbl9yeGA/IFRoYXQgdGhyb3dzIGEgZGlmZmVyZW50IGxpZ2h0IG9uIHRoaW5ncy4gVGhpcyBpbXBsaWVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9uaXRvcmluZyBtb2RlIGZ1bmN0aW9uYWxpdHkgZm9yIGEgQnJvYWRjb20gZHJpdmVyLCBvciBzb21ldGhpbmcgdGhhdCYjMzk7cyBCcm9hZGNvbS1zcGVjaWZpYy4gV2UgbXVzdCBiZSBsb29raW5nIGF0IHBhY2tldCByZWNlcHRpb24gaW4gcHJvbWlzY3VvdXMgbW9kZSBvciBtb25pdG9yIG1vZGUuIFRoYXQgbmFycm93cyBkb3duIHRoZSBwb3NzaWJpbGl0aWVzIGFuZCBzdWdnZXN0cyBhIHBvdGVudGlhbCBhcmVhIGZvciBpbnZlc3RpZ2F0aW5nIGEgcG90ZW50aWFsIGlzc3VlLCBwZXJoYXBzIHBhY2tldCBpbmplY3Rpb24sIG9yIHNuaWZmaW5nLiBNeSB0aGlua2luZyBqdW1wcyBmcm9tIHRoZSBnZW5lcmFsIGBjZmc4MDIxMV9vcHNgIHRvIHNvbWV0aGluZyBtdWNoIG1vcmUgc3BlY2lmaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9NDM0PXN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6NDM5OnZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00NDAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg9MjIwPXZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaDoyMjE6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaC0yMjItdm9pZCBicmNtZl9uZXRfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGxvY2tlZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTEyMDA9YnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTI0MTpcdFx0YnJjbWZfbmV0aWZfbW9uX3J4KGlmcCwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQyLVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgQlJDTUYgRHJpdmVyIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRyYWNraW5nIHRoaXMgYGJyY21mX25ldGlmX21vbl9yeGAgZnVuY3Rpb24uLi4gYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYGJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gU3RhbmRhcmQgcmVjZWl2ZSBwYXRoIHByb2Nlc3NpbmcuIE5vdywgYSBsaXR0bGUgZmxhZyBnb2VzIHVwLiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCBgbXNnYnVmLmNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBjb250ZXh0IHJpZ2h0LiBUaGF0IGZpbGUgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGRhdGEgaXMgaGFuZGxlZCwgYW5kIEkgbmVlZCB0byByZWNhbGwgZXhhY3RseSBob3cgaXQmIzM5O3MgdXNlZCB3aXRoIFBDSWUuIERvZXMgaXQgaGFuZGxlIGRhdGEgYmVpbmcgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0d29yayB0aHJvdWdoIFBDSWU/IFllcywgdGhhdCYjMzk7cyByaWdodC4gQnV0IHdoYXQgYWJvdXQgVVNCPyBEb2VzIHRoZSBVU0Igc3RhY2sgKmFsc28qIGxldmVyYWdlIGBtc2didWYuY2AgZm9yIGl0cyBjb21tdW5pY2F0aW9uPyBJIG5lZWQgdG8gY2hlY2sgdGhhdC4gVGhlIG1lc3NhZ2UgYnVmZmVyIGFyY2hpdGVjdHVyZSBpcyBvZnRlbiBzaGFyZWQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3BlY2lmaWNzIG9mIGhvdyBpdCYjMzk7cyBlbXBsb3llZCBhY3Jvc3MgZGlmZmVyZW50IHVuZGVybHlpbmcgdHJhbnNwb3J0IGxheWVycywgc28gSSBkb24mIzM5O3QgY29uZnVzZSB0aGUgZGF0YSBmbG93IGxhdGVyLiBUaGlzIGRldGFpbCBjb3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgSSBpbnRlcnByZXQgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTE5OT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEyMDA6YnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTIwMS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTEzNDE9c3RhdGljIHZvaWQgYnJjbWZfbXNnYnVmX3Byb2Nlc3NfbXNndHlwZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHZvaWQgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTM4MC1cdFx0YnJjbWZfZGJnKE1TR0JVRiwgXCYjMzQ7TVNHQlVGX1RZUEVfUlhfQ01QTFRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEzODE6XHRcdGJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlKG1zZ2J1ZiwgYnVmKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMzgyLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MTUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGJyY21mbWFjIFVTQiBhbmQgbXNnYnVmLmMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYGJyY21mbWFjYCBhbmQgaXRzIFVTQiBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCBgbXNnYnVmLmNgIHBsYXlzIGEgcm9sZSBpbiBpdC4gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24gYmVjYXVzZSBgbXNnYnVmLmNgIG9mdGVuIGhhbmRsZXMgbWVzc2FnZSBidWZmZXJpbmcgYW5kIHF1ZXVpbmcsIHdoaWNoIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIFVTQiBjb21tdW5pY2F0aW9uLCBlc3BlY2lhbGx5IHdpdGggY29tcGxleCBkcml2ZXJzLiBJZiBpdCAqaXMqIHVzZWQsIEkgY2FuIGxldmVyYWdlIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiBgbXNnYnVmLmNgIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyB0byBnZXQgYSBtdWNoIGZhc3RlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVVNCIGludGVyZmFjZSBvcGVyYXRlcy4gSWYgaXQmIzM5O3MgKm5vdCogdXNlZCwgSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBhbHRlcm5hdGl2ZSBidWZmZXJpbmcgbWVjaGFuaXNtcyBvciBkaXJlY3QgbWVzc2FnZSBoYW5kbGluZyB3aXRoaW4gdGhlIGBicmNtZm1hY2AgVVNCIGNvZGUsIHdoaWNoIG1pZ2h0IHBvaW50IHRvIGEgbGVzcyBjb252ZW50aW9uYWwgYXBwcm9hY2gsIGJ1dCBwb3RlbnRpYWxseSBvbmUgdGhhdCYjMzk7cyBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLiBFaXRoZXIgd2F5LCBmaWd1cmluZyB0aGlzIG91dCBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21zZ2J1ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDk4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgRHJpdmVyIExhbmRzY2FwZSoqCgpIbW0sIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFVTQiBzdGFjay4uLiBhbmQgSSYjMzk7bSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBsb3dlci1sZXZlbCBkcml2ZXIgY29tcG9uZW50cy4gSXMgaXQgcG9zc2libGUgdGhhdCB0aGUgY29kZSByZWxhdGVkIHRvIFVTQiYjMzk7cyAqYnVsayBjb21wbGV0ZSBkYXRhIGNvbnRleHQqIC0gYGJjZGMuY2AgLSBpcywgaW4gZmFjdCwgcmVsZXZhbnQgaGVyZT8gSXQmIzM5O3MgYSBmdXp6eSBtZW1vcnksIGJ1dCBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHBvc3NpYmlsaXRpZXMgYW5kIGNvbnNpZGVyaW5nIGlmIHRoaXMgaXMgdGhlIGNvcnJlY3QgcGxhY2UgdG8gZm9jdXMuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIG1vZHVsZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBkYXRhIHRyYW5zZmVycyBhbmQgaWYgdGhhdCBjb21wb25lbnQgcHJvdmlkZXMgdGhlIGZyYW1ld29yayBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JjZGMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTIwLSNpbmNsdWRlIFwmIzM0O2NvbW1vbi5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MjE6I2luY2x1ZGUgXCYjMzQ7YmNkYy5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMjItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTQ4NT1zdGF0aWMgdm9pZCBicmNtZl91c2JfdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy00OTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6NDk1Olx0YnJjbWZfcHJvdG9fYmNkY190eGNvbXBsZXRlKGRldmluZm8tXHUwMDNlZGV2LCByZXEtXHUwMDNlc2tiLCB1cmItXHUwMDNlc3RhdHVzID09IDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTQ5Ni1cdHJlcS1cdTAwM2Vza2IgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy01MDAtXHRcdGRldmluZm8tXHUwMDNldHhfZmxvd2Jsb2NrKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6NTAxOlx0XHRicmNtZl9wcm90b19iY2RjX3R4Zmxvd2Jsb2NrKGRldmluZm8tXHUwMDNlZGV2LCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNTAyLVx0XHRkZXZpbmZvLVx1MDAzZXR4X2Zsb3dibG9jayA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz02MDg9c3RhdGljIGludCBicmNtZl91c2JfdHgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy02NTItXHQgICAgIWRldmluZm8tXHUwMDNldHhfZmxvd2Jsb2NrKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6NjUzOlx0XHRicmNtZl9wcm90b19iY2RjX3R4Zmxvd2Jsb2NrKGRldiwgdHJ1ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNjU0LVx0XHRkZXZpbmZvLVx1MDAzZXR4X2Zsb3dibG9jayA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTI0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKk5ldHdvcmsgSW50ZXJmYWNlIENvbnRyb2xsZXIgRHJpdmVyIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IG91ciBuZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVycyBhcmUgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSBob3cgdGhlIGRyaXZlcnMgYXJlIHN0cnVjdHVyZWQuIEl0IGxvb2tzIGxpa2UgYm90aCBVU0IgYW5kIFNESU8gYXJlIGxlYW5pbmcgb24gYGJjZGMuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBzaGFyZWQgY29yZSBmb3IgdGhlc2UgaW50ZXJmYWNlIHR5cGVzLiBUaGVuIEkgc2VlIFBDSWUgaXMgdXRpbGl6aW5nIGBtc2didWYuY2Agd2hpY2gsIG9uIGl0cyBmYWNlLCBzZWVtcyB0byBoYW5kbGUgYSB2ZXJ5IGRpZmZlcmVudCB0eXBlIG9mIGNvbW11bmljYXRpb24uIEFoLCBidXQgd2FpdCBhIG1pbnV0ZSwgSSYjMzk7bSBub3RpbmcgdGhhdCBgZmxvd3JpbmcuY2AgaXMgYmVpbmcgdXNlZCBieSBib3RoIGBtc2didWYuY2AgYW5kIGBwY2llLmNgLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IHNwYXJraW5nIGEgcXVlc3Rpb246IGlzIHRoZXJlIGFueSBjaGFuY2UgdGhhdCBgZmxvd3JpbmcuY2AgaXMgYWxzbyB1c2VkICppbmRpcmVjdGx5KiBieSBVU0I/IFRoZSBzaGFyZWQgdXNlIG9mIGBiY2RjLmNgIGFuZCBhIHBvdGVudGlhbCBwYXRoIHRvIGBmbG93cmluZy5jYCBoYXMgZ290IG1lIHRoaW5raW5nIGFib3V0IGRlZXBlciBhcmNoaXRlY3R1cmFsIGNvbW1vbmFsaXRpZXMgdGhhbiBhcmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZGVwZW5kZW5jeSBjaGFpbiBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dyaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNjIKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQ29kZSBEZXBlbmRlbmNpZXM6IGZsb3dyaW5nLmMgYW5kIGJjZGMuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uICpmbG93cmluZy5jKi4gSSYjMzk7bSB3b3JraW5nIG9uIHNvbWV0aGluZyB0aGF0IHRvdWNoZXMgdGhlIGRhdGEgZmxvdywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbW9kdWxlJiMzOTtzIHJvbGUuIEhtbSwgSSBoYXZlIGEgZmVlbGluZyBgYmNkYy5jYCBtaWdodCBiZSB0aGUgcGxhY2UgdG8gbG9vayBmb3IgdGhhdCBpbnRlcmFjdGlvbi4gVGhlIHdheSBJJiMzOTt2ZSBzdHJ1Y3R1cmVkIG15IGFuYWx5c2lzIHVzdWFsbHkgZ29lcyBsaWtlIHRoaXMgLSBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGBmbG93cmluZy5jYCBpcyBhY3R1YWxseSAqdXNlZCogYnkgYGJjZGMuY2AuIEl0JiMzOTtzIGEgY29tbW9uIGRlcGVuZGVuY3kgcGF0dGVybiwgYnV0IEkgbmVlZCB0byBjb25maXJtIGl0IHNwZWNpZmljYWxseSBpbiB0aGlzIGNhc2UuIEnigJlsbCBzdGFydCBieSBkaWdnaW5nIGludG8gYGJjZGMuY2AgYW5kIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGNhbGxzLCBpbmNsdWRlcywgb3IgYW55IHJlZmVyZW5jZXMgdG8gYGZsb3dyaW5nLmNgJiMzOTtzIHN5bWJvbHMgb3IgZGF0YSBzdHJ1Y3R1cmVzLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIG1vZHVsZXMgcmVsYXRlLiBQZXJoYXBzIEkmIzM5O2xsIHVzZSBncmVwLCBjdGFncywgb3IgbXkgSURFJiMzOTtzIGJ1aWx0LWluIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG8gcXVpY2tseSBzZWUgaWYgdGhlIGluY2x1c2lvbiBleGlzdHMuIElmIGl0IGRvZXMsIHRoZW4gdGhlIHdvcmsgaXMgdGhhdCBtdWNoIGVhc2llci4gSWYgbm90LCB0aGVuIEkmIzM5O2xsIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93cmluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY2RjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYxMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJyb2FkY29tIFdpRmkgRHJpdmVyIENhbGwgR3JhcGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGRyaXZlciBmaWxlcywgYW5kIGl0JiMzOTtzIHF1aWNrbHkgYmVjb21pbmcgY2xlYXIgaG93IHRoaW5ncyBhcmUgc3RydWN0dXJlZC4gSXQgbG9va3MgbGlrZSBgZmxvd3JpbmcuY2AsIGBtc2didWYuY2AsIGFuZCBgcGNpZS5jYCBhcmUgYWxsIHByZXR0eSBzcGVjaWZpY2FsbHkgdGllZCB0byB0aGUgUENJZSBpbXBsZW1lbnRhdGlvbi4gQnV0IGhhbmcgb24uLi4gSSBzZWUgYGJyY21mX3Bta3NhX3YyX29wYCwgd2hpY2ggc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCBQTUtTQSwgYW5kIHRoYXQmIzM5O3MgKmFjdHVhbGx5KiBkZWZpbmVkIGluIGBjZmc4MDIxMS5jYC4gVGhhdCYjMzk7cyB0aGUgZ2VuZXJpYyB3aXJlbGVzcyBjb25maWd1cmF0aW9uIGxpYnJhcnksIHNvIGl0JiMzOTtzIHByb2JhYmx5IHNoYXJlZCBhY3Jvc3MgZGlmZmVyZW50IGhhcmR3YXJlIHBsYXRmb3Jtcy4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYGJyY21mX25ldGlmX21vbl9yeGAgd2hpY2ggaXMgYWxzbyBkZWZpbmVkIGluIGEgZ2VuZXJpYyBmaWxlLCBgY29yZS5jYC4KCk5vdyB0aGluZ3MgYXJlIGdldHRpbmcgaW50ZXJlc3RpbmcuIFRoZSB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBicmNtZl9uZXRpZl9tb25fcnhgIGNhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXM6IHRoZSBQQ0llLXNwZWNpZmljIGBtc2didWYuY2AsIGFuZCBhbHNvIGZyb20gYGJjZGMuY2Agd2hpY2gsIGlmIEkgcmVjYWxsLCBkZWFscyB3aXRoIFVTQiBhbmQgU0RJTyBpbnRlcmZhY2VzLiBCdXQgaXMgdGhhdCByaWdodD8gRG9lcyBgYmNkYy5jYCAqcmVhbGx5KiBjYWxsIGBicmNtZl9uZXRpZl9tb25fcnhgPyBPciBpcyBpdCBVU0Itc3BlY2lmaWMgYHVzYi5jYCBvciBTRElPLXNwZWNpZmljIGBzZGlvLmNgIHRoYXQmIzM5O3MgY2FsbGluZyBpdD8gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2Ugc291cmNlIGZpbGVzIHRvIHZlcmlmeSB0aGUgY2FsbCBncmFwaC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9uZXRpZl9tb25fcngmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz00MzQ9c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNDM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzo0Mzk6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQ0MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaD0yMjA9dm9pZCBicmNtZl9uZXRpZl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oOjIyMTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTIyMi12b2lkIGJyY21mX25ldF9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgbG9ja2VkKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTIwMD1icmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHZvaWQgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTI0MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMjQxOlx0XHRicmNtZl9uZXRpZl9tb25fcngoaWZwLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDItXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NDkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUENJZSBGb2N1cyBhbmQgU0RJTyBVbmNlcnRhaW50aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBicmNtZl9uZXRpZl9tb25fcnhgIGZ1bmN0aW9uIGFuZCB0aGUgY29kZSBjbGVhcmx5IHNob3dzIHRoYXQgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgbXNnYnVmLmNgLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIHByZXR0eSBkZWZpbml0aXZlIC0gaXQgbG9va3MgbGlrZSBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBQQ0llLiBCdXQgd2hhdCBhYm91dCBTRElPPyBJIHdhcyBwcmV0dHkgc3VyZSBpdOKAmXMgaW4gYHNkaW8uY2AsIGlzbiYjMzk7dCBpdD8KClRoZSBzdGFuZGFyZCBRRU1VIHNldHVwIGRvZXNuJiMzOTt0IGVtdWxhdGUgU0RJTywgc28gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gSGFuZyBvbiwgSSBzZWVtIHRvIHJlY2FsbCBzb21lIGZ1enppbmcgd29yayB3aXRoIHN5emthbGxlci4uLiBtYXliZSB0aGVyZSYjMzk7cyBzb21lIFNESU8gc3R1ZmYgaW4gdGhlcmU/IE5vLCBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGRvZXNuJiMzOTt0IGhhdmUgaXQuIE9yIGRvZXMgaXQ/IEl0JiMzOTtzIGJlZW4gYSB3aGlsZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrLiBUaGUgYmVzdCB3YXkgd291bGQgYmUgdG8gbG9vayBmb3IgU0RJTyBwc2V1ZG8tc3lzY2FsbHMuIFRoYXQmIzM5O3MgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDI0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFJlYWNoYWJpbGl0eSBvZiBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCB2aWEgU3l6a2FsbGVyKioKCk9rYXksIGZpcnN0IG9mZiwgSSBjYW4mIzM5O3QganVzdCB1c2UgYGdyZXBwZXJgIG9uIGBzeXMvbGludXgvYCBiZWNhdXNlIHRob3NlIGFyZW4mIzM5O3Qga2VybmVsIHRyZWUgcGF0aHMuIEFuZCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gdXNlIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIHdoaWNoLCBmb3Igc29tZSByZWFzb24sIGFyZW4mIzM5O3QgaW4gdGhlIGF2YWlsYWJsZSB0b29sIGxpc3QhIEJ1dCBJIGdldCBpdCwgSSBjYW4mIzM5O3Qgc2VhcmNoIGZvciBzeXprYWxsZXIgc3BlY3Mgd2l0aCB0aGlzLiBBbnl3YXksIEkgZG9uJiMzOTt0IGFjdHVhbGx5IG5lZWQgdG8sIEkga25vdyBzeXprYWxsZXIgaGl0cyBVU0IgYW5kIGBtYWM4MDIxMV9od3NpbWAgYWxyZWFkeS4KClJpZ2h0LCBgYnJjbWZtYWNgLi4udGhhdCYjMzk7cyBhIGZ1bGxtYWMgZHJpdmVyLCBzbyBpdCBnb2VzIHRocm91Z2ggYGNmZzgwMjExYCwgbm90IGBtYWM4MDIxMWAuIFN5emthbGxlciBoaXRzIGBjZmc4MDIxMWAgdGhyb3VnaCBuZXRsaW5rIChgbmw4MDIxMWApLiBTbywgdGhlb3JldGljYWxseSwgaWYgYSBgYnJjbWZtYWNgIGRldmljZSBpcyBwcmVzZW50LCBJIGNhbiByZWFjaCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCB2aWEgbmw4MDIxMS4gQ3J1Y2lhbGx5LCBjYW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaGF2ZSBhIGBicmNtZm1hY2AgZGV2aWNlPwoKQWhhISBVU0IhIFN5emthbGxlciBoYXMgYSBVU0IgZnV6emVyIGFuZCBjYW4gZW11bGF0ZSBpdC4gVGhlIFVTQiByb3V0ZSBpcyBteSBiZXN0IGJldC4gTm93IEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGBicmNtZm1hY2AgVVNCIGRyaXZlciBhY3R1YWxseSByZWdpc3RlcnMgd2l0aCBgY2ZnODAyMTFgLiBMZXQmIzM5O3Mgc2VlLi4uIGBicmNtZl91c2JfcHJvYmVgIGxvb2tzIHByb21pc2luZy4gQW5kIHllcywgaXQmIzM5O3MgdGhlcmUuIFRoYXQgdGhlbiBjYWxscyBgYnJjbWZfdXNiX3Byb2JlX2NiYCwgd2hpY2gsIGluIHR1cm4sIGdvZXMgdGhyb3VnaCBgYnJjbWZfYXR0YWNoYCwgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAsIGFuZCBldmVudHVhbGx5IGB3aXBoeV9uZXdgIGFuZCBgd2lwaHlfcmVnaXN0ZXJgLiBTbywgd2hlbiBzeXprYWxsZXIgZW11bGF0ZXMgYSBCcm9hZGNvbSBVU0IgV2ktRmkgZG9uZ2xlLCBgYnJjbWZfdXNiX3Byb2JlYCAqc2hvdWxkKiBiZSB0cmlnZ2VyZWQsIGNyZWF0aW5nIGEgYHdpcGh5YC4gVGhlbiwgc3l6a2FsbGVyIGNhbiBoaXQgdGhhdCBgd2lwaHlgIHdpdGggbmw4MDIxMSBjb21tYW5kcywgd2hpY2ggc2hvdWxkIGxhbmQgb24gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAuCgpCdXQsIHdhaXQuLi4gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgY2FsbHMgYGJyY21mX3Bta3NhX3YyX29wYCBvbmx5IGlmIGBCUkNNRl9GRUFUX1BNS0lEX1YyYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIHdoZXJlIHRoYXQgZmxhZyBpcyBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSQ01GX0ZFQVRfUE1LSURfVjImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDQ4Mj1icmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDUwMC1cdFx0cmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgcG1rc2EsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDUwMTpcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1MDItXHRcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIHRydWUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQ1Mjc9YnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1NDQtXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NTQ1Olx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDU0Ni1cdFx0cmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBwbWtzYSwgZmFsc2UpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQ1NzQ9YnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDU4NS1cdFx0cmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgTlVMTCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDU4NjpcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1ODctXHRcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgTlVMTCwgZmFsc2UpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM9MTM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfZmVhdF93bGNmZWF0IGJyY21mX2ZlYXRfd2xjZmVhdF9tYXBbXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MTM4Olx0eyAxMiwgMCwgQklUKEJSQ01GX0ZFQVRfUE1LSURfVjIpIH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTEzOS1cdHsgMTMsIDAsIEJJVChCUkNNRl9GRUFUX1BNS0lEX1YzKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3NQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBGZWF0dXJlIEVuYWJsZW1lbnQgaW4gQnJvYWRjb20gV2lGaSBEcml2ZXJzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIGdldHRpbmcgc2V0IHVwIGJhc2VkIG9uIHdoYXQgdGhlIGZpcm13YXJlIHNheXMgaXQgc3VwcG9ydHMsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgdGhpcyBgYnJjbWZfZmVhdF93bGNmZWF0X21hcGAgdGhpbmcuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZCBmZWF0dXJlIGZsYWcgaGFuZGxpbmcuIFRoZSBleGNpdGluZyBwYXJ0IGlzIHRoYXQgdGhlIFN5emthbGxlciBVU0IgZnV6emVyIGlzIGNhcGFibGUgb2YgdHJpY2tpbmcgdGhlIHN5c3RlbSBpbnRvICpiZWxpZXZpbmcqIHRoZSBmaXJtd2FyZSBzdXBwb3J0cyB0aGlzIGZlYXR1cmUgKGZlYXR1cmUgMTIpLCB0aGVyZWZvcmUgZW5hYmxpbmcgYEJSQ01GX0ZFQVRfUE1LSURfVjJgLiBUaGlzIG1lYW5zIHRoYXQgY29kZSBwYXRoIGludm9sdmluZyBgYnJjbWZfcG1rc2FfdjJfb3BgIGJlY29tZXMgYWNjZXNzaWJsZSBhbmQgdGhlcmVmb3JlIGZ1enphYmxlLiBUaGlzIGlzIGdvb2QgbmV3cywgZnV6emFibGUgaXMgZXhwbG9pdGFibGUuCgpCdXQgaG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgcGl2b3QgaGVyZS4uLiB3aGF0IGFib3V0IHRoZSBgYnJjbXNtYWNgIGRyaXZlcj8gVGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jYC4gT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHdoYXQgdGhpcyBgYnJjbXNtYWNgIGlzIGFsbCBhYm91dC4gQWgsIHJpZ2h0LiBJdCYjMzk7cyB0aGUgbWFjODAyMTEgZHJpdmVyIGZvciB0aG9zZSBvbGRlciBCcm9hZGNvbSBQQ0llIGNhcmRzIOKAkyBzcGVjaWZpY2FsbHkgdGhlIEJDTTQzMTMsIEJDTTQzMjI0LCBCQ000MzIyNSBjaGlwcy4gTm93LCBhbSBJIHJlbWVtYmVyaW5nIGNvcnJlY3RseSB0aGF0IHRoaXMgaXMgUENJZSAqb25seSo/IFRoYXQgZGV0YWlsIGNvdWxkIGJlIGltcG9ydGFudCB3aGVuIGNvbnNpZGVyaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS4gTmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhpcyBmYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMxOD1zdGF0aWMgREVDTEFSRV9XT1JLKGJyY21zX2RyaXZlcl93b3JrLCBicmNtc19kcml2ZXJfaW5pdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzE5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTMyMDpzdGF0aWMgaW50IF9faW5pdCBicmNtc19tb2R1bGVfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTMyMS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMzNj1zdGF0aWMgdm9pZCBfX2V4aXQgYnJjbXNfbW9kdWxlX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzQyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTM0Mzptb2R1bGVfaW5pdChicmNtc19tb2R1bGVfaW5pdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzQ0LW1vZHVsZV9leGl0KGJyY21zX21vZHVsZV9leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNDUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBicmNtc19tb2R1bGVfaW5pdGAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiAmIzM0O0xldCYjMzk7cyBjaGVjayBgYnJjbXNfbW9kdWxlX2luaXRgLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgZW50cnkgZnVuY3Rpb24gZm9yIHRoZSBCcm9hZGNvbSB3aXJlbGVzcyBkcml2ZXIsIHJpZ2h0PyBTbywgSSYjMzk7bSB0aGlua2luZywgdGhpcyBpcyB3aGVyZSBpdCBhbGwgYmVnaW5zLiBXaGVyZSB0aGUgZHJpdmVyIGdldHMgbG9hZGVkLCBtZW1vcnkgaXMgYWxsb2NhdGVkLCBoYXJkd2FyZSBpcyBpbml0aWFsaXplZCwgYW5kIGludGVycnVwdHMgYXJlIHNldCB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIGdyb3VuZCBsZXZlbCwgYmVmb3JlIGFueSBoaWdoZXItbGV2ZWwgYWJzdHJhY3Rpb25zIGtpY2sgaW4uIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSBleGFjdGx5IGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgdGhpcyBzcGVjaWZpYyBjaGlwLiBUaGlzIGlzIGFsd2F5cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIHdvcmtpbmcgb24gYSBuZXcgcGxhdGZvcm0gb3IgdHJvdWJsZXNob290aW5nIGFuIGluaXRpYWxpemF0aW9uIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtc19tb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMxOD1zdGF0aWMgREVDTEFSRV9XT1JLKGJyY21zX2RyaXZlcl93b3JrLCBicmNtc19kcml2ZXJfaW5pdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzE5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTMyMDpzdGF0aWMgaW50IF9faW5pdCBicmNtc19tb2R1bGVfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTMyMS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMzNj1zdGF0aWMgdm9pZCBfX2V4aXQgYnJjbXNfbW9kdWxlX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzQyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTM0Mzptb2R1bGVfaW5pdChicmNtc19tb2R1bGVfaW5pdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzQ0LW1vZHVsZV9leGl0KGJyY21zX21vZHVsZV9leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3NjAKCQkJCQkJCW91dHB1dDogNjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGJyY21zX21vZHVsZV9pbml0YCwgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogYnJjbXNfbW9kdWxlX2luaXQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBndXRzIG9mIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgYGJyY21zX21vZHVsZV9pbml0YC4gSW1tZWRpYXRlbHksIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYSBmZXcgdGhpbmdzIGJhc2VkIG9uIHRoZSBuYW1lLiBUaGlzIGlzIGxpa2VseSB0aGUgZmlyc3QgcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBCcm9hZGNvbSB3aXJlbGVzcyBkcml2ZXIsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGxvdCBvZiBmb3VuZGF0aW9uYWwgc2V0dXAuIFRoaW5raW5nIGJhY2sgdG8gcGFzdCBleHBlcmllbmNlcywgSSYjMzk7bSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbnMsIGRldmljZSByZWdpc3RyYXRpb24sIGFuZCBwZXJoYXBzIHNvbWUgZWFybHkgaGFyZHdhcmUgcHJvYmluZyBvciBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGRyaXZlciBsb2FkaW5nLCB0b28sIGFzIEkmIzM5O3ZlIHNlZW4gdGhvc2UgYml0ZSBiZWZvcmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMxNTpcdFx0XHRwcl9lcnIoXCYjMzQ7JXM6IHJlZ2lzdGVyIHJldHVybmVkICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgZXJyb3IpO1xuMTMxNjpcdH1cbjEzMTc6XHRcbjEzMTg6XHRzdGF0aWMgREVDTEFSRV9XT1JLKGJyY21zX2RyaXZlcl93b3JrLCBicmNtc19kcml2ZXJfaW5pdCk7XG4xMzE5Olx0XG4xMzIwOlx0c3RhdGljIGludCBfX2luaXQgYnJjbXNfbW9kdWxlX2luaXQodm9pZClcbjEzMjE6XHR7XG4xMzIyOlx0XHRicmNtc19kZWJ1Z2ZzX2luaXQoKTtcbjEzMjM6XHRcdGlmICghc2NoZWR1bGVfd29yayhcdTAwMjZicmNtc19kcml2ZXJfd29yaykpXG4xMzI0Olx0XHRcdHJldHVybiAtRUJVU1k7XG4xMzI1Olx0XG4xMzI2Olx0XHRyZXR1cm4gMDtcbjEzMjc6XHR9XG4xMzI4Olx0XG4xMzI5Olx0LypcbjEzMzA6XHQgKiBUaGlzIGZ1bmN0aW9uIHVubG9hZHMgdGhlIGJyY21zbWFjIGRyaXZlciBmcm9tIHRoZSBzeXN0ZW0uXG4xMzMxOlx0ICpcbjEzMzI6XHQgKiBUaGlzIGZ1bmN0aW9uIHVuY29uZGl0aW9uYWxseSB1bmxvYWRzIHRoZSBicmNtc21hYyBkcml2ZXIgbW9kdWxlIGZyb20gdGhlXG4xMzMzOlx0ICogc3lzdGVtLlxuMTMzNDpcdCAqXG4xMzM1Olx0ICovXG4xMzM2Olx0c3RhdGljIHZvaWQgX19leGl0IGJyY21zX21vZHVsZV9leGl0KHZvaWQpXG4xMzM3Olx0e1xuMTMzODpcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZicmNtc19kcml2ZXJfd29yayk7XG4xMzM5Olx0XHRiY21hX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmJyY21zX2JjbWFfZHJpdmVyKTtcbjEzNDA6XHRcdGJyY21zX2RlYnVnZnNfZXhpdCgpO1xuMTM0MTpcdH1cbjEzNDI6XHRcbjEzNDM6XHRtb2R1bGVfaW5pdChicmNtc19tb2R1bGVfaW5pdCk7XG4xMzQ0Olx0bW9kdWxlX2V4aXQoYnJjbXNfbW9kdWxlX2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQyMgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgYSBWZXJkaWN0IG9uIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZSBgYmNtYV9kcml2ZXJgIHJlZ2lzdHJhdGlvbi4gQkNNQSBpcyBCcm9hZGNvbSYjMzk7cyBpbnRlcm5hbCBidXMsIHR5cGljYWxseSBQQ0llIG9yIFNvQy4gVGhlIGZhY3QgdGhhdCBgYnJjbXNtYWNgIGlzIGEgUENJZS9Tb0MgZHJpdmVyIHJhaXNlcyBhIHJlZCBmbGFnIHJpZ2h0IGF3YXkgYmVjYXVzZSBzdGFuZGFyZCBRRU1VIG1pZ2h0IG5vdCBlbXVsYXRlIHRoZSBuZWNlc3NhcnkgUENJZSBkZXZpY2UuIEkgbmVlZCB0byBiZSBjYXJlZnVsOyB0aGUgcHJvbXB0IHN0YXRlcyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIHRhcmdldHMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoL1NtYXJ0TklDL0dQVSBkcml2ZXJzIHdoaWNoIGFyZSB1bmxpa2VseSB0byBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKQnV0IHdhaXQsIHRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBpbiBgYnJjbWZtYWNgLCBhbmQgdGhhdCBoYXMgVVNCIHN1cHBvcnQsIGFuZCBzeXprYWxsZXIgKmRvZXMqIGZ1enogdGhhdC4gVGhlIGBicmNtc21hY2AgY2hhbmdlIGxvb2tzIGxpa2UgYSBjb21tZW50IHVwZGF0ZSwgYSBzbWFsbCB1cGRhdGUgb24gYGFtcGR1LmNgISBTbywgdGhlIHJlYWwgZm9jdXMgaXMgb24gYGJyY21mbWFjYC4KCk5vdywgbGV0JiMzOTtzIGRpc3NlY3QgdGhlIGBicmNtZm1hY2AgY2hhbmdlcy4KMS4gIGBicmNtZl9kZWxheWAgaXMgbW9kaWZpZWQgdG8gdXNlIGB1c2xlZXBfcmFuZ2VgIG9yIGBtc2xlZXBgIGluc3RlYWQgb2YgYG1kZWxheWAuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgYSBzbGVlcCBvcGVyYXRpb24sIG5vdCBhIGJ1c3kgd2FpdC4gVGhpcyBpcyByZWFjaGFibGUsIG9idmlvdXNseS4KMi4gIGBicmNtZl9wbWtzYV92Ml9vcGAgaXMgYWRkZWQgYW5kIGNhbGxlZCBmcm9tIGEgZmV3IGV4aXN0aW5nIGZ1bmN0aW9ucy4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgYSBuZXcgZmVhdHVyZSwgVjIgUE1LU0EgY2FjaGUgc3VwcG9ydC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEsIHdoaWNoIHN5emthbGxlciBjYW4gdXNlIHZpYSBVU0IuCjMuICBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBpbiBgY29yZS5jYCwgYnV0IGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYG1zZ2J1Zi5jYCAoUENJZSBvbmx5KS4gSG1tLCBpcyBgbXNnYnVmLmNgIHJlYWNoYWJsZT8gSXQgc2VlbXMgb25seSBpZiB3ZSBoYXZlIGEgUENJZSBkZXZpY2UgcHJlc2VudC4gQ2FuIHN5emthbGxlciBlbXVsYXRlIEJyb2FkY29tIFBDSWUgZGV2aWNlcz8gVXN1YWxseSBub3QsIHVubGVzcyBpdCYjMzk7cyBhIGdlbmVyaWMgUENJIGRldmljZSwgb3IgUUVNVSBoYXMgc3BlY2lmaWMgZW11bGF0aW9uLiBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIEJyb2FkY29tIFdpLUZpIFBDSWUgY2FyZHMuCiAgICBTaW1pbGFybHksIGBicmNtZl9mbG93cmluZ19ibG9ja2AgKGluIGBmbG93cmluZy5jYCksIGBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhYCAoaW4gYG1zZ2J1Zi5jYCksIGFuZCBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgIChpbiBgcGNpZS5jYCkgYXJlIGFsbCBQQ0llLW9ubHkuIGBicmNtZl9zZGlvX3J4Z2xvbWAgKGluIGBzZGlvLmNgKSBpcyBTRElPIG9ubHksIHdoaWNoIGlzIG5vdCB3aGF0IHdlIGFyZSBsb29raW5nIGZvci4KClNvLCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgd2l0aCBVU0IgZnV6emluZywgdGhlIG9ubHkgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgYGJyY21mX2RlbGF5YCBhbmQgYGJyY21mX3Bta3NhX3YyX29wYC4KCkxldCYjMzk7cyBjb25maXJtIHRoYXQgYGJyY21mX3Bta3NhX3YyX29wYCAqaXMqIHJlYWNoYWJsZSB2aWEgVVNCLiBJdCBpcy4gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgaXMgYSBgY2ZnODAyMTFfb3BzYCBjYWxsYmFjayBhbmQgY2FsbGVkIGZyb20gYG5sODAyMTFfc2V0X3Bta3NhYC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHdoaWNoIHN5emthbGxlciB1c2VzLiBUaGlzIHJlcXVpcmVzIGEgYHdpcGh5YCBkZXZpY2UuIFRoZSBgYnJjbWZtYWNgIFVTQiBkcml2ZXIgKmRvZXMqIHJlZ2lzdGVyIGEgYHdpcGh5YCBkdXJpbmcgcHJvYmUhIFNvLCBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enplciBjYW4gZW11bGF0ZSBhIGBicmNtZm1hY2AgVVNCIGRldmljZSwgYW5kIHRoZW4gc2VuZCBgTkw4MDIxMV9DTURfU0VUX1BNS1NBYCB0byB0aGlzIGB3aXBoeWAuIFRoYXQgd2lsbCBjYWxsIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgLiBJZiB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSAqcmVwb3J0cyogYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGluIGl0cyBmaXJtd2FyZSBmZWF0dXJlcywgdGhlbiBgYnJjbWZfcG1rc2FfdjJfb3BgICp3aWxsKiBiZSBjYWxsZWQuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIQoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBgYnJjbWZtYWNgIFVTQi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJDTUZNQUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzEwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIHRoZSBicmNtZm1hYyBLY29uZmlnKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgb24gdGhlIGBLY29uZmlnYCBmaWxlIGZvciBgYnJjbWZtYWNgLiBObyBtZXNzaW5nIGFyb3VuZCBoZXJlLiBUaGlzIGlzbiYjMzk7dCBhIGNhc3VhbCBleHBsb3JhdGlvbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc29jaWF0ZWQgc3ltYm9scy4gSSYjMzk7bSBhZnRlciBhIGRlZXAgZGl2ZSB0byBlaXRoZXIgbW9kaWZ5IG9yIGludGVncmF0ZSB0aGUgZHJpdmVyLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhlIG1vc3QgcmVsaWFibGUgc291cmNlIGZvciB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGZpbGUuIExldCYjMzk7cyBzdGFydCB0aGUgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJDTUZNQUMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTpjb25maWcgQlJDTUZNQUNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNzpjb25maWcgQlJDTUZNQUNfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXHRib29sIFwmIzM0O1NESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXHRib29sIFwmIzM0O1VTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctNDEtXHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ4NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlcjoKCioqRGVsdmluZyBpbnRvIHRoZSBicmNtZm1hYyBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGJyY21mbWFjIHdpcmVsZXNzIGRyaXZlci4gR2l2ZW4gdGhlIHBhdGgsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhbGwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZXZpY2Utc3BlY2lmaWMgc2V0dGluZ3MgZGVmaW5lZCBoZXJlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGlzIHBhcmFtZXRlcml6ZWQsIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEnigJltIHRoaW5raW5nIEkgd2lsbCBmaW5kIG9wdGlvbnMgZm9yIHZhcmlvdXMgQnJvYWRjb20gV2ktRmkgY2hpcHNldHMsIHBvd2VyIG1hbmFnZW1lbnQgc2V0dGluZ3MsIGRlYnVnIGZsYWdzLCBhbmQgbWF5YmUgZXZlbiBmaXJtd2FyZSBzZWxlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gcHJvcGVybHkgY29uZmlndXJlIHRoZSBkcml2ZXIgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0gSSYjMzk7bSB3b3JraW5nIHdpdGggYW5kIHNlZSB3aGF0IHNvcnQgb2YgZmxleGliaWxpdHkgdGhpcyBkcml2ZXIgb2ZmZXJzIG1lLiBMZXTigJlzIGdldCB0byBpdCBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gdGhlcmUuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwgYmVjYXVzZSB0aGVzZSBCcm9hZGNvbSBkcml2ZXJzIGNhbiBzb21ldGltZXMgYmUgYSBiaXQgZGVuc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgQlJDTUZNQUNcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDQ6XHRcdHNlbGVjdCBCUkNNVVRJTFxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXG4gICA3Olx0XHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcbiAgIDg6XHRcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWRcbiAgIDk6XHRcdCAgYnJjbWZtYWMua28uXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG4gIDE1Olx0XHRib29sXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIEJSQ01GTUFDX1NESU9cbiAgMTg6XHRcdGJvb2wgXCYjMzQ7U0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIChNTUMgPSB5IHx8IE1NQyA9IEJSQ01GTUFDKVxuICAyMDpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICAyMTpcdFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMjI6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cbiAgMjY6XHRcdCAgSUVFRTgwMi4xMW4gZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cbiAgMjc6XHRcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGEgU0RJTyB3aXJlbGVzcyBjYXJkLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBCUkNNRk1BQ19VU0JcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7VVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gKFVTQiA9IHkgfHwgVVNCID0gQlJDTUZNQUMpXG4gIDMyOlx0XHRkZXBlbmRzIG9uIEJSQ01GTUFDXG4gIDMzOlx0XHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuICAzNDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxuICAzNzpcdFx0ICBJRUVFODAyLjExbiBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xuICAzODpcdFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYW4gVVNCIHdpcmVsZXNzIGNhcmQuXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIEJSQ01GTUFDX1BDSUVcbiAgNDE6XHRcdGJvb2wgXCYjMzQ7UENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDQyOlx0XHRkZXBlbmRzIG9uIEJSQ01GTUFDXG4gIDQzOlx0XHRkZXBlbmRzIG9uIFBDSVxuICA0NDpcdFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX01TR0JVRlxuICA0NTpcdFx0c2VsZWN0IEZXX0xPQURFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQ0OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDY5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlJDTUZNQUMgRHJpdmVyIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGRyaXZlciBjb25maWd1cmF0aW9uIGFuZCBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIEZpcnN0LCBJIG5lZWQgdG8gZW5hYmxlIGBCUkNNRk1BQ2AgYW5kIGBCUkNNRk1BQ19VU0JgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bGwgYWxzbyBhZGQgYENGRzgwMjExYCwgYFVTQmAsIGFuZCBgTUFDODAyMTFgLCBldmVuIHRob3VnaCBgTUFDODAyMTFgIG1pZ2h0IG5vdCBiZSBzdHJpY3RseSByZXF1aXJlZCBmb3IgYGJyY21mbWFjYC4gQWx3YXlzIGdvb2QgdG8gaGF2ZSBmb3IgY29uc2lzdGVuY3ksIHRob3VnaC4KCkhtbSwgd2FpdC4gYEJSQ01GTUFDX1VTQmAgaGFzIGEgZGVwZW5kZW5jeSBjaGVjay4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgYFVTQiA9IHkgfHwgVVNCID0gQlJDTUZNQUNgLiBKdXN0IHRvIGJlIHNhZmUsIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGF0LiBZZXMsIGNvbmZpcm1lZC4gSSYjMzk7bGwgbWFrZSBzdXJlIGBCUkNNRk1BQ2AgYW5kIGBCUkNNRk1BQ19VU0JgIGFyZSBlbmFibGVkLgoKTmV4dCwgSSYjMzk7bSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgYnJjbWZfcG1rc2FfdjJfb3BgLiBMZXQmIzM5O3MgcmVmcmVzaCBvdXIgbWVtb3J5LiBBaCwgeWVzLCBpdCYjMzk7cyBkZWZpbmVkIGluIGBjZmc4MDIxMS5jYCwgYW5kIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBQTUtTQSAoUGFpcndpc2UgTWFzdGVyIEtleSBTZWN1cml0eSBBc3NvY2lhdGlvbikgdmVyc2lvbiAyIG9wZXJhdGlvbnMuIEl0JiMzOTtzIHVzZWQgaW4gdGhpcyBjb250ZXh0LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIHBvaW50ZXIgdG8gdGhlIHBta3NhIGlzIG51bGwuIElmIGl0IGlzIG51bGwgaXQgZ29lcyB0byBgc2VuZGAgYWZ0ZXIgemVyb2luZyB0aGUgc2hhZG93IGxpc3QgYW5kIHB1c2hpbmcgYW4gZW1wdHkgdmVyc2lvbiAyIGxpc3QuIElmIG5vdCwgaXQgZG9lcyB0aGUgYmVsb3cuIEl0IHRoZW4gYnVpbGRzIGEgd2lyZS1mb3JtYXQgaGVhZGVyIGFuZCBzZW5kcyB0aGUgbGlzdCB0byB0aGUgZmlybXdhcmUuIFRoZSB2ZXJzaW9uIGFuZCBsZW5ndGggYXJlIG9uIHRoZSB3aXJlLgoKVGhlbiBJIHNlZSBpdCB1c2VzIHRoZSBmb2xsb3dpbmc6CgpgYGBjCglsaXN0LSZndDt2ZXJzaW9uID0gY3B1X3RvX2xlMTYoQlJDTUZfUE1LU0FfVkVSXzIpOwoJbGlzdC0mZ3Q7bGVuZ3RoICA9IGNwdV90b19sZTE2KG9mZnNldG9mKHN0cnVjdCBicmNtZl9wbWtfbGlzdF92Ml9sZSwgcG1rKSAmIzQzOwoJCQkJICAgbnBtayAqIHNpemVvZihzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIpKTsKCglyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgJiMzNDtwbWtpZF9pbmZvJiMzNDssIGxpc3QsIHNpemVvZigqbGlzdCkpOwpgYGAKCk9rYXksIHNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIG5sODAyMTEsIHJpZ2h0PyBZZXMsIGNvbmZpcm1lZC4gSXQgdXNlcyBpb3ZhciB0byBzZXQgJiMzNDtwbWtpZF9pbmZvJiMzNDsuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBtaW5vciBtb2RpZmljYXRpb24gdG8gYGJyY21mX2RlbGF5YCBpbiBgY2ZnODAyMTEuY2AuIEl0JiMzOTtzIGEgc21hbGwgY2hhbmdlIHdpdGggdGhlIGB1c2xlZXBfcmFuZ2VgIGZ1bmN0aW9uIGNhbGwuIEhvd2V2ZXIsIGBicmNtZl9wbWtzYV92Ml9vcGAgaXRzZWxmIHNlZW1zIGxpa2UgYSBzaWduaWZpY2FudCBhZGRpdGlvbi4KCkxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWFjaGFibGUgZnVuY3Rpb25zLiBgYnJjbWZfbmV0aWZfbW9uX3J4YCwgYGJyY21mX2Zsb3dyaW5nX2Jsb2NrYCwgYGJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGFgLCBhbmQgYGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhYCBhbGwgc2VlbSB0byBiZSBQQ0llLXNwZWNpZmljLiBUaGUgYGJyY21mX3NkaW9fcnhnbG9tYCBzZWVtcyB0byBiZSBTRElPLXNwZWNpZmljLgoKV2FpdCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4uLiBJIGp1c3Qgd2FudCB0byBkb3VibGUgY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBgYnJjbWZfZmxvd3JpbmdfYmxvY2tgLiBJcyB0aGF0IHJlYWxseSBQQ0llLW9ubHk/IEkgc2hvdWxkIHZlcmlmeSB3aGV0aGVyIGBmbG93cmluZy5jYCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgaW5jbHVkZWQgZm9yIFVTQiBjb25maWd1cmF0aW9ucyB0b28uIFRoaXMgY291bGQgYmUgYSBibGluZCBzcG90IEkgbmVlZCB0byBhZGRyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93cmluZy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT0zMj1icmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQ19QUk9UT19NU0dCVUYpICYjNDM7PSBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTMzLVx0XHRjb21tb25yaW5nLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZTozNDpcdFx0Zmxvd3JpbmcubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTM1LVx0XHRtc2didWYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA4NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgZmxvd3Jpbmcub2AgYW5kIFJlbGF0ZWQgQ29kZSBQYXRocyoqCgpPa2F5LCBzbyBpdCYjMzk7cyBjbGVhciB0aGF0IGBmbG93cmluZy5vYCBpcyAqZGVmaW5pdGVseSogb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlJDTUZNQUNfUFJPVE9fTVNHQlVGYCBpcyBlbmFibGVkLiBBbmQsIHRoYXQgYENPTkZJR19CUkNNRk1BQ19QUk9UT19NU0dCVUZgIGdldHMgc2VsZWN0ZWQgdmlhIGBDT05GSUdfQlJDTUZNQUNfUENJRWAuIFRoZXJlZm9yZSwgYGZsb3dyaW5nLmNgIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gUENJZSwgbm8gc3VycHJpc2VzIHRoZXJlLgoKTm93LCB3aGF0IGFib3V0IGBicmNtZl9zZGlvX3J4Z2xvbWA/IEhtbSwgdGhhdCYjMzk7cyB0dWNrZWQgYXdheSBpbiBgc2Rpby5jYCwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19CUkNNRk1BQ19TRElPYCBlbmFibGVkLiBHaXZlbiBTeXprYWxsZXImIzM5O3MgY3VycmVudCBsYWNrIG9mIFNESU8gZW11bGF0aW9uLCB0aGF0IHBhdGggaXMgY2xlYXJseSBub3QgcmVsZXZhbnQgZm9yIGZ1enppbmcsIGF0IGxlYXN0IG5vdCBkaXJlY3RseS4KClNvLCBpZiB3ZSYjMzk7cmUgaWdub3JpbmcgU0RJTywgdGhhdCBuYXJyb3dzIHRoZSBhdHRhY2sgc3VyZmFjZS4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgb25seSByZWFjaGFibGUgYXJlYXMsIGluaXRpYWxseSwgYXJlIHdpdGhpbiBgY2ZnODAyMTEuY2AgYW5kIHBvdGVudGlhbGx5IGBjb3JlLmNgLCBidXQgb25seSBpZiBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBjYWxsZWQuIEFoLCBidXQgdGhhdCBmdW5jdGlvbiwgYGJyY21mX25ldGlmX21vbl9yeGAsICppcyogaW4gYGNvcmUuY2AsIHdoaWNoIGlzIGFsd2F5cyBjb21waWxlZC4gSG93ZXZlciwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgY2FsbCBzaXRlcy4gSWYgdGhlIHByaW1hcnkgY2FsbCBzaXRlIGlzIGZyb20gYG1zZ2J1Zi5jYCB0aGF0IHdvdWxkIGNvbnN0cmFpbiBpdCB0byBQQ0llIHVzZSBhcyB3ZWxsLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGZvciBhbnkgb3RoZXIgY2FsbCBsb2NhdGlvbnMganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFdlIGNhbiYjMzk7dCBhZmZvcmQgdG8gb3Zlcmxvb2sgYW55dGhpbmcsIGhvd2V2ZXIgc21hbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX25ldGlmX21vbl9yeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTQzND1zdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00MzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjQzOTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNDQwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oPTIyMD12b2lkIGJyY21mX25ldGlmX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg6MjIxOnZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmgtMjIyLXZvaWQgYnJjbWZfbmV0X2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBsb2NrZWQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xMjAwPWJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1Ziwgdm9pZCAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEyNDE6XHRcdGJyY21mX25ldGlmX21vbl9yeChpZnAsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTI0Mi1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzIzMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBDb2RlIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbXNnYnVmLmNgIGFuZCB0cnlpbmcgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIGJhc2VkIG9uIHRoZSBwYXRjaC4gQmFzZWQgb24gdGhlIGNvZGUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlOiBgYnJjbWZfcG1rc2FfdjJfb3BgLCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCwgYGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYWAsIGFuZCBgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FgLgoKYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSwgd2hpbGUgaXQmIzM5O3Mgbm90IGVudGlyZWx5IG5ldywgaXQmIzM5O3MgYmVlbiBtb2RpZmllZCB0byBjYWxsIHRoZSBuZXcgYGJyY21mX3Bta3NhX3YyX29wYC4gSW5pdGlhbGx5LCBgYnJjbWZfcG1rc2FfdjJfb3BgIHNlZW1lZCBsaWtlIHRoZSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24uIEhvd2V2ZXIsIGl0JiMzOTtzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbi4KClRoZSBwcm9tcHQgZGlyZWN0cyB1cyB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0JiMzOTtzIGNoZWNrIHRoZSBzdGF0aWMgc3RhdHVzIG9mIHRoZSBmdW5jdGlvbnMuIGBicmNtZl9wbWtzYV92Ml9vcGAgaXMgaW5kZWVkIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGFuIGlkZWFsIGNhbmRpZGF0ZS4gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYCBhcmUgYWxzbyBzdGF0aWMuCgpXYWl0IGEgbWludXRlLCBhbHRob3VnaCB0aGV5IGFyZSBzdGF0aWMsIHRoZXkgYXJlIGFzc2lnbmVkIHRvIGBjZmc4MDIxMV9vcHNgLCBtYWtpbmcgdGhlbSBBUEkgZW50cnkgcG9pbnRzLiBUaGF0IG1ha2VzIHRoZW0gYmV0dGVyIGNob2ljZXMgdGhhbiBgYnJjbWZfcG1rc2FfdjJfb3BgLgoKSSBhbHNvIG5vdGljZWQgYGJyY21mX25ldGlmX21vbl9yeGAgd2hpY2ggaXMgbm9uLXN0YXRpYywgYnV0IGl0IGlzIHJlYWNoZWQgdmlhIFBDSWUuIFRoZSBwcm9tcHQgc3RhdGVzIHdlIGRvbiYjMzk7dCB3YW50IHRvIGluY2x1ZGUgUENJZS1zcGVjaWZpYyBjb2RlIHRoYXQgcmVxdWlyZXMgaGFyZHdhcmUsIGJ1dCBzaW5jZSB0aGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBVU0ItcmVhY2hhYmxlIGNvZGUgKHJlbGF0ZWQgdG8gYGJyY21mX3Bta3NhX3YyX29wYCksIHRoZSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIG1lYW5zLgoKVGhlcmVmb3JlLCBmb3IgYEZvY3VzU3ltYm9sc2AsIEkmIzM5O2xsIGxpc3QgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYCBhcyB0aGUgbW9zdCBwcm9taXNpbmcgdGFyZ2V0cywgZGVzcGl0ZSB0aGVpciBzdGF0aWMgbmF0dXJlLiBUaGVpciBhc3NpZ25tZW50IHRvIGBjZmc4MDIxMV9vcHNgIG1ha2VzIHRoZW0gZW50cnkgcG9pbnRzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGBjZmc4MDIxMS5jYCBmb3IgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgLiBJdCYjMzk7cyBnb29kIHRvIGJlIGNhdXRpb3VzIGFuZCBjaGVjayBmb3IgaW5saW5pbmcsIGJ1dCB0aGVzZSBgY2ZnODAyMTFgIGNhbGxiYWNrcyBhcmUgbW9zdCBsaWtlbHkgbXkgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQ0ODE9c3RhdGljIHMzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDQ4MjpicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NDgzLVx0XHRcdCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTYwNzg9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYnJjbWZfY2ZnODAyMTFfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYwOTktXHQucmVzdW1lID0gYnJjbWZfY2ZnODAyMTFfcmVzdW1lLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjEwMDpcdC5zZXRfcG1rc2EgPSBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2EsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MTAxLVx0LmRlbF9wbWtzYSA9IGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzMTUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCB0aGVzZSBzZWVtIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGVzIOKAkyB0aGUgb25lcyB0aGF0IGNvdWxkIHNlcnZlIGFzIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBzeXN0ZW0uIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGZldyB0aGluZ3MgdG8gYmUgc3VyZS4KClJpZ2h0LCB3aGF0IGFib3V0IGBicmNtZl9uZXRpZl9tb25fcnhgPyBJdCYjMzk7cyBub3Qgc3RhdGljLCBzbyBJIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgaXQgYXMgYSBwb3NzaWJpbGl0eSwganVzdCB0byBiZSB0aG9yb3VnaC4gTm93LCBob3cgYWJvdXQgYGJyY21mX2Zsb3dyaW5nX2Jsb2NrYD8gVGhhdCBvbmUgKmlzKiBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGV4Y2x1ZGUgaXQgZm9yIG5vdy4gQW5kIGBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhYD8gQWxzbyBzdGF0aWMsIHNvIGl0JiMzOTtzIG9mZiB0aGUgbGlzdC4gVGhlbiB0aGVyZSYjMzk7cyBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgLiBOb24tc3RhdGljIGFnYWluLCBzbyB0aGF0JiMzOTtzIGEga2VlcGVyLiBBbmQgZmluYWxseSwgYGJyY21mX3NkaW9fcnhnbG9tYCwgd2hpY2ggaXMgc3RhdGljLCBzbyBJJiMzOTtsbCBsZWF2ZSBpdC4KCkFscmlnaHQsIHNvIHRha2luZyBhbGwgb2YgdGhhdCBpbnRvIGFjY291bnQsIEkgYmVsaWV2ZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzIGFyZToKCiogICBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYAoqICAgYGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYWAKKiAgIGBicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYWAKKiAgIGBicmNtZl9uZXRpZl9tb25fcnhgCiogICBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgCgpIYW5nIG9uLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgd2hlcmUgYGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhYCByZXNpZGVzLiBBaCwgeWVzLCBpdCYjMzk7cyBkZWZpbmVkIGluIGBwY2llLmNgLiBHb29kLCBhbmQgbGV0IG1lIGp1c3QgbWFrZSBzdXJlIGl0JiMzOTtzICpzdGlsbCogbm9uLXN0YXRpYy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9wY2llX3NlbmRfbWJfZGF0YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTc4Mz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjc4NDpicmNtZl9wY2llX3NlbmRfbWJfZGF0YShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgaHRvZF9tYl9kYXRhKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy03ODUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9ODUwPXN0YXRpYyB2b2lkIGJyY21mX3BjaWVfaGFuZGxlX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTg2Ny1cdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O0QySF9NQl9EQVRBOiBERUVQIFNMRUVQIFJFUVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjg2ODpcdFx0YnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoZGV2aW5mbywgQlJDTUZfSDJEX0hPU1RfRFNfQUNLKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtODY5LVx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7RDJIX01CX0RBVEE6IHNlbnQgREVFUCBTTEVFUCBBQ0tcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjY3Nj1zdGF0aWMgaW50IGJyY21mX3BjaWVfcG1fZW50ZXJfRDMoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY4OS1cdGRldmluZm8tXHUwMDNlbWJkYXRhX2NvbXBsZXRlZCA9IGZhbHNlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNjkwOlx0YnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoZGV2aW5mbywgQlJDTUZfSDJEX0hPU1RfRDNfSU5GT1JNKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY5MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI3MDY9c3RhdGljIGludCBicmNtZl9wY2llX3BtX2xlYXZlX0QzKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3MjEtXHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtUcnkgdG8gd2FrZXVwIGRldmljZS4uLi5cXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNzIyOlx0XHRpZiAoYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoZGV2aW5mbywgQlJDTUZfSDJEX0hPU1RfRDBfSU5GT1JNKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjcyMy1cdFx0XHRnb3RvIGNsZWFudXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzczCgkJCQkJCQlvdXRwdXQ6IDIyMgoJCQkJCQkJdGhvdWdodHM6IDEyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFN5emthbGxlciBDb25maWd1cmF0aW9uIGZvciBCcm9hZGNvbSBXaS1GaSBEcml2ZXIgQ292ZXJhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBlbmhhbmNpbmcgU3l6a2FsbGVyJiMzOTtzIGZ1enppbmcgY292ZXJhZ2UgZm9yIHRoaXMgYGJyY21mbWFjYCBkcml2ZXIgcGF0Y2guIEkmIzM5O3ZlIGJlZW4gdGhpbmtpbmcgdGhyb3VnaCB0aGUgYmVzdCBhcHByb2FjaCB0byBjb25maWd1cmUgU3l6a2FsbGVyIHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlIGNoYW5nZXMuCgpJbml0aWFsbHksIEkgaWRlbnRpZmllZCBzb21lIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gSSBzdGFydGVkIHdpdGggYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgYmVjYXVzZSBpdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXcgVjIgUE1LU0EgbG9naWMuIEkgaW5jbHVkZWQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgIGFuZCBgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FgIGFzIHdlbGwgYmVjYXVzZSB0aGV5IGFyZSBhbHNvIGludm9sdmVkIGluIHRoZSBQTUtTQSBjYWNoZSBvcGVyYXRpb25zLiBJIGFsc28gbm90ZWQgYGJyY21mX25ldGlmX21vbl9yeGAgYmVjYXVzZSBpdCBsb29rZWQgbGlrZSBhIG5vbi1zdGF0aWMsIG1vZGlmaWVkIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gcmFkaW90YXAgaGVhZGVyIG1vZGlmaWNhdGlvbnMgaW4gbW9uaXRvciBtb2RlLgoKQmFzZWQgb24gdGhlc2UgaW5pdGlhbCBvYnNlcnZhdGlvbnMsIEkgZGVjaWRlZCB0byBjaGVjayB3aGljaCBjb25maWdzIHdvdWxkIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSwgc3RhcnRpbmcgd2l0aCBgQlJDTUZNQUNgLCBhbmQgYEJSQ01GTUFDX1VTQmAuIEJlY2F1c2UgYEJSQ01GTUFDX1VTQmAgZGVwZW5kcyBvbiBgVVNCYCwgSSBjb25maXJtZWQgYFVTQmAgc2hvdWxkIGFsc28gYmUgZW5hYmxlZC4gVGhlbiwgSSBvYnNlcnZlZCB0aGF0IGBCUkNNRk1BQ2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ0ZHODAyMTFgLCBzbyB0aGF0IHNob3VsZCBiZSBlbmFibGVkIHRvby4gU2luY2UgU3l6a2FsbGVyIGNhbiBlbXVsYXRlIHRoZSBCcm9hZGNvbSBkZXZpY2UgdmlhIGl0cyBVU0IgZnV6emVyLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgYXBwcm9hY2ggd291bGQgYmUgc3VpdGFibGUuCgpIb3dldmVyLCBJIGFsc28gcmVhbGl6ZWQgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBQQ0llIG1haWxib3ggcG9sbGluZy4gVG8gZW5zdXJlIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UsIEkmIzM5O2xsIGFsc28gZW5hYmxlIGBCUkNNRk1BQ19QQ0lFYCBhcyB3ZWxsLiBGb3IgZ29vZCBtZWFzdXJlLCBJIGNvdWxkIGFsc28gZW5hYmxlIGBCUkNNRk1BQ19TRElPYCBidXQgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGZ1enogU0RJTywgc28gSSBkZWNpZGVkIG5vdCB0byBlbmFibGUgaXQuIEkmIzM5O2xsIHN0aWNrIHRvIGxpc3RpbmcgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGFuZCBgQlJDTUZNQUNfUENJRWAgYXMgZW5hYmxlZCBjb25maWdzLgoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjayBteSBhbmFseXNpcyB0byBlbnN1cmUgdGhhdCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCBpcyB0cnVseSB3b3J0aCBsaXN0aW5nLiBBZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoJiMzOTtzIHJlYXNvbmluZywgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIHBhdGNoIGludHJvZHVjZXMgVjIgUE1LU0EgY2FjaGUgb3BlcmF0aW9ucyB0byB0aGUgZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgYGNmZzgwMjExYCBuZXRsaW5rIGNvbW1hbmRzIGFuZCB0aGF0IFN5emthbGxlciBjYW4gZW11bGF0ZSB0aGlzLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIG1vZGlmaWNhdGlvbiB0byByYWRpb3RhcCBoZWFkZXIgaW5zZXJ0aW9uIGluIG1vbml0b3IgbW9kZSBhbmQgUENJZSBtYWlsYm94IHBvbGxpbmcuIFRoZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBhZGRlZCBWMiBQTUtTQSBjYWNoZSBsb2dpYyBhbmQgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcy4KCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgY29ycmVjdGx5IHN0YXRlZDogYFdvcnRoRnV6emluZ2AgaXMgdHJ1ZS4gVGhlIGZvY3VzIHN5bWJvbHMgaW5pdGlhbGx5IGFyZTogYFsmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LCAmIzM0O2JyY21mX2NmZzgwMjExX2RlbF9wbWtzYSYjMzQ7LCAmIzM0O2JyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhJiMzNDssICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDtdYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IGxpc3RlZCBhcyBgWyYjMzQ7QlJDTUZNQUMmIzM0OywgJiMzNDtCUkNNRk1BQ19VU0ImIzM0OywgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssICYjMzQ7Q0ZHODAyMTEmIzM0O11gLgoKSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlIGFnYWluLCBjb25zaWRlcmluZyBzdGF0aWMgdmVyc3VzIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhbiBBUEkgZW50cnkgcG9pbnQsIHNvIGl0IGlzIHdvcnRod2hpbGUgdG8gaW5jbHVkZSBpdCBpbiB0aGUgZm9jdXMuIEFsc28sIGJhc2VkIG9uIG15IHByZXZpb3VzIGFuYWx5c2lzLCBJIGNvbmZpcm1lZCBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBub24tc3RhdGljIGFuZCBtb2RpZmllZCwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpJJiMzOTt2ZSBhbHNvIG9ic2VydmVkIHRoZSBmb2xsb3dpbmcgZHVyaW5nIG15IGNvZGUgcmV2aWV3OgoqICAgYGJyY21mX2Zsb3dyaW5nX2F0dGFjaGAgaXMgbW9kaWZpZWQgYW5kIGl0IGluaXRpYWxpemVzIGBpZl9ibG9ja2VkX2NudGAKKiAgIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCBpcyBub24tc3RhdGljLCBzbyBJIGNhbiBhbHNvIGluY2x1ZGUgaXQKCk15IGZpbmFsIGBGb2N1c1N5bWJvbHNgIGFyZTogYFsmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LCAmIzM0O2JyY21mX2NmZzgwMjExX2RlbF9wbWtzYSYjMzQ7LCAmIzM0O2JyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhJiMzNDssICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDssICYjMzQ7YnJjbWZfZmxvd3JpbmdfYXR0YWNoJiMzNDssICYjMzQ7YnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaCYjMzQ7XWAuCgpUaGUgY29uZmlncyBhcmU6IGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQlJDTUZNQUNfUENJRWAsIGBDRkc4MDIxMWAuCgpJdCBsb29rcyBsaWtlIHRoaXMgaXMgYSBnb29kLCByZWZpbmVkIHNldHVwIGZvciBTeXprYWxsZXIgdG8gYmVnaW4gZnV6emluZyB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhpcyBwYXRjaCwgZW5zdXJpbmcgY292ZXJhZ2Ugb2YgdGhlIG5ldyBQTUtTQSBsb2dpYyBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19VU0ImIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfUENJRSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9kZWxfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVjIgUE1LU0EgY2FjaGUgb3BlcmF0aW9ucyBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNmZzgwMjExIG5ldGxpbmsgY29tbWFuZHMgd2hlbiBhIEJyb2FkY29tIFdpLUZpIGRldmljZSBpcyBwcmVzZW50LiBTeXprYWxsZXIgY2FuIGVtdWxhdGUgc3VjaCBhIGRldmljZSB2aWEgaXRzIFVTQiBmdXp6ZXIsIG1ha2luZyB0aGlzIG5ldyBsb2dpYyByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyByYWRpb3RhcCBoZWFkZXIgaW5zZXJ0aW9uIGluIG1vbml0b3IgbW9kZSBhbmQgUENJZSBtYWlsYm94IHBvbGxpbmcsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhJiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2RlbF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9uZXRpZl9tb25fcngmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWMiBQTUtTQSBjYWNoZSBvcGVyYXRpb25zIGluIHRoZSBicmNtZm1hYyBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY2ZnODAyMTEgbmV0bGluayBjb21tYW5kcyB3aGVuIGEgQnJvYWRjb20gV2ktRmkgZGV2aWNlIGlzIHByZXNlbnQuIFN5emthbGxlciBjYW4gZW11bGF0ZSBzdWNoIGEgZGV2aWNlIHZpYSBpdHMgVVNCIGZ1enplciwgbWFraW5nIHRoaXMgbmV3IGxvZ2ljIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIHJhZGlvdGFwIGhlYWRlciBpbnNlcnRpb24gaW4gbW9uaXRvciBtb2RlIGFuZCBQQ0llIG1haWxib3ggcG9sbGluZywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE3OjU0LjcwMTE5MjU1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Mzc2MzkxNzcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUkNNRk1BQ1wiLFxuICAgIFwiQlJDTUZNQUNfVVNCXCIsXG4gICAgXCJCUkNNRk1BQ19QQ0lFXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX2NmZzgwMjExX3NldF9wbWtzYVwiLFxuICAgIFwiYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhXCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYVwiLFxuICAgIFwiYnJjbWZfbmV0aWZfbW9uX3J4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWMiBQTUtTQSBjYWNoZSBvcGVyYXRpb25zIGluIHRoZSBicmNtZm1hYyBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY2ZnODAyMTEgbmV0bGluayBjb21tYW5kcyB3aGVuIGEgQnJvYWRjb20gV2ktRmkgZGV2aWNlIGlzIHByZXNlbnQuIFN5emthbGxlciBjYW4gZW11bGF0ZSBzdWNoIGEgZGV2aWNlIHZpYSBpdHMgVVNCIGZ1enplciwgbWFraW5nIHRoaXMgbmV3IGxvZ2ljIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIHJhZGlvdGFwIGhlYWRlciBpbnNlcnRpb24gaW4gbW9uaXRvciBtb2RlIGFuZCBQQ0llIG1haWxib3ggcG9sbGluZywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTc6NTQuNzAxMjAwMTE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE4ODA0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZmUxNjdlNDU2ZGExY2FmOTI4MjY5OTI5NTMzMTk1YTNmY2EzMTJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDY6MTc6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xcbmluZGV4IDBiNTVkNDQ1ODk1ZjIuLjdkN2U1ZWNlY2QyMjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xcbkBAIC0zOTg5LDEyICszOTg5LDEwIEBAIHN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdG9wKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYnJjbWZfZGVsYXkodTMyIG1zKVxcbiB7XFxuLVxcdGlmIChtcyBcXHUwMDNjIDEwMDAgLyBIWikge1xcbi1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tXFx0XFx0bWRlbGF5KG1zKTtcXG4tXFx0fSBlbHNlIHtcXG4rXFx0aWYgKG1zIFxcdTAwM2M9IDIwKVxcbitcXHRcXHR1c2xlZXBfcmFuZ2UobXMgKiAxMDAwLCBtcyAqIDEwMDAgKyAxMDAwKTtcXG4rXFx0ZWxzZVxcbiBcXHRcXHRtc2xlZXAobXMpO1xcbi1cXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBzMzIgYnJjbWZfY29uZmlnX3dvd2xfcGF0dGVybihzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgdTggY21kWzRdLFxcbkBAIC00MzY0LDYgKzQzNjIsMTA0IEBAIGJyY21mX3Bta3NhX3YzX29wKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogYnJjbWZfcG1rc2FfdjJfb3AgLSB1cGRhdGUgZmlybXdhcmUgUE1LU0EgY2FjaGUgdXNpbmcgdGhlIFYyIGxpc3QgaW50ZXJmYWNlLlxcbisgKlxcbisgKiBWMiBmaXJtd2FyZSAocmV2aXNpb24gMTIpIHVzZXMgYSB2ZXJzaW9uZWQgZmxhdCBsaXN0IHN0cnVjdHVyZVxcbisgKiAoYnJjbWZfcG1rX2xpc3RfdjJfbGUpIHJhdGhlciB0aGFuIHRoZSBwZXItZW50cnkgb3BlcmF0aW9uIG1vZGVsIG9mIFYzLlxcbisgKiBFYWNoIGVudHJ5IGNhcnJpZXMgRklMUy1zcGVjaWZpYyBmaWVsZHMgKHJhdyBQTUsgbWF0ZXJpYWwsIFNTSUQsIGFuZFxcbisgKiBmaWxzX2NhY2hlX2lkKSBpbiBhZGRpdGlvbiB0byB0aGUgYmFzaWMgQlNTSUQgKyBQTUtJRCBwYWlyLCBlbmFibGluZ1xcbisgKiBGSUxTIGZhc3Qtcm9hbWluZyBvbiBkZXZpY2VzIHRoYXQgZG8gbm90IHN1cHBvcnQgVjMuXFxuKyAqXFxuKyAqIEBjZmc6ICAgZHJpdmVyIGNvbmZpZyBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgc2hhZG93IFYyIFBNS1NBIGxpc3RcXG4rICogQGlmcDogICBpbnRlcmZhY2UgcG9pbnRlclxcbisgKiBAcG1rc2E6IHRoZSBQTUtTQSB0byBhZGQvcmVtb3ZlLCBvciBOVUxMIGZvciBhIGZsdXNoXFxuKyAqIEBhbGl2ZTogdHJ1ZSA9IGFkZCAoc2V0IHRpbWVfbGVmdCB0byBuby1leHBpcnkpLCBmYWxzZSA9IHJlbW92ZS9mbHVzaFxcbisgKi9cXG4rc3RhdGljIHMzMlxcbiticmNtZl9wbWtzYV92Ml9vcChzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLCBzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcXG4rXFx0XFx0ICBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLCBib29sIGFsaXZlKVxcbit7XFxuK1xcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBjZmctXFx1MDAzZXB1YjtcXG4rXFx0c3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlICpsaXN0ID0gXFx1MDAyNmNmZy1cXHUwMDNlcG1rX2xpc3RfdjI7XFxuK1xcdHN0cnVjdCBicmNtZl9wbWtzYV92MiAqcG1rID0gbGlzdC1cXHUwMDNlcG1rO1xcbitcXHR1MzIgbnBtayA9IGxlMTZfdG9fY3B1KGxpc3QtXFx1MDAzZWxlbmd0aCk7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0LyogbnBtayBoZXJlIHN0b3JlcyB0aGUgY291bnQgb2YgdmFsaWQgZW50cmllcywgcmVwdXJwb3NpbmcgdGhlXFxuK1xcdCAqIGxlbmd0aCBmaWVsZCBvZiB0aGUgc2hhZG93IGxpc3QgYXMgYSBjb3VudGVyLiAgV2UgY29udmVydCB0b1xcbitcXHQgKiB0aGUgd2lyZSBmb3JtYXQgKGJ5dGUgbGVuZ3RoKSB3aGVuIHNlbmRpbmcgdG8gZmlybXdhcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXBta3NhKSB7XFxuK1xcdFxcdC8qIEZsdXNoOiB6ZXJvIHRoZSBzaGFkb3cgbGlzdCBhbmQgcHVzaCBhbiBlbXB0eSBWMiBsaXN0LiAqL1xcbitcXHRcXHRtZW1zZXQobGlzdCwgMCwgc2l6ZW9mKCpsaXN0KSk7XFxuK1xcdFxcdGdvdG8gc2VuZDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFsaXZlKSB7XFxuK1xcdFxcdC8qIFNldDogc2VhcmNoIGZvciBleGlzdGluZyBCU1NJRCBtYXRjaCBmaXJzdC4gKi9cXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wbWs7IGkrKylcXG4rXFx0XFx0XFx0aWYgKCFtZW1jbXAocG1rc2EtXFx1MDAzZWJzc2lkLCBwbWtbaV0uYnNzaWQsIEVUSF9BTEVOKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAoaSBcXHUwMDNlPSBCUkNNRl9NQVhQTUtJRCkge1xcbitcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiVjIgUE1LU0EgY2FjaGUgZnVsbCAoJWQgZW50cmllcylcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBucG1rKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1lbXNldChcXHUwMDI2cG1rW2ldLCAwLCBzaXplb2YocG1rW2ldKSk7XFxuK1xcdFxcdHBta1tpXS5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGJyY21mX3Bta3NhX3YyKSk7XFxuK1xcdFxcdGlmIChwbWtzYS1cXHUwMDNlYnNzaWQpXFxuK1xcdFxcdFxcdG1lbWNweShwbWtbaV0uYnNzaWQsIHBta3NhLVxcdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xcbitcXHRcXHRpZiAocG1rc2EtXFx1MDAzZXBta2lkKVxcbitcXHRcXHRcXHRtZW1jcHkocG1rW2ldLnBta2lkLCBwbWtzYS1cXHUwMDNlcG1raWQsIFdMQU5fUE1LSURfTEVOKTtcXG4rXFx0XFx0aWYgKHBta3NhLVxcdTAwM2VwbWsgXFx1MDAyNlxcdTAwMjYgcG1rc2EtXFx1MDAzZXBta19sZW4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHBta3NhLVxcdTAwM2VwbWtfbGVuIFxcdTAwM2M9IFdMQU5fUE1LX0xFTl9TVUlURV9CXzE5Mikge1xcbitcXHRcXHRcXHRtZW1jcHkocG1rW2ldLnBtaywgcG1rc2EtXFx1MDAzZXBtaywgcG1rc2EtXFx1MDAzZXBta19sZW4pO1xcbitcXHRcXHRcXHRwbWtbaV0ucG1rX2xlbiA9IGNwdV90b19sZTE2KHBta3NhLVxcdTAwM2VwbWtfbGVuKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocG1rc2EtXFx1MDAzZXNzaWQgXFx1MDAyNlxcdTAwMjYgcG1rc2EtXFx1MDAzZXNzaWRfbGVuKSB7XFxuK1xcdFxcdFxcdG1lbWNweShwbWtbaV0uc3NpZC5TU0lELCBwbWtzYS1cXHUwMDNlc3NpZCwgcG1rc2EtXFx1MDAzZXNzaWRfbGVuKTtcXG4rXFx0XFx0XFx0cG1rW2ldLnNzaWQuU1NJRF9sZW4gPSBwbWtzYS1cXHUwMDNlc3NpZF9sZW47XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHBta3NhLVxcdTAwM2VmaWxzX2NhY2hlX2lkKVxcbitcXHRcXHRcXHRwbWtbaV0uZmlsc19jYWNoZV9pZCA9ICpwbWtzYS1cXHUwMDNlZmlsc19jYWNoZV9pZDtcXG4rXFxuK1xcdFxcdGlmIChpID09IG5wbWspXFxuK1xcdFxcdFxcdG5wbWsrKztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogRGVsZXRlOiBmaW5kIGJ5IEJTU0lEIGFuZCBjb21wYWN0IHRoZSBsaXN0LiAqL1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnBtazsgaSsrKVxcbitcXHRcXHRcXHRpZiAoIW1lbWNtcChwbWtzYS1cXHUwMDNlYnNzaWQsIHBta1tpXS5ic3NpZCwgRVRIX0FMRU4pKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmIChpIFxcdTAwM2U9IG5wbWspIHtcXG4rXFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcIlYyIFBNS1NBIGVudHJ5IG5vdCBmb3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIG5wbWsgLSAxOyBpKyspXFxuK1xcdFxcdFxcdG1lbWNweShcXHUwMDI2cG1rW2ldLCBcXHUwMDI2cG1rW2kgKyAxXSwgc2l6ZW9mKHBta1tpXSkpO1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNnBta1tucG1rIC0gMV0sIDAsIHNpemVvZihwbWtbbnBtayAtIDFdKSk7XFxuK1xcdFxcdG5wbWstLTtcXG4rXFx0fVxcbitcXG4rXFx0LyogVXBkYXRlIHNoYWRvdyBlbnRyeSBjb3VudCAoc3RvcmVkIGluIGxlbmd0aCBmaWVsZCkuICovXFxuK1xcdGxpc3QtXFx1MDAzZWxlbmd0aCA9IGNwdV90b19sZTE2KG5wbWspO1xcbitcXG4rc2VuZDpcXG4rXFx0LyogQnVpbGQgdGhlIHdpcmUtZm9ybWF0IGhlYWRlciBhbmQgc2VuZCB0aGUgZnVsbCBsaXN0IHRvIGZpcm13YXJlLlxcbitcXHQgKiB2ZXJzaW9uIGFuZCBsZW5ndGggb24gdGhlIHdpcmUgcmVmbGVjdCB0aGUgYWN0dWFsIGJ5dGUgZm9vdHByaW50LlxcbitcXHQgKi9cXG4rXFx0bGlzdC1cXHUwMDNldmVyc2lvbiA9IGNwdV90b19sZTE2KEJSQ01GX1BNS1NBX1ZFUl8yKTtcXG4rXFx0bGlzdC1cXHUwMDNlbGVuZ3RoICA9IGNwdV90b19sZTE2KG9mZnNldG9mKHN0cnVjdCBicmNtZl9wbWtfbGlzdF92Ml9sZSwgcG1rKSArXFxuK1xcdFxcdFxcdFxcdCAgIG5wbWsgKiBzaXplb2Yoc3RydWN0IGJyY21mX3Bta3NhX3YyKSk7XFxuK1xcbitcXHRyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcInBta2lkX2luZm9cXFwiLCBsaXN0LCBzaXplb2YoKmxpc3QpKTtcXG4rfVxcbitcXG4rXFxuIHN0YXRpYyBfX3VzZWQgczMyXFxuIGJyY21mX3VwZGF0ZV9wbWtsaXN0KHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwKVxcbiB7XFxuQEAgLTQ0MDIsOCArNDQ5OCw4IEBAIGJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFxuIFxcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YzKSlcXG4gXFx0XFx0cmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgcG1rc2EsIHRydWUpO1xcbi1cXG4tXFx0LyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovXFxuK1xcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcXG4rXFx0XFx0cmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBwbWtzYSwgdHJ1ZSk7XFxuIFxcbiBcXHRucG1rID0gbGUzMl90b19jcHUoY2ZnLVxcdTAwM2VwbWtfbGlzdC5ucG1rKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wbWs7IGkrKylcXG5AQCAtNDQ0Niw4ICs0NTQyLDggQEAgYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxcbiBcXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBwbWtzYSwgZmFsc2UpO1xcbi1cXG4tXFx0LyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovXFxuK1xcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcXG4rXFx0XFx0cmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBwbWtzYSwgZmFsc2UpO1xcbiBcXG4gXFx0bnBtayA9IGxlMzJfdG9fY3B1KGNmZy1cXHUwMDNlcG1rX2xpc3QubnBtayk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucG1rOyBpKyspXFxuQEAgLTQ0ODcsOCArNDU4Myw4IEBAIGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxcbiBcXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBOVUxMLCBmYWxzZSk7XFxuLVxcbi1cXHQvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi9cXG4rXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxcbitcXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTtcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2Y2ZnLVxcdTAwM2VwbWtfbGlzdCwgMCwgc2l6ZW9mKGNmZy1cXHUwMDNlcG1rX2xpc3QpKTtcXG4gXFx0ZXJyID0gYnJjbWZfdXBkYXRlX3Bta2xpc3QoY2ZnLCBpZnApO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXFxuaW5kZXggNmNlYjMwMTQyOTA1NC4uNTcxNjdmZGU1YmExNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXFxuQEAgLTM0NCw3ICszNDQsOCBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfd293bCB7XFxuICAqIEBic3NfbGlzdDogYnNzX2xpc3QgaG9sZGluZyBzY2FubmVkIGFwIGluZm9ybWF0aW9uLlxcbiAgKiBAYnNzX2luZm86IGJzcyBpbmZvcm1hdGlvbiBmb3IgY2ZnODAyMTEgbGF5ZXIuXFxuICAqIEBjb25uX2luZm86IGFzc29jaWF0aW9uIGluZm8uXFxuLSAqIEBwbWtfbGlzdDogd3BhMiBwbWsgbGlzdC5cXG4rICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0IChWMSBmaXJtd2FyZSkuXFxuKyAqIEBwbWtfbGlzdF92Mjogd3BhMiBwbWsgbGlzdCBmb3IgVjIgZmlybXdhcmUgKEZJTFMtY2FwYWJsZSwgZmlybXdhcmUgcmV2IDEyKS5cXG4gICogQHNjYW5fc3RhdHVzOiBzY2FuIGFjdGl2aXR5IG9uIHRoZSBkb25nbGUuXFxuICAqIEBwdWI6IGNvbW1vbiBkcml2ZXIgaW5mb3JtYXRpb24uXFxuICAqIEBjaGFubmVsOiBjdXJyZW50IGNoYW5uZWwuXFxuQEAgLTM3Niw2ICszNzcsNyBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyB7XFxuIFxcdHN0cnVjdCB3bF9jZmc4MDIxMV9ic3NfaW5mbyAqYnNzX2luZm87XFxuIFxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gY29ubl9pbmZvO1xcbiBcXHRzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfbGUgcG1rX2xpc3Q7XFxuK1xcdHN0cnVjdCBicmNtZl9wbWtfbGlzdF92Ml9sZSBwbWtfbGlzdF92MjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzY2FuX3N0YXR1cztcXG4gXFx0c3RydWN0IGJyY21mX3B1YiAqcHViO1xcbiBcXHR1MzIgY2hhbm5lbDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcXG5pbmRleCBlYzE3MDY0NzgwMGRhLi42NzNmMDAwMDM4OWNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXFxuQEAgLTQzMSw0NSArNDMxLDUxIEBAIHZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdG5ldGlmX3J4KHNrYik7XFxuIH1cXG4gXFxuK3N0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvIHtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgaGRyO1xcbitcXHRzOCBkYm1fYW50c2lnbmFsO1xcbit9IF9fcGFja2VkO1xcbitcXG4gdm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfUkFESU9UQVApKSB7XFxuLVxcdFxcdC8qIERvIG5vdGhpbmcgKi9cXG4rXFx0XFx0LyogRmlybXdhcmUgYWxyZWFkeSBwcm92aWRlZCBhIGZ1bGwgcmFkaW90YXAgaGVhZGVyOyBkbyBub3RoaW5nICovXFxuIFxcdH0gZWxzZSBpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9NT05JVE9SX0ZNVF9IV19SWF9IRFIpKSB7XFxuIFxcdFxcdHN0cnVjdCB3bGNfZDExcnhoZHIgKndsY19yeGhkciA9IChzdHJ1Y3Qgd2xjX2QxMXJ4aGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbi1cXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XFxuK1xcdFxcdHN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvICpydGFwO1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbiBcXHRcXHR1MTYgUnhTdGF0dXMxO1xcbitcXHRcXHRzOCByc3NpO1xcbiBcXG4gXFx0XFx0UnhTdGF0dXMxID0gbGUxNl90b19jcHUod2xjX3J4aGRyLVxcdTAwM2VyeGhkci5SeFN0YXR1czEpO1xcbitcXHRcXHRyc3NpID0gd2xjX3J4aGRyLVxcdTAwM2Vyc3NpO1xcbiBcXG4gXFx0XFx0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB3bGNfZDExcnhoZHIpO1xcbi1cXHRcXHQvKiBNQUMgaW5zZXJ0cyAyIHBhZCBieXRlcyBmb3IgYTQgaGVhZGVycyBvciBRb1Mgb3IgQS1NU0RVXFxuLVxcdFxcdCAqIHN1YmZyYW1lc1xcbi1cXHRcXHQgKi9cXG4rXFx0XFx0LyogTUFDIGluc2VydHMgMiBwYWQgYnl0ZXMgZm9yIGE0IGhlYWRlcnMgb3IgUW9TIG9yIEEtTVNEVSBzdWJmcmFtZXMgKi9cXG4gXFx0XFx0aWYgKFJ4U3RhdHVzMSBcXHUwMDI2IFJYU19QQlBSRVMpXFxuIFxcdFxcdFxcdG9mZnNldCArPSAyO1xcbiBcXHRcXHRvZmZzZXQgKz0gRDExX1BIWV9IRFJfTEVOO1xcbiBcXG4gXFx0XFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xcbiBcXG4tXFx0XFx0LyogVE9ETzogdXNlIFJYIGhlYWRlciB0byBmaWxsIHNvbWUgcmFkaW90YXAgZGF0YSAqL1xcbi1cXHRcXHRyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpO1xcbi1cXHRcXHRtZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTtcXG4tXFx0XFx0cmFkaW90YXAtXFx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcXG4rXFx0XFx0LyogSW5zZXJ0IG91ciByYWRpb3RhcCBoZWFkZXIgd2l0aCBSU1NJIGRhdGEgKi9cXG4rXFx0XFx0cnRhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpydGFwKSk7XFxuK1xcdFxcdG1lbXNldChydGFwLCAwLCBzaXplb2YoKnJ0YXApKTtcXG4rXFx0XFx0cnRhcC1cXHUwMDNlaGRyLml0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcnRhcCkpO1xcbitcXHRcXHRydGFwLVxcdTAwM2VoZHIuaXRfcHJlc2VudCA9IGNwdV90b19sZTMyKDEgXFx1MDAzY1xcdTAwM2MgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUwpO1xcbitcXHRcXHRydGFwLVxcdTAwM2VkYm1fYW50c2lnbmFsID0gcnNzaTtcXG4gXFxuLVxcdFxcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cXG4tXFx0XFx0c2tiLVxcdTAwM2VsZW4gLT0gNDtcXG4rXFx0XFx0LyogU3RyaXAgdGhlIDQtYnl0ZSByZWNlaXZlIHN0YXR1cyAvIEZDUyB0YWlsICovXFxuK1xcdFxcdHNrYl90cmltKHNrYiwgc2tiLVxcdTAwM2VsZW4gLSA0KTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJhZGlvdGFwO1xcbiBcXG4tXFx0XFx0LyogVE9ETzogdXNlIFJYIHN0YXR1cyB0byBmaWxsIHNvbWUgcmFkaW90YXAgZGF0YSAqL1xcbiBcXHRcXHRyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpO1xcbiBcXHRcXHRtZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTtcXG4gXFx0XFx0cmFkaW90YXAtXFx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcXG4gXFxuLVxcdFxcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cXG4tXFx0XFx0c2tiLVxcdTAwM2VsZW4gLT0gNDtcXG4rXFx0XFx0LyogU3RyaXAgdGhlIDQtYnl0ZSByZWNlaXZlIHN0YXR1cyAvIEZDUyB0YWlsICovXFxuK1xcdFxcdHNrYl90cmltKHNrYiwgc2tiLVxcdTAwM2VsZW4gLSA0KTtcXG4gXFx0fVxcbiBcXG4gXFx0c2tiLVxcdTAwM2VkZXYgPSBpZnAtXFx1MDAzZW5kZXY7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmNcXG5pbmRleCAzNWNiY2VhMGFiYzlhLi5iOWM1MTg5MzlmNTA0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmNcXG5AQCAtMTgyLDEwICsxODIsOCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXFxuIFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZjtcXG4gXFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcXG4gXFx0c3RydWN0IGJyY21mX2lmICppZnA7XFxuLVxcdGJvb2wgY3VycmVudGx5X2Jsb2NrZWQ7XFxuLVxcdGludCBpO1xcbi1cXHR1OCBpZmlkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTggaWZpZHg7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Zmxvdy1cXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xcbiBcXG5AQCAtMTk0LDIzICsxOTIsNTQgQEAgc3RhdGljIHZvaWQgYnJjbWZfZmxvd3JpbmdfYmxvY2soc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkLFxcbiBcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZmbG93LVxcdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRpZmlkeCA9IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChmbG93LCBmbG93aWQpO1xcbiBcXG4tXFx0Y3VycmVudGx5X2Jsb2NrZWQgPSBmYWxzZTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZsb3ctXFx1MDAzZW5yb2ZyaW5nczsgaSsrKSB7XFxuLVxcdFxcdGlmICgoZmxvdy1cXHUwMDNlcmluZ3NbaV0pIFxcdTAwMjZcXHUwMDI2IChpICE9IGZsb3dpZCkpIHtcXG4tXFx0XFx0XFx0cmluZyA9IGZsb3ctXFx1MDAzZXJpbmdzW2ldO1xcbi1cXHRcXHRcXHRpZiAoKHJpbmctXFx1MDAzZXN0YXR1cyA9PSBSSU5HX09QRU4pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAoYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGkpID09IGlmaWR4KSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocmluZy1cXHUwMDNlYmxvY2tlZCkge1xcbi1cXHRcXHRcXHRcXHRcXHRjdXJyZW50bHlfYmxvY2tlZCA9IHRydWU7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4rXFx0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcXG4rXFx0cmluZy1cXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYWludGFpbiB0aGUgcGVyLWludGVyZmFjZSBibG9ja2VkLXJpbmcgY291bnRlci5cXG4rXFx0ICpcXG4rXFx0ICogV2UgdXNlIHJpbmctXFx1MDAzZWNvdW50ZWRfaW5fYmxvY2tlZCByYXRoZXIgdGhhbiBjaGVja2luZ1xcbitcXHQgKiByaW5nLVxcdTAwM2VzdGF0dXMgaGVyZS4gIEEgcmluZyB0aGF0IGJlY2FtZSBibG9ja2VkIHdoaWxlXFxuK1xcdCAqIFJJTkdfT1BFTiBoYXMgYWxyZWFkeSBiZWVuIGNvdW50ZWQgKGNvdW50ZWRfaW5fYmxvY2tlZD10cnVlKS5cXG4rXFx0ICogQnkgdGhlIHRpbWUgd2UgdW5ibG9jayBpdCBkdXJpbmcgdGVhcmRvd24gaXRzIHN0YXR1cyBtYXkgaGF2ZVxcbitcXHQgKiBhZHZhbmNlZCB0byBSSU5HX0NMT1NJTkcsIHNvIHRlc3RpbmcgUklOR19PUEVOIHdvdWxkIHdyb25nbHlcXG4rXFx0ICogc2tpcCB0aGUgYXRvbWljX2RlYyBhbmQgcGVybWFuZW50bHkgbGVhayB0aGUgY291bnRlciwgbGVhdmluZ1xcbitcXHQgKiB0aGUgbmV0aWYgcXVldWUgc3RvcHBlZCBmb3JldmVyLlxcbitcXHQgKlxcbitcXHQgKiBSdWxlOlxcbitcXHQgKiAgIGJsb2NrIHRyYW5zaXRpb24gICh1bmJsb2NrZWTihpJibG9ja2VkKTogY291bnQgb25seSBpZiBSSU5HX09QRU4sXFxuK1xcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGNvdW50ZWRfaW5fYmxvY2tlZC5cXG4rXFx0ICogICB1bmJsb2NrIHRyYW5zaXRpb24gKGJsb2NrZWTihpJ1bmJsb2NrZWQpOiBkZWNyZW1lbnQgb25seSBpZiB3ZVxcbitcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgY291bnRlZCBpdCxcXG4rXFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhciBjb3VudGVkX2luX2Jsb2NrZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoYmxvY2tlZCkge1xcbitcXHRcXHRpZiAocmluZy1cXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikge1xcbitcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZmbG93LVxcdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2Vjb3VudGVkX2luX2Jsb2NrZWQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChyaW5nLVxcdTAwM2Vjb3VudGVkX2luX2Jsb2NrZWQpIHtcXG4rXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2Zmxvdy1cXHUwMDNlaWZfYmxvY2tlZF9jbnRbaWZpZHhdKTtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogT25seSBwcm9wYWdhdGUgYSBuZXRpZiBxdWV1ZS1zdG9wL3dha2Ugd2hlbiB0aGUgaW50ZXJmYWNlXFxuK1xcdCAqIHRyYW5zaXRpb25zIGJldHdlZW4gZnVsbHktY2xlYXIgYW5kIGF0LWxlYXN0LW9uZS1ibG9ja2VkLlxcbitcXHQgKiBSZWFkaW5nIHRoZSBhdG9taWMgaXMgc2FmZSBoZXJlOiB3ZSBob2xkIGJsb2NrX2xvY2ssIHNvIG5vXFxuK1xcdCAqIGNvbmN1cnJlbnQgYnJjbWZfZmxvd3JpbmdfYmxvY2soKSBjYWxsIGNhbiByYWNlIHRoZSB1cGRhdGVcXG4rXFx0ICogd2UganVzdCBtYWRlIGFib3ZlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGJsb2NrZWQgXFx1MDAyNlxcdTAwMjYgYXRvbWljX3JlYWQoXFx1MDAyNmZsb3ctXFx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSkgIT0gMSkge1xcbitcXHRcXHQvKiBBbm90aGVyIHJpbmcgd2FzIGFscmVhZHkgYmxvY2tlZDsgbm8gbmV3IHF1ZXVlLXN0b3AgbmVlZGVkLiAqL1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZmbG93LVxcdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRmbG93LVxcdTAwM2VyaW5nc1tmbG93aWRdLVxcdTAwM2VibG9ja2VkID0gYmxvY2tlZDtcXG4tXFx0aWYgKGN1cnJlbnRseV9ibG9ja2VkKSB7XFxuK1xcdGlmICghYmxvY2tlZCBcXHUwMDI2XFx1MDAyNiBhdG9taWNfcmVhZChcXHUwMDI2Zmxvdy1cXHUwMDNlaWZfYmxvY2tlZF9jbnRbaWZpZHhdKSAhPSAwKSB7XFxuK1xcdFxcdC8qIE1vcmUgcmluZ3Mgc3RpbGwgYmxvY2tlZDsgZG8gbm90IHdha2UgdGhlIHF1ZXVlIHlldC4gKi9cXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Zmxvdy1cXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5AQCAtMzY3LDYgKzM5Niw4IEBAIHN0cnVjdCBicmNtZl9mbG93cmluZyAqYnJjbWZfZmxvd3JpbmdfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IG5yb2ZyaW5ncylcXG4gXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmZsb3ctXFx1MDAzZWJsb2NrX2xvY2spO1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmbG93LVxcdTAwM2VhZGRyX21vZGUpOyBpKyspXFxuIFxcdFxcdFxcdGZsb3ctXFx1MDAzZWFkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXFx1MDAzZWlmX2Jsb2NrZWRfY250KTsgaSsrKVxcbitcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmbG93LVxcdTAwM2VpZl9ibG9ja2VkX2NudFtpXSwgMCk7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXFx1MDAzZWhhc2gpOyBpKyspXFxuIFxcdFxcdFxcdGZsb3ctXFx1MDAzZWhhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcXG5pbmRleCBmM2Q1MTFmOWEzYzlhLi5hZmRlYThiM2Y4YWE3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcXG5AQCAtNSw2ICs1LDggQEBcXG4gI2lmbmRlZiBCUkNNRk1BQ19GTE9XUklOR19IXFxuICNkZWZpbmUgQlJDTUZNQUNfRkxPV1JJTkdfSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbitcXG4gXFxuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSEFTSFNJWkVcXHRcXHQ1MTJcXHRcXHQvKiBoYXMgdG8gYmUgMl54ICovXFxuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSU5WQUxJRF9JRFxcdDB4RkZGRkZGRkZcXG5AQCAtMjYsNiArMjgsMTYgQEAgZW51bSByaW5nX3N0YXR1cyB7XFxuIHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nIHtcXG4gXFx0dTE2IGhhc2hfaWQ7XFxuIFxcdGJvb2wgYmxvY2tlZDtcXG4rXFx0LypcXG4rXFx0ICogVHJ1ZSB3aGVuIHRoaXMgcmluZyBoYXMgYmVlbiBjb3VudGVkIGluIHRoZSBwZXItaW50ZXJmYWNlXFxuK1xcdCAqIGlmX2Jsb2NrZWRfY250W10uICBTZXQgdG8gdHJ1ZSB3aGVuZXZlciB0aGUgcmluZyB0cmFuc2l0aW9uc1xcbitcXHQgKiB1bmJsb2NrZWTihpJibG9ja2VkIHdoaWxlIFJJTkdfT1BFTjsgY2xlYXJlZCBvbiB0aGUgbWF0Y2hpbmdcXG4rXFx0ICogYmxvY2tlZOKGknVuYmxvY2tlZCB0cmFuc2l0aW9uLiAgTmVlZGVkIHNvIHRoYXQgYSByaW5nIHRoYXRcXG4rXFx0ICogYmVjb21lcyBibG9ja2VkIHdoaWxlIFJJTkdfT1BFTiBhbmQgaXMgbGF0ZXIgbW92ZWQgdG9cXG4rXFx0ICogUklOR19DTE9TSU5HIHN0aWxsIGNvcnJlY3RseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyIGF0XFxuK1xcdCAqIHRlYXJkb3duLCBldmVuIHRob3VnaCBpdHMgc3RhdHVzIGlzIG5vIGxvbmdlciBSSU5HX09QRU4uXFxuK1xcdCAqL1xcbitcXHRib29sIGNvdW50ZWRfaW5fYmxvY2tlZDtcXG4gXFx0ZW51bSByaW5nX3N0YXR1cyBzdGF0dXM7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgc2tibGlzdDtcXG4gfTtcXG5AQCAtNDAsNiArNTIsMTIgQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nIHtcXG4gXFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX2hhc2ggaGFzaFtCUkNNRl9GTE9XUklOR19IQVNIU0laRV07XFxuIFxcdHNwaW5sb2NrX3QgYmxvY2tfbG9jaztcXG4gXFx0ZW51bSBwcm90b19hZGRyX21vZGUgYWRkcl9tb2RlW0JSQ01GX01BWF9JRlNdO1xcbitcXHQvKiBQZXItaW50ZXJmYWNlIGNvdW50IG9mIGN1cnJlbnRseSBibG9ja2VkIG9wZW4gcmluZ3MuXFxuK1xcdCAqIE1haW50YWluZWQgYXRvbWljYWxseSBzbyBicmNtZl9mbG93cmluZ19ibG9jaygpIGNhbiBjaGVja1xcbitcXHQgKiB3aGV0aGVyIGFueSBzaWJsaW5nIHJpbmcgaXMgYWxyZWFkeSBibG9ja2VkIGluIE8oMSkgd2l0aG91dFxcbitcXHQgKiBob2xkaW5nIGJsb2NrX2xvY2sgYWNyb3NzIGFuIE8obnJvZnJpbmdzKSB3YWxrLlxcbitcXHQgKi9cXG4rXFx0YXRvbWljX3QgaWZfYmxvY2tlZF9jbnRbQlJDTUZfTUFYX0lGU107XFxuIFxcdHUxNiBucm9mcmluZ3M7XFxuIFxcdGJvb2wgdGRsc19hY3RpdmU7XFxuIFxcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICp0ZGxzX2VudHJ5O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jXFxuaW5kZXggYTQzZjFhMzhiMGUzMC4uM2MxY2EzNTVlOGVlYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jXFxuQEAgLTEwMzcsNyArMTAzNyw5IEBAIGludCBicmNtZl9md3NfbWFjZGVzY19pbmRpY2F0ZShzdHJ1Y3QgYnJjbWZfZndzX2luZm8gKmZ3cywgdTggdHlwZSwgdTggKmRhdGEpXFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcInVzZSBleGlzdGluZ1xcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFdBUk5fT04oZW50cnktXFx1MDAzZW1hY19oYW5kbGUgIT0gbWFjX2hhbmRsZSk7XFxuLVxcdFxcdFxcdC8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovXFxuK1xcdFxcdFxcdC8qIEZpcm13YXJlIHJlLXNlbnQgQUREIGZvciB0aGUgc2FtZSBNQUMgaGFuZGxlLlxcbitcXHRcXHRcXHQgKiBObyBhY3Rpb24gcmVxdWlyZWQ7IGl0IGlzIGEgc2FmZSBuby1vcC5cXG4rXFx0XFx0XFx0ICovXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXFxuaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcXG5AQCAtNDgsNyArNDgsMTkgQEBcXG4gI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJcXHRcXHQweDEzXFxuICNkZWZpbmUgTVNHQlVGX1RZUEVfTFBCS19ETUFYRkVSX0NNUExUXFx0XFx0MHgxNFxcbiBcXG4tI2RlZmluZSBOUl9UWF9QS1RJRFNcXHRcXHRcXHRcXHQyMDQ4XFxuKy8qXFxuKyAqIE5SX1RYX1BLVElEUzogbnVtYmVyIG9mIHNpbXVsdGFuZW91c2x5IGluLWZsaWdodCBUWCBwYWNrZXQgSURzLlxcbisgKiBFYWNoIG91dHN0YW5kaW5nIFRYIGZyYW1lIGNvbnN1bWVzIG9uZSBJRCB1bnRpbCB0aGUgZG9uZ2xlIHJldHVybnNcXG4rICogYSBUWC1zdGF0dXMgY29tcGxldGlvbi4gIFRoZSBvcmlnaW5hbCAyMDQ4LWVudHJ5IHBvb2wgZXhoYXVzdGVkIHVuZGVyXFxuKyAqIOKJpTQgY29uY3VycmVudCBpcGVyZjMgc3RyZWFtcyBvbiBXaS1GaSA1LzYgKDgwMi4xMWFjL2F4KSBkZXZpY2VzLFxcbisgKiBjYXVzaW5nIFxcXCJObyBQS1RJRCBhdmFpbGFibGVcXFwiIGRyb3BzIGFuZCBUQ1AgcmV0cmFuc21pdHMuICA0MDk2IGdpdmVzXFxuKyAqIGhlYWRyb29tIGZvciBoaWdoLWFnZ3JlZ2F0aW9uIHNjZW5hcmlvcyB3aGlsZSBzdGlsbCBmaXR0aW5nIGluIGFcXG4rICogbW9kZXN0IGFtb3VudCBvZiBob3N0IG1lbW9yeSAofjQ4IEtCIGZvciB0aGUgcGt0aWQgdGFibGUgZW50cmllcykuXFxuKyAqXFxuKyAqIE5SX1JYX1BLVElEUzogUlggcG9zdCBidWZmZXJzIHByZS1hbGxvY2F0ZWQgdG8gdGhlIGRvbmdsZS4gIDEwMjQgaXNcXG4rICogc3VmZmljaWVudCBmb3IgY3VycmVudCBoYXJkd2FyZSBSWCByaW5nIGRlcHRoczsgbGVhdmUgdW5jaGFuZ2VkLlxcbisgKi9cXG4rI2RlZmluZSBOUl9UWF9QS1RJRFNcXHRcXHRcXHRcXHQ0MDk2XFxuICNkZWZpbmUgTlJfUlhfUEtUSURTXFx0XFx0XFx0XFx0MTAyNFxcbiBcXG4gI2RlZmluZSBCUkNNRl9JT0NUTF9SRVFfUEtUSURcXHRcXHRcXHQweEZGRkVcXG5AQCAtNjQsOCArNzYsMjkgQEBcXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfUEtUX0ZMQUdTX0ZSQU1FX01BU0tcXHQweDA3XFxuICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19QUklPX1NISUZUXFx0NVxcbiBcXG4tI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMVxcdFxcdDMyXFxuLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDJcXHRcXHQ5NlxcbisvKlxcbisgKiBUWCBmbHVzaCAvIGRvb3JiZWxsLXJpbmcgdGhyZXNob2xkcy5cXG4rICpcXG4rICogQ05UMSBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgZnJhbWVzIHRvIGFjY3VtdWxhdGUgaW4gdGhlIGNvbW1vbnJpbmdcXG4rICogYmVmb3JlIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgd3JpdGVfY29tcGxldGUoKSAoZG9vcmJlbGwgcmluZykgaXNcXG4rICogaXNzdWVkIG1pZC1iYXRjaC4gIENOVDIgaXMgdGhlIGhhcmQgZmx1c2ggaW50ZXJ2YWw6IGFmdGVyIHRoaXMgbWFueVxcbisgKiBmcmFtZXMgaGF2ZSBiZWVuIHdyaXR0ZW4gc2luY2UgdGhlIGxhc3QgZmx1c2gsIHdlIHVuY29uZGl0aW9uYWxseVxcbisgKiByaW5nIHRoZSBiZWxsIGFuZCByZXNldCB0aGUgY291bnRlci5cXG4rICpcXG4rICogUmFpc2luZyBib3RoIGZyb20gdGhlIG9yaWdpbmFsIDMyLzk2IHRvIDY0LzEyOCBkb3VibGVzIHRoZSBhdmVyYWdlXFxuKyAqIG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyBjb21taXR0ZWQgcGVyIE1NSU8gd3JpdGUsIGhhbHZpbmcgdGhlIFBDSWVcXG4rICogZG9vcmJlbGwgcmF0ZSBvbiBzdXN0YWluZWQgdGhyb3VnaHB1dCB3b3JrbG9hZHMuICBUaGUgdHJhZGVvZmYgaXMgYVxcbisgKiBtYXJnaW5hbGx5IGhpZ2hlciB3b3JzdC1jYXNlIGxhdGVuY3kgZm9yIHRoZSBsYXN0IGZyYW1lcyBpbiBhIGJ1cnN0LFxcbisgKiB3aGljaCBpbiBwcmFjdGljZSBpcyBoaWRkZW4gYnkgdGhlIHRpbWUgdGhlIGRvbmdsZSBETUEgZW5naW5lIGRyYWluc1xcbisgKiB0aGUgcHJldmlvdXMgYmF0Y2guXFxuKyAqXFxuKyAqIFRSSUNLTEVfVFhXT1JLRVJfVEhSUyBnb3Zlcm5zIGhvdyBvZnRlbiBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YSgpXFxuKyAqIGZvcmNlcyBhIHdvcmtxdWV1ZSBzY2hlZHVsZSB3aGVuIHRoZSBxdWV1ZSBkZXB0aCBpcyBub3QgYSBtdWx0aXBsZSBvZlxcbisgKiB0aGlzIHZhbHVlLiAgS2VlcGluZyBpdCBhdCBoYWxmIG9mIENOVDEgKDMyKSBwcmVzZXJ2ZXMgcmVzcG9uc2l2ZW5lc3NcXG4rICogZm9yIGxvdy1yYXRlIGZsb3dzIChlLmcuIFZvSVAsIElDTVApIHRoYXQgbmV2ZXIgYWNjdW11bGF0ZSA2NCBmcmFtZXMuXFxuKyAqL1xcbisjZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQxXFx0XFx0NjRcXG4rI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMlxcdFxcdDEyOFxcbiBcXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSU1xcdDk2XFxuICNkZWZpbmUgQlJDTUZfTVNHQlVGX1RSSUNLTEVfVFhXT1JLRVJfVEhSU1xcdDMyXFxuQEAgLTc4NywxMCArODIwLDMwIEBAIHN0YXRpYyBpbnQgYnJjbWZfbXNnYnVmX3NjaGVkdWxlX3R4ZGF0YShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHUzMiBmbG93aWQsXFxuIHtcXG4gXFx0c3RydWN0IGJyY21mX2NvbW1vbnJpbmcgKmNvbW1vbnJpbmc7XFxuIFxcbi1cXHRzZXRfYml0KGZsb3dpZCwgbXNnYnVmLVxcdTAwM2VmbG93X21hcCk7XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBiaXQgd2FzIGFscmVhZHkgc2V0LCBhIHR4Zmxvd193b3JrIGl0ZW0gaXMgYWxyZWFkeVxcbitcXHQgKiBxdWV1ZWQgb3IgcnVubmluZyBmb3IgdGhpcyByaW5nLiAgSW4gdGhhdCBjYXNlIHRoZSBleGlzdGluZ1xcbitcXHQgKiB3b3JrZXIgd2lsbCBkcmFpbiBvdXIgZnJlc2hseSBlbnF1ZXVlZCBmcmFtZSB3aGVuIGl0IHJ1bnMsXFxuK1xcdCAqIHNvIHdlIG9ubHkgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIHdvcmsgaXRlbSB3aGVuIHRoZVxcbitcXHQgKiBmb3JjZSBmbGFnIGlzIHNldCBvciB0aGUgcmluZyBpcyBiZWxvdyB0aGUgZGVsYXkgdGhyZXNob2xkLlxcbitcXHQgKlxcbitcXHQgKiBJZiB0aGUgYml0IHdhcyBOT1Qgc2V0ICh0ZXN0X2FuZF9zZXRfYml0IHJldHVybnMgZmFsc2UpLCBub1xcbitcXHQgKiB3b3JrZXIgaXMgcGVuZGluZyBmb3IgdGhpcyByaW5nIGF0IGFsbC4gIFdlIE1VU1Qgc2NoZWR1bGVcXG4rXFx0ICogb25lIHVuY29uZGl0aW9uYWxseSwgb3RoZXJ3aXNlIHRoZSBmcmFtZSB3ZSBqdXN0IGVucXVldWVkXFxuK1xcdCAqIHdpbGwgc2l0IGluIHRoZSBmbG93cmluZyB1bnNlbnQgdW50aWwgc29tZSB1bnJlbGF0ZWQgZXZlbnRcXG4rXFx0ICogdHJpZ2dlcnMgdGhlIHdvcmtxdWV1ZSDigJQgY2F1c2luZyBzaWxlbnQgVFggc3RhbGxzIHVuZGVyXFxuK1xcdCAqIGhpZ2ggbG9hZCB3aGVuIG91dHN0YW5kaW5nX3R4IFxcdTAwM2U9IERFTEFZX1RYV09SS0VSX1RIUlMuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoZmxvd2lkLCBtc2didWYtXFx1MDAzZWZsb3dfbWFwKSkge1xcbitcXHRcXHQvKiBCaXQgd2FzIGNsZWFyOiBubyB3b3JrZXIgcGVuZGluZywgYWx3YXlzIHNjaGVkdWxlLiAqL1xcbitcXHRcXHRxdWV1ZV93b3JrKG1zZ2J1Zi1cXHUwMDNldHhmbG93X3dxLCBcXHUwMDI2bXNnYnVmLVxcdTAwM2V0eGZsb3dfd29yayk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBCaXQgd2FzIGFscmVhZHkgc2V0OiB3b3JrZXIgcGVuZGluZywgYXBwbHkgY29hbGVzY2luZyBoZXVyaXN0aWMuICovXFxuIFxcdGNvbW1vbnJpbmcgPSBtc2didWYtXFx1MDAzZWZsb3dyaW5nc1tmbG93aWRdO1xcbi1cXHRpZiAoKGZvcmNlKSB8fCAoYXRvbWljX3JlYWQoXFx1MDAyNmNvbW1vbnJpbmctXFx1MDAzZW91dHN0YW5kaW5nX3R4KSBcXHUwMDNjXFxuLVxcdFxcdFxcdEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSlcXG4rXFx0aWYgKGZvcmNlIHx8IChhdG9taWNfcmVhZChcXHUwMDI2Y29tbW9ucmluZy1cXHUwMDNlb3V0c3RhbmRpbmdfdHgpIFxcdTAwM2NcXG4rXFx0XFx0ICAgICAgQlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlMpKVxcbiBcXHRcXHRxdWV1ZV93b3JrKG1zZ2J1Zi1cXHUwMDNldHhmbG93X3dxLCBcXHUwMDI2bXNnYnVmLVxcdTAwM2V0eGZsb3dfd29yayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTYyMSwxMSArMTY3NCwxMSBAQCBpbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbiBcXHRkbyB7XFxuIFxcdFxcdGJyY21mX21zZ2J1Zl9yeGJ1Zl9kYXRhX2ZpbGwobXNnYnVmKTtcXG4gXFx0XFx0aWYgKG1zZ2J1Zi1cXHUwMDNlbWF4X3J4YnVmcG9zdCAhPSBtc2didWYtXFx1MDAzZXJ4YnVmcG9zdClcXG4tXFx0XFx0XFx0bXNsZWVwKDEwKTtcXG4rXFx0XFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjb3VudCsrO1xcbi1cXHR9IHdoaWxlIChjb3VudCBcXHUwMDNjIDEwKTtcXG4rXFx0fSB3aGlsZSAoY291bnQgXFx1MDAzYyAxMDApO1xcbiBcXHRicmNtZl9tc2didWZfcnhidWZfZXZlbnRfcG9zdChtc2didWYpO1xcbiBcXHRicmNtZl9tc2didWZfcnhidWZfaW9jdGxyZXNwX3Bvc3QobXNnYnVmKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXFxuaW5kZXggMTM2NjJhYTRiNGVhNi4uOTMzOGE1ZmFhMjYwYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1xcbkBAIC0yNjgsNiArMjY4LDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfZmlybXdhcmVfbWFwcGluZyBicmNtZl9wY2llX2Z3bmFtZXNbXSA9IHtcXG4gXFxuICNkZWZpbmUgQlJDTUZfUENJRV9NQkRBVEFfVElNRU9VVFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoMjAwMClcXG4gXFxuKy8qXFxuKyAqIEgyRCBtYWlsYm94IHBvbGwgdGltaW5nIHBhcmFtZXRlcnMuXFxuKyAqXFxuKyAqIFRoZSBkb25nbGUgdHlwaWNhbGx5IGNsZWFycyB0aGUgSDJEIG1haWxib3ggcmVnaXN0ZXIgd2l0aGluIGEgZmV3XFxuKyAqIGh1bmRyZWQgbWljcm9zZWNvbmRzIGFmdGVyIHRoZSBkb29yYmVsbCBpbnRlcnJ1cHQgZmlyZXMuICBUaGVcXG4rICogb3JpZ2luYWwgY29kZSB1c2VkIG1zbGVlcCgxMCkgKiAxMDAgaXRlcmF0aW9ucywgbWVhbmluZyB0aGVcXG4rICogbWluaW11bSBvYnNlcnZhYmxlIGxhdGVuY3kgd2FzIDEwbXMgZXZlbiB3aGVuIHRoZSBkb25nbGUgd2FzIGZhc3QuXFxuKyAqXFxuKyAqIFdlIGluc3RlYWQgc3RhcnQgd2l0aCBhIHNob3J0IHNsZWVwIGFuZCBkb3VibGUgaXQgZWFjaCBpdGVyYXRpb25cXG4rICogKGV4cG9uZW50aWFsIGJhY2tvZmYpIHVwIHRvIEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMsIHN0YXlpbmdcXG4rICogd2l0aGluIHRoZSBzYW1lIDEtc2Vjb25kIGFic29sdXRlIHRpbWVvdXQuXFxuKyAqXFxuKyAqIE1JTl9VUyAvIElOSVRJQUxfTUFYX1VTIDogdXNsZWVwX3JhbmdlIGJvdW5kcyBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbi5cXG4rICogTUFYX1VTICAgICA6IGNhcCBvbiB0aGUgcGVyLWl0ZXJhdGlvbiBzbGVlcCAowrVzKS5cXG4rICogVElNRU9VVF9VUyA6IHRvdGFsIGJ1ZGdldCBiZWZvcmUgZ2l2aW5nIHVwICgxIHNlY29uZCkuXFxuKyAqL1xcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVNcXHRcXHQ0MFxcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9JTklUSUFMX01BWF9VU1xcdDUwXFxuKyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX01BWF9VU1xcdFxcdDUwMDBcXG4rI2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VU1xcdFxcdDEwMDAwMDBcXG4rXFxuICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfU1RBVFVTX0NNRFxcdFxcdDB4NFxcbiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX1BNX0NTUlxcdFxcdDB4NENcXG4gI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19NU0lfQ0FQXFx0XFx0MHg1OFxcbkBAIC03NjYsNyArNzg3LDggQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSlcXG4gXFx0c3RydWN0IGJyY21mX2NvcmUgKmNvcmU7XFxuIFxcdHUzMiBhZGRyO1xcbiBcXHR1MzIgY3VyX2h0b2RfbWJfZGF0YTtcXG4tXFx0dTMyIGk7XFxuK1xcdHUzMiBlbGFwc2VkX3VzID0gMDtcXG4rXFx0dTMyIHNsZWVwX3VzID0gQlJDTUZfUENJRV9NQl9QT0xMX0lOSVRJQUxfTUFYX1VTO1xcbiBcXG4gXFx0c2hhcmVkID0gXFx1MDAyNmRldmluZm8tXFx1MDAzZXNoYXJlZDtcXG4gXFx0YWRkciA9IHNoYXJlZC1cXHUwMDNlaHRvZF9tYl9kYXRhX2FkZHI7XFxuQEAgLTc3NiwxMiArNzk4LDQwIEBAIGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBodG9kX21iX2RhdGEpXFxuIFxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiTUIgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBwZW5kaW5nIDB4JTA0eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICBjdXJfaHRvZF9tYl9kYXRhKTtcXG4gXFxuLVxcdGkgPSAwO1xcbitcXHQvKlxcbitcXHQgKiBXYWl0IGZvciB0aGUgZG9uZ2xlIHRvIGNvbnN1bWUgdGhlIHByZXZpb3VzIEgyRCBtYWlsYm94IG1lc3NhZ2UuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZXJlIGlzIG5vIGludGVycnVwdCB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZG9uZ2xlIGNsZWFycyB0aGlzXFxuK1xcdCAqIHJlZ2lzdGVyLCBzbyBwb2xsaW5nIGlzIHVuYXZvaWRhYmxlLiAgVGhlIG9yaWdpbmFsIGNvZGUgdXNlZFxcbitcXHQgKiBtc2xlZXAoMTApIHBlciBpdGVyYXRpb24sIGluY3VycmluZyBhdCBsZWFzdCAxMG1zIG9mIGxhdGVuY3lcXG4rXFx0ICogZXZlbiB3aGVuIHRoZSBkb25nbGUgcmVzcG9uZGVkIGluIG1pY3Jvc2Vjb25kcy5cXG4rXFx0ICpcXG4rXFx0ICogV2UgdXNlIHVzbGVlcF9yYW5nZSgpIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiBpbnN0ZWFkOlxcbitcXHQgKiAgIC0gRmlyc3QgaXRlcmF0aW9uIHNsZWVwcyB+NTDCtXMgKGZhc3QgcGF0aCBmb3IgcmVzcG9uc2l2ZSBkb25nbGUpLlxcbitcXHQgKiAgIC0gRWFjaCBzdWJzZXF1ZW50IGl0ZXJhdGlvbiBkb3VibGVzIHRoZSBzbGVlcCwgY2FwcGVkIGF0IDVtcyxcXG4rXFx0ICogICAgIHNvIGxvbmcgd2FpdHMgc3RpbGwgeWllbGQgdGhlIENQVSB3aXRob3V0IGJ1c3ktc3Bpbm5pbmcuXFxuK1xcdCAqICAgLSBUb3RhbCB0aW1lb3V0IG1hdGNoZXMgdGhlIG9yaWdpbmFsIDEtc2Vjb25kIGxpbWl0LlxcbitcXHQgKiAgIC0gV2UgYmFpbCBlYXJseSBpZiB0aGUgZGV2aWNlIGhhcyBnb25lIGRvd24gc28gdGhhdCBhIGRlYWRcXG4rXFx0ICogICAgIGRvbmdsZSBkb2VzIG5vdCBob2xkIHRoZSBjYWxsZXIgZm9yIGEgZnVsbCBzZWNvbmQuXFxuK1xcdCAqL1xcbiBcXHR3aGlsZSAoY3VyX2h0b2RfbWJfZGF0YSAhPSAwKSB7XFxuLVxcdFxcdG1zbGVlcCgxMCk7XFxuLVxcdFxcdGkrKztcXG4tXFx0XFx0aWYgKGkgXFx1MDAzZSAxMDApXFxuK1xcdFxcdGlmIChkZXZpbmZvLVxcdTAwM2VzdGF0ZSA9PSBCUkNNRk1BQ19QQ0lFX1NUQVRFX0RPV04pIHtcXG4rXFx0XFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJEZXZpY2UgZG93biwgYWJvcnRpbmcgTUIgc2VuZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoZWxhcHNlZF91cyBcXHUwMDNlPSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUykge1xcbitcXHRcXHRcXHRicmNtZl9lcnIoXFxcIlRpbWVvdXQgd2FpdGluZyBmb3IgSDJEIE1CIHNsb3QgYWZ0ZXIgJXUgdXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgZWxhcHNlZF91cyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoQlJDTUZfUENJRV9NQl9QT0xMX01JTl9VUywgc2xlZXBfdXMpO1xcbitcXHRcXHRlbGFwc2VkX3VzICs9IHNsZWVwX3VzO1xcbitcXG4rXFx0XFx0LyogRXhwb25lbnRpYWwgYmFja29mZiwgY2FwcGVkIGF0IEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMgKi9cXG4rXFx0XFx0c2xlZXBfdXMgPSBtaW4oc2xlZXBfdXMgKiAyLCAodTMyKUJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMpO1xcbitcXG4gXFx0XFx0Y3VyX2h0b2RfbWJfZGF0YSA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTAwMSwxMCArMTA1MSwxMCBAQCBzdGF0aWMgdm9pZCBicmNtZl9wY2llX3JlbGVhc2VfaXJxKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8pXFxuIFxcdGZyZWVfaXJxKHBkZXYtXFx1MDAzZWlycSwgZGV2aW5mbyk7XFxuIFxcdHBjaV9kaXNhYmxlX21zaShwZGV2KTtcXG4gXFxuLVxcdG1zbGVlcCg1MCk7XFxuK1xcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4gXFx0Y291bnQgPSAwO1xcbi1cXHR3aGlsZSAoKGRldmluZm8tXFx1MDAzZWluX2lycSkgXFx1MDAyNlxcdTAwMjYgKGNvdW50IFxcdTAwM2MgMjApKSB7XFxuLVxcdFxcdG1zbGVlcCg1MCk7XFxuK1xcdHdoaWxlICgoZGV2aW5mby1cXHUwMDNlaW5faXJxKSBcXHUwMDI2XFx1MDAyNiAoY291bnQgXFx1MDAzYyAxMDAwKSkge1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuIFxcdFxcdGNvdW50Kys7XFxuIFxcdH1cXG4gXFx0aWYgKGRldmluZm8tXFx1MDAzZWluX2lycSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcXG5pbmRleCBiNzI1YzY0ZTViNWM2Li40ZTQxNDQwM2Q3NDcxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jXFxuQEAgLTE2NDUsMzcgKzE2NDUsNDMgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKVxcbiBcXG4gXFx0XFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcTtcXG4gXFx0XFx0cmRfbmV3LmxlbiA9IGRsZW47XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBDbGFpbSB0aGUgaG9zdCBvbmNlIGZvciB0aGUgZW50aXJlIGhlYWRlci1wYXJzaW5nIHBoYXNlLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBicmNtZl9zZGlvX2hkcGFyc2UoKSBvcGVyYXRlcyBvbiBkYXRhIGFscmVhZHkgaW4gaG9zdFxcbitcXHRcXHQgKiBtZW1vcnksIGJ1dCBtYXkgY2FsbCBicmNtZl9zZGlvX3J4ZmFpbCgpIG9uIGVycm9yLCB3aGljaFxcbitcXHRcXHQgKiB3cml0ZXMgU0RJTyBGdW5jMSByZWdpc3RlcnMgYW5kIHRoZXJlZm9yZSByZXF1aXJlcyB0aGVcXG4rXFx0XFx0ICogaG9zdCB0byBiZSBjbGFpbWVkLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBza2JfcHVsbCgpIGFuZCB0aGUgbnVtIGNvdW50ZXIgYXJlIHB1cmUgaG9zdC1tZW1vcnlcXG4rXFx0XFx0ICogb3BlcmF0aW9uczsga2VlcCB0aGVtIG91dHNpZGUgdGhlIGxvY2sgdG8gbWluaW1pc2UgdGhlXFxuK1xcdFxcdCAqIGhvbGQgdGltZS4gIEJvdGggaGRwYXJzZSBjYWxscyAoc3VwZXJmcmFtZSBoZWFkZXIgYW5kXFxuK1xcdFxcdCAqIGVhY2ggc3ViZnJhbWUgaGVhZGVyKSBhcmUgZ3JvdXBlZCB1bmRlciBhIHNpbmdsZSBjbGFpbS9cXG4rXFx0XFx0ICogcmVsZWFzZSwgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBOKzEgc2VwYXJhdGUgcGFpcnMuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRzZGlvX2NsYWltX2hvc3QoYnVzLVxcdTAwM2VzZGlvZGV2LVxcdTAwM2VmdW5jMSk7XFxuIFxcdFxcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtXFx1MDAzZWRhdGEsIFxcdTAwMjZyZF9uZXcsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgQlJDTUZfU0RJT19GVF9TVVBFUik7XFxuLVxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbi1cXHRcXHRidXMtXFx1MDAzZWN1cl9yZWFkLmxlbiA9IHJkX25ldy5sZW5fbnh0ZnJtIFxcdTAwM2NcXHUwMDNjIDQ7XFxuLVxcbi1cXHRcXHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xcbi1cXHRcXHRza2JfcHVsbChwZmlyc3QsIHJkX25ldy5kYXRfb2Zmc2V0KTtcXG4tXFx0XFx0bnVtID0gMDtcXG4tXFxuLVxcdFxcdC8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqL1xcbi1cXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2YnVzLVxcdTAwM2VnbG9tLCBwbmV4dCkge1xcbi1cXHRcXHRcXHQvKiBsZWF2ZSB3aGVuIGludmFsaWQgc3ViZnJhbWUgaXMgZm91bmQgKi9cXG4tXFx0XFx0XFx0aWYgKGVycmNvZGUpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0XFx0cmRfbmV3LmxlbiA9IHBuZXh0LVxcdTAwM2VsZW47XFxuLVxcdFxcdFxcdHJkX25ldy5zZXFfbnVtID0gcnhzZXErKztcXG4tXFx0XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbi1cXHRcXHRcXHRlcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtXFx1MDAzZWRhdGEsIFxcdTAwMjZyZF9uZXcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQlJDTUZfU0RJT19GVF9TVUIpO1xcbi1cXHRcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXFx1MDAzZXNkaW9kZXYtXFx1MDAzZWZ1bmMxKTtcXG4tXFx0XFx0XFx0YnJjbWZfZGJnX2hleF9kdW1wKEJSQ01GX0dMT01fT04oKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgcG5leHQtXFx1MDAzZWRhdGEsIDMyLCBcXFwic3ViZnJhbWU6XFxcXG5cXFwiKTtcXG4tXFxuLVxcdFxcdFxcdG51bSsrO1xcbitcXHRcXHQvKiBWYWxpZGF0ZSBhbGwgdGhlIHN1YmZyYW1lIGhlYWRlcnMgd2hpbGUgaG9zdCBpcyBjbGFpbWVkICovXFxuK1xcdFxcdGlmICghZXJyY29kZSkge1xcbitcXHRcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2YnVzLVxcdTAwM2VnbG9tLCBwbmV4dCkge1xcbitcXHRcXHRcXHRcXHRyZF9uZXcubGVuID0gcG5leHQtXFx1MDAzZWxlbjtcXG4rXFx0XFx0XFx0XFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcSsrO1xcbitcXHRcXHRcXHRcXHRlcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtXFx1MDAzZWRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJkX25ldyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBCUkNNRl9TRElPX0ZUX1NVQik7XFxuK1xcdFxcdFxcdFxcdGJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHBuZXh0LVxcdTAwM2VkYXRhLCAzMixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcInN1YmZyYW1lOlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdGlmIChlcnJjb2RlKVxcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoZXJyY29kZSkge1xcbi1cXHRcXHRcXHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IgKi9cXG4tXFx0XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbitcXHRcXHRcXHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IsIHN0aWxsIGhvbGRpbmcgdGhlIGhvc3QgKi9cXG4gXFx0XFx0XFx0YnJjbWZfc2Rpb19yeGZhaWwoYnVzLCB0cnVlLCBmYWxzZSk7XFxuIFxcdFxcdFxcdGJ1cy1cXHUwMDNlc2RjbnQucnhnbG9tZmFpbCsrO1xcbiBcXHRcXHRcXHRicmNtZl9zZGlvX2ZyZWVfZ2xvbShidXMpO1xcbkBAIC0xNjgzLDYgKzE2ODksMTQgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKVxcbiBcXHRcXHRcXHRidXMtXFx1MDAzZWN1cl9yZWFkLmxlbiA9IDA7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbitcXG4rXFx0XFx0LyogSG9zdCByZWxlYXNlZDsgbm93IGRvIHRoZSBwdXJlLW1lbW9yeSBib29ra2VlcGluZyAqL1xcbitcXHRcXHRidXMtXFx1MDAzZWN1cl9yZWFkLmxlbiA9IHJkX25ldy5sZW5fbnh0ZnJtIFxcdTAwM2NcXHUwMDNjIDQ7XFxuK1xcbitcXHRcXHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xcbitcXHRcXHRza2JfcHVsbChwZmlyc3QsIHJkX25ldy5kYXRfb2Zmc2V0KTtcXG4rXFx0XFx0bnVtID0gMDtcXG4gXFxuIFxcdFxcdC8qIEJhc2ljIFNEIGZyYW1pbmcgbG9va3Mgb2sgLSBwcm9jZXNzIGVhY2ggcGFja2V0IChoZWFkZXIpICovXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXFxuaW5kZXggZmM3YTVkZDJlNWQ4Ni4uM2ZkOGJkYmQzNWU1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXFxuQEAgLTUxNiwxMiArNTE2LDExIEBAIGludCBicmNtc19jX2FtcGR1X2FkZF9mcmFtZShzdHJ1Y3QgYnJjbXNfYW1wZHVfc2Vzc2lvbiAqc2Vzc2lvbixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIFxcbiBcXHRcXHQvKlxcbi1cXHRcXHQgKiBXZSBhcmVuJ3QgcmVhbGx5IG91dCBvZiBzcGFjZSBpZiB0aGUgbmV3IGZyYW1lIGlzIG9mXFxuLVxcdFxcdCAqIGEgZGlmZmVyZW50IHByaW9yaXR5LCBidXQgd2Ugd2FudCB0aGUgc2FtZSBiZWhhdmlvdXJcXG4tXFx0XFx0ICogc28gcmV0dXJuIC1FTk9TUEMgYW55d2F5Llxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBYWFg6IFRoZSBvbGQgQU1QRFUgY29kZSBkaWQgdGhpcywgYnV0IGlzIGl0IHJlYWxseVxcbi1cXHRcXHQgKiBuZWNlc3Nhcnk/XFxuK1xcdFxcdCAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW5cXG4rXFx0XFx0ICogQS1NUERVIGJlbG9uZyB0byB0aGUgc2FtZSBUSUQgKFRyYWZmaWMgSWRlbnRpZmllcikuXFxuK1xcdFxcdCAqIFNpbmNlIHByaW9yaXR5IG1hcHMgdG8gVElELCBhIGRpZmZlcmVudCBwcmlvcml0eSBtZWFuc1xcbitcXHRcXHQgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLFxcbitcXHRcXHQgKiBzbyB3ZSByZXR1cm4gLUVOT1NQQyBoZXJlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0Zmlyc3QgPSBza2JfcGVlayhcXHUwMDI2c2Vzc2lvbi1cXHUwMDNlc2tiX2xpc3QpO1xcbiBcXHRcXHRpZiAocC1cXHUwMDNlcHJpb3JpdHkgIT0gZmlyc3QtXFx1MDAzZXByaW9yaXR5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxNzo1NS4xNzM4OTY2NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0OTMyOTEyMDEyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQlJDTUZNQUNfUENJRVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2RlbF9wbWtzYVwiLFxuICAgIFwiYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FcIixcbiAgICBcImJyY21mX25ldGlmX21vbl9yeFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVjIgUE1LU0EgY2FjaGUgb3BlcmF0aW9ucyBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNmZzgwMjExIG5ldGxpbmsgY29tbWFuZHMgd2hlbiBhIEJyb2FkY29tIFdpLUZpIGRldmljZSBpcyBwcmVzZW50LiBTeXprYWxsZXIgY2FuIGVtdWxhdGUgc3VjaCBhIGRldmljZSB2aWEgaXRzIFVTQiBmdXp6ZXIsIG1ha2luZyB0aGlzIG5ldyBsb2dpYyByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyByYWRpb3RhcCBoZWFkZXIgaW5zZXJ0aW9uIGluIG1vbml0b3IgbW9kZSBhbmQgUENJZSBtYWlsYm94IHBvbGxpbmcsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBmZTE2N2U0NTZkYTFjYWY5MjgyNjk5Mjk1MzMxOTVhM2ZjYTMxMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA2OjE3OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuaW5kZXggMGI1NWQ0NDU4OTVmMi4uN2Q3ZTVlY2VjZDIyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuQEAgLTM5ODksMTIgKzM5ODksMTAgQEAgc3RhdGljIGludCBicmNtZl9jZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3Aoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYnJjbWZfZGVsYXkodTMyIG1zKVxuIHtcbi1cdGlmIChtcyBcdTAwM2MgMTAwMCAvIEhaKSB7XG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0XHRtZGVsYXkobXMpO1xuLVx0fSBlbHNlIHtcbitcdGlmIChtcyBcdTAwM2M9IDIwKVxuK1x0XHR1c2xlZXBfcmFuZ2UobXMgKiAxMDAwLCBtcyAqIDEwMDAgKyAxMDAwKTtcbitcdGVsc2VcbiBcdFx0bXNsZWVwKG1zKTtcbi1cdH1cbiB9XG4gXG4gc3RhdGljIHMzMiBicmNtZl9jb25maWdfd293bF9wYXR0ZXJuKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1OCBjbWRbNF0sXG5AQCAtNDM2NCw2ICs0MzYyLDEwNCBAQCBicmNtZl9wbWtzYV92M19vcChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IGNmZzgwMjExX3Bta3NhICpwbWtzYSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIGJyY21mX3Bta3NhX3YyX29wIC0gdXBkYXRlIGZpcm13YXJlIFBNS1NBIGNhY2hlIHVzaW5nIHRoZSBWMiBsaXN0IGludGVyZmFjZS5cbisgKlxuKyAqIFYyIGZpcm13YXJlIChyZXZpc2lvbiAxMikgdXNlcyBhIHZlcnNpb25lZCBmbGF0IGxpc3Qgc3RydWN0dXJlXG4rICogKGJyY21mX3Bta19saXN0X3YyX2xlKSByYXRoZXIgdGhhbiB0aGUgcGVyLWVudHJ5IG9wZXJhdGlvbiBtb2RlbCBvZiBWMy5cbisgKiBFYWNoIGVudHJ5IGNhcnJpZXMgRklMUy1zcGVjaWZpYyBmaWVsZHMgKHJhdyBQTUsgbWF0ZXJpYWwsIFNTSUQsIGFuZFxuKyAqIGZpbHNfY2FjaGVfaWQpIGluIGFkZGl0aW9uIHRvIHRoZSBiYXNpYyBCU1NJRCArIFBNS0lEIHBhaXIsIGVuYWJsaW5nXG4rICogRklMUyBmYXN0LXJvYW1pbmcgb24gZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFYzLlxuKyAqXG4rICogQGNmZzogICBkcml2ZXIgY29uZmlnIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBzaGFkb3cgVjIgUE1LU0EgbGlzdFxuKyAqIEBpZnA6ICAgaW50ZXJmYWNlIHBvaW50ZXJcbisgKiBAcG1rc2E6IHRoZSBQTUtTQSB0byBhZGQvcmVtb3ZlLCBvciBOVUxMIGZvciBhIGZsdXNoXG4rICogQGFsaXZlOiB0cnVlID0gYWRkIChzZXQgdGltZV9sZWZ0IHRvIG5vLWV4cGlyeSksIGZhbHNlID0gcmVtb3ZlL2ZsdXNoXG4rICovXG4rc3RhdGljIHMzMlxuK2JyY21mX3Bta3NhX3YyX29wKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwLFxuK1x0XHQgIHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EsIGJvb2wgYWxpdmUpXG4re1xuK1x0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGNmZy1cdTAwM2VwdWI7XG4rXHRzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUgKmxpc3QgPSBcdTAwMjZjZmctXHUwMDNlcG1rX2xpc3RfdjI7XG4rXHRzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIgKnBtayA9IGxpc3QtXHUwMDNlcG1rO1xuK1x0dTMyIG5wbWsgPSBsZTE2X3RvX2NwdShsaXN0LVx1MDAzZWxlbmd0aCk7XG4rXHR1MzIgaTtcbitcbitcdC8qIG5wbWsgaGVyZSBzdG9yZXMgdGhlIGNvdW50IG9mIHZhbGlkIGVudHJpZXMsIHJlcHVycG9zaW5nIHRoZVxuK1x0ICogbGVuZ3RoIGZpZWxkIG9mIHRoZSBzaGFkb3cgbGlzdCBhcyBhIGNvdW50ZXIuICBXZSBjb252ZXJ0IHRvXG4rXHQgKiB0aGUgd2lyZSBmb3JtYXQgKGJ5dGUgbGVuZ3RoKSB3aGVuIHNlbmRpbmcgdG8gZmlybXdhcmUuXG4rXHQgKi9cbitcdGlmICghcG1rc2EpIHtcbitcdFx0LyogRmx1c2g6IHplcm8gdGhlIHNoYWRvdyBsaXN0IGFuZCBwdXNoIGFuIGVtcHR5IFYyIGxpc3QuICovXG4rXHRcdG1lbXNldChsaXN0LCAwLCBzaXplb2YoKmxpc3QpKTtcbitcdFx0Z290byBzZW5kO1xuK1x0fVxuK1xuK1x0aWYgKGFsaXZlKSB7XG4rXHRcdC8qIFNldDogc2VhcmNoIGZvciBleGlzdGluZyBCU1NJRCBtYXRjaCBmaXJzdC4gKi9cbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBtazsgaSsrKVxuK1x0XHRcdGlmICghbWVtY21wKHBta3NhLVx1MDAzZWJzc2lkLCBwbWtbaV0uYnNzaWQsIEVUSF9BTEVOKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAoaSBcdTAwM2U9IEJSQ01GX01BWFBNS0lEKSB7XG4rXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJWMiBQTUtTQSBjYWNoZSBmdWxsICglZCBlbnRyaWVzKVxcblwiLFxuK1x0XHRcdFx0IG5wbWspO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdG1lbXNldChcdTAwMjZwbWtbaV0sIDAsIHNpemVvZihwbWtbaV0pKTtcbitcdFx0cG1rW2ldLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIpKTtcbitcdFx0aWYgKHBta3NhLVx1MDAzZWJzc2lkKVxuK1x0XHRcdG1lbWNweShwbWtbaV0uYnNzaWQsIHBta3NhLVx1MDAzZWJzc2lkLCBFVEhfQUxFTik7XG4rXHRcdGlmIChwbWtzYS1cdTAwM2VwbWtpZClcbitcdFx0XHRtZW1jcHkocG1rW2ldLnBta2lkLCBwbWtzYS1cdTAwM2VwbWtpZCwgV0xBTl9QTUtJRF9MRU4pO1xuK1x0XHRpZiAocG1rc2EtXHUwMDNlcG1rIFx1MDAyNlx1MDAyNiBwbWtzYS1cdTAwM2VwbWtfbGVuIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcG1rc2EtXHUwMDNlcG1rX2xlbiBcdTAwM2M9IFdMQU5fUE1LX0xFTl9TVUlURV9CXzE5Mikge1xuK1x0XHRcdG1lbWNweShwbWtbaV0ucG1rLCBwbWtzYS1cdTAwM2VwbWssIHBta3NhLVx1MDAzZXBta19sZW4pO1xuK1x0XHRcdHBta1tpXS5wbWtfbGVuID0gY3B1X3RvX2xlMTYocG1rc2EtXHUwMDNlcG1rX2xlbik7XG4rXHRcdH1cbitcdFx0aWYgKHBta3NhLVx1MDAzZXNzaWQgXHUwMDI2XHUwMDI2IHBta3NhLVx1MDAzZXNzaWRfbGVuKSB7XG4rXHRcdFx0bWVtY3B5KHBta1tpXS5zc2lkLlNTSUQsIHBta3NhLVx1MDAzZXNzaWQsIHBta3NhLVx1MDAzZXNzaWRfbGVuKTtcbitcdFx0XHRwbWtbaV0uc3NpZC5TU0lEX2xlbiA9IHBta3NhLVx1MDAzZXNzaWRfbGVuO1xuK1x0XHR9XG4rXHRcdGlmIChwbWtzYS1cdTAwM2VmaWxzX2NhY2hlX2lkKVxuK1x0XHRcdHBta1tpXS5maWxzX2NhY2hlX2lkID0gKnBta3NhLVx1MDAzZWZpbHNfY2FjaGVfaWQ7XG4rXG4rXHRcdGlmIChpID09IG5wbWspXG4rXHRcdFx0bnBtaysrO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogRGVsZXRlOiBmaW5kIGJ5IEJTU0lEIGFuZCBjb21wYWN0IHRoZSBsaXN0LiAqL1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucG1rOyBpKyspXG4rXHRcdFx0aWYgKCFtZW1jbXAocG1rc2EtXHUwMDNlYnNzaWQsIHBta1tpXS5ic3NpZCwgRVRIX0FMRU4pKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChpIFx1MDAzZT0gbnBtaykge1xuK1x0XHRcdGJwaHlfZXJyKGRydnIsIFwiVjIgUE1LU0EgZW50cnkgbm90IGZvdW5kXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGZvciAoOyBpIFx1MDAzYyBucG1rIC0gMTsgaSsrKVxuK1x0XHRcdG1lbWNweShcdTAwMjZwbWtbaV0sIFx1MDAyNnBta1tpICsgMV0sIHNpemVvZihwbWtbaV0pKTtcbitcdFx0bWVtc2V0KFx1MDAyNnBta1tucG1rIC0gMV0sIDAsIHNpemVvZihwbWtbbnBtayAtIDFdKSk7XG4rXHRcdG5wbWstLTtcbitcdH1cbitcbitcdC8qIFVwZGF0ZSBzaGFkb3cgZW50cnkgY291bnQgKHN0b3JlZCBpbiBsZW5ndGggZmllbGQpLiAqL1xuK1x0bGlzdC1cdTAwM2VsZW5ndGggPSBjcHVfdG9fbGUxNihucG1rKTtcbitcbitzZW5kOlxuK1x0LyogQnVpbGQgdGhlIHdpcmUtZm9ybWF0IGhlYWRlciBhbmQgc2VuZCB0aGUgZnVsbCBsaXN0IHRvIGZpcm13YXJlLlxuK1x0ICogdmVyc2lvbiBhbmQgbGVuZ3RoIG9uIHRoZSB3aXJlIHJlZmxlY3QgdGhlIGFjdHVhbCBieXRlIGZvb3RwcmludC5cbitcdCAqL1xuK1x0bGlzdC1cdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMTYoQlJDTUZfUE1LU0FfVkVSXzIpO1xuK1x0bGlzdC1cdTAwM2VsZW5ndGggID0gY3B1X3RvX2xlMTYob2Zmc2V0b2Yoc3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlLCBwbWspICtcbitcdFx0XHRcdCAgIG5wbWsgKiBzaXplb2Yoc3RydWN0IGJyY21mX3Bta3NhX3YyKSk7XG4rXG4rXHRyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCJwbWtpZF9pbmZvXCIsIGxpc3QsIHNpemVvZigqbGlzdCkpO1xuK31cbitcbitcbiBzdGF0aWMgX191c2VkIHMzMlxuIGJyY21mX3VwZGF0ZV9wbWtsaXN0KHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuIHtcbkBAIC00NDAyLDggKzQ0OTgsOCBAQCBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXG4gXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCB0cnVlKTtcbi1cbi1cdC8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqL1xuK1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxuK1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCB0cnVlKTtcbiBcbiBcdG5wbWsgPSBsZTMyX3RvX2NwdShjZmctXHUwMDNlcG1rX2xpc3QubnBtayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucG1rOyBpKyspXG5AQCAtNDQ0Niw4ICs0NTQyLDggQEAgYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxuIFx0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBwbWtzYSwgZmFsc2UpO1xuLVxuLVx0LyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovXG4rXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXG4rXHRcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIGZhbHNlKTtcbiBcbiBcdG5wbWsgPSBsZTMyX3RvX2NwdShjZmctXHUwMDNlcG1rX2xpc3QubnBtayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucG1rOyBpKyspXG5AQCAtNDQ4Nyw4ICs0NTgzLDggQEAgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXG4gXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIE5VTEwsIGZhbHNlKTtcbi1cbi1cdC8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqL1xuK1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxuK1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTtcbiBcbiBcdG1lbXNldChcdTAwMjZjZmctXHUwMDNlcG1rX2xpc3QsIDAsIHNpemVvZihjZmctXHUwMDNlcG1rX2xpc3QpKTtcbiBcdGVyciA9IGJyY21mX3VwZGF0ZV9wbWtsaXN0KGNmZywgaWZwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5pbmRleCA2Y2ViMzAxNDI5MDU0Li41NzE2N2ZkZTViYTE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5AQCAtMzQ0LDcgKzM0NCw4IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV93b3dsIHtcbiAgKiBAYnNzX2xpc3Q6IGJzc19saXN0IGhvbGRpbmcgc2Nhbm5lZCBhcCBpbmZvcm1hdGlvbi5cbiAgKiBAYnNzX2luZm86IGJzcyBpbmZvcm1hdGlvbiBmb3IgY2ZnODAyMTEgbGF5ZXIuXG4gICogQGNvbm5faW5mbzogYXNzb2NpYXRpb24gaW5mby5cbi0gKiBAcG1rX2xpc3Q6IHdwYTIgcG1rIGxpc3QuXG4rICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0IChWMSBmaXJtd2FyZSkuXG4rICogQHBta19saXN0X3YyOiB3cGEyIHBtayBsaXN0IGZvciBWMiBmaXJtd2FyZSAoRklMUy1jYXBhYmxlLCBmaXJtd2FyZSByZXYgMTIpLlxuICAqIEBzY2FuX3N0YXR1czogc2NhbiBhY3Rpdml0eSBvbiB0aGUgZG9uZ2xlLlxuICAqIEBwdWI6IGNvbW1vbiBkcml2ZXIgaW5mb3JtYXRpb24uXG4gICogQGNoYW5uZWw6IGN1cnJlbnQgY2hhbm5lbC5cbkBAIC0zNzYsNiArMzc3LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8ge1xuIFx0c3RydWN0IHdsX2NmZzgwMjExX2Jzc19pbmZvICpic3NfaW5mbztcbiBcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gY29ubl9pbmZvO1xuIFx0c3RydWN0IGJyY21mX3Bta19saXN0X2xlIHBta19saXN0O1xuK1x0c3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlIHBta19saXN0X3YyO1xuIFx0dW5zaWduZWQgbG9uZyBzY2FuX3N0YXR1cztcbiBcdHN0cnVjdCBicmNtZl9wdWIgKnB1YjtcbiBcdHUzMiBjaGFubmVsO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXG5pbmRleCBlYzE3MDY0NzgwMGRhLi42NzNmMDAwMDM4OWNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1xuQEAgLTQzMSw0NSArNDMxLDUxIEBAIHZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRuZXRpZl9yeChza2IpO1xuIH1cbiBcbitzdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBoZHI7XG4rXHRzOCBkYm1fYW50c2lnbmFsO1xuK30gX19wYWNrZWQ7XG4rXG4gdm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfUkFESU9UQVApKSB7XG4tXHRcdC8qIERvIG5vdGhpbmcgKi9cbitcdFx0LyogRmlybXdhcmUgYWxyZWFkeSBwcm92aWRlZCBhIGZ1bGwgcmFkaW90YXAgaGVhZGVyOyBkbyBub3RoaW5nICovXG4gXHR9IGVsc2UgaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfSFdfUlhfSERSKSkge1xuIFx0XHRzdHJ1Y3Qgd2xjX2QxMXJ4aGRyICp3bGNfcnhoZHIgPSAoc3RydWN0IHdsY19kMTFyeGhkciAqKXNrYi1cdTAwM2VkYXRhO1xuLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XG4rXHRcdHN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvICpydGFwO1xuIFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuIFx0XHR1MTYgUnhTdGF0dXMxO1xuK1x0XHRzOCByc3NpO1xuIFxuIFx0XHRSeFN0YXR1czEgPSBsZTE2X3RvX2NwdSh3bGNfcnhoZHItXHUwMDNlcnhoZHIuUnhTdGF0dXMxKTtcbitcdFx0cnNzaSA9IHdsY19yeGhkci1cdTAwM2Vyc3NpO1xuIFxuIFx0XHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHdsY19kMTFyeGhkcik7XG4tXHRcdC8qIE1BQyBpbnNlcnRzIDIgcGFkIGJ5dGVzIGZvciBhNCBoZWFkZXJzIG9yIFFvUyBvciBBLU1TRFVcbi1cdFx0ICogc3ViZnJhbWVzXG4tXHRcdCAqL1xuK1x0XHQvKiBNQUMgaW5zZXJ0cyAyIHBhZCBieXRlcyBmb3IgYTQgaGVhZGVycyBvciBRb1Mgb3IgQS1NU0RVIHN1YmZyYW1lcyAqL1xuIFx0XHRpZiAoUnhTdGF0dXMxIFx1MDAyNiBSWFNfUEJQUkVTKVxuIFx0XHRcdG9mZnNldCArPSAyO1xuIFx0XHRvZmZzZXQgKz0gRDExX1BIWV9IRFJfTEVOO1xuIFxuIFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gXG4tXHRcdC8qIFRPRE86IHVzZSBSWCBoZWFkZXIgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi9cbi1cdFx0cmFkaW90YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcmFkaW90YXApKTtcbi1cdFx0bWVtc2V0KHJhZGlvdGFwLCAwLCBzaXplb2YoKnJhZGlvdGFwKSk7XG4tXHRcdHJhZGlvdGFwLVx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcbitcdFx0LyogSW5zZXJ0IG91ciByYWRpb3RhcCBoZWFkZXIgd2l0aCBSU1NJIGRhdGEgKi9cbitcdFx0cnRhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpydGFwKSk7XG4rXHRcdG1lbXNldChydGFwLCAwLCBzaXplb2YoKnJ0YXApKTtcbitcdFx0cnRhcC1cdTAwM2VoZHIuaXRfbGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpydGFwKSk7XG4rXHRcdHJ0YXAtXHUwMDNlaGRyLml0X3ByZXNlbnQgPSBjcHVfdG9fbGUzMigxIFx1MDAzY1x1MDAzYyBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCk7XG4rXHRcdHJ0YXAtXHUwMDNlZGJtX2FudHNpZ25hbCA9IHJzc2k7XG4gXG4tXHRcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cbi1cdFx0c2tiLVx1MDAzZWxlbiAtPSA0O1xuK1x0XHQvKiBTdHJpcCB0aGUgNC1ieXRlIHJlY2VpdmUgc3RhdHVzIC8gRkNTIHRhaWwgKi9cbitcdFx0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gNCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XG4gXG4tXHRcdC8qIFRPRE86IHVzZSBSWCBzdGF0dXMgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi9cbiBcdFx0cmFkaW90YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcmFkaW90YXApKTtcbiBcdFx0bWVtc2V0KHJhZGlvdGFwLCAwLCBzaXplb2YoKnJhZGlvdGFwKSk7XG4gXHRcdHJhZGlvdGFwLVx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcbiBcbi1cdFx0LyogVE9ETzogNCBieXRlcyB3aXRoIHJlY2VpdmUgc3RhdHVzPyAqL1xuLVx0XHRza2ItXHUwMDNlbGVuIC09IDQ7XG4rXHRcdC8qIFN0cmlwIHRoZSA0LWJ5dGUgcmVjZWl2ZSBzdGF0dXMgLyBGQ1MgdGFpbCAqL1xuK1x0XHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSA0KTtcbiBcdH1cbiBcbiBcdHNrYi1cdTAwM2VkZXYgPSBpZnAtXHUwMDNlbmRldjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXG5pbmRleCAzNWNiY2VhMGFiYzlhLi5iOWM1MTg5MzlmNTA0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXG5AQCAtMTgyLDEwICsxODIsOCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXG4gXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWY7XG4gXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyO1xuIFx0c3RydWN0IGJyY21mX2lmICppZnA7XG4tXHRib29sIGN1cnJlbnRseV9ibG9ja2VkO1xuLVx0aW50IGk7XG4tXHR1OCBpZmlkeDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1OCBpZmlkeDtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTE5NCwyMyArMTkyLDU0IEBAIHN0YXRpYyB2b2lkIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCxcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmbG93LVx1MDAzZWJsb2NrX2xvY2ssIGZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcbiBcbi1cdGN1cnJlbnRseV9ibG9ja2VkID0gZmFsc2U7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmbG93LVx1MDAzZW5yb2ZyaW5nczsgaSsrKSB7XG4tXHRcdGlmICgoZmxvdy1cdTAwM2VyaW5nc1tpXSkgXHUwMDI2XHUwMDI2IChpICE9IGZsb3dpZCkpIHtcbi1cdFx0XHRyaW5nID0gZmxvdy1cdTAwM2VyaW5nc1tpXTtcbi1cdFx0XHRpZiAoKHJpbmctXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgaSkgPT0gaWZpZHgpKSB7XG4tXHRcdFx0XHRpZiAocmluZy1cdTAwM2VibG9ja2VkKSB7XG4tXHRcdFx0XHRcdGN1cnJlbnRseV9ibG9ja2VkID0gdHJ1ZTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuK1x0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcbitcdHJpbmctXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XG4rXG4rXHQvKlxuK1x0ICogTWFpbnRhaW4gdGhlIHBlci1pbnRlcmZhY2UgYmxvY2tlZC1yaW5nIGNvdW50ZXIuXG4rXHQgKlxuK1x0ICogV2UgdXNlIHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkIHJhdGhlciB0aGFuIGNoZWNraW5nXG4rXHQgKiByaW5nLVx1MDAzZXN0YXR1cyBoZXJlLiAgQSByaW5nIHRoYXQgYmVjYW1lIGJsb2NrZWQgd2hpbGVcbitcdCAqIFJJTkdfT1BFTiBoYXMgYWxyZWFkeSBiZWVuIGNvdW50ZWQgKGNvdW50ZWRfaW5fYmxvY2tlZD10cnVlKS5cbitcdCAqIEJ5IHRoZSB0aW1lIHdlIHVuYmxvY2sgaXQgZHVyaW5nIHRlYXJkb3duIGl0cyBzdGF0dXMgbWF5IGhhdmVcbitcdCAqIGFkdmFuY2VkIHRvIFJJTkdfQ0xPU0lORywgc28gdGVzdGluZyBSSU5HX09QRU4gd291bGQgd3JvbmdseVxuK1x0ICogc2tpcCB0aGUgYXRvbWljX2RlYyBhbmQgcGVybWFuZW50bHkgbGVhayB0aGUgY291bnRlciwgbGVhdmluZ1xuK1x0ICogdGhlIG5ldGlmIHF1ZXVlIHN0b3BwZWQgZm9yZXZlci5cbitcdCAqXG4rXHQgKiBSdWxlOlxuK1x0ICogICBibG9jayB0cmFuc2l0aW9uICAodW5ibG9ja2Vk4oaSYmxvY2tlZCk6IGNvdW50IG9ubHkgaWYgUklOR19PUEVOLFxuK1x0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgY291bnRlZF9pbl9ibG9ja2VkLlxuK1x0ICogICB1bmJsb2NrIHRyYW5zaXRpb24gKGJsb2NrZWTihpJ1bmJsb2NrZWQpOiBkZWNyZW1lbnQgb25seSBpZiB3ZVxuK1x0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGNvdW50ZWQgaXQsXG4rXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyIGNvdW50ZWRfaW5fYmxvY2tlZC5cbitcdCAqL1xuK1x0aWYgKGJsb2NrZWQpIHtcbitcdFx0aWYgKHJpbmctXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikge1xuK1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pO1xuK1x0XHRcdHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkID0gdHJ1ZTtcbiBcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkKSB7XG4rXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSk7XG4rXHRcdFx0cmluZy1cdTAwM2Vjb3VudGVkX2luX2Jsb2NrZWQgPSBmYWxzZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LypcbitcdCAqIE9ubHkgcHJvcGFnYXRlIGEgbmV0aWYgcXVldWUtc3RvcC93YWtlIHdoZW4gdGhlIGludGVyZmFjZVxuK1x0ICogdHJhbnNpdGlvbnMgYmV0d2VlbiBmdWxseS1jbGVhciBhbmQgYXQtbGVhc3Qtb25lLWJsb2NrZWQuXG4rXHQgKiBSZWFkaW5nIHRoZSBhdG9taWMgaXMgc2FmZSBoZXJlOiB3ZSBob2xkIGJsb2NrX2xvY2ssIHNvIG5vXG4rXHQgKiBjb25jdXJyZW50IGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FsbCBjYW4gcmFjZSB0aGUgdXBkYXRlXG4rXHQgKiB3ZSBqdXN0IG1hZGUgYWJvdmUuXG4rXHQgKi9cbitcdGlmIChibG9ja2VkIFx1MDAyNlx1MDAyNiBhdG9taWNfcmVhZChcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSkgIT0gMSkge1xuK1x0XHQvKiBBbm90aGVyIHJpbmcgd2FzIGFscmVhZHkgYmxvY2tlZDsgbm8gbmV3IHF1ZXVlLXN0b3AgbmVlZGVkLiAqL1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4tXHRmbG93LVx1MDAzZXJpbmdzW2Zsb3dpZF0tXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XG4tXHRpZiAoY3VycmVudGx5X2Jsb2NrZWQpIHtcbitcdGlmICghYmxvY2tlZCBcdTAwMjZcdTAwMjYgYXRvbWljX3JlYWQoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDApIHtcbitcdFx0LyogTW9yZSByaW5ncyBzdGlsbCBibG9ja2VkOyBkbyBub3Qgd2FrZSB0aGUgcXVldWUgeWV0LiAqL1xuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMzY3LDYgKzM5Niw4IEBAIHN0cnVjdCBicmNtZl9mbG93cmluZyAqYnJjbWZfZmxvd3JpbmdfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IG5yb2ZyaW5ncylcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Zmxvdy1cdTAwM2VibG9ja19sb2NrKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbG93LVx1MDAzZWFkZHJfbW9kZSk7IGkrKylcbiBcdFx0XHRmbG93LVx1MDAzZWFkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudCk7IGkrKylcbitcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmZsb3ctXHUwMDNlaWZfYmxvY2tlZF9jbnRbaV0sIDApO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXHUwMDNlaGFzaCk7IGkrKylcbiBcdFx0XHRmbG93LVx1MDAzZWhhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcbmluZGV4IGYzZDUxMWY5YTNjOWEuLmFmZGVhOGIzZjhhYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcbkBAIC01LDYgKzUsOCBAQFxuICNpZm5kZWYgQlJDTUZNQUNfRkxPV1JJTkdfSFxuICNkZWZpbmUgQlJDTUZNQUNfRkxPV1JJTkdfSFxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4rXG4gXG4gI2RlZmluZSBCUkNNRl9GTE9XUklOR19IQVNIU0laRVx0XHQ1MTJcdFx0LyogaGFzIHRvIGJlIDJeeCAqL1xuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSU5WQUxJRF9JRFx0MHhGRkZGRkZGRlxuQEAgLTI2LDYgKzI4LDE2IEBAIGVudW0gcmluZ19zdGF0dXMge1xuIHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nIHtcbiBcdHUxNiBoYXNoX2lkO1xuIFx0Ym9vbCBibG9ja2VkO1xuK1x0LypcbitcdCAqIFRydWUgd2hlbiB0aGlzIHJpbmcgaGFzIGJlZW4gY291bnRlZCBpbiB0aGUgcGVyLWludGVyZmFjZVxuK1x0ICogaWZfYmxvY2tlZF9jbnRbXS4gIFNldCB0byB0cnVlIHdoZW5ldmVyIHRoZSByaW5nIHRyYW5zaXRpb25zXG4rXHQgKiB1bmJsb2NrZWTihpJibG9ja2VkIHdoaWxlIFJJTkdfT1BFTjsgY2xlYXJlZCBvbiB0aGUgbWF0Y2hpbmdcbitcdCAqIGJsb2NrZWTihpJ1bmJsb2NrZWQgdHJhbnNpdGlvbi4gIE5lZWRlZCBzbyB0aGF0IGEgcmluZyB0aGF0XG4rXHQgKiBiZWNvbWVzIGJsb2NrZWQgd2hpbGUgUklOR19PUEVOIGFuZCBpcyBsYXRlciBtb3ZlZCB0b1xuK1x0ICogUklOR19DTE9TSU5HIHN0aWxsIGNvcnJlY3RseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyIGF0XG4rXHQgKiB0ZWFyZG93biwgZXZlbiB0aG91Z2ggaXRzIHN0YXR1cyBpcyBubyBsb25nZXIgUklOR19PUEVOLlxuK1x0ICovXG4rXHRib29sIGNvdW50ZWRfaW5fYmxvY2tlZDtcbiBcdGVudW0gcmluZ19zdGF0dXMgc3RhdHVzO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JsaXN0O1xuIH07XG5AQCAtNDAsNiArNTIsMTIgQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nIHtcbiBcdHN0cnVjdCBicmNtZl9mbG93cmluZ19oYXNoIGhhc2hbQlJDTUZfRkxPV1JJTkdfSEFTSFNJWkVdO1xuIFx0c3BpbmxvY2tfdCBibG9ja19sb2NrO1xuIFx0ZW51bSBwcm90b19hZGRyX21vZGUgYWRkcl9tb2RlW0JSQ01GX01BWF9JRlNdO1xuK1x0LyogUGVyLWludGVyZmFjZSBjb3VudCBvZiBjdXJyZW50bHkgYmxvY2tlZCBvcGVuIHJpbmdzLlxuK1x0ICogTWFpbnRhaW5lZCBhdG9taWNhbGx5IHNvIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FuIGNoZWNrXG4rXHQgKiB3aGV0aGVyIGFueSBzaWJsaW5nIHJpbmcgaXMgYWxyZWFkeSBibG9ja2VkIGluIE8oMSkgd2l0aG91dFxuK1x0ICogaG9sZGluZyBibG9ja19sb2NrIGFjcm9zcyBhbiBPKG5yb2ZyaW5ncykgd2Fsay5cbitcdCAqL1xuK1x0YXRvbWljX3QgaWZfYmxvY2tlZF9jbnRbQlJDTUZfTUFYX0lGU107XG4gXHR1MTYgbnJvZnJpbmdzO1xuIFx0Ym9vbCB0ZGxzX2FjdGl2ZTtcbiBcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICp0ZGxzX2VudHJ5O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmNcbmluZGV4IGE0M2YxYTM4YjBlMzAuLjNjMWNhMzU1ZThlZWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmNcbkBAIC0xMDM3LDcgKzEwMzcsOSBAQCBpbnQgYnJjbWZfZndzX21hY2Rlc2NfaW5kaWNhdGUoc3RydWN0IGJyY21mX2Z3c19pbmZvICpmd3MsIHU4IHR5cGUsIHU4ICpkYXRhKVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJ1c2UgZXhpc3RpbmdcXG5cIik7XG4gXHRcdFx0V0FSTl9PTihlbnRyeS1cdTAwM2VtYWNfaGFuZGxlICE9IG1hY19oYW5kbGUpO1xuLVx0XHRcdC8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovXG4rXHRcdFx0LyogRmlybXdhcmUgcmUtc2VudCBBREQgZm9yIHRoZSBzYW1lIE1BQyBoYW5kbGUuXG4rXHRcdFx0ICogTm8gYWN0aW9uIHJlcXVpcmVkOyBpdCBpcyBhIHNhZmUgbm8tb3AuXG4rXHRcdFx0ICovXG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG5AQCAtNDgsNyArNDgsMTkgQEBcbiAjZGVmaW5lIE1TR0JVRl9UWVBFX0xQQktfRE1BWEZFUlx0XHQweDEzXG4gI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJfQ01QTFRcdFx0MHgxNFxuIFxuLSNkZWZpbmUgTlJfVFhfUEtUSURTXHRcdFx0XHQyMDQ4XG4rLypcbisgKiBOUl9UWF9QS1RJRFM6IG51bWJlciBvZiBzaW11bHRhbmVvdXNseSBpbi1mbGlnaHQgVFggcGFja2V0IElEcy5cbisgKiBFYWNoIG91dHN0YW5kaW5nIFRYIGZyYW1lIGNvbnN1bWVzIG9uZSBJRCB1bnRpbCB0aGUgZG9uZ2xlIHJldHVybnNcbisgKiBhIFRYLXN0YXR1cyBjb21wbGV0aW9uLiAgVGhlIG9yaWdpbmFsIDIwNDgtZW50cnkgcG9vbCBleGhhdXN0ZWQgdW5kZXJcbisgKiDiiaU0IGNvbmN1cnJlbnQgaXBlcmYzIHN0cmVhbXMgb24gV2ktRmkgNS82ICg4MDIuMTFhYy9heCkgZGV2aWNlcyxcbisgKiBjYXVzaW5nIFwiTm8gUEtUSUQgYXZhaWxhYmxlXCIgZHJvcHMgYW5kIFRDUCByZXRyYW5zbWl0cy4gIDQwOTYgZ2l2ZXNcbisgKiBoZWFkcm9vbSBmb3IgaGlnaC1hZ2dyZWdhdGlvbiBzY2VuYXJpb3Mgd2hpbGUgc3RpbGwgZml0dGluZyBpbiBhXG4rICogbW9kZXN0IGFtb3VudCBvZiBob3N0IG1lbW9yeSAofjQ4IEtCIGZvciB0aGUgcGt0aWQgdGFibGUgZW50cmllcykuXG4rICpcbisgKiBOUl9SWF9QS1RJRFM6IFJYIHBvc3QgYnVmZmVycyBwcmUtYWxsb2NhdGVkIHRvIHRoZSBkb25nbGUuICAxMDI0IGlzXG4rICogc3VmZmljaWVudCBmb3IgY3VycmVudCBoYXJkd2FyZSBSWCByaW5nIGRlcHRoczsgbGVhdmUgdW5jaGFuZ2VkLlxuKyAqL1xuKyNkZWZpbmUgTlJfVFhfUEtUSURTXHRcdFx0XHQ0MDk2XG4gI2RlZmluZSBOUl9SWF9QS1RJRFNcdFx0XHRcdDEwMjRcbiBcbiAjZGVmaW5lIEJSQ01GX0lPQ1RMX1JFUV9QS1RJRFx0XHRcdDB4RkZGRVxuQEAgLTY0LDggKzc2LDI5IEBAXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfUEtUX0ZMQUdTX0ZSQU1FX01BU0tcdDB4MDdcbiAjZGVmaW5lIEJSQ01GX01TR0JVRl9QS1RfRkxBR1NfUFJJT19TSElGVFx0NVxuIFxuLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDFcdFx0MzJcbi0jZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQyXHRcdDk2XG4rLypcbisgKiBUWCBmbHVzaCAvIGRvb3JiZWxsLXJpbmcgdGhyZXNob2xkcy5cbisgKlxuKyAqIENOVDEgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIGluIHRoZSBjb21tb25yaW5nXG4rICogYmVmb3JlIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgd3JpdGVfY29tcGxldGUoKSAoZG9vcmJlbGwgcmluZykgaXNcbisgKiBpc3N1ZWQgbWlkLWJhdGNoLiAgQ05UMiBpcyB0aGUgaGFyZCBmbHVzaCBpbnRlcnZhbDogYWZ0ZXIgdGhpcyBtYW55XG4rICogZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuIHNpbmNlIHRoZSBsYXN0IGZsdXNoLCB3ZSB1bmNvbmRpdGlvbmFsbHlcbisgKiByaW5nIHRoZSBiZWxsIGFuZCByZXNldCB0aGUgY291bnRlci5cbisgKlxuKyAqIFJhaXNpbmcgYm90aCBmcm9tIHRoZSBvcmlnaW5hbCAzMi85NiB0byA2NC8xMjggZG91YmxlcyB0aGUgYXZlcmFnZVxuKyAqIG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyBjb21taXR0ZWQgcGVyIE1NSU8gd3JpdGUsIGhhbHZpbmcgdGhlIFBDSWVcbisgKiBkb29yYmVsbCByYXRlIG9uIHN1c3RhaW5lZCB0aHJvdWdocHV0IHdvcmtsb2Fkcy4gIFRoZSB0cmFkZW9mZiBpcyBhXG4rICogbWFyZ2luYWxseSBoaWdoZXIgd29yc3QtY2FzZSBsYXRlbmN5IGZvciB0aGUgbGFzdCBmcmFtZXMgaW4gYSBidXJzdCxcbisgKiB3aGljaCBpbiBwcmFjdGljZSBpcyBoaWRkZW4gYnkgdGhlIHRpbWUgdGhlIGRvbmdsZSBETUEgZW5naW5lIGRyYWluc1xuKyAqIHRoZSBwcmV2aW91cyBiYXRjaC5cbisgKlxuKyAqIFRSSUNLTEVfVFhXT1JLRVJfVEhSUyBnb3Zlcm5zIGhvdyBvZnRlbiBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YSgpXG4rICogZm9yY2VzIGEgd29ya3F1ZXVlIHNjaGVkdWxlIHdoZW4gdGhlIHF1ZXVlIGRlcHRoIGlzIG5vdCBhIG11bHRpcGxlIG9mXG4rICogdGhpcyB2YWx1ZS4gIEtlZXBpbmcgaXQgYXQgaGFsZiBvZiBDTlQxICgzMikgcHJlc2VydmVzIHJlc3BvbnNpdmVuZXNzXG4rICogZm9yIGxvdy1yYXRlIGZsb3dzIChlLmcuIFZvSVAsIElDTVApIHRoYXQgbmV2ZXIgYWNjdW11bGF0ZSA2NCBmcmFtZXMuXG4rICovXG4rI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMVx0XHQ2NFxuKyNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDJcdFx0MTI4XG4gXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSU1x0OTZcbiAjZGVmaW5lIEJSQ01GX01TR0JVRl9UUklDS0xFX1RYV09SS0VSX1RIUlNcdDMyXG5AQCAtNzg3LDEwICs4MjAsMzAgQEAgc3RhdGljIGludCBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZiwgdTMyIGZsb3dpZCxcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfY29tbW9ucmluZyAqY29tbW9ucmluZztcbiBcbi1cdHNldF9iaXQoZmxvd2lkLCBtc2didWYtXHUwMDNlZmxvd19tYXApO1xuK1x0LypcbitcdCAqIElmIHRoZSBiaXQgd2FzIGFscmVhZHkgc2V0LCBhIHR4Zmxvd193b3JrIGl0ZW0gaXMgYWxyZWFkeVxuK1x0ICogcXVldWVkIG9yIHJ1bm5pbmcgZm9yIHRoaXMgcmluZy4gIEluIHRoYXQgY2FzZSB0aGUgZXhpc3RpbmdcbitcdCAqIHdvcmtlciB3aWxsIGRyYWluIG91ciBmcmVzaGx5IGVucXVldWVkIGZyYW1lIHdoZW4gaXQgcnVucyxcbitcdCAqIHNvIHdlIG9ubHkgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIHdvcmsgaXRlbSB3aGVuIHRoZVxuK1x0ICogZm9yY2UgZmxhZyBpcyBzZXQgb3IgdGhlIHJpbmcgaXMgYmVsb3cgdGhlIGRlbGF5IHRocmVzaG9sZC5cbitcdCAqXG4rXHQgKiBJZiB0aGUgYml0IHdhcyBOT1Qgc2V0ICh0ZXN0X2FuZF9zZXRfYml0IHJldHVybnMgZmFsc2UpLCBub1xuK1x0ICogd29ya2VyIGlzIHBlbmRpbmcgZm9yIHRoaXMgcmluZyBhdCBhbGwuICBXZSBNVVNUIHNjaGVkdWxlXG4rXHQgKiBvbmUgdW5jb25kaXRpb25hbGx5LCBvdGhlcndpc2UgdGhlIGZyYW1lIHdlIGp1c3QgZW5xdWV1ZWRcbitcdCAqIHdpbGwgc2l0IGluIHRoZSBmbG93cmluZyB1bnNlbnQgdW50aWwgc29tZSB1bnJlbGF0ZWQgZXZlbnRcbitcdCAqIHRyaWdnZXJzIHRoZSB3b3JrcXVldWUg4oCUIGNhdXNpbmcgc2lsZW50IFRYIHN0YWxscyB1bmRlclxuK1x0ICogaGlnaCBsb2FkIHdoZW4gb3V0c3RhbmRpbmdfdHggXHUwMDNlPSBERUxBWV9UWFdPUktFUl9USFJTLlxuK1x0ICovXG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoZmxvd2lkLCBtc2didWYtXHUwMDNlZmxvd19tYXApKSB7XG4rXHRcdC8qIEJpdCB3YXMgY2xlYXI6IG5vIHdvcmtlciBwZW5kaW5nLCBhbHdheXMgc2NoZWR1bGUuICovXG4rXHRcdHF1ZXVlX3dvcmsobXNnYnVmLVx1MDAzZXR4Zmxvd193cSwgXHUwMDI2bXNnYnVmLVx1MDAzZXR4Zmxvd193b3JrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBCaXQgd2FzIGFscmVhZHkgc2V0OiB3b3JrZXIgcGVuZGluZywgYXBwbHkgY29hbGVzY2luZyBoZXVyaXN0aWMuICovXG4gXHRjb21tb25yaW5nID0gbXNnYnVmLVx1MDAzZWZsb3dyaW5nc1tmbG93aWRdO1xuLVx0aWYgKChmb3JjZSkgfHwgKGF0b21pY19yZWFkKFx1MDAyNmNvbW1vbnJpbmctXHUwMDNlb3V0c3RhbmRpbmdfdHgpIFx1MDAzY1xuLVx0XHRcdEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSlcbitcdGlmIChmb3JjZSB8fCAoYXRvbWljX3JlYWQoXHUwMDI2Y29tbW9ucmluZy1cdTAwM2VvdXRzdGFuZGluZ190eCkgXHUwMDNjXG4rXHRcdCAgICAgIEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSlcbiBcdFx0cXVldWVfd29yayhtc2didWYtXHUwMDNldHhmbG93X3dxLCBcdTAwMjZtc2didWYtXHUwMDNldHhmbG93X3dvcmspO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTYyMSwxMSArMTY3NCwxMSBAQCBpbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuIFx0ZG8ge1xuIFx0XHRicmNtZl9tc2didWZfcnhidWZfZGF0YV9maWxsKG1zZ2J1Zik7XG4gXHRcdGlmIChtc2didWYtXHUwMDNlbWF4X3J4YnVmcG9zdCAhPSBtc2didWYtXHUwMDNlcnhidWZwb3N0KVxuLVx0XHRcdG1zbGVlcCgxMCk7XG4rXHRcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFx0XHRlbHNlXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNvdW50Kys7XG4tXHR9IHdoaWxlIChjb3VudCBcdTAwM2MgMTApO1xuK1x0fSB3aGlsZSAoY291bnQgXHUwMDNjIDEwMCk7XG4gXHRicmNtZl9tc2didWZfcnhidWZfZXZlbnRfcG9zdChtc2didWYpO1xuIFx0YnJjbWZfbXNnYnVmX3J4YnVmX2lvY3RscmVzcF9wb3N0KG1zZ2J1Zik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcbmluZGV4IDEzNjYyYWE0YjRlYTYuLjkzMzhhNWZhYTI2MGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXG5AQCAtMjY4LDYgKzI2OCwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2Zpcm13YXJlX21hcHBpbmcgYnJjbWZfcGNpZV9md25hbWVzW10gPSB7XG4gXG4gI2RlZmluZSBCUkNNRl9QQ0lFX01CREFUQV9USU1FT1VUXHRcdG1zZWNzX3RvX2ppZmZpZXMoMjAwMClcbiBcbisvKlxuKyAqIEgyRCBtYWlsYm94IHBvbGwgdGltaW5nIHBhcmFtZXRlcnMuXG4rICpcbisgKiBUaGUgZG9uZ2xlIHR5cGljYWxseSBjbGVhcnMgdGhlIEgyRCBtYWlsYm94IHJlZ2lzdGVyIHdpdGhpbiBhIGZld1xuKyAqIGh1bmRyZWQgbWljcm9zZWNvbmRzIGFmdGVyIHRoZSBkb29yYmVsbCBpbnRlcnJ1cHQgZmlyZXMuICBUaGVcbisgKiBvcmlnaW5hbCBjb2RlIHVzZWQgbXNsZWVwKDEwKSAqIDEwMCBpdGVyYXRpb25zLCBtZWFuaW5nIHRoZVxuKyAqIG1pbmltdW0gb2JzZXJ2YWJsZSBsYXRlbmN5IHdhcyAxMG1zIGV2ZW4gd2hlbiB0aGUgZG9uZ2xlIHdhcyBmYXN0LlxuKyAqXG4rICogV2UgaW5zdGVhZCBzdGFydCB3aXRoIGEgc2hvcnQgc2xlZXAgYW5kIGRvdWJsZSBpdCBlYWNoIGl0ZXJhdGlvblxuKyAqIChleHBvbmVudGlhbCBiYWNrb2ZmKSB1cCB0byBCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTLCBzdGF5aW5nXG4rICogd2l0aGluIHRoZSBzYW1lIDEtc2Vjb25kIGFic29sdXRlIHRpbWVvdXQuXG4rICpcbisgKiBNSU5fVVMgLyBJTklUSUFMX01BWF9VUyA6IHVzbGVlcF9yYW5nZSBib3VuZHMgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb24uXG4rICogTUFYX1VTICAgICA6IGNhcCBvbiB0aGUgcGVyLWl0ZXJhdGlvbiBzbGVlcCAowrVzKS5cbisgKiBUSU1FT1VUX1VTIDogdG90YWwgYnVkZ2V0IGJlZm9yZSBnaXZpbmcgdXAgKDEgc2Vjb25kKS5cbisgKi9cbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVNcdFx0NDBcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9JTklUSUFMX01BWF9VU1x0NTBcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVNcdFx0NTAwMFxuKyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX1RJTUVPVVRfVVNcdFx0MTAwMDAwMFxuK1xuICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfU1RBVFVTX0NNRFx0XHQweDRcbiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX1BNX0NTUlx0XHQweDRDXG4gI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19NU0lfQ0FQXHRcdDB4NThcbkBAIC03NjYsNyArNzg3LDggQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSlcbiBcdHN0cnVjdCBicmNtZl9jb3JlICpjb3JlO1xuIFx0dTMyIGFkZHI7XG4gXHR1MzIgY3VyX2h0b2RfbWJfZGF0YTtcbi1cdHUzMiBpO1xuK1x0dTMyIGVsYXBzZWRfdXMgPSAwO1xuK1x0dTMyIHNsZWVwX3VzID0gQlJDTUZfUENJRV9NQl9QT0xMX0lOSVRJQUxfTUFYX1VTO1xuIFxuIFx0c2hhcmVkID0gXHUwMDI2ZGV2aW5mby1cdTAwM2VzaGFyZWQ7XG4gXHRhZGRyID0gc2hhcmVkLVx1MDAzZWh0b2RfbWJfZGF0YV9hZGRyO1xuQEAgLTc3NiwxMiArNzk4LDQwIEBAIGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBodG9kX21iX2RhdGEpXG4gXHRcdGJyY21mX2RiZyhQQ0lFLCBcIk1CIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgcGVuZGluZyAweCUwNHhcXG5cIixcbiBcdFx0XHQgIGN1cl9odG9kX21iX2RhdGEpO1xuIFxuLVx0aSA9IDA7XG4rXHQvKlxuK1x0ICogV2FpdCBmb3IgdGhlIGRvbmdsZSB0byBjb25zdW1lIHRoZSBwcmV2aW91cyBIMkQgbWFpbGJveCBtZXNzYWdlLlxuK1x0ICpcbitcdCAqIFRoZXJlIGlzIG5vIGludGVycnVwdCB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZG9uZ2xlIGNsZWFycyB0aGlzXG4rXHQgKiByZWdpc3Rlciwgc28gcG9sbGluZyBpcyB1bmF2b2lkYWJsZS4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWRcbitcdCAqIG1zbGVlcCgxMCkgcGVyIGl0ZXJhdGlvbiwgaW5jdXJyaW5nIGF0IGxlYXN0IDEwbXMgb2YgbGF0ZW5jeVxuK1x0ICogZXZlbiB3aGVuIHRoZSBkb25nbGUgcmVzcG9uZGVkIGluIG1pY3Jvc2Vjb25kcy5cbitcdCAqXG4rXHQgKiBXZSB1c2UgdXNsZWVwX3JhbmdlKCkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmIGluc3RlYWQ6XG4rXHQgKiAgIC0gRmlyc3QgaXRlcmF0aW9uIHNsZWVwcyB+NTDCtXMgKGZhc3QgcGF0aCBmb3IgcmVzcG9uc2l2ZSBkb25nbGUpLlxuK1x0ICogICAtIEVhY2ggc3Vic2VxdWVudCBpdGVyYXRpb24gZG91YmxlcyB0aGUgc2xlZXAsIGNhcHBlZCBhdCA1bXMsXG4rXHQgKiAgICAgc28gbG9uZyB3YWl0cyBzdGlsbCB5aWVsZCB0aGUgQ1BVIHdpdGhvdXQgYnVzeS1zcGlubmluZy5cbitcdCAqICAgLSBUb3RhbCB0aW1lb3V0IG1hdGNoZXMgdGhlIG9yaWdpbmFsIDEtc2Vjb25kIGxpbWl0LlxuK1x0ICogICAtIFdlIGJhaWwgZWFybHkgaWYgdGhlIGRldmljZSBoYXMgZ29uZSBkb3duIHNvIHRoYXQgYSBkZWFkXG4rXHQgKiAgICAgZG9uZ2xlIGRvZXMgbm90IGhvbGQgdGhlIGNhbGxlciBmb3IgYSBmdWxsIHNlY29uZC5cbitcdCAqL1xuIFx0d2hpbGUgKGN1cl9odG9kX21iX2RhdGEgIT0gMCkge1xuLVx0XHRtc2xlZXAoMTApO1xuLVx0XHRpKys7XG4tXHRcdGlmIChpIFx1MDAzZSAxMDApXG4rXHRcdGlmIChkZXZpbmZvLVx1MDAzZXN0YXRlID09IEJSQ01GTUFDX1BDSUVfU1RBVEVfRE9XTikge1xuK1x0XHRcdGJyY21mX2RiZyhQQ0lFLCBcIkRldmljZSBkb3duLCBhYm9ydGluZyBNQiBzZW5kXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChlbGFwc2VkX3VzIFx1MDAzZT0gQlJDTUZfUENJRV9NQl9QT0xMX1RJTUVPVVRfVVMpIHtcbitcdFx0XHRicmNtZl9lcnIoXCJUaW1lb3V0IHdhaXRpbmcgZm9yIEgyRCBNQiBzbG90IGFmdGVyICV1IHVzXFxuXCIsXG4rXHRcdFx0XHQgIGVsYXBzZWRfdXMpO1xuK1x0XHRcdHJldHVybiAtRUlPO1xuK1x0XHR9XG4rXG4rXHRcdHVzbGVlcF9yYW5nZShCUkNNRl9QQ0lFX01CX1BPTExfTUlOX1VTLCBzbGVlcF91cyk7XG4rXHRcdGVsYXBzZWRfdXMgKz0gc2xlZXBfdXM7XG4rXG4rXHRcdC8qIEV4cG9uZW50aWFsIGJhY2tvZmYsIGNhcHBlZCBhdCBCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTICovXG4rXHRcdHNsZWVwX3VzID0gbWluKHNsZWVwX3VzICogMiwgKHUzMilCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTKTtcbitcbiBcdFx0Y3VyX2h0b2RfbWJfZGF0YSA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcbiBcdH1cbiBcbkBAIC0xMDAxLDEwICsxMDUxLDEwIEBAIHN0YXRpYyB2b2lkIGJyY21mX3BjaWVfcmVsZWFzZV9pcnEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbylcbiBcdGZyZWVfaXJxKHBkZXYtXHUwMDNlaXJxLCBkZXZpbmZvKTtcbiBcdHBjaV9kaXNhYmxlX21zaShwZGV2KTtcbiBcbi1cdG1zbGVlcCg1MCk7XG4rXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXHRjb3VudCA9IDA7XG4tXHR3aGlsZSAoKGRldmluZm8tXHUwMDNlaW5faXJxKSBcdTAwMjZcdTAwMjYgKGNvdW50IFx1MDAzYyAyMCkpIHtcbi1cdFx0bXNsZWVwKDUwKTtcbitcdHdoaWxlICgoZGV2aW5mby1cdTAwM2Vpbl9pcnEpIFx1MDAyNlx1MDAyNiAoY291bnQgXHUwMDNjIDEwMDApKSB7XG4rXHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbiBcdFx0Y291bnQrKztcbiBcdH1cbiBcdGlmIChkZXZpbmZvLVx1MDAzZWluX2lycSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uY1xuaW5kZXggYjcyNWM2NGU1YjVjNi4uNGU0MTQ0MDNkNzQ3MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcbkBAIC0xNjQ1LDM3ICsxNjQ1LDQzIEBAIHN0YXRpYyB1OCBicmNtZl9zZGlvX3J4Z2xvbShzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzLCB1OCByeHNlcSlcbiBcbiBcdFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcTtcbiBcdFx0cmRfbmV3LmxlbiA9IGRsZW47XG4rXG4rXHRcdC8qXG4rXHRcdCAqIENsYWltIHRoZSBob3N0IG9uY2UgZm9yIHRoZSBlbnRpcmUgaGVhZGVyLXBhcnNpbmcgcGhhc2UuXG4rXHRcdCAqXG4rXHRcdCAqIGJyY21mX3NkaW9faGRwYXJzZSgpIG9wZXJhdGVzIG9uIGRhdGEgYWxyZWFkeSBpbiBob3N0XG4rXHRcdCAqIG1lbW9yeSwgYnV0IG1heSBjYWxsIGJyY21mX3NkaW9fcnhmYWlsKCkgb24gZXJyb3IsIHdoaWNoXG4rXHRcdCAqIHdyaXRlcyBTRElPIEZ1bmMxIHJlZ2lzdGVycyBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIHRoZVxuK1x0XHQgKiBob3N0IHRvIGJlIGNsYWltZWQuXG4rXHRcdCAqXG4rXHRcdCAqIHNrYl9wdWxsKCkgYW5kIHRoZSBudW0gY291bnRlciBhcmUgcHVyZSBob3N0LW1lbW9yeVxuK1x0XHQgKiBvcGVyYXRpb25zOyBrZWVwIHRoZW0gb3V0c2lkZSB0aGUgbG9jayB0byBtaW5pbWlzZSB0aGVcbitcdFx0ICogaG9sZCB0aW1lLiAgQm90aCBoZHBhcnNlIGNhbGxzIChzdXBlcmZyYW1lIGhlYWRlciBhbmRcbitcdFx0ICogZWFjaCBzdWJmcmFtZSBoZWFkZXIpIGFyZSBncm91cGVkIHVuZGVyIGEgc2luZ2xlIGNsYWltL1xuK1x0XHQgKiByZWxlYXNlLCByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIE4rMSBzZXBhcmF0ZSBwYWlycy5cbitcdFx0ICovXG4gXHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4gXHRcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtXHUwMDNlZGF0YSwgXHUwMDI2cmRfbmV3LFxuIFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VQRVIpO1xuLVx0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdGJ1cy1cdTAwM2VjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSBcdTAwM2NcdTAwM2MgNDtcbi1cbi1cdFx0LyogUmVtb3ZlIHN1cGVyZnJhbWUgaGVhZGVyLCByZW1lbWJlciBvZmZzZXQgKi9cbi1cdFx0c2tiX3B1bGwocGZpcnN0LCByZF9uZXcuZGF0X29mZnNldCk7XG4tXHRcdG51bSA9IDA7XG4tXG4tXHRcdC8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqL1xuLVx0XHRza2JfcXVldWVfd2FsayhcdTAwMjZidXMtXHUwMDNlZ2xvbSwgcG5leHQpIHtcbi1cdFx0XHQvKiBsZWF2ZSB3aGVuIGludmFsaWQgc3ViZnJhbWUgaXMgZm91bmQgKi9cbi1cdFx0XHRpZiAoZXJyY29kZSlcbi1cdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdHJkX25ldy5sZW4gPSBwbmV4dC1cdTAwM2VsZW47XG4tXHRcdFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcSsrO1xuLVx0XHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdFx0ZXJyY29kZSA9IGJyY21mX3NkaW9faGRwYXJzZShidXMsIHBuZXh0LVx1MDAzZWRhdGEsIFx1MDAyNnJkX25ldyxcbi1cdFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VCKTtcbi1cdFx0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdFx0YnJjbWZfZGJnX2hleF9kdW1wKEJSQ01GX0dMT01fT04oKSxcbi1cdFx0XHRcdFx0ICAgcG5leHQtXHUwMDNlZGF0YSwgMzIsIFwic3ViZnJhbWU6XFxuXCIpO1xuLVxuLVx0XHRcdG51bSsrO1xuK1x0XHQvKiBWYWxpZGF0ZSBhbGwgdGhlIHN1YmZyYW1lIGhlYWRlcnMgd2hpbGUgaG9zdCBpcyBjbGFpbWVkICovXG4rXHRcdGlmICghZXJyY29kZSkge1xuK1x0XHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNmJ1cy1cdTAwM2VnbG9tLCBwbmV4dCkge1xuK1x0XHRcdFx0cmRfbmV3LmxlbiA9IHBuZXh0LVx1MDAzZWxlbjtcbitcdFx0XHRcdHJkX25ldy5zZXFfbnVtID0gcnhzZXErKztcbitcdFx0XHRcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwbmV4dC1cdTAwM2VkYXRhLFxuK1x0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyZF9uZXcsXG4rXHRcdFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VCKTtcbitcdFx0XHRcdGJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksXG4rXHRcdFx0XHRcdFx0ICAgcG5leHQtXHUwMDNlZGF0YSwgMzIsXG4rXHRcdFx0XHRcdFx0ICAgXCJzdWJmcmFtZTpcXG5cIik7XG4rXHRcdFx0XHRpZiAoZXJyY29kZSlcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChlcnJjb2RlKSB7XG4tXHRcdFx0LyogVGVybWluYXRlIGZyYW1lIG9uIGVycm9yICovXG4tXHRcdFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbitcdFx0XHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IsIHN0aWxsIGhvbGRpbmcgdGhlIGhvc3QgKi9cbiBcdFx0XHRicmNtZl9zZGlvX3J4ZmFpbChidXMsIHRydWUsIGZhbHNlKTtcbiBcdFx0XHRidXMtXHUwMDNlc2RjbnQucnhnbG9tZmFpbCsrO1xuIFx0XHRcdGJyY21mX3NkaW9fZnJlZV9nbG9tKGJ1cyk7XG5AQCAtMTY4Myw2ICsxNjg5LDE0IEBAIHN0YXRpYyB1OCBicmNtZl9zZGlvX3J4Z2xvbShzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzLCB1OCByeHNlcSlcbiBcdFx0XHRidXMtXHUwMDNlY3VyX3JlYWQubGVuID0gMDtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuK1x0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4rXG4rXHRcdC8qIEhvc3QgcmVsZWFzZWQ7IG5vdyBkbyB0aGUgcHVyZS1tZW1vcnkgYm9va2tlZXBpbmcgKi9cbitcdFx0YnVzLVx1MDAzZWN1cl9yZWFkLmxlbiA9IHJkX25ldy5sZW5fbnh0ZnJtIFx1MDAzY1x1MDAzYyA0O1xuK1xuK1x0XHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xuK1x0XHRza2JfcHVsbChwZmlyc3QsIHJkX25ldy5kYXRfb2Zmc2V0KTtcbitcdFx0bnVtID0gMDtcbiBcbiBcdFx0LyogQmFzaWMgU0QgZnJhbWluZyBsb29rcyBvayAtIHByb2Nlc3MgZWFjaCBwYWNrZXQgKGhlYWRlcikgKi9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXG5pbmRleCBmYzdhNWRkMmU1ZDg2Li4zZmQ4YmRiZDM1ZTU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXG5AQCAtNTE2LDEyICs1MTYsMTEgQEAgaW50IGJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLFxuIFx0XHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBXZSBhcmVuJ3QgcmVhbGx5IG91dCBvZiBzcGFjZSBpZiB0aGUgbmV3IGZyYW1lIGlzIG9mXG4tXHRcdCAqIGEgZGlmZmVyZW50IHByaW9yaXR5LCBidXQgd2Ugd2FudCB0aGUgc2FtZSBiZWhhdmlvdXJcbi1cdFx0ICogc28gcmV0dXJuIC1FTk9TUEMgYW55d2F5LlxuLVx0XHQgKlxuLVx0XHQgKiBYWFg6IFRoZSBvbGQgQU1QRFUgY29kZSBkaWQgdGhpcywgYnV0IGlzIGl0IHJlYWxseVxuLVx0XHQgKiBuZWNlc3Nhcnk/XG4rXHRcdCAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW5cbitcdFx0ICogQS1NUERVIGJlbG9uZyB0byB0aGUgc2FtZSBUSUQgKFRyYWZmaWMgSWRlbnRpZmllcikuXG4rXHRcdCAqIFNpbmNlIHByaW9yaXR5IG1hcHMgdG8gVElELCBhIGRpZmZlcmVudCBwcmlvcml0eSBtZWFuc1xuK1x0XHQgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLFxuK1x0XHQgKiBzbyB3ZSByZXR1cm4gLUVOT1NQQyBoZXJlLlxuIFx0XHQgKi9cbiBcdFx0Zmlyc3QgPSBza2JfcGVlayhcdTAwMjZzZXNzaW9uLVx1MDAzZXNrYl9saXN0KTtcbiBcdFx0aWYgKHAtXHUwMDNlcHJpb3JpdHkgIT0gZmlyc3QtXHUwMDNlcHJpb3JpdHkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxNzo1NS4xNzM4OTgzMzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTc5NDMxOTc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJyY21mbWFjIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIGBicmNtZm1hY2AgYW5kIGBicmNtc21hY2AgZHJpdmVycyBpbiB0aGUgTGludXgga2VybmVsLiBGaXJzdCBnbGFuY2UsIHRoZXJlJ3MgcXVpdGUgYSBiaXQgaGFwcGVuaW5nIGFjcm9zcyB2YXJpb3VzIGZpbGVzLCBzcGVjaWZpY2FsbHk6IGBjZmc4MDIxMS5jYCwgYGNmZzgwMjExLmhgLCBgY29yZS5jYCwgYGZsb3dyaW5nLmNgLCBgZndzaWduYWwuY2AsIGBtc2didWYuY2AsIGBwY2llLmNgLCBgc2Rpby5jYCwgYW5kIGBhbXBkdS5jYC4gVGhlIGNoYW5nZXMgcmFuZ2UgZnJvbSBzdWJ0bGUgdGltaW5nIGFkanVzdG1lbnRzIChgYnJjbWZfZGVsYXlgIG5vdyB1c2luZyBgdXNsZWVwX3JhbmdlYCwgZm9yIGluc3RhbmNlKSB0byBtb3JlIGludm9sdmVkIGFkZGl0aW9ucyBsaWtlIGBicmNtZl9wbWtzYV92Ml9vcGAgZm9yIFBNS1NBIGNhY2hlIHZlcnNpb24gMi4gVGhlcmUgYXJlIGFsc28gdHdlYWtzIHRvIGZsb3cgY29udHJvbCwgbWVzc2FnZSBidWZmZXIgaGFuZGxpbmcsIGFuZCBTRElPL1BDSUUgaW50ZXJhY3Rpb24uXG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGlzIGZvciBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuIFRoZSBwcm9tcHQgZmxhZ3MgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc1wiIGFzIGEgbm8tZ28gZm9yIGZ1enppbmcgaWYgdGhleSByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLiAgQnV0LCBgYnJjbWZtYWNgIGlzIGEgV2ktRmkgZHJpdmVyLCBzbyBpdCB0eXBpY2FsbHkgY29tbXVuaWNhdGVzIHdpdGggcGh5c2ljYWwgV2ktRmkgaGFyZHdhcmUuIEJ1dCwgKmJyY21mbWFjKiBhbHNvIHN1cHBvcnRzIFVTQiEgVGhhdCdzIGtleS4gVVNCIGRldmljZXMgY2FuIGJlIHJlYWRpbHkgZW11bGF0ZWQuIFVTQiBnYWRnZXQsIGR1bW15X2hjZCwgb3Igc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgKHZoY2kpLlxuXG5MZXQgbWUgY29uZmlybSB0aGUgVVNCIHN1cHBvcnQuIFRoZXJlJ3MgYSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jYCBmaWxlLiBCaW5nby4gU28sIHN5emthbGxlciBjb3VsZCBiZSB1c2VkIHRvIGZ1enogdGhpcyBkcml2ZXIuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaGVzLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGluIGBjZmc4MDIxMS5jYCBhcmUgcmVsYXRlZCB0byBQTUtTQSBjYWNoZSBtYW5hZ2VtZW50LCB3aGljaCBtaWdodCBhZmZlY3QgZGlmZmVyZW50IGNvbW11bmljYXRpb24gaW50ZXJmYWNlcy4gVGhlIGNoYW5nZXMgaW4gYGNvcmUuY2AgYWZmZWN0IHRoZSBtb25pdG9yIG1vZGUncyBSU1NJIGRhdGEuIGBmbG93cmluZy5jYCBtYW5hZ2VzIGZsb3cgY29udHJvbC4gYG1zZ2J1Zi5jYCBkZWFscyB3aXRoIG1lc3NhZ2UgYnVmZmVyIHNpemUuIGBwY2llLmNgIHVzZXMgYHVzbGVlcF9yYW5nZWAuIGBzZGlvLmNgIGlzIHJlbGF0ZWQgdG8gU0RJTyBjb21tdW5pY2F0aW9uLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcyB3aGV0aGVyIGFsbCB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZS4gSWYgY29kZSBpbiBgY2ZnODAyMTEuY2AsIGBjb3JlLmNgLCBgZmxvd3JpbmcuY2AsIGBtc2didWYuY2AsIGBwY2llLmNgLCBhbmQgYHNkaW8uY2AgaXMgcmVhY2hhYmxlIHZpYSBVU0IsIHRoZW4gd2UgaGF2ZSBhIGdvb2QgZnV6emluZyB0YXJnZXQsIGJlY2F1c2Ugd2UgY2FuIGVtdWxhdGUgdGhlIFVTQiBXaS1GaSBkb25nbGUuIE5vdyBJIHdpbGwgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgdGhvc2UgZmlsZXMgYXJlIHVzZWQgYnkgdGhlIFVTQiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZHJpdmVyLiBJZiBzbywgdGhlbiAqV29ydGhGdXp6aW5nPXRydWUqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMxNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxODowNi45NjgyMjIwNzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3ODIyMDMyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl91c2JfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNzY6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyMjQ9YnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI0My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI0NDpzdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDUtXFx0XFx0XFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzA3LVxcdC8qIHJlcXVlc3QgZmlybXdhcmUgaGVyZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzA4OlxcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMDktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzNDE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzQyOmJyY21mX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDQyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNDQzOlxcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cXHUwMDNlZHJpdmVyX2luZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDQ0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUxMT1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTUyNDpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFxcdTAwMjZ1c2ItXFx1MDAzZWRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1NjU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJyY21mX3VzYmRydnIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjYtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU2NzpcXHQucHJvYmUgPSBicmNtZl91c2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjgtXFx0LmRpc2Nvbm5lY3QgPSBicmNtZl91c2JfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MDkuMDQ2NDQ3ODk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNzA4NTY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgYnJjbWZtYWNgIERyaXZlciB2aWEgVVNCOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGUgYGJyY21mbWFjYCBkcml2ZXIsIHNwZWNpZmljYWxseSB2aWEgVVNCLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgYSByZWFjaGFibGUgZW50cnkgcG9pbnQgdGhhdCBtaWdodCBiZSBzdXNjZXB0aWJsZS4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgYnJjbWZfcG1rc2FfdjJfb3BgLiBJIHdhbnQgdG8gc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0aGVyZS5cblxuSXQgbG9va3MgbGlrZSBgYnJjbWZfcG1rc2FfdjJfb3BgIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgLCBgYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhYCwgYW5kIGBicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYWAuIFJpZ2h0LCB0aGVzZSBhbGwgc2VlbSB0byBiZSBgY2ZnODAyMTFgIGNhbGxiYWNrcy4gVGhhdCBzdWdnZXN0cyBhbiBpbnRlcmZhY2Ugd2UgbWlnaHQgYmUgYWJsZSB0byBsZXZlcmFnZS5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgLiBUaGF0J3MgdGhlIG9uZSBJJ20gbW9zdCBpbnRlcmVzdGVkIGluIGZvciBub3cuIExldCdzIHNlZSBpZiB3ZSBjYW4gbWFuaXB1bGF0ZSB0aGUgaW5wdXRzIHRvIHRoYXQgdG8gbGVhZCB1cyB0byB3aGF0IHdlIHdhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjEyLjc1MzUzNTk1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkzNDc4MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2NmZzgwMjExX3NldF9wbWtzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00NDgxPXN0YXRpYyBzMzJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NDgyOmJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NDgzLVxcdFxcdFxcdCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjA3OD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBicmNtZl9jZmc4MDIxMV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MDk5LVxcdC5yZXN1bWUgPSBicmNtZl9jZmc4MDIxMV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjEwMDpcXHQuc2V0X3Bta3NhID0gYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYxMDEtXFx0LmRlbF9wbWtzYSA9IGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MTQuNzQ3MDQwMzk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3Mjc1MzE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBDb2RlKipcblxuQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gY2VudGVycyBvbiBgY2ZnODAyMTFfb3BzYCBjYWxsYmFja3MuIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBtYWM4MDIxMSBpbnRlcmZhY2UsIGFuZCBhIGNvbW1vbiBhcmVhIG9mIGZvY3VzIGZvciBhbnlvbmUgd29ya2luZyB3aXRoIHdpcmVsZXNzIGRyaXZlcnMuIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhyb3VnaCBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzOiBhc3NvY2lhdGlvbiwgYXV0aGVudGljYXRpb24sIHJlZ3VsYXRvcnkgZG9tYWluIGhhbmRsaW5nLCB0aGUgd29ya3MuIEknbSBtZW50YWxseSBjaGVja2luZyBpZiB3ZSdyZSBsb29raW5nIGF0IGEgc3BlY2lmaWMgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgcHJvYmxlbS4gSXMgaXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcmF0ZSBjb250cm9sLCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIHBvd2VyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBkcml2ZXI/XG5cbkJ1dCB0aGVuIG15IG1pbmQgc2hpZnRzIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb24gSSdtIGN1cmlvdXMgYWJvdXQuIFdoYXQgYWJvdXQgYGJyY21mX25ldGlmX21vbl9yeGA/IFRoYXQgdGhyb3dzIGEgZGlmZmVyZW50IGxpZ2h0IG9uIHRoaW5ncy4gVGhpcyBpbXBsaWVzIHdlJ3JlIGRlYWxpbmcgd2l0aCBtb25pdG9yaW5nIG1vZGUgZnVuY3Rpb25hbGl0eSBmb3IgYSBCcm9hZGNvbSBkcml2ZXIsIG9yIHNvbWV0aGluZyB0aGF0J3MgQnJvYWRjb20tc3BlY2lmaWMuIFdlIG11c3QgYmUgbG9va2luZyBhdCBwYWNrZXQgcmVjZXB0aW9uIGluIHByb21pc2N1b3VzIG1vZGUgb3IgbW9uaXRvciBtb2RlLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgcG9zc2liaWxpdGllcyBhbmQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgaW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBpc3N1ZSwgcGVyaGFwcyBwYWNrZXQgaW5qZWN0aW9uLCBvciBzbmlmZmluZy4gTXkgdGhpbmtpbmcganVtcHMgZnJvbSB0aGUgZ2VuZXJhbCBgY2ZnODAyMTFfb3BzYCB0byBzb21ldGhpbmcgbXVjaCBtb3JlIHNwZWNpZmljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI3OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjE4LjcxOTc5NjAzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQyODA4OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX25ldGlmX21vbl9yeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTQzND1zdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQzOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjQzOTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQ0MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oPTIyMD12b2lkIGJyY21mX25ldGlmX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oOjIyMTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaC0yMjItdm9pZCBicmNtZl9uZXRfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGxvY2tlZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTIwMD1icmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHZvaWQgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMjQxOlxcdFxcdGJyY21mX25ldGlmX21vbl9yeChpZnAsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDItXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxODoyMC43NjI2MDk5NTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDcyMDkxNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlJDTUYgRHJpdmVyIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIHRyYWNraW5nIHRoaXMgYGJyY21mX25ldGlmX21vbl9yeGAgZnVuY3Rpb24uLi4gYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBgYnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGVgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBTdGFuZGFyZCByZWNlaXZlIHBhdGggcHJvY2Vzc2luZy4gTm93LCBhIGxpdHRsZSBmbGFnIGdvZXMgdXAuIEknbSB3b25kZXJpbmcgYWJvdXQgYG1zZ2J1Zi5jYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29udGV4dCByaWdodC4gVGhhdCBmaWxlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIGlzIGhhbmRsZWQsIGFuZCBJIG5lZWQgdG8gcmVjYWxsIGV4YWN0bHkgaG93IGl0J3MgdXNlZCB3aXRoIFBDSWUuIERvZXMgaXQgaGFuZGxlIGRhdGEgYmVpbmcgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0d29yayB0aHJvdWdoIFBDSWU/IFllcywgdGhhdCdzIHJpZ2h0LiBCdXQgd2hhdCBhYm91dCBVU0I/IERvZXMgdGhlIFVTQiBzdGFjayAqYWxzbyogbGV2ZXJhZ2UgYG1zZ2J1Zi5jYCBmb3IgaXRzIGNvbW11bmljYXRpb24/IEkgbmVlZCB0byBjaGVjayB0aGF0LiBUaGUgbWVzc2FnZSBidWZmZXIgYXJjaGl0ZWN0dXJlIGlzIG9mdGVuIHNoYXJlZCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGl0J3MgZW1wbG95ZWQgYWNyb3NzIGRpZmZlcmVudCB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllcnMsIHNvIEkgZG9uJ3QgY29uZnVzZSB0aGUgZGF0YSBmbG93IGxhdGVyLiBUaGlzIGRldGFpbCBjb3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgSSBpbnRlcnByZXQgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEzMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjI0LjgzNDcwNTE5MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5ODczMTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTE5OT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMjAwOmJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1Ziwgdm9pZCAqYnVmKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xMzQxPXN0YXRpYyB2b2lkIGJyY21mX21zZ2J1Zl9wcm9jZXNzX21zZ3R5cGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTM4MC1cXHRcXHRicmNtZl9kYmcoTVNHQlVGLCBcXFwiTVNHQlVGX1RZUEVfUlhfQ01QTFRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMzgxOlxcdFxcdGJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlKG1zZ2J1ZiwgYnVmKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTM4Mi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MjYuNzMzNDQ2MTgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDA4NTYxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYnJjbWZtYWMgVVNCIGFuZCBtc2didWYuYyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGJyY21mbWFjYCBhbmQgaXRzIFVTQiBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCBgbXNnYnVmLmNgIHBsYXlzIGEgcm9sZSBpbiBpdC4gSXQncyBhIGtleSBxdWVzdGlvbiBiZWNhdXNlIGBtc2didWYuY2Agb2Z0ZW4gaGFuZGxlcyBtZXNzYWdlIGJ1ZmZlcmluZyBhbmQgcXVldWluZywgd2hpY2ggaXMgYSBjb21tb24gcGF0dGVybiBmb3IgVVNCIGNvbW11bmljYXRpb24sIGVzcGVjaWFsbHkgd2l0aCBjb21wbGV4IGRyaXZlcnMuIElmIGl0ICppcyogdXNlZCwgSSBjYW4gbGV2ZXJhZ2UgbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIGBtc2didWYuY2Agc3RydWN0dXJlcywgZnVuY3Rpb25zLCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRvIGdldCBhIG11Y2ggZmFzdGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBVU0IgaW50ZXJmYWNlIG9wZXJhdGVzLiBJZiBpdCdzICpub3QqIHVzZWQsIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBhbHRlcm5hdGl2ZSBidWZmZXJpbmcgbWVjaGFuaXNtcyBvciBkaXJlY3QgbWVzc2FnZSBoYW5kbGluZyB3aXRoaW4gdGhlIGBicmNtZm1hY2AgVVNCIGNvZGUsIHdoaWNoIG1pZ2h0IHBvaW50IHRvIGEgbGVzcyBjb252ZW50aW9uYWwgYXBwcm9hY2gsIGJ1dCBwb3RlbnRpYWxseSBvbmUgdGhhdCdzIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UuIEVpdGhlciB3YXksIGZpZ3VyaW5nIHRoaXMgb3V0IGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODE1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MzAuMjc0MzA0NjUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIzMzEwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXNnYnVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MzAuMzE5NTQ1ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NjEyODk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBVU0IgRHJpdmVyIExhbmRzY2FwZSoqXG5cbkhtbSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBVU0Igc3RhY2suLi4gYW5kIEknbSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBsb3dlci1sZXZlbCBkcml2ZXIgY29tcG9uZW50cy4gSXMgaXQgcG9zc2libGUgdGhhdCB0aGUgY29kZSByZWxhdGVkIHRvIFVTQidzICpidWxrIGNvbXBsZXRlIGRhdGEgY29udGV4dCogLSBgYmNkYy5jYCAtIGlzLCBpbiBmYWN0LCByZWxldmFudCBoZXJlPyBJdCdzIGEgZnV6enkgbWVtb3J5LCBidXQgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHBvc3NpYmlsaXRpZXMgYW5kIGNvbnNpZGVyaW5nIGlmIHRoaXMgaXMgdGhlIGNvcnJlY3QgcGxhY2UgdG8gZm9jdXMuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIG1vZHVsZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBkYXRhIHRyYW5zZmVycyBhbmQgaWYgdGhhdCBjb21wb25lbnQgcHJvdmlkZXMgdGhlIGZyYW1ld29yayBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDk4LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MzMuNDA1Njc3Njg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU5NTM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiY2RjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMjAtI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoyMTojaW5jbHVkZSBcXFwiYmNkYy5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0yMi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz00ODU9c3RhdGljIHZvaWQgYnJjbWZfdXNiX3R4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy00OTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjQ5NTpcXHRicmNtZl9wcm90b19iY2RjX3R4Y29tcGxldGUoZGV2aW5mby1cXHUwMDNlZGV2LCByZXEtXFx1MDAzZXNrYiwgdXJiLVxcdTAwM2VzdGF0dXMgPT0gMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTQ5Ni1cXHRyZXEtXFx1MDAzZXNrYiA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNTAwLVxcdFxcdGRldmluZm8tXFx1MDAzZXR4X2Zsb3dibG9jaykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzo1MDE6XFx0XFx0YnJjbWZfcHJvdG9fYmNkY190eGZsb3dibG9jayhkZXZpbmZvLVxcdTAwM2VkZXYsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNTAyLVxcdFxcdGRldmluZm8tXFx1MDAzZXR4X2Zsb3dibG9jayA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTYwOD1zdGF0aWMgaW50IGJyY21mX3VzYl90eChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNjUyLVxcdCAgICAhZGV2aW5mby1cXHUwMDNldHhfZmxvd2Jsb2NrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjY1MzpcXHRcXHRicmNtZl9wcm90b19iY2RjX3R4Zmxvd2Jsb2NrKGRldiwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTY1NC1cXHRcXHRkZXZpbmZvLVxcdTAwM2V0eF9mbG93YmxvY2sgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxODozMy40NTEyNzkzODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY1MjcxNzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIERyaXZlciBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgb3VyIG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXJzIGFyZSBpbXBsZW1lbnRlZCwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgZHJpdmVycyBhcmUgc3RydWN0dXJlZC4gSXQgbG9va3MgbGlrZSBib3RoIFVTQiBhbmQgU0RJTyBhcmUgbGVhbmluZyBvbiBgYmNkYy5jYC4gVGhhdCdzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgc2hhcmVkIGNvcmUgZm9yIHRoZXNlIGludGVyZmFjZSB0eXBlcy4gVGhlbiBJIHNlZSBQQ0llIGlzIHV0aWxpemluZyBgbXNnYnVmLmNgIHdoaWNoLCBvbiBpdHMgZmFjZSwgc2VlbXMgdG8gaGFuZGxlIGEgdmVyeSBkaWZmZXJlbnQgdHlwZSBvZiBjb21tdW5pY2F0aW9uLiBBaCwgYnV0IHdhaXQgYSBtaW51dGUsIEknbSBub3RpbmcgdGhhdCBgZmxvd3JpbmcuY2AgaXMgYmVpbmcgdXNlZCBieSBib3RoIGBtc2didWYuY2AgYW5kIGBwY2llLmNgLiBUaGF0J3MgaW1tZWRpYXRlbHkgc3BhcmtpbmcgYSBxdWVzdGlvbjogaXMgdGhlcmUgYW55IGNoYW5jZSB0aGF0IGBmbG93cmluZy5jYCBpcyBhbHNvIHVzZWQgKmluZGlyZWN0bHkqIGJ5IFVTQj8gVGhlIHNoYXJlZCB1c2Ugb2YgYGJjZGMuY2AgYW5kIGEgcG90ZW50aWFsIHBhdGggdG8gYGZsb3dyaW5nLmNgIGhhcyBnb3QgbWUgdGhpbmtpbmcgYWJvdXQgZGVlcGVyIGFyY2hpdGVjdHVyYWwgY29tbW9uYWxpdGllcyB0aGFuIGFyZSBpbW1lZGlhdGVseSBhcHBhcmVudC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBkZXBlbmRlbmN5IGNoYWluIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTI0LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MzkuMTAzOTk5OTE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYwODQxNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd3JpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxODozOS4xNDg2MTYzMjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyOTY0MzUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIENvZGUgRGVwZW5kZW5jaWVzOiBmbG93cmluZy5jIGFuZCBiY2RjLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gKmZsb3dyaW5nLmMqLiBJJ20gd29ya2luZyBvbiBzb21ldGhpbmcgdGhhdCB0b3VjaGVzIHRoZSBkYXRhIGZsb3csIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSdzIHJvbGUuIEhtbSwgSSBoYXZlIGEgZmVlbGluZyBgYmNkYy5jYCBtaWdodCBiZSB0aGUgcGxhY2UgdG8gbG9vayBmb3IgdGhhdCBpbnRlcmFjdGlvbi4gVGhlIHdheSBJJ3ZlIHN0cnVjdHVyZWQgbXkgYW5hbHlzaXMgdXN1YWxseSBnb2VzIGxpa2UgdGhpcyAtIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBgZmxvd3JpbmcuY2AgaXMgYWN0dWFsbHkgKnVzZWQqIGJ5IGBiY2RjLmNgLiBJdCdzIGEgY29tbW9uIGRlcGVuZGVuY3kgcGF0dGVybiwgYnV0IEkgbmVlZCB0byBjb25maXJtIGl0IHNwZWNpZmljYWxseSBpbiB0aGlzIGNhc2UuIEnigJlsbCBzdGFydCBieSBkaWdnaW5nIGludG8gYGJjZGMuY2AgYW5kIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGNhbGxzLCBpbmNsdWRlcywgb3IgYW55IHJlZmVyZW5jZXMgdG8gYGZsb3dyaW5nLmNgJ3Mgc3ltYm9scyBvciBkYXRhIHN0cnVjdHVyZXMuIEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0d28gbW9kdWxlcyByZWxhdGUuIFBlcmhhcHMgSSdsbCB1c2UgZ3JlcCwgY3RhZ3MsIG9yIG15IElERSdzIGJ1aWx0LWluIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG8gcXVpY2tseSBzZWUgaWYgdGhlIGluY2x1c2lvbiBleGlzdHMuIElmIGl0IGRvZXMsIHRoZW4gdGhlIHdvcmsgaXMgdGhhdCBtdWNoIGVhc2llci4gSWYgbm90LCB0aGVuIEknbGwgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI2MiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjQzLjg3ODI2MzMwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5OTIxMDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsb3dyaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY2RjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjQzLjkyMzI2NDk3NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTczMDAzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnJvYWRjb20gV2lGaSBEcml2ZXIgQ2FsbCBHcmFwaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGRyaXZlciBmaWxlcywgYW5kIGl0J3MgcXVpY2tseSBiZWNvbWluZyBjbGVhciBob3cgdGhpbmdzIGFyZSBzdHJ1Y3R1cmVkLiBJdCBsb29rcyBsaWtlIGBmbG93cmluZy5jYCwgYG1zZ2J1Zi5jYCwgYW5kIGBwY2llLmNgIGFyZSBhbGwgcHJldHR5IHNwZWNpZmljYWxseSB0aWVkIHRvIHRoZSBQQ0llIGltcGxlbWVudGF0aW9uLiBCdXQgaGFuZyBvbi4uLiBJIHNlZSBgYnJjbWZfcG1rc2FfdjJfb3BgLCB3aGljaCBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24gZGVhbGluZyB3aXRoIFBNS1NBLCBhbmQgdGhhdCdzICphY3R1YWxseSogZGVmaW5lZCBpbiBgY2ZnODAyMTEuY2AuIFRoYXQncyB0aGUgZ2VuZXJpYyB3aXJlbGVzcyBjb25maWd1cmF0aW9uIGxpYnJhcnksIHNvIGl0J3MgcHJvYmFibHkgc2hhcmVkIGFjcm9zcyBkaWZmZXJlbnQgaGFyZHdhcmUgcGxhdGZvcm1zLiBBbmQgdGhlbiB0aGVyZSdzIGBicmNtZl9uZXRpZl9tb25fcnhgIHdoaWNoIGlzIGFsc28gZGVmaW5lZCBpbiBhIGdlbmVyaWMgZmlsZSwgYGNvcmUuY2AuXG5cbk5vdyB0aGluZ3MgYXJlIGdldHRpbmcgaW50ZXJlc3RpbmcuIFRoZSB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBicmNtZl9uZXRpZl9tb25fcnhgIGNhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXM6IHRoZSBQQ0llLXNwZWNpZmljIGBtc2didWYuY2AsIGFuZCBhbHNvIGZyb20gYGJjZGMuY2Agd2hpY2gsIGlmIEkgcmVjYWxsLCBkZWFscyB3aXRoIFVTQiBhbmQgU0RJTyBpbnRlcmZhY2VzLiBCdXQgaXMgdGhhdCByaWdodD8gRG9lcyBgYmNkYy5jYCAqcmVhbGx5KiBjYWxsIGBicmNtZl9uZXRpZl9tb25fcnhgPyBPciBpcyBpdCBVU0Itc3BlY2lmaWMgYHVzYi5jYCBvciBTRElPLXNwZWNpZmljIGBzZGlvLmNgIHRoYXQncyBjYWxsaW5nIGl0PyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlIHNvdXJjZSBmaWxlcyB0byB2ZXJpZnkgdGhlIGNhbGwgZ3JhcGguIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYxMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxODo0OC4wOTYyNzEwMzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTEyMDYyOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfbmV0aWZfbW9uX3J4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9NDM0PXN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNDM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6NDM5OnZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNDQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg9MjIwPXZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg6MjIxOnZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTIyMi12b2lkIGJyY21mX25ldF9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgbG9ja2VkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xMjAwPWJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1Ziwgdm9pZCAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEyNDE6XFx0XFx0YnJjbWZfbmV0aWZfbW9uX3J4KGlmcCwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTI0Mi1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjQ5Ljk0NzQ4MzMzOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQwOTAzOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSWUgRm9jdXMgYW5kIFNESU8gVW5jZXJ0YWludGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGJyY21mX25ldGlmX21vbl9yeGAgZnVuY3Rpb24gYW5kIHRoZSBjb2RlIGNsZWFybHkgc2hvd3MgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYG1zZ2J1Zi5jYC4gQWxyaWdodCwgdGhhdCdzIHByZXR0eSBkZWZpbml0aXZlIC0gaXQgbG9va3MgbGlrZSBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBQQ0llLiBCdXQgd2hhdCBhYm91dCBTRElPPyBJIHdhcyBwcmV0dHkgc3VyZSBpdOKAmXMgaW4gYHNkaW8uY2AsIGlzbid0IGl0P1xuXG5UaGUgc3RhbmRhcmQgUUVNVSBzZXR1cCBkb2Vzbid0IGVtdWxhdGUgU0RJTywgc28gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gSGFuZyBvbiwgSSBzZWVtIHRvIHJlY2FsbCBzb21lIGZ1enppbmcgd29yayB3aXRoIHN5emthbGxlci4uLiBtYXliZSB0aGVyZSdzIHNvbWUgU0RJTyBzdHVmZiBpbiB0aGVyZT8gTm8sIEknbSBwcmV0dHkgc3VyZSBpdCBkb2Vzbid0IGhhdmUgaXQuIE9yIGRvZXMgaXQ/IEl0J3MgYmVlbiBhIHdoaWxlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2suIFRoZSBiZXN0IHdheSB3b3VsZCBiZSB0byBsb29rIGZvciBTRElPIHBzZXVkby1zeXNjYWxscy4gVGhhdCdzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjQ5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjU1Ljg4ODM4OTcyOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTUxNTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNkaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6NTUuOTM0MzEyMTA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDgyNzYxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgUmVhY2hhYmlsaXR5IG9mIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgIHZpYSBTeXprYWxsZXIqKlxuXG5Pa2F5LCBmaXJzdCBvZmYsIEkgY2FuJ3QganVzdCB1c2UgYGdyZXBwZXJgIG9uIGBzeXMvbGludXgvYCBiZWNhdXNlIHRob3NlIGFyZW4ndCBrZXJuZWwgdHJlZSBwYXRocy4gQW5kIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byB1c2UgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgd2hpY2gsIGZvciBzb21lIHJlYXNvbiwgYXJlbid0IGluIHRoZSBhdmFpbGFibGUgdG9vbCBsaXN0ISBCdXQgSSBnZXQgaXQsIEkgY2FuJ3Qgc2VhcmNoIGZvciBzeXprYWxsZXIgc3BlY3Mgd2l0aCB0aGlzLiBBbnl3YXksIEkgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0bywgSSBrbm93IHN5emthbGxlciBoaXRzIFVTQiBhbmQgYG1hYzgwMjExX2h3c2ltYCBhbHJlYWR5LlxuXG5SaWdodCwgYGJyY21mbWFjYC4uLnRoYXQncyBhIGZ1bGxtYWMgZHJpdmVyLCBzbyBpdCBnb2VzIHRocm91Z2ggYGNmZzgwMjExYCwgbm90IGBtYWM4MDIxMWAuIFN5emthbGxlciBoaXRzIGBjZmc4MDIxMWAgdGhyb3VnaCBuZXRsaW5rIChgbmw4MDIxMWApLiBTbywgdGhlb3JldGljYWxseSwgaWYgYSBgYnJjbWZtYWNgIGRldmljZSBpcyBwcmVzZW50LCBJIGNhbiByZWFjaCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCB2aWEgbmw4MDIxMS4gQ3J1Y2lhbGx5LCBjYW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaGF2ZSBhIGBicmNtZm1hY2AgZGV2aWNlP1xuXG5BaGEhIFVTQiEgU3l6a2FsbGVyIGhhcyBhIFVTQiBmdXp6ZXIgYW5kIGNhbiBlbXVsYXRlIGl0LiBUaGUgVVNCIHJvdXRlIGlzIG15IGJlc3QgYmV0LiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgYGJyY21mbWFjYCBVU0IgZHJpdmVyIGFjdHVhbGx5IHJlZ2lzdGVycyB3aXRoIGBjZmc4MDIxMWAuIExldCdzIHNlZS4uLiBgYnJjbWZfdXNiX3Byb2JlYCBsb29rcyBwcm9taXNpbmcuIEFuZCB5ZXMsIGl0J3MgdGhlcmUuIFRoYXQgdGhlbiBjYWxscyBgYnJjbWZfdXNiX3Byb2JlX2NiYCwgd2hpY2gsIGluIHR1cm4sIGdvZXMgdGhyb3VnaCBgYnJjbWZfYXR0YWNoYCwgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAsIGFuZCBldmVudHVhbGx5IGB3aXBoeV9uZXdgIGFuZCBgd2lwaHlfcmVnaXN0ZXJgLiBTbywgd2hlbiBzeXprYWxsZXIgZW11bGF0ZXMgYSBCcm9hZGNvbSBVU0IgV2ktRmkgZG9uZ2xlLCBgYnJjbWZfdXNiX3Byb2JlYCAqc2hvdWxkKiBiZSB0cmlnZ2VyZWQsIGNyZWF0aW5nIGEgYHdpcGh5YC4gVGhlbiwgc3l6a2FsbGVyIGNhbiBoaXQgdGhhdCBgd2lwaHlgIHdpdGggbmw4MDIxMSBjb21tYW5kcywgd2hpY2ggc2hvdWxkIGxhbmQgb24gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAuXG5cbkJ1dCwgd2FpdC4uLiBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCBjYWxscyBgYnJjbWZfcG1rc2FfdjJfb3BgIG9ubHkgaWYgYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgd2hlcmUgdGhhdCBmbGFnIGlzIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMjQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MDMuNTgyNTkwNDExWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY0Nzc0NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJSQ01GX0ZFQVRfUE1LSURfVjJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDQ4Mj1icmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTAwLVxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCB0cnVlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NTAxOlxcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTAyLVxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDUyNz1icmNtZl9jZmc4MDIxMV9kZWxfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTQ0LVxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDU0NTpcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDU0Ni1cXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCBmYWxzZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00NTc0PWJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDU4NS1cXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBOVUxMLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDU4NjpcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDU4Ny1cXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM9MTM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfZmVhdF93bGNmZWF0IGJyY21mX2ZlYXRfd2xjZmVhdF9tYXBbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jOjEzODpcXHR7IDEyLCAwLCBCSVQoQlJDTUZfRkVBVF9QTUtJRF9WMikgfSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTEzOS1cXHR7IDEzLCAwLCBCSVQoQlJDTUZfRkVBVF9QTUtJRF9WMykgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MDUuNTQ3MzczNDE4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzc0MzE0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgRmVhdHVyZSBFbmFibGVtZW50IGluIEJyb2FkY29tIFdpRmkgRHJpdmVycyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIGdldHRpbmcgc2V0IHVwIGJhc2VkIG9uIHdoYXQgdGhlIGZpcm13YXJlIHNheXMgaXQgc3VwcG9ydHMsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgdGhpcyBgYnJjbWZfZmVhdF93bGNmZWF0X21hcGAgdGhpbmcuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZCBmZWF0dXJlIGZsYWcgaGFuZGxpbmcuIFRoZSBleGNpdGluZyBwYXJ0IGlzIHRoYXQgdGhlIFN5emthbGxlciBVU0IgZnV6emVyIGlzIGNhcGFibGUgb2YgdHJpY2tpbmcgdGhlIHN5c3RlbSBpbnRvICpiZWxpZXZpbmcqIHRoZSBmaXJtd2FyZSBzdXBwb3J0cyB0aGlzIGZlYXR1cmUgKGZlYXR1cmUgMTIpLCB0aGVyZWZvcmUgZW5hYmxpbmcgYEJSQ01GX0ZFQVRfUE1LSURfVjJgLiBUaGlzIG1lYW5zIHRoYXQgY29kZSBwYXRoIGludm9sdmluZyBgYnJjbWZfcG1rc2FfdjJfb3BgIGJlY29tZXMgYWNjZXNzaWJsZSBhbmQgdGhlcmVmb3JlIGZ1enphYmxlLiBUaGlzIGlzIGdvb2QgbmV3cywgZnV6emFibGUgaXMgZXhwbG9pdGFibGUuXG5cbkJ1dCBob2xkIG9uLCBsZXQgbWUgcXVpY2tseSBwaXZvdCBoZXJlLi4uIHdoYXQgYWJvdXQgdGhlIGBicmNtc21hY2AgZHJpdmVyPyBUaGlzIHBhdGNoIGFsc28gdG91Y2hlcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmNgLiBPa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB3aGF0IHRoaXMgYGJyY21zbWFjYCBpcyBhbGwgYWJvdXQuIEFoLCByaWdodC4gSXQncyB0aGUgbWFjODAyMTEgZHJpdmVyIGZvciB0aG9zZSBvbGRlciBCcm9hZGNvbSBQQ0llIGNhcmRzIOKAkyBzcGVjaWZpY2FsbHkgdGhlIEJDTTQzMTMsIEJDTTQzMjI0LCBCQ000MzIyNSBjaGlwcy4gTm93LCBhbSBJIHJlbWVtYmVyaW5nIGNvcnJlY3RseSB0aGF0IHRoaXMgaXMgUENJZSAqb25seSo/IFRoYXQgZGV0YWlsIGNvdWxkIGJlIGltcG9ydGFudCB3aGVuIGNvbnNpZGVyaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS4gTmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhpcyBmYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE3NSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxOToxMC4zMjQ4MDc2NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMDAyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMxOD1zdGF0aWMgREVDTEFSRV9XT1JLKGJyY21zX2RyaXZlcl93b3JrLCBicmNtc19kcml2ZXJfaW5pdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTMxOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYzoxMzIwOnN0YXRpYyBpbnQgX19pbml0IGJyY21zX21vZHVsZV9pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTMyMS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYz0xMzM2PXN0YXRpYyB2b2lkIF9fZXhpdCBicmNtc19tb2R1bGVfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTM0Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYzoxMzQzOm1vZHVsZV9pbml0KGJyY21zX21vZHVsZV9pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzQ0LW1vZHVsZV9leGl0KGJyY21zX21vZHVsZV9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MTAuNDA3ODE0ODg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTA3NTU3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGJyY21zX21vZHVsZV9pbml0YCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gXCJMZXQncyBjaGVjayBgYnJjbXNfbW9kdWxlX2luaXRgLlwiIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSBmdW5jdGlvbiBmb3IgdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlciwgcmlnaHQ/IFNvLCBJJ20gdGhpbmtpbmcsIHRoaXMgaXMgd2hlcmUgaXQgYWxsIGJlZ2lucy4gV2hlcmUgdGhlIGRyaXZlciBnZXRzIGxvYWRlZCwgbWVtb3J5IGlzIGFsbG9jYXRlZCwgaGFyZHdhcmUgaXMgaW5pdGlhbGl6ZWQsIGFuZCBpbnRlcnJ1cHRzIGFyZSBzZXQgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIGdyb3VuZCBsZXZlbCwgYmVmb3JlIGFueSBoaWdoZXItbGV2ZWwgYWJzdHJhY3Rpb25zIGtpY2sgaW4uIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIHRyYWNlIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyB0aGlzIHNwZWNpZmljIGNoaXAuIFRoaXMgaXMgYWx3YXlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4gd29ya2luZyBvbiBhIG5ldyBwbGF0Zm9ybSBvciB0cm91Ymxlc2hvb3RpbmcgYW4gaW5pdGlhbGl6YXRpb24gaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTQ1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MTMuNDk4NTc1MzU0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAzODA1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtc19tb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jPTEzMTg9c3RhdGljIERFQ0xBUkVfV09SSyhicmNtc19kcml2ZXJfd29yaywgYnJjbXNfZHJpdmVyX2luaXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTEzMTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTMyMDpzdGF0aWMgaW50IF9faW5pdCBicmNtc19tb2R1bGVfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTEzMjEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMzNj1zdGF0aWMgdm9pZCBfX2V4aXQgYnJjbXNfbW9kdWxlX2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTEzNDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTM0Mzptb2R1bGVfaW5pdChicmNtc19tb2R1bGVfaW5pdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTM0NC1tb2R1bGVfZXhpdChicmNtc19tb2R1bGVfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE5OjEzLjU0ODYyMDMxMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY5MzE4Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGJyY21zX21vZHVsZV9pbml0YCwgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IGJyY21zX21vZHVsZV9pbml0KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIGd1dHMgb2YgdGhpcyBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBgYnJjbXNfbW9kdWxlX2luaXRgLiBJbW1lZGlhdGVseSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGEgZmV3IHRoaW5ncyBiYXNlZCBvbiB0aGUgbmFtZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGZpcnN0IHBvaW50IG9mIGVudHJ5IGZvciB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVyLCBzbyBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGxvdCBvZiBmb3VuZGF0aW9uYWwgc2V0dXAuIFRoaW5raW5nIGJhY2sgdG8gcGFzdCBleHBlcmllbmNlcywgSSdtIGxvb2tpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucywgZGV2aWNlIHJlZ2lzdHJhdGlvbiwgYW5kIHBlcmhhcHMgc29tZSBlYXJseSBoYXJkd2FyZSBwcm9iaW5nIG9yIGluaXRpYWxpemF0aW9uLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBkcml2ZXIgbG9hZGluZywgdG9vLCBhcyBJJ3ZlIHNlZW4gdGhvc2UgYml0ZSBiZWZvcmUuIExldCdzIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzYwLCJPdXRwdXRUb2tlbnMiOjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MTYuNjE3OTQyODZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMTU6XFx0XFx0XFx0cHJfZXJyKFxcXCIlczogcmVnaXN0ZXIgcmV0dXJuZWQgJWRcXFxcblxcXCIsIF9fZnVuY19fLCBlcnJvcik7XFxuMTMxNjpcXHR9XFxuMTMxNzpcXHRcXG4xMzE4OlxcdHN0YXRpYyBERUNMQVJFX1dPUksoYnJjbXNfZHJpdmVyX3dvcmssIGJyY21zX2RyaXZlcl9pbml0KTtcXG4xMzE5OlxcdFxcbjEzMjA6XFx0c3RhdGljIGludCBfX2luaXQgYnJjbXNfbW9kdWxlX2luaXQodm9pZClcXG4xMzIxOlxcdHtcXG4xMzIyOlxcdFxcdGJyY21zX2RlYnVnZnNfaW5pdCgpO1xcbjEzMjM6XFx0XFx0aWYgKCFzY2hlZHVsZV93b3JrKFxcdTAwMjZicmNtc19kcml2ZXJfd29yaykpXFxuMTMyNDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjEzMjU6XFx0XFxuMTMyNjpcXHRcXHRyZXR1cm4gMDtcXG4xMzI3OlxcdH1cXG4xMzI4OlxcdFxcbjEzMjk6XFx0LypcXG4xMzMwOlxcdCAqIFRoaXMgZnVuY3Rpb24gdW5sb2FkcyB0aGUgYnJjbXNtYWMgZHJpdmVyIGZyb20gdGhlIHN5c3RlbS5cXG4xMzMxOlxcdCAqXFxuMTMzMjpcXHQgKiBUaGlzIGZ1bmN0aW9uIHVuY29uZGl0aW9uYWxseSB1bmxvYWRzIHRoZSBicmNtc21hYyBkcml2ZXIgbW9kdWxlIGZyb20gdGhlXFxuMTMzMzpcXHQgKiBzeXN0ZW0uXFxuMTMzNDpcXHQgKlxcbjEzMzU6XFx0ICovXFxuMTMzNjpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgYnJjbXNfbW9kdWxlX2V4aXQodm9pZClcXG4xMzM3OlxcdHtcXG4xMzM4OlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmJyY21zX2RyaXZlcl93b3JrKTtcXG4xMzM5OlxcdFxcdGJjbWFfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmJyY21zX2JjbWFfZHJpdmVyKTtcXG4xMzQwOlxcdFxcdGJyY21zX2RlYnVnZnNfZXhpdCgpO1xcbjEzNDE6XFx0fVxcbjEzNDI6XFx0XFxuMTM0MzpcXHRtb2R1bGVfaW5pdChicmNtc19tb2R1bGVfaW5pdCk7XFxuMTM0NDpcXHRtb2R1bGVfZXhpdChicmNtc19tb2R1bGVfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE5OjE2LjYxODA1MzQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzYxMTY2OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGEgVmVyZGljdCBvbiBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhlIGBiY21hX2RyaXZlcmAgcmVnaXN0cmF0aW9uLiBCQ01BIGlzIEJyb2FkY29tJ3MgaW50ZXJuYWwgYnVzLCB0eXBpY2FsbHkgUENJZSBvciBTb0MuIFRoZSBmYWN0IHRoYXQgYGJyY21zbWFjYCBpcyBhIFBDSWUvU29DIGRyaXZlciByYWlzZXMgYSByZWQgZmxhZyByaWdodCBhd2F5IGJlY2F1c2Ugc3RhbmRhcmQgUUVNVSBtaWdodCBub3QgZW11bGF0ZSB0aGUgbmVjZXNzYXJ5IFBDSWUgZGV2aWNlLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bDsgdGhlIHByb21wdCBzdGF0ZXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCB0YXJnZXRzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaC9TbWFydE5JQy9HUFUgZHJpdmVycyB3aGljaCBhcmUgdW5saWtlbHkgdG8gYmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuQnV0IHdhaXQsIHRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBpbiBgYnJjbWZtYWNgLCBhbmQgdGhhdCBoYXMgVVNCIHN1cHBvcnQsIGFuZCBzeXprYWxsZXIgKmRvZXMqIGZ1enogdGhhdC4gVGhlIGBicmNtc21hY2AgY2hhbmdlIGxvb2tzIGxpa2UgYSBjb21tZW50IHVwZGF0ZSwgYSBzbWFsbCB1cGRhdGUgb24gYGFtcGR1LmNgISBTbywgdGhlIHJlYWwgZm9jdXMgaXMgb24gYGJyY21mbWFjYC5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBgYnJjbWZtYWNgIGNoYW5nZXMuXG4xLiAgYGJyY21mX2RlbGF5YCBpcyBtb2RpZmllZCB0byB1c2UgYHVzbGVlcF9yYW5nZWAgb3IgYG1zbGVlcGAgaW5zdGVhZCBvZiBgbWRlbGF5YC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgYSBzbGVlcCBvcGVyYXRpb24sIG5vdCBhIGJ1c3kgd2FpdC4gVGhpcyBpcyByZWFjaGFibGUsIG9idmlvdXNseS5cbjIuICBgYnJjbWZfcG1rc2FfdjJfb3BgIGlzIGFkZGVkIGFuZCBjYWxsZWQgZnJvbSBhIGZldyBleGlzdGluZyBmdW5jdGlvbnMuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIEl0J3MgYSBuZXcgZmVhdHVyZSwgVjIgUE1LU0EgY2FjaGUgc3VwcG9ydC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEsIHdoaWNoIHN5emthbGxlciBjYW4gdXNlIHZpYSBVU0IuXG4zLiAgYGJyY21mX25ldGlmX21vbl9yeGAgaXMgaW4gYGNvcmUuY2AsIGJ1dCBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYG1zZ2J1Zi5jYCAoUENJZSBvbmx5KS4gSG1tLCBpcyBgbXNnYnVmLmNgIHJlYWNoYWJsZT8gSXQgc2VlbXMgb25seSBpZiB3ZSBoYXZlIGEgUENJZSBkZXZpY2UgcHJlc2VudC4gQ2FuIHN5emthbGxlciBlbXVsYXRlIEJyb2FkY29tIFBDSWUgZGV2aWNlcz8gVXN1YWxseSBub3QsIHVubGVzcyBpdCdzIGEgZ2VuZXJpYyBQQ0kgZGV2aWNlLCBvciBRRU1VIGhhcyBzcGVjaWZpYyBlbXVsYXRpb24uIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBCcm9hZGNvbSBXaS1GaSBQQ0llIGNhcmRzLlxuICAgIFNpbWlsYXJseSwgYGJyY21mX2Zsb3dyaW5nX2Jsb2NrYCAoaW4gYGZsb3dyaW5nLmNgKSwgYGJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGFgIChpbiBgbXNnYnVmLmNgKSwgYW5kIGBicmNtZl9wY2llX3NlbmRfbWJfZGF0YWAgKGluIGBwY2llLmNgKSBhcmUgYWxsIFBDSWUtb25seS4gYGJyY21mX3NkaW9fcnhnbG9tYCAoaW4gYHNkaW8uY2ApIGlzIFNESU8gb25seSwgd2hpY2ggaXMgbm90IHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuXG5TbywgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwIHdpdGggVVNCIGZ1enppbmcsIHRoZSBvbmx5IHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGBicmNtZl9kZWxheWAgYW5kIGBicmNtZl9wbWtzYV92Ml9vcGAuXG5cbkxldCdzIGNvbmZpcm0gdGhhdCBgYnJjbWZfcG1rc2FfdjJfb3BgICppcyogcmVhY2hhYmxlIHZpYSBVU0IuIEl0IGlzLiBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCBpcyBhIGBjZmc4MDIxMV9vcHNgIGNhbGxiYWNrIGFuZCBjYWxsZWQgZnJvbSBgbmw4MDIxMV9zZXRfcG1rc2FgLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgd2hpY2ggc3l6a2FsbGVyIHVzZXMuIFRoaXMgcmVxdWlyZXMgYSBgd2lwaHlgIGRldmljZS4gVGhlIGBicmNtZm1hY2AgVVNCIGRyaXZlciAqZG9lcyogcmVnaXN0ZXIgYSBgd2lwaHlgIGR1cmluZyBwcm9iZSEgU28sIHN5emthbGxlcidzIFVTQiBmdXp6ZXIgY2FuIGVtdWxhdGUgYSBgYnJjbWZtYWNgIFVTQiBkZXZpY2UsIGFuZCB0aGVuIHNlbmQgYE5MODAyMTFfQ01EX1NFVF9QTUtTQWAgdG8gdGhpcyBgd2lwaHlgLiBUaGF0IHdpbGwgY2FsbCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYC4gSWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgKnJlcG9ydHMqIGBCUkNNRl9GRUFUX1BNS0lEX1YyYCBpbiBpdHMgZmlybXdhcmUgZmVhdHVyZXMsIHRoZW4gYGJyY21mX3Bta3NhX3YyX29wYCAqd2lsbCogYmUgY2FsbGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgaXQncyB3b3J0aCBmdXp6aW5nIVxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGBicmNtZm1hY2AgVVNCLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQyMiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxOToyOS4zNzkyMjQ1MzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjU5Mjk0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSQ01GTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxOToyOS42NzE4MjY1ODhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0Mjc2Njc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBEb3duIHRoZSBicmNtZm1hYyBLY29uZmlnKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIG9uIHRoZSBgS2NvbmZpZ2AgZmlsZSBmb3IgYGJyY21mbWFjYC4gTm8gbWVzc2luZyBhcm91bmQgaGVyZS4gVGhpcyBpc24ndCBhIGNhc3VhbCBleHBsb3JhdGlvbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc29jaWF0ZWQgc3ltYm9scy4gSSdtIGFmdGVyIGEgZGVlcCBkaXZlIHRvIGVpdGhlciBtb2RpZnkgb3IgaW50ZWdyYXRlIHRoZSBkcml2ZXIuIFRpbWUgdG8gdHJhY2sgZG93biB0aGUgbW9zdCByZWxpYWJsZSBzb3VyY2UgZm9yIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gZmlsZS4gTGV0J3Mgc3RhcnQgdGhlIHNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3MTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxOTozMi42MTQ1OTYxODVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mjk0ODc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSQ01GTUFDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjExOmNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cXHRib29sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoyOTpjb25maWcgQlJDTUZNQUNfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MzQuNTQ0MDkwMzM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzE5MDExMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlcjpcblxuKipEZWx2aW5nIGludG8gdGhlIGJyY21mbWFjIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGJyY21mbWFjIHdpcmVsZXNzIGRyaXZlci4gR2l2ZW4gdGhlIHBhdGgsIEknbSBleHBlY3RpbmcgdG8gc2VlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGRldmljZS1zcGVjaWZpYyBzZXR0aW5ncyBkZWZpbmVkIGhlcmUuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaXMgcGFyYW1ldGVyaXplZCwgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSeKAmW0gdGhpbmtpbmcgSSB3aWxsIGZpbmQgb3B0aW9ucyBmb3IgdmFyaW91cyBCcm9hZGNvbSBXaS1GaSBjaGlwc2V0cywgcG93ZXIgbWFuYWdlbWVudCBzZXR0aW5ncywgZGVidWcgZmxhZ3MsIGFuZCBtYXliZSBldmVuIGZpcm13YXJlIHNlbGVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBwcm9wZXJseSBjb25maWd1cmUgdGhlIGRyaXZlciBmb3IgdGhlIHRhcmdldCBwbGF0Zm9ybSBJJ20gd29ya2luZyB3aXRoIGFuZCBzZWUgd2hhdCBzb3J0IG9mIGZsZXhpYmlsaXR5IHRoaXMgZHJpdmVyIG9mZmVycyBtZS4gTGV04oCZcyBnZXQgdG8gaXQgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUuIEknbSBob3BpbmcgaXQncyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQsIGJlY2F1c2UgdGhlc2UgQnJvYWRjb20gZHJpdmVycyBjYW4gc29tZXRpbWVzIGJlIGEgYml0IGRlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ4NCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE5OjM4Ljc3NTk5NDM1MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBCUkNNRk1BQ1xcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNDpcXHRcXHRzZWxlY3QgQlJDTVVUSUxcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxcbiAgIDc6XFx0XFx0ICBGdWxsTUFDIGNoaXBzZXRzLiBJdCBoYXMgdG8gd29yayB3aXRoIGF0IGxlYXN0IG9uZSBvZiB0aGUgYnVzXFxuICAgODpcXHRcXHQgIGludGVyZmFjZSBzdXBwb3J0LiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWRcXG4gICA5OlxcdFxcdCAgYnJjbWZtYWMua28uXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAxMjpcXHRcXHRib29sXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG4gIDE1OlxcdFxcdGJvb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEJSQ01GTUFDX1NESU9cXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gKE1NQyA9IHkgfHwgTU1DID0gQlJDTUZNQUMpXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIEJSQ01GTUFDXFxuICAyMTpcXHRcXHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fQkNEQ1xcbiAgMjI6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxcbiAgMjY6XFx0XFx0ICBJRUVFODAyLjExbiBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xcbiAgMjc6XFx0XFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYSBTRElPIHdpcmVsZXNzIGNhcmQuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBCUkNNRk1BQ19VU0JcXG4gIDMwOlxcdFxcdGJvb2wgXFxcIlVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiAoVVNCID0geSB8fCBVU0IgPSBCUkNNRk1BQylcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDMzOlxcdFxcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAzNDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXFxuICAzNzpcXHRcXHQgIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXFxuICAzODpcXHRcXHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhbiBVU0Igd2lyZWxlc3MgY2FyZC5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG4gIDQxOlxcdFxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4gIDQyOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0NDpcXHRcXHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuICA0NTpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE5OjM4Ljc3NjA2NDIzMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMxNTk3NTI5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJSQ01GTUFDIERyaXZlciBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS4gRmlyc3QsIEkgbmVlZCB0byBlbmFibGUgYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBJJ2xsIGFsc28gYWRkIGBDRkc4MDIxMWAsIGBVU0JgLCBhbmQgYE1BQzgwMjExYCwgZXZlbiB0aG91Z2ggYE1BQzgwMjExYCBtaWdodCBub3QgYmUgc3RyaWN0bHkgcmVxdWlyZWQgZm9yIGBicmNtZm1hY2AuIEFsd2F5cyBnb29kIHRvIGhhdmUgZm9yIGNvbnNpc3RlbmN5LCB0aG91Z2guXG5cbkhtbSwgd2FpdC4gYEJSQ01GTUFDX1VTQmAgaGFzIGEgZGVwZW5kZW5jeSBjaGVjay4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgYFVTQiA9IHkgfHwgVVNCID0gQlJDTUZNQUNgLiBKdXN0IHRvIGJlIHNhZmUsIEknbGwgZG91YmxlIGNoZWNrIHRoYXQuIFllcywgY29uZmlybWVkLiBJJ2xsIG1ha2Ugc3VyZSBgQlJDTUZNQUNgIGFuZCBgQlJDTUZNQUNfVVNCYCBhcmUgZW5hYmxlZC5cblxuTmV4dCwgSSdtIHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBicmNtZl9wbWtzYV92Ml9vcGAuIExldCdzIHJlZnJlc2ggb3VyIG1lbW9yeS4gQWgsIHllcywgaXQncyBkZWZpbmVkIGluIGBjZmc4MDIxMS5jYCwgYW5kIGl0J3MgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIFBNS1NBIChQYWlyd2lzZSBNYXN0ZXIgS2V5IFNlY3VyaXR5IEFzc29jaWF0aW9uKSB2ZXJzaW9uIDIgb3BlcmF0aW9ucy4gSXQncyB1c2VkIGluIHRoaXMgY29udGV4dC4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSBwb2ludGVyIHRvIHRoZSBwbWtzYSBpcyBudWxsLiBJZiBpdCBpcyBudWxsIGl0IGdvZXMgdG8gYHNlbmRgIGFmdGVyIHplcm9pbmcgdGhlIHNoYWRvdyBsaXN0IGFuZCBwdXNoaW5nIGFuIGVtcHR5IHZlcnNpb24gMiBsaXN0LiBJZiBub3QsIGl0IGRvZXMgdGhlIGJlbG93LiBJdCB0aGVuIGJ1aWxkcyBhIHdpcmUtZm9ybWF0IGhlYWRlciBhbmQgc2VuZHMgdGhlIGxpc3QgdG8gdGhlIGZpcm13YXJlLiBUaGUgdmVyc2lvbiBhbmQgbGVuZ3RoIGFyZSBvbiB0aGUgd2lyZS5cblxuVGhlbiBJIHNlZSBpdCB1c2VzIHRoZSBmb2xsb3dpbmc6XG5cbmBgYGNcblx0bGlzdC1cdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMTYoQlJDTUZfUE1LU0FfVkVSXzIpO1xuXHRsaXN0LVx1MDAzZWxlbmd0aCAgPSBjcHVfdG9fbGUxNihvZmZzZXRvZihzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUsIHBtaykgK1xuXHRcdFx0XHQgICBucG1rICogc2l6ZW9mKHN0cnVjdCBicmNtZl9wbWtzYV92MikpO1xuXG5cdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcInBta2lkX2luZm9cIiwgbGlzdCwgc2l6ZW9mKCpsaXN0KSk7XG5gYGBcblxuT2theSwgc28gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQncyByZWFjaGFibGUgdGhyb3VnaCBubDgwMjExLCByaWdodD8gWWVzLCBjb25maXJtZWQuIEl0IHVzZXMgaW92YXIgdG8gc2V0IFwicG1raWRfaW5mb1wiLiBUaGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGEgbWlub3IgbW9kaWZpY2F0aW9uIHRvIGBicmNtZl9kZWxheWAgaW4gYGNmZzgwMjExLmNgLiBJdCdzIGEgc21hbGwgY2hhbmdlIHdpdGggdGhlIGB1c2xlZXBfcmFuZ2VgIGZ1bmN0aW9uIGNhbGwuIEhvd2V2ZXIsIGBicmNtZl9wbWtzYV92Ml9vcGAgaXRzZWxmIHNlZW1zIGxpa2UgYSBzaWduaWZpY2FudCBhZGRpdGlvbi5cblxuTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBmdW5jdGlvbnMuIGBicmNtZl9uZXRpZl9tb25fcnhgLCBgYnJjbWZfZmxvd3JpbmdfYmxvY2tgLCBgYnJjbWZfbXNnYnVmX3NjaGVkdWxlX3R4ZGF0YWAsIGFuZCBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgIGFsbCBzZWVtIHRvIGJlIFBDSWUtc3BlY2lmaWMuIFRoZSBgYnJjbWZfc2Rpb19yeGdsb21gIHNlZW1zIHRvIGJlIFNESU8tc3BlY2lmaWMuXG5cbldhaXQsIHRoYXQncyBpbnRlcmVzdGluZy4uLiBJIGp1c3Qgd2FudCB0byBkb3VibGUgY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBgYnJjbWZfZmxvd3JpbmdfYmxvY2tgLiBJcyB0aGF0IHJlYWxseSBQQ0llLW9ubHk/IEkgc2hvdWxkIHZlcmlmeSB3aGV0aGVyIGBmbG93cmluZy5jYCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgaW5jbHVkZWQgZm9yIFVTQiBjb25maWd1cmF0aW9ucyB0b28uIFRoaXMgY291bGQgYmUgYSBibGluZCBzcG90IEkgbmVlZCB0byBhZGRyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ0OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjI1OjIxLjkzNTgyMTY2OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMDg1ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsb3dyaW5nLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT0zMj1icmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQ19QUk9UT19NU0dCVUYpICs9IFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtMzMtXFx0XFx0Y29tbW9ucmluZy5vIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU6MzQ6XFx0XFx0Zmxvd3JpbmcubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTM1LVxcdFxcdG1zZ2J1Zi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjI1OjIyLjYwODkxMzgwN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM3NjQ5NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBmbG93cmluZy5vYCBhbmQgUmVsYXRlZCBDb2RlIFBhdGhzKipcblxuT2theSwgc28gaXQncyBjbGVhciB0aGF0IGBmbG93cmluZy5vYCBpcyAqZGVmaW5pdGVseSogb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlJDTUZNQUNfUFJPVE9fTVNHQlVGYCBpcyBlbmFibGVkLiBBbmQsIHRoYXQgYENPTkZJR19CUkNNRk1BQ19QUk9UT19NU0dCVUZgIGdldHMgc2VsZWN0ZWQgdmlhIGBDT05GSUdfQlJDTUZNQUNfUENJRWAuIFRoZXJlZm9yZSwgYGZsb3dyaW5nLmNgIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gUENJZSwgbm8gc3VycHJpc2VzIHRoZXJlLlxuXG5Ob3csIHdoYXQgYWJvdXQgYGJyY21mX3NkaW9fcnhnbG9tYD8gSG1tLCB0aGF0J3MgdHVja2VkIGF3YXkgaW4gYHNkaW8uY2AsIG1lYW5pbmcgaXQncyBvbmx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19CUkNNRk1BQ19TRElPYCBlbmFibGVkLiBHaXZlbiBTeXprYWxsZXIncyBjdXJyZW50IGxhY2sgb2YgU0RJTyBlbXVsYXRpb24sIHRoYXQgcGF0aCBpcyBjbGVhcmx5IG5vdCByZWxldmFudCBmb3IgZnV6emluZywgYXQgbGVhc3Qgbm90IGRpcmVjdGx5LlxuXG5TbywgaWYgd2UncmUgaWdub3JpbmcgU0RJTywgdGhhdCBuYXJyb3dzIHRoZSBhdHRhY2sgc3VyZmFjZS4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgb25seSByZWFjaGFibGUgYXJlYXMsIGluaXRpYWxseSwgYXJlIHdpdGhpbiBgY2ZnODAyMTEuY2AgYW5kIHBvdGVudGlhbGx5IGBjb3JlLmNgLCBidXQgb25seSBpZiBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBjYWxsZWQuIEFoLCBidXQgdGhhdCBmdW5jdGlvbiwgYGJyY21mX25ldGlmX21vbl9yeGAsICppcyogaW4gYGNvcmUuY2AsIHdoaWNoIGlzIGFsd2F5cyBjb21waWxlZC4gSG93ZXZlciwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgY2FsbCBzaXRlcy4gSWYgdGhlIHByaW1hcnkgY2FsbCBzaXRlIGlzIGZyb20gYG1zZ2J1Zi5jYCB0aGF0IHdvdWxkIGNvbnN0cmFpbiBpdCB0byBQQ0llIHVzZSBhcyB3ZWxsLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGZvciBhbnkgb3RoZXIgY2FsbCBsb2NhdGlvbnMganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFdlIGNhbid0IGFmZm9yZCB0byBvdmVybG9vayBhbnl0aGluZywgaG93ZXZlciBzbWFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwODcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MjU6MjguMTQ2NTY2MzYzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU0MjE1MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX25ldGlmX21vbl9yeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTQzND1zdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQzOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjQzOTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQ0MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oPTIyMD12b2lkIGJyY21mX25ldGlmX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oOjIyMTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaC0yMjItdm9pZCBicmNtZl9uZXRfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGxvY2tlZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTIwMD1icmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHZvaWQgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMjQxOlxcdFxcdGJyY21mX25ldGlmX21vbl9yeChpZnAsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDItXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoyNTozMS45MDA3ODk5OTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwODgwNzI1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBDb2RlIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1zZ2J1Zi5jYCBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyBiYXNlZCBvbiB0aGUgcGF0Y2guIEJhc2VkIG9uIHRoZSBjb2RlLCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZTogYGJyY21mX3Bta3NhX3YyX29wYCwgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYC5cblxuYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSwgd2hpbGUgaXQncyBub3QgZW50aXJlbHkgbmV3LCBpdCdzIGJlZW4gbW9kaWZpZWQgdG8gY2FsbCB0aGUgbmV3IGBicmNtZl9wbWtzYV92Ml9vcGAuIEluaXRpYWxseSwgYGJyY21mX3Bta3NhX3YyX29wYCBzZWVtZWQgbGlrZSB0aGUga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBIb3dldmVyLCBpdCdzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbi5cblxuVGhlIHByb21wdCBkaXJlY3RzIHVzIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyBjaGVjayB0aGUgc3RhdGljIHN0YXR1cyBvZiB0aGUgZnVuY3Rpb25zLiBgYnJjbWZfcG1rc2FfdjJfb3BgIGlzIGluZGVlZCBzdGF0aWMsIHNvIGl0J3Mgbm90IGFuIGlkZWFsIGNhbmRpZGF0ZS4gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYCBhcmUgYWxzbyBzdGF0aWMuXG5cbldhaXQgYSBtaW51dGUsIGFsdGhvdWdoIHRoZXkgYXJlIHN0YXRpYywgdGhleSBhcmUgYXNzaWduZWQgdG8gYGNmZzgwMjExX29wc2AsIG1ha2luZyB0aGVtIEFQSSBlbnRyeSBwb2ludHMuIFRoYXQgbWFrZXMgdGhlbSBiZXR0ZXIgY2hvaWNlcyB0aGFuIGBicmNtZl9wbWtzYV92Ml9vcGAuXG5cbkkgYWxzbyBub3RpY2VkIGBicmNtZl9uZXRpZl9tb25fcnhgIHdoaWNoIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBpcyByZWFjaGVkIHZpYSBQQ0llLiBUaGUgcHJvbXB0IHN0YXRlcyB3ZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgUENJZS1zcGVjaWZpYyBjb2RlIHRoYXQgcmVxdWlyZXMgaGFyZHdhcmUsIGJ1dCBzaW5jZSB0aGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBVU0ItcmVhY2hhYmxlIGNvZGUgKHJlbGF0ZWQgdG8gYGJyY21mX3Bta3NhX3YyX29wYCksIHRoZSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJJ2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgbWVhbnMuXG5cblRoZXJlZm9yZSwgZm9yIGBGb2N1c1N5bWJvbHNgLCBJJ2xsIGxpc3QgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYCBhcyB0aGUgbW9zdCBwcm9taXNpbmcgdGFyZ2V0cywgZGVzcGl0ZSB0aGVpciBzdGF0aWMgbmF0dXJlLiBUaGVpciBhc3NpZ25tZW50IHRvIGBjZmc4MDIxMV9vcHNgIG1ha2VzIHRoZW0gZW50cnkgcG9pbnRzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGBjZmc4MDIxMS5jYCBmb3IgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgLiBJdCdzIGdvb2QgdG8gYmUgY2F1dGlvdXMgYW5kIGNoZWNrIGZvciBpbmxpbmluZywgYnV0IHRoZXNlIGBjZmc4MDIxMWAgY2FsbGJhY2tzIGFyZSBtb3N0IGxpa2VseSBteSB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzIzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MjU6NDEuOTg4ODY1NzQzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzYwNTM4NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2NmZzgwMjExX3NldF9wbWtzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00NDgxPXN0YXRpYyBzMzJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NDgyOmJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NDgzLVxcdFxcdFxcdCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjA3OD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBicmNtZl9jZmc4MDIxMV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MDk5LVxcdC5yZXN1bWUgPSBicmNtZl9jZmc4MDIxMV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjEwMDpcXHQuc2V0X3Bta3NhID0gYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYxMDEtXFx0LmRlbF9wbWtzYSA9IGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MjU6NDUuNzQ5NDA5NDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxNzA5NjUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRW50cnkgUG9pbnRzKipcblxuT2theSwgdGhlc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyDigJMgdGhlIG9uZXMgdGhhdCBjb3VsZCBzZXJ2ZSBhcyBlbnRyeSBwb2ludHMgaW50byB0aGUgc3lzdGVtLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gYSBmZXcgdGhpbmdzIHRvIGJlIHN1cmUuXG5cblJpZ2h0LCB3aGF0IGFib3V0IGBicmNtZl9uZXRpZl9tb25fcnhgPyBJdCdzIG5vdCBzdGF0aWMsIHNvIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBpdCBhcyBhIHBvc3NpYmlsaXR5LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBOb3csIGhvdyBhYm91dCBgYnJjbWZfZmxvd3JpbmdfYmxvY2tgPyBUaGF0IG9uZSAqaXMqIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZXhjbHVkZSBpdCBmb3Igbm93LiBBbmQgYGJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGFgPyBBbHNvIHN0YXRpYywgc28gaXQncyBvZmYgdGhlIGxpc3QuIFRoZW4gdGhlcmUncyBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgLiBOb24tc3RhdGljIGFnYWluLCBzbyB0aGF0J3MgYSBrZWVwZXIuIEFuZCBmaW5hbGx5LCBgYnJjbWZfc2Rpb19yeGdsb21gLCB3aGljaCBpcyBzdGF0aWMsIHNvIEknbGwgbGVhdmUgaXQuXG5cbkFscmlnaHQsIHNvIHRha2luZyBhbGwgb2YgdGhhdCBpbnRvIGFjY291bnQsIEkgYmVsaWV2ZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzIGFyZTpcblxuKiAgIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgXG4qICAgYGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYWBcbiogICBgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FgXG4qICAgYGJyY21mX25ldGlmX21vbl9yeGBcbiogICBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgXG5cbkhhbmcgb24sIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB3aGVyZSBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgIHJlc2lkZXMuIEFoLCB5ZXMsIGl0J3MgZGVmaW5lZCBpbiBgcGNpZS5jYC4gR29vZCwgYW5kIGxldCBtZSBqdXN0IG1ha2Ugc3VyZSBpdCdzICpzdGlsbCogbm9uLXN0YXRpYy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTMxNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoyNTo1MC45NjY1MDg4MzVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTgwMjkzNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz03ODM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6Nzg0OmJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBodG9kX21iX2RhdGEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy03ODUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz04NTA9c3RhdGljIHZvaWQgYnJjbWZfcGNpZV9oYW5kbGVfbWJfZGF0YShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy04NjctXFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJEMkhfTUJfREFUQTogREVFUCBTTEVFUCBSRVFcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6ODY4OlxcdFxcdGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKGRldmluZm8sIEJSQ01GX0gyRF9IT1NUX0RTX0FDSyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy04NjktXFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJEMkhfTUJfREFUQTogc2VudCBERUVQIFNMRUVQIEFDS1xcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI2NzY9c3RhdGljIGludCBicmNtZl9wY2llX3BtX2VudGVyX0QzKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY4OS1cXHRkZXZpbmZvLVxcdTAwM2VtYmRhdGFfY29tcGxldGVkID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNjkwOlxcdGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKGRldmluZm8sIEJSQ01GX0gyRF9IT1NUX0QzX0lORk9STSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNzA2PXN0YXRpYyBpbnQgYnJjbWZfcGNpZV9wbV9sZWF2ZV9EMyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3MjEtXFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJUcnkgdG8gd2FrZXVwIGRldmljZS4uLi5cXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjcyMjpcXHRcXHRpZiAoYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoZGV2aW5mbywgQlJDTUZfSDJEX0hPU1RfRDBfSU5GT1JNKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3MjMtXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoyNTo1NC45ODQ1NDgwNjZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzMDUyNjc5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFN5emthbGxlciBDb25maWd1cmF0aW9uIGZvciBCcm9hZGNvbSBXaS1GaSBEcml2ZXIgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gZW5oYW5jaW5nIFN5emthbGxlcidzIGZ1enppbmcgY292ZXJhZ2UgZm9yIHRoaXMgYGJyY21mbWFjYCBkcml2ZXIgcGF0Y2guIEkndmUgYmVlbiB0aGlua2luZyB0aHJvdWdoIHRoZSBiZXN0IGFwcHJvYWNoIHRvIGNvbmZpZ3VyZSBTeXprYWxsZXIgdG8gZWZmZWN0aXZlbHkgdGVzdCB0aGUgY2hhbmdlcy5cblxuSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgc29tZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkgc3RhcnRlZCB3aXRoIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgIGJlY2F1c2UgaXQncyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXcgVjIgUE1LU0EgbG9naWMuIEkgaW5jbHVkZWQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgIGFuZCBgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FgIGFzIHdlbGwgYmVjYXVzZSB0aGV5IGFyZSBhbHNvIGludm9sdmVkIGluIHRoZSBQTUtTQSBjYWNoZSBvcGVyYXRpb25zLiBJIGFsc28gbm90ZWQgYGJyY21mX25ldGlmX21vbl9yeGAgYmVjYXVzZSBpdCBsb29rZWQgbGlrZSBhIG5vbi1zdGF0aWMsIG1vZGlmaWVkIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gcmFkaW90YXAgaGVhZGVyIG1vZGlmaWNhdGlvbnMgaW4gbW9uaXRvciBtb2RlLlxuXG5CYXNlZCBvbiB0aGVzZSBpbml0aWFsIG9ic2VydmF0aW9ucywgSSBkZWNpZGVkIHRvIGNoZWNrIHdoaWNoIGNvbmZpZ3Mgd291bGQgZW5hYmxlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LCBzdGFydGluZyB3aXRoIGBCUkNNRk1BQ2AsIGFuZCBgQlJDTUZNQUNfVVNCYC4gQmVjYXVzZSBgQlJDTUZNQUNfVVNCYCBkZXBlbmRzIG9uIGBVU0JgLCBJIGNvbmZpcm1lZCBgVVNCYCBzaG91bGQgYWxzbyBiZSBlbmFibGVkLiBUaGVuLCBJIG9ic2VydmVkIHRoYXQgYEJSQ01GTUFDYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBDRkc4MDIxMWAsIHNvIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgdG9vLiBTaW5jZSBTeXprYWxsZXIgY2FuIGVtdWxhdGUgdGhlIEJyb2FkY29tIGRldmljZSB2aWEgaXRzIFVTQiBmdXp6ZXIsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGFwcHJvYWNoIHdvdWxkIGJlIHN1aXRhYmxlLlxuXG5Ib3dldmVyLCBJIGFsc28gcmVhbGl6ZWQgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBQQ0llIG1haWxib3ggcG9sbGluZy4gVG8gZW5zdXJlIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UsIEknbGwgYWxzbyBlbmFibGUgYEJSQ01GTUFDX1BDSUVgIGFzIHdlbGwuIEZvciBnb29kIG1lYXN1cmUsIEkgY291bGQgYWxzbyBlbmFibGUgYEJSQ01GTUFDX1NESU9gIGJ1dCBTeXprYWxsZXIgZG9lc24ndCBmdXp6IFNESU8sIHNvIEkgZGVjaWRlZCBub3QgdG8gZW5hYmxlIGl0LiBJJ2xsIHN0aWNrIHRvIGxpc3RpbmcgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGFuZCBgQlJDTUZNQUNfUENJRWAgYXMgZW5hYmxlZCBjb25maWdzLlxuXG5MZXQncyBkb3VibGUgY2hlY2sgbXkgYW5hbHlzaXMgdG8gZW5zdXJlIHRoYXQgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgaXMgdHJ1bHkgd29ydGggbGlzdGluZy4gQWZ0ZXIgcmV2aWV3aW5nIHRoZSBwYXRjaCdzIHJlYXNvbmluZywgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIHBhdGNoIGludHJvZHVjZXMgVjIgUE1LU0EgY2FjaGUgb3BlcmF0aW9ucyB0byB0aGUgZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgYGNmZzgwMjExYCBuZXRsaW5rIGNvbW1hbmRzIGFuZCB0aGF0IFN5emthbGxlciBjYW4gZW11bGF0ZSB0aGlzLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIG1vZGlmaWNhdGlvbiB0byByYWRpb3RhcCBoZWFkZXIgaW5zZXJ0aW9uIGluIG1vbml0b3IgbW9kZSBhbmQgUENJZSBtYWlsYm94IHBvbGxpbmcuIFRoZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBhZGRlZCBWMiBQTUtTQSBjYWNoZSBsb2dpYyBhbmQgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcy5cblxuSSd2ZSBleGFtaW5lZCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGNvcnJlY3RseSBzdGF0ZWQ6IGBXb3J0aEZ1enppbmdgIGlzIHRydWUuIFRoZSBmb2N1cyBzeW1ib2xzIGluaXRpYWxseSBhcmU6IGBbXCJicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FcIiwgXCJicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FcIiwgXCJicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYVwiLCBcImJyY21mX25ldGlmX21vbl9yeFwiXWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBsaXN0ZWQgYXMgYFtcIkJSQ01GTUFDXCIsIFwiQlJDTUZNQUNfVVNCXCIsIFwiQlJDTUZNQUNfUENJRVwiLCBcIkNGRzgwMjExXCJdYC5cblxuSSd2ZSBnb25lIHRocm91Z2ggdGhlIGNvZGUgYWdhaW4sIGNvbnNpZGVyaW5nIHN0YXRpYyB2ZXJzdXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgIGlzIHN0YXRpYywgYnV0IGl0J3MgYW4gQVBJIGVudHJ5IHBvaW50LCBzbyBpdCBpcyB3b3J0aHdoaWxlIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGZvY3VzLiBBbHNvLCBiYXNlZCBvbiBteSBwcmV2aW91cyBhbmFseXNpcywgSSBjb25maXJtZWQgYGJyY21mX25ldGlmX21vbl9yeGAgaXMgbm9uLXN0YXRpYyBhbmQgbW9kaWZpZWQsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5JJ3ZlIGFsc28gb2JzZXJ2ZWQgdGhlIGZvbGxvd2luZyBkdXJpbmcgbXkgY29kZSByZXZpZXc6XG4qICAgYGJyY21mX2Zsb3dyaW5nX2F0dGFjaGAgaXMgbW9kaWZpZWQgYW5kIGl0IGluaXRpYWxpemVzIGBpZl9ibG9ja2VkX2NudGBcbiogICBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAgaXMgbm9uLXN0YXRpYywgc28gSSBjYW4gYWxzbyBpbmNsdWRlIGl0XG5cbk15IGZpbmFsIGBGb2N1c1N5bWJvbHNgIGFyZTogYFtcImJyY21mX2NmZzgwMjExX3NldF9wbWtzYVwiLCBcImJyY21mX2NmZzgwMjExX2RlbF9wbWtzYVwiLCBcImJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhXCIsIFwiYnJjbWZfbmV0aWZfbW9uX3J4XCIsIFwiYnJjbWZfZmxvd3JpbmdfYXR0YWNoXCIsIFwiYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaFwiXWAuXG5cblRoZSBjb25maWdzIGFyZTogYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGBCUkNNRk1BQ19QQ0lFYCwgYENGRzgwMjExYC5cblxuSXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgZ29vZCwgcmVmaW5lZCBzZXR1cCBmb3IgU3l6a2FsbGVyIHRvIGJlZ2luIGZ1enppbmcgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoaXMgcGF0Y2gsIGVuc3VyaW5nIGNvdmVyYWdlIG9mIHRoZSBuZXcgUE1LU0EgbG9naWMgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcy5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NzczLCJPdXRwdXRUb2tlbnMiOjIyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MjY6MDguMjg5ODE5MjNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUyNzQ2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhXCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhXCIsXG4gICAgXCJicmNtZl9uZXRpZl9tb25fcnhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFYyIFBNS1NBIGNhY2hlIG9wZXJhdGlvbnMgaW4gdGhlIGJyY21mbWFjIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIHdoZW4gYSBCcm9hZGNvbSBXaS1GaSBkZXZpY2UgaXMgcHJlc2VudC4gU3l6a2FsbGVyIGNhbiBlbXVsYXRlIHN1Y2ggYSBkZXZpY2UgdmlhIGl0cyBVU0IgZnV6emVyLCBtYWtpbmcgdGhpcyBuZXcgbG9naWMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgcmFkaW90YXAgaGVhZGVyIGluc2VydGlvbiBpbiBtb25pdG9yIG1vZGUgYW5kIFBDSWUgbWFpbGJveCBwb2xsaW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhXCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhXCIsXG4gICAgXCJicmNtZl9uZXRpZl9tb25fcnhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFYyIFBNS1NBIGNhY2hlIG9wZXJhdGlvbnMgaW4gdGhlIGJyY21mbWFjIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIHdoZW4gYSBCcm9hZGNvbSBXaS1GaSBkZXZpY2UgaXMgcHJlc2VudC4gU3l6a2FsbGVyIGNhbiBlbXVsYXRlIHN1Y2ggYSBkZXZpY2UgdmlhIGl0cyBVU0IgZnV6emVyLCBtYWtpbmcgdGhpcyBuZXcgbG9naWMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgcmFkaW90YXAgaGVhZGVyIGluc2VydGlvbiBpbiBtb25pdG9yIG1vZGUgYW5kIFBDSWUgbWFpbGJveCBwb2xsaW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdpj7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 05:56:49 +0000 UTC FinishedAt: 2026-08-01 06:26:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8fd62901d6bf03f274a49dd0060793cc07dd51b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "BRCMFMAC_PCIE", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8fd62901d6bf03f274a49dd0060793cc07dd51b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB", "BRCMFMAC_PCIE", "CFG80211" ], "series_id": "b6b8bcfe-f6f1-416d-9bbf-7451eb693da2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brcmf_cfg80211_set_pmksa", "brcmf_cfg80211_del_pmksa", "brcmf_cfg80211_flush_pmksa", "brcmf_netif_mon_rx" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhJiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2RlbF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9uZXRpZl9tb25fcngmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWMiBQTUtTQSBjYWNoZSBvcGVyYXRpb25zIGluIHRoZSBicmNtZm1hYyBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY2ZnODAyMTEgbmV0bGluayBjb21tYW5kcyB3aGVuIGEgQnJvYWRjb20gV2ktRmkgZGV2aWNlIGlzIHByZXNlbnQuIFN5emthbGxlciBjYW4gZW11bGF0ZSBzdWNoIGEgZGV2aWNlIHZpYSBpdHMgVVNCIGZ1enplciwgbWFraW5nIHRoaXMgbmV3IGxvZ2ljIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIHJhZGlvdGFwIGhlYWRlciBpbnNlcnRpb24gaW4gbW9uaXRvciBtb2RlIGFuZCBQQ0llIG1haWxib3ggcG9sbGluZywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBmZTE2N2U0NTZkYTFjYWY5MjgyNjk5Mjk1MzMxOTVhM2ZjYTMxMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA2OjE3OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbmluZGV4IDBiNTVkNDQ1ODk1ZjIuLjdkN2U1ZWNlY2QyMjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbkBAIC0zOTg5LDEyICYjNDM7Mzk4OSwxMCBAQCBzdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBicmNtZl9kZWxheSh1MzIgbXMpXG4ge1xuLVx0aWYgKG1zIFx1MDAzYyAxMDAwIC8gSFopIHtcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHRcdG1kZWxheShtcyk7XG4tXHR9IGVsc2Uge1xuJiM0MztcdGlmIChtcyBcdTAwM2M9IDIwKVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKG1zICogMTAwMCwgbXMgKiAxMDAwICYjNDM7IDEwMDApO1xuJiM0MztcdGVsc2VcbiBcdFx0bXNsZWVwKG1zKTtcbi1cdH1cbiB9XG4gXG4gc3RhdGljIHMzMiBicmNtZl9jb25maWdfd293bF9wYXR0ZXJuKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1OCBjbWRbNF0sXG5AQCAtNDM2NCw2ICYjNDM7NDM2MiwxMDQgQEAgYnJjbWZfcG1rc2FfdjNfb3Aoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJyY21mX3Bta3NhX3YyX29wIC0gdXBkYXRlIGZpcm13YXJlIFBNS1NBIGNhY2hlIHVzaW5nIHRoZSBWMiBsaXN0IGludGVyZmFjZS5cbiYjNDM7ICpcbiYjNDM7ICogVjIgZmlybXdhcmUgKHJldmlzaW9uIDEyKSB1c2VzIGEgdmVyc2lvbmVkIGZsYXQgbGlzdCBzdHJ1Y3R1cmVcbiYjNDM7ICogKGJyY21mX3Bta19saXN0X3YyX2xlKSByYXRoZXIgdGhhbiB0aGUgcGVyLWVudHJ5IG9wZXJhdGlvbiBtb2RlbCBvZiBWMy5cbiYjNDM7ICogRWFjaCBlbnRyeSBjYXJyaWVzIEZJTFMtc3BlY2lmaWMgZmllbGRzIChyYXcgUE1LIG1hdGVyaWFsLCBTU0lELCBhbmRcbiYjNDM7ICogZmlsc19jYWNoZV9pZCkgaW4gYWRkaXRpb24gdG8gdGhlIGJhc2ljIEJTU0lEICYjNDM7IFBNS0lEIHBhaXIsIGVuYWJsaW5nXG4mIzQzOyAqIEZJTFMgZmFzdC1yb2FtaW5nIG9uIGRldmljZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBWMy5cbiYjNDM7ICpcbiYjNDM7ICogQGNmZzogICBkcml2ZXIgY29uZmlnIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBzaGFkb3cgVjIgUE1LU0EgbGlzdFxuJiM0MzsgKiBAaWZwOiAgIGludGVyZmFjZSBwb2ludGVyXG4mIzQzOyAqIEBwbWtzYTogdGhlIFBNS1NBIHRvIGFkZC9yZW1vdmUsIG9yIE5VTEwgZm9yIGEgZmx1c2hcbiYjNDM7ICogQGFsaXZlOiB0cnVlID0gYWRkIChzZXQgdGltZV9sZWZ0IHRvIG5vLWV4cGlyeSksIGZhbHNlID0gcmVtb3ZlL2ZsdXNoXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgczMyXG4mIzQzO2JyY21mX3Bta3NhX3YyX29wKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwLFxuJiM0MztcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLCBib29sIGFsaXZlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGNmZy1cdTAwM2VwdWI7XG4mIzQzO1x0c3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlICpsaXN0ID0gXHUwMDI2Y2ZnLVx1MDAzZXBta19saXN0X3YyO1xuJiM0MztcdHN0cnVjdCBicmNtZl9wbWtzYV92MiAqcG1rID0gbGlzdC1cdTAwM2VwbWs7XG4mIzQzO1x0dTMyIG5wbWsgPSBsZTE2X3RvX2NwdShsaXN0LVx1MDAzZWxlbmd0aCk7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdC8qIG5wbWsgaGVyZSBzdG9yZXMgdGhlIGNvdW50IG9mIHZhbGlkIGVudHJpZXMsIHJlcHVycG9zaW5nIHRoZVxuJiM0MztcdCAqIGxlbmd0aCBmaWVsZCBvZiB0aGUgc2hhZG93IGxpc3QgYXMgYSBjb3VudGVyLiAgV2UgY29udmVydCB0b1xuJiM0MztcdCAqIHRoZSB3aXJlIGZvcm1hdCAoYnl0ZSBsZW5ndGgpIHdoZW4gc2VuZGluZyB0byBmaXJtd2FyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXBta3NhKSB7XG4mIzQzO1x0XHQvKiBGbHVzaDogemVybyB0aGUgc2hhZG93IGxpc3QgYW5kIHB1c2ggYW4gZW1wdHkgVjIgbGlzdC4gKi9cbiYjNDM7XHRcdG1lbXNldChsaXN0LCAwLCBzaXplb2YoKmxpc3QpKTtcbiYjNDM7XHRcdGdvdG8gc2VuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhbGl2ZSkge1xuJiM0MztcdFx0LyogU2V0OiBzZWFyY2ggZm9yIGV4aXN0aW5nIEJTU0lEIG1hdGNoIGZpcnN0LiAqL1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBtazsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGlmICghbWVtY21wKHBta3NhLVx1MDAzZWJzc2lkLCBwbWtbaV0uYnNzaWQsIEVUSF9BTEVOKSlcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaSBcdTAwM2U9IEJSQ01GX01BWFBNS0lEKSB7XG4mIzQzO1x0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O1YyIFBNS1NBIGNhY2hlIGZ1bGwgKCVkIGVudHJpZXMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBucG1rKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KFx1MDAyNnBta1tpXSwgMCwgc2l6ZW9mKHBta1tpXSkpO1xuJiM0MztcdFx0cG1rW2ldLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIpKTtcbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2Vic3NpZClcbiYjNDM7XHRcdFx0bWVtY3B5KHBta1tpXS5ic3NpZCwgcG1rc2EtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2VwbWtpZClcbiYjNDM7XHRcdFx0bWVtY3B5KHBta1tpXS5wbWtpZCwgcG1rc2EtXHUwMDNlcG1raWQsIFdMQU5fUE1LSURfTEVOKTtcbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2VwbWsgXHUwMDI2XHUwMDI2IHBta3NhLVx1MDAzZXBta19sZW4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcG1rc2EtXHUwMDNlcG1rX2xlbiBcdTAwM2M9IFdMQU5fUE1LX0xFTl9TVUlURV9CXzE5Mikge1xuJiM0MztcdFx0XHRtZW1jcHkocG1rW2ldLnBtaywgcG1rc2EtXHUwMDNlcG1rLCBwbWtzYS1cdTAwM2VwbWtfbGVuKTtcbiYjNDM7XHRcdFx0cG1rW2ldLnBta19sZW4gPSBjcHVfdG9fbGUxNihwbWtzYS1cdTAwM2VwbWtfbGVuKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2Vzc2lkIFx1MDAyNlx1MDAyNiBwbWtzYS1cdTAwM2Vzc2lkX2xlbikge1xuJiM0MztcdFx0XHRtZW1jcHkocG1rW2ldLnNzaWQuU1NJRCwgcG1rc2EtXHUwMDNlc3NpZCwgcG1rc2EtXHUwMDNlc3NpZF9sZW4pO1xuJiM0MztcdFx0XHRwbWtbaV0uc3NpZC5TU0lEX2xlbiA9IHBta3NhLVx1MDAzZXNzaWRfbGVuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHBta3NhLVx1MDAzZWZpbHNfY2FjaGVfaWQpXG4mIzQzO1x0XHRcdHBta1tpXS5maWxzX2NhY2hlX2lkID0gKnBta3NhLVx1MDAzZWZpbHNfY2FjaGVfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgPT0gbnBtaylcbiYjNDM7XHRcdFx0bnBtayYjNDM7JiM0Mzs7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIERlbGV0ZTogZmluZCBieSBCU1NJRCBhbmQgY29tcGFjdCB0aGUgbGlzdC4gKi9cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wbWs7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRpZiAoIW1lbWNtcChwbWtzYS1cdTAwM2Vic3NpZCwgcG1rW2ldLmJzc2lkLCBFVEhfQUxFTikpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNlPSBucG1rKSB7XG4mIzQzO1x0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O1YyIFBNS1NBIGVudHJ5IG5vdCBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGZvciAoOyBpIFx1MDAzYyBucG1rIC0gMTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZwbWtbaV0sIFx1MDAyNnBta1tpICYjNDM7IDFdLCBzaXplb2YocG1rW2ldKSk7XG4mIzQzO1x0XHRtZW1zZXQoXHUwMDI2cG1rW25wbWsgLSAxXSwgMCwgc2l6ZW9mKHBta1tucG1rIC0gMV0pKTtcbiYjNDM7XHRcdG5wbWstLTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFVwZGF0ZSBzaGFkb3cgZW50cnkgY291bnQgKHN0b3JlZCBpbiBsZW5ndGggZmllbGQpLiAqL1xuJiM0MztcdGxpc3QtXHUwMDNlbGVuZ3RoID0gY3B1X3RvX2xlMTYobnBtayk7XG4mIzQzO1xuJiM0MztzZW5kOlxuJiM0MztcdC8qIEJ1aWxkIHRoZSB3aXJlLWZvcm1hdCBoZWFkZXIgYW5kIHNlbmQgdGhlIGZ1bGwgbGlzdCB0byBmaXJtd2FyZS5cbiYjNDM7XHQgKiB2ZXJzaW9uIGFuZCBsZW5ndGggb24gdGhlIHdpcmUgcmVmbGVjdCB0aGUgYWN0dWFsIGJ5dGUgZm9vdHByaW50LlxuJiM0MztcdCAqL1xuJiM0MztcdGxpc3QtXHUwMDNldmVyc2lvbiA9IGNwdV90b19sZTE2KEJSQ01GX1BNS1NBX1ZFUl8yKTtcbiYjNDM7XHRsaXN0LVx1MDAzZWxlbmd0aCAgPSBjcHVfdG9fbGUxNihvZmZzZXRvZihzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUsIHBtaykgJiM0MztcbiYjNDM7XHRcdFx0XHQgICBucG1rICogc2l6ZW9mKHN0cnVjdCBicmNtZl9wbWtzYV92MikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCYjMzQ7cG1raWRfaW5mb1wmIzM0OywgbGlzdCwgc2l6ZW9mKCpsaXN0KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1xuIHN0YXRpYyBfX3VzZWQgczMyXG4gYnJjbWZfdXBkYXRlX3Bta2xpc3Qoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywgc3RydWN0IGJyY21mX2lmICppZnApXG4ge1xuQEAgLTQ0MDIsOCAmIzQzOzQ0OTgsOCBAQCBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXG4gXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCB0cnVlKTtcbi1cbi1cdC8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqL1xuJiM0MztcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcbiYjNDM7XHRcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIHRydWUpO1xuIFxuIFx0bnBtayA9IGxlMzJfdG9fY3B1KGNmZy1cdTAwM2VwbWtfbGlzdC5ucG1rKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wbWs7IGkmIzQzOyYjNDM7KVxuQEAgLTQ0NDYsOCAmIzQzOzQ1NDIsOCBAQCBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXG4gXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCBmYWxzZSk7XG4tXG4tXHQvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi9cbiYjNDM7XHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXG4mIzQzO1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCBmYWxzZSk7XG4gXG4gXHRucG1rID0gbGUzMl90b19jcHUoY2ZnLVx1MDAzZXBta19saXN0Lm5wbWspO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBtazsgaSYjNDM7JiM0MzspXG5AQCAtNDQ4Nyw4ICYjNDM7NDU4Myw4IEBAIGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxuIFx0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBOVUxMLCBmYWxzZSk7XG4tXG4tXHQvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi9cbiYjNDM7XHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXG4mIzQzO1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTtcbiBcbiBcdG1lbXNldChcdTAwMjZjZmctXHUwMDNlcG1rX2xpc3QsIDAsIHNpemVvZihjZmctXHUwMDNlcG1rX2xpc3QpKTtcbiBcdGVyciA9IGJyY21mX3VwZGF0ZV9wbWtsaXN0KGNmZywgaWZwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5pbmRleCA2Y2ViMzAxNDI5MDU0Li41NzE2N2ZkZTViYTE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5AQCAtMzQ0LDcgJiM0MzszNDQsOCBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfd293bCB7XG4gICogQGJzc19saXN0OiBic3NfbGlzdCBob2xkaW5nIHNjYW5uZWQgYXAgaW5mb3JtYXRpb24uXG4gICogQGJzc19pbmZvOiBic3MgaW5mb3JtYXRpb24gZm9yIGNmZzgwMjExIGxheWVyLlxuICAqIEBjb25uX2luZm86IGFzc29jaWF0aW9uIGluZm8uXG4tICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0LlxuJiM0MzsgKiBAcG1rX2xpc3Q6IHdwYTIgcG1rIGxpc3QgKFYxIGZpcm13YXJlKS5cbiYjNDM7ICogQHBta19saXN0X3YyOiB3cGEyIHBtayBsaXN0IGZvciBWMiBmaXJtd2FyZSAoRklMUy1jYXBhYmxlLCBmaXJtd2FyZSByZXYgMTIpLlxuICAqIEBzY2FuX3N0YXR1czogc2NhbiBhY3Rpdml0eSBvbiB0aGUgZG9uZ2xlLlxuICAqIEBwdWI6IGNvbW1vbiBkcml2ZXIgaW5mb3JtYXRpb24uXG4gICogQGNoYW5uZWw6IGN1cnJlbnQgY2hhbm5lbC5cbkBAIC0zNzYsNiAmIzQzOzM3Nyw3IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvIHtcbiBcdHN0cnVjdCB3bF9jZmc4MDIxMV9ic3NfaW5mbyAqYnNzX2luZm87XG4gXHRzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfY29ubmVjdF9pbmZvIGNvbm5faW5mbztcbiBcdHN0cnVjdCBicmNtZl9wbWtfbGlzdF9sZSBwbWtfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUgcG1rX2xpc3RfdjI7XG4gXHR1bnNpZ25lZCBsb25nIHNjYW5fc3RhdHVzO1xuIFx0c3RydWN0IGJyY21mX3B1YiAqcHViO1xuIFx0dTMyIGNoYW5uZWw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcbmluZGV4IGVjMTcwNjQ3ODAwZGEuLjY3M2YwMDAwMzg5Y2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXG5AQCAtNDMxLDQ1ICYjNDM7NDMxLDUxIEBAIHZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRuZXRpZl9yeChza2IpO1xuIH1cbiBcbiYjNDM7c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8ge1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIGhkcjtcbiYjNDM7XHRzOCBkYm1fYW50c2lnbmFsO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiB2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9NT05JVE9SX0ZNVF9SQURJT1RBUCkpIHtcbi1cdFx0LyogRG8gbm90aGluZyAqL1xuJiM0MztcdFx0LyogRmlybXdhcmUgYWxyZWFkeSBwcm92aWRlZCBhIGZ1bGwgcmFkaW90YXAgaGVhZGVyOyBkbyBub3RoaW5nICovXG4gXHR9IGVsc2UgaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfSFdfUlhfSERSKSkge1xuIFx0XHRzdHJ1Y3Qgd2xjX2QxMXJ4aGRyICp3bGNfcnhoZHIgPSAoc3RydWN0IHdsY19kMTFyeGhkciAqKXNrYi1cdTAwM2VkYXRhO1xuLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XG4mIzQzO1x0XHRzdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyAqcnRhcDtcbiBcdFx0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcdFx0dTE2IFJ4U3RhdHVzMTtcbiYjNDM7XHRcdHM4IHJzc2k7XG4gXG4gXHRcdFJ4U3RhdHVzMSA9IGxlMTZfdG9fY3B1KHdsY19yeGhkci1cdTAwM2VyeGhkci5SeFN0YXR1czEpO1xuJiM0MztcdFx0cnNzaSA9IHdsY19yeGhkci1cdTAwM2Vyc3NpO1xuIFxuIFx0XHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHdsY19kMTFyeGhkcik7XG4tXHRcdC8qIE1BQyBpbnNlcnRzIDIgcGFkIGJ5dGVzIGZvciBhNCBoZWFkZXJzIG9yIFFvUyBvciBBLU1TRFVcbi1cdFx0ICogc3ViZnJhbWVzXG4tXHRcdCAqL1xuJiM0MztcdFx0LyogTUFDIGluc2VydHMgMiBwYWQgYnl0ZXMgZm9yIGE0IGhlYWRlcnMgb3IgUW9TIG9yIEEtTVNEVSBzdWJmcmFtZXMgKi9cbiBcdFx0aWYgKFJ4U3RhdHVzMSBcdTAwMjYgUlhTX1BCUFJFUylcbiBcdFx0XHRvZmZzZXQgJiM0Mzs9IDI7XG4gXHRcdG9mZnNldCAmIzQzOz0gRDExX1BIWV9IRFJfTEVOO1xuIFxuIFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gXG4tXHRcdC8qIFRPRE86IHVzZSBSWCBoZWFkZXIgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi9cbi1cdFx0cmFkaW90YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcmFkaW90YXApKTtcbi1cdFx0bWVtc2V0KHJhZGlvdGFwLCAwLCBzaXplb2YoKnJhZGlvdGFwKSk7XG4tXHRcdHJhZGlvdGFwLVx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcbiYjNDM7XHRcdC8qIEluc2VydCBvdXIgcmFkaW90YXAgaGVhZGVyIHdpdGggUlNTSSBkYXRhICovXG4mIzQzO1x0XHRydGFwID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnJ0YXApKTtcbiYjNDM7XHRcdG1lbXNldChydGFwLCAwLCBzaXplb2YoKnJ0YXApKTtcbiYjNDM7XHRcdHJ0YXAtXHUwMDNlaGRyLml0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcnRhcCkpO1xuJiM0MztcdFx0cnRhcC1cdTAwM2VoZHIuaXRfcHJlc2VudCA9IGNwdV90b19sZTMyKDEgXHUwMDNjXHUwMDNjIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMKTtcbiYjNDM7XHRcdHJ0YXAtXHUwMDNlZGJtX2FudHNpZ25hbCA9IHJzc2k7XG4gXG4tXHRcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cbi1cdFx0c2tiLVx1MDAzZWxlbiAtPSA0O1xuJiM0MztcdFx0LyogU3RyaXAgdGhlIDQtYnl0ZSByZWNlaXZlIHN0YXR1cyAvIEZDUyB0YWlsICovXG4mIzQzO1x0XHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSA0KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpyYWRpb3RhcDtcbiBcbi1cdFx0LyogVE9ETzogdXNlIFJYIHN0YXR1cyB0byBmaWxsIHNvbWUgcmFkaW90YXAgZGF0YSAqL1xuIFx0XHRyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpO1xuIFx0XHRtZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTtcbiBcdFx0cmFkaW90YXAtXHUwMDNlaXRfbGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpyYWRpb3RhcCkpO1xuIFxuLVx0XHQvKiBUT0RPOiA0IGJ5dGVzIHdpdGggcmVjZWl2ZSBzdGF0dXM/ICovXG4tXHRcdHNrYi1cdTAwM2VsZW4gLT0gNDtcbiYjNDM7XHRcdC8qIFN0cmlwIHRoZSA0LWJ5dGUgcmVjZWl2ZSBzdGF0dXMgLyBGQ1MgdGFpbCAqL1xuJiM0MztcdFx0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gNCk7XG4gXHR9XG4gXG4gXHRza2ItXHUwMDNlZGV2ID0gaWZwLVx1MDAzZW5kZXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuY1xuaW5kZXggMzVjYmNlYTBhYmM5YS4uYjljNTE4OTM5ZjUwNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuY1xuQEAgLTE4MiwxMCAmIzQzOzE4Miw4IEBAIHN0YXRpYyB2b2lkIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCxcbiBcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZjtcbiBcdHN0cnVjdCBicmNtZl9wdWIgKmRydnI7XG4gXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcbi1cdGJvb2wgY3VycmVudGx5X2Jsb2NrZWQ7XG4tXHRpbnQgaTtcbi1cdHU4IGlmaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1OCBpZmlkeDtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTE5NCwyMyAmIzQzOzE5Miw1NCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Zmxvdy1cdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdGlmaWR4ID0gYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGZsb3dpZCk7XG4gXG4tXHRjdXJyZW50bHlfYmxvY2tlZCA9IGZhbHNlO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmxvdy1cdTAwM2Vucm9mcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmICgoZmxvdy1cdTAwM2VyaW5nc1tpXSkgXHUwMDI2XHUwMDI2IChpICE9IGZsb3dpZCkpIHtcbi1cdFx0XHRyaW5nID0gZmxvdy1cdTAwM2VyaW5nc1tpXTtcbi1cdFx0XHRpZiAoKHJpbmctXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgaSkgPT0gaWZpZHgpKSB7XG4tXHRcdFx0XHRpZiAocmluZy1cdTAwM2VibG9ja2VkKSB7XG4tXHRcdFx0XHRcdGN1cnJlbnRseV9ibG9ja2VkID0gdHJ1ZTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuJiM0MztcdGlmaWR4ID0gYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGZsb3dpZCk7XG4mIzQzO1x0cmluZy1cdTAwM2VibG9ja2VkID0gYmxvY2tlZDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWludGFpbiB0aGUgcGVyLWludGVyZmFjZSBibG9ja2VkLXJpbmcgY291bnRlci5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdlIHVzZSByaW5nLVx1MDAzZWNvdW50ZWRfaW5fYmxvY2tlZCByYXRoZXIgdGhhbiBjaGVja2luZ1xuJiM0MztcdCAqIHJpbmctXHUwMDNlc3RhdHVzIGhlcmUuICBBIHJpbmcgdGhhdCBiZWNhbWUgYmxvY2tlZCB3aGlsZVxuJiM0MztcdCAqIFJJTkdfT1BFTiBoYXMgYWxyZWFkeSBiZWVuIGNvdW50ZWQgKGNvdW50ZWRfaW5fYmxvY2tlZD10cnVlKS5cbiYjNDM7XHQgKiBCeSB0aGUgdGltZSB3ZSB1bmJsb2NrIGl0IGR1cmluZyB0ZWFyZG93biBpdHMgc3RhdHVzIG1heSBoYXZlXG4mIzQzO1x0ICogYWR2YW5jZWQgdG8gUklOR19DTE9TSU5HLCBzbyB0ZXN0aW5nIFJJTkdfT1BFTiB3b3VsZCB3cm9uZ2x5XG4mIzQzO1x0ICogc2tpcCB0aGUgYXRvbWljX2RlYyBhbmQgcGVybWFuZW50bHkgbGVhayB0aGUgY291bnRlciwgbGVhdmluZ1xuJiM0MztcdCAqIHRoZSBuZXRpZiBxdWV1ZSBzdG9wcGVkIGZvcmV2ZXIuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBSdWxlOlxuJiM0MztcdCAqICAgYmxvY2sgdHJhbnNpdGlvbiAgKHVuYmxvY2tlZOKGkmJsb2NrZWQpOiBjb3VudCBvbmx5IGlmIFJJTkdfT1BFTixcbiYjNDM7XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBjb3VudGVkX2luX2Jsb2NrZWQuXG4mIzQzO1x0ICogICB1bmJsb2NrIHRyYW5zaXRpb24gKGJsb2NrZWTihpJ1bmJsb2NrZWQpOiBkZWNyZW1lbnQgb25seSBpZiB3ZVxuJiM0MztcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBjb3VudGVkIGl0LFxuJiM0MztcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgY291bnRlZF9pbl9ibG9ja2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChibG9ja2VkKSB7XG4mIzQzO1x0XHRpZiAocmluZy1cdTAwM2VzdGF0dXMgPT0gUklOR19PUEVOKSB7XG4mIzQzO1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZWNvdW50ZWRfaW5fYmxvY2tlZCA9IHRydWU7XG4gXHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkKSB7XG4mIzQzO1x0XHRcdGF0b21pY19kZWMoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZWNvdW50ZWRfaW5fYmxvY2tlZCA9IGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmx5IHByb3BhZ2F0ZSBhIG5ldGlmIHF1ZXVlLXN0b3Avd2FrZSB3aGVuIHRoZSBpbnRlcmZhY2VcbiYjNDM7XHQgKiB0cmFuc2l0aW9ucyBiZXR3ZWVuIGZ1bGx5LWNsZWFyIGFuZCBhdC1sZWFzdC1vbmUtYmxvY2tlZC5cbiYjNDM7XHQgKiBSZWFkaW5nIHRoZSBhdG9taWMgaXMgc2FmZSBoZXJlOiB3ZSBob2xkIGJsb2NrX2xvY2ssIHNvIG5vXG4mIzQzO1x0ICogY29uY3VycmVudCBicmNtZl9mbG93cmluZ19ibG9jaygpIGNhbGwgY2FuIHJhY2UgdGhlIHVwZGF0ZVxuJiM0MztcdCAqIHdlIGp1c3QgbWFkZSBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYmxvY2tlZCBcdTAwMjZcdTAwMjYgYXRvbWljX3JlYWQoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDEpIHtcbiYjNDM7XHRcdC8qIEFub3RoZXIgcmluZyB3YXMgYWxyZWFkeSBibG9ja2VkOyBubyBuZXcgcXVldWUtc3RvcCBuZWVkZWQuICovXG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0cmV0dXJuO1xuIFx0fVxuLVx0Zmxvdy1cdTAwM2VyaW5nc1tmbG93aWRdLVx1MDAzZWJsb2NrZWQgPSBibG9ja2VkO1xuLVx0aWYgKGN1cnJlbnRseV9ibG9ja2VkKSB7XG4mIzQzO1x0aWYgKCFibG9ja2VkIFx1MDAyNlx1MDAyNiBhdG9taWNfcmVhZChcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSkgIT0gMCkge1xuJiM0MztcdFx0LyogTW9yZSByaW5ncyBzdGlsbCBibG9ja2VkOyBkbyBub3Qgd2FrZSB0aGUgcXVldWUgeWV0LiAqL1xuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMzY3LDYgJiM0MzszOTYsOCBAQCBzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmJyY21mX2Zsb3dyaW5nX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUxNiBucm9mcmluZ3MpXG4gXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jayk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZmxvdy1cdTAwM2VhZGRyX21vZGUpOyBpJiM0MzsmIzQzOylcbiBcdFx0XHRmbG93LVx1MDAzZWFkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXHUwMDNlaWZfYmxvY2tlZF9jbnQpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2ldLCAwKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbG93LVx1MDAzZWhhc2gpOyBpJiM0MzsmIzQzOylcbiBcdFx0XHRmbG93LVx1MDAzZWhhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcbmluZGV4IGYzZDUxMWY5YTNjOWEuLmFmZGVhOGIzZjhhYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcbkBAIC01LDYgJiM0Mzs1LDggQEBcbiAjaWZuZGVmIEJSQ01GTUFDX0ZMT1dSSU5HX0hcbiAjZGVmaW5lIEJSQ01GTUFDX0ZMT1dSSU5HX0hcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiYjNDM7XG4gXG4gI2RlZmluZSBCUkNNRl9GTE9XUklOR19IQVNIU0laRVx0XHQ1MTJcdFx0LyogaGFzIHRvIGJlIDJeeCAqL1xuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSU5WQUxJRF9JRFx0MHhGRkZGRkZGRlxuQEAgLTI2LDYgJiM0MzsyOCwxNiBAQCBlbnVtIHJpbmdfc3RhdHVzIHtcbiBzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfcmluZyB7XG4gXHR1MTYgaGFzaF9pZDtcbiBcdGJvb2wgYmxvY2tlZDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRydWUgd2hlbiB0aGlzIHJpbmcgaGFzIGJlZW4gY291bnRlZCBpbiB0aGUgcGVyLWludGVyZmFjZVxuJiM0MztcdCAqIGlmX2Jsb2NrZWRfY250W10uICBTZXQgdG8gdHJ1ZSB3aGVuZXZlciB0aGUgcmluZyB0cmFuc2l0aW9uc1xuJiM0MztcdCAqIHVuYmxvY2tlZOKGkmJsb2NrZWQgd2hpbGUgUklOR19PUEVOOyBjbGVhcmVkIG9uIHRoZSBtYXRjaGluZ1xuJiM0MztcdCAqIGJsb2NrZWTihpJ1bmJsb2NrZWQgdHJhbnNpdGlvbi4gIE5lZWRlZCBzbyB0aGF0IGEgcmluZyB0aGF0XG4mIzQzO1x0ICogYmVjb21lcyBibG9ja2VkIHdoaWxlIFJJTkdfT1BFTiBhbmQgaXMgbGF0ZXIgbW92ZWQgdG9cbiYjNDM7XHQgKiBSSU5HX0NMT1NJTkcgc3RpbGwgY29ycmVjdGx5IGRlY3JlbWVudHMgdGhlIGNvdW50ZXIgYXRcbiYjNDM7XHQgKiB0ZWFyZG93biwgZXZlbiB0aG91Z2ggaXRzIHN0YXR1cyBpcyBubyBsb25nZXIgUklOR19PUEVOLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgY291bnRlZF9pbl9ibG9ja2VkO1xuIFx0ZW51bSByaW5nX3N0YXR1cyBzdGF0dXM7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYmxpc3Q7XG4gfTtcbkBAIC00MCw2ICYjNDM7NTIsMTIgQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nIHtcbiBcdHN0cnVjdCBicmNtZl9mbG93cmluZ19oYXNoIGhhc2hbQlJDTUZfRkxPV1JJTkdfSEFTSFNJWkVdO1xuIFx0c3BpbmxvY2tfdCBibG9ja19sb2NrO1xuIFx0ZW51bSBwcm90b19hZGRyX21vZGUgYWRkcl9tb2RlW0JSQ01GX01BWF9JRlNdO1xuJiM0MztcdC8qIFBlci1pbnRlcmZhY2UgY291bnQgb2YgY3VycmVudGx5IGJsb2NrZWQgb3BlbiByaW5ncy5cbiYjNDM7XHQgKiBNYWludGFpbmVkIGF0b21pY2FsbHkgc28gYnJjbWZfZmxvd3JpbmdfYmxvY2soKSBjYW4gY2hlY2tcbiYjNDM7XHQgKiB3aGV0aGVyIGFueSBzaWJsaW5nIHJpbmcgaXMgYWxyZWFkeSBibG9ja2VkIGluIE8oMSkgd2l0aG91dFxuJiM0MztcdCAqIGhvbGRpbmcgYmxvY2tfbG9jayBhY3Jvc3MgYW4gTyhucm9mcmluZ3MpIHdhbGsuXG4mIzQzO1x0ICovXG4mIzQzO1x0YXRvbWljX3QgaWZfYmxvY2tlZF9jbnRbQlJDTUZfTUFYX0lGU107XG4gXHR1MTYgbnJvZnJpbmdzO1xuIFx0Ym9vbCB0ZGxzX2FjdGl2ZTtcbiBcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICp0ZGxzX2VudHJ5O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmNcbmluZGV4IGE0M2YxYTM4YjBlMzAuLjNjMWNhMzU1ZThlZWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmNcbkBAIC0xMDM3LDcgJiM0MzsxMDM3LDkgQEAgaW50IGJyY21mX2Z3c19tYWNkZXNjX2luZGljYXRlKHN0cnVjdCBicmNtZl9md3NfaW5mbyAqZndzLCB1OCB0eXBlLCB1OCAqZGF0YSlcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O3VzZSBleGlzdGluZ1xcblwmIzM0Oyk7XG4gXHRcdFx0V0FSTl9PTihlbnRyeS1cdTAwM2VtYWNfaGFuZGxlICE9IG1hY19oYW5kbGUpO1xuLVx0XHRcdC8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovXG4mIzQzO1x0XHRcdC8qIEZpcm13YXJlIHJlLXNlbnQgQUREIGZvciB0aGUgc2FtZSBNQUMgaGFuZGxlLlxuJiM0MztcdFx0XHQgKiBObyBhY3Rpb24gcmVxdWlyZWQ7IGl0IGlzIGEgc2FmZSBuby1vcC5cbiYjNDM7XHRcdFx0ICovXG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG5AQCAtNDgsNyAmIzQzOzQ4LDE5IEBAXG4gI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJcdFx0MHgxM1xuICNkZWZpbmUgTVNHQlVGX1RZUEVfTFBCS19ETUFYRkVSX0NNUExUXHRcdDB4MTRcbiBcbi0jZGVmaW5lIE5SX1RYX1BLVElEU1x0XHRcdFx0MjA0OFxuJiM0MzsvKlxuJiM0MzsgKiBOUl9UWF9QS1RJRFM6IG51bWJlciBvZiBzaW11bHRhbmVvdXNseSBpbi1mbGlnaHQgVFggcGFja2V0IElEcy5cbiYjNDM7ICogRWFjaCBvdXRzdGFuZGluZyBUWCBmcmFtZSBjb25zdW1lcyBvbmUgSUQgdW50aWwgdGhlIGRvbmdsZSByZXR1cm5zXG4mIzQzOyAqIGEgVFgtc3RhdHVzIGNvbXBsZXRpb24uICBUaGUgb3JpZ2luYWwgMjA0OC1lbnRyeSBwb29sIGV4aGF1c3RlZCB1bmRlclxuJiM0MzsgKiDiiaU0IGNvbmN1cnJlbnQgaXBlcmYzIHN0cmVhbXMgb24gV2ktRmkgNS82ICg4MDIuMTFhYy9heCkgZGV2aWNlcyxcbiYjNDM7ICogY2F1c2luZyBcJiMzNDtObyBQS1RJRCBhdmFpbGFibGVcJiMzNDsgZHJvcHMgYW5kIFRDUCByZXRyYW5zbWl0cy4gIDQwOTYgZ2l2ZXNcbiYjNDM7ICogaGVhZHJvb20gZm9yIGhpZ2gtYWdncmVnYXRpb24gc2NlbmFyaW9zIHdoaWxlIHN0aWxsIGZpdHRpbmcgaW4gYVxuJiM0MzsgKiBtb2Rlc3QgYW1vdW50IG9mIGhvc3QgbWVtb3J5ICh+NDggS0IgZm9yIHRoZSBwa3RpZCB0YWJsZSBlbnRyaWVzKS5cbiYjNDM7ICpcbiYjNDM7ICogTlJfUlhfUEtUSURTOiBSWCBwb3N0IGJ1ZmZlcnMgcHJlLWFsbG9jYXRlZCB0byB0aGUgZG9uZ2xlLiAgMTAyNCBpc1xuJiM0MzsgKiBzdWZmaWNpZW50IGZvciBjdXJyZW50IGhhcmR3YXJlIFJYIHJpbmcgZGVwdGhzOyBsZWF2ZSB1bmNoYW5nZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE5SX1RYX1BLVElEU1x0XHRcdFx0NDA5NlxuICNkZWZpbmUgTlJfUlhfUEtUSURTXHRcdFx0XHQxMDI0XG4gXG4gI2RlZmluZSBCUkNNRl9JT0NUTF9SRVFfUEtUSURcdFx0XHQweEZGRkVcbkBAIC02NCw4ICYjNDM7NzYsMjkgQEBcbiAjZGVmaW5lIEJSQ01GX01TR0JVRl9QS1RfRkxBR1NfRlJBTUVfTUFTS1x0MHgwN1xuICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19QUklPX1NISUZUXHQ1XG4gXG4tI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMVx0XHQzMlxuLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDJcdFx0OTZcbiYjNDM7LypcbiYjNDM7ICogVFggZmx1c2ggLyBkb29yYmVsbC1yaW5nIHRocmVzaG9sZHMuXG4mIzQzOyAqXG4mIzQzOyAqIENOVDEgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIGluIHRoZSBjb21tb25yaW5nXG4mIzQzOyAqIGJlZm9yZSB0aGUgZmlyc3QgaW50ZXJtZWRpYXRlIHdyaXRlX2NvbXBsZXRlKCkgKGRvb3JiZWxsIHJpbmcpIGlzXG4mIzQzOyAqIGlzc3VlZCBtaWQtYmF0Y2guICBDTlQyIGlzIHRoZSBoYXJkIGZsdXNoIGludGVydmFsOiBhZnRlciB0aGlzIG1hbnlcbiYjNDM7ICogZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuIHNpbmNlIHRoZSBsYXN0IGZsdXNoLCB3ZSB1bmNvbmRpdGlvbmFsbHlcbiYjNDM7ICogcmluZyB0aGUgYmVsbCBhbmQgcmVzZXQgdGhlIGNvdW50ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFJhaXNpbmcgYm90aCBmcm9tIHRoZSBvcmlnaW5hbCAzMi85NiB0byA2NC8xMjggZG91YmxlcyB0aGUgYXZlcmFnZVxuJiM0MzsgKiBudW1iZXIgb2YgVFggZGVzY3JpcHRvcnMgY29tbWl0dGVkIHBlciBNTUlPIHdyaXRlLCBoYWx2aW5nIHRoZSBQQ0llXG4mIzQzOyAqIGRvb3JiZWxsIHJhdGUgb24gc3VzdGFpbmVkIHRocm91Z2hwdXQgd29ya2xvYWRzLiAgVGhlIHRyYWRlb2ZmIGlzIGFcbiYjNDM7ICogbWFyZ2luYWxseSBoaWdoZXIgd29yc3QtY2FzZSBsYXRlbmN5IGZvciB0aGUgbGFzdCBmcmFtZXMgaW4gYSBidXJzdCxcbiYjNDM7ICogd2hpY2ggaW4gcHJhY3RpY2UgaXMgaGlkZGVuIGJ5IHRoZSB0aW1lIHRoZSBkb25nbGUgRE1BIGVuZ2luZSBkcmFpbnNcbiYjNDM7ICogdGhlIHByZXZpb3VzIGJhdGNoLlxuJiM0MzsgKlxuJiM0MzsgKiBUUklDS0xFX1RYV09SS0VSX1RIUlMgZ292ZXJucyBob3cgb2Z0ZW4gYnJjbWZfbXNnYnVmX3R4X3F1ZXVlX2RhdGEoKVxuJiM0MzsgKiBmb3JjZXMgYSB3b3JrcXVldWUgc2NoZWR1bGUgd2hlbiB0aGUgcXVldWUgZGVwdGggaXMgbm90IGEgbXVsdGlwbGUgb2ZcbiYjNDM7ICogdGhpcyB2YWx1ZS4gIEtlZXBpbmcgaXQgYXQgaGFsZiBvZiBDTlQxICgzMikgcHJlc2VydmVzIHJlc3BvbnNpdmVuZXNzXG4mIzQzOyAqIGZvciBsb3ctcmF0ZSBmbG93cyAoZS5nLiBWb0lQLCBJQ01QKSB0aGF0IG5ldmVyIGFjY3VtdWxhdGUgNjQgZnJhbWVzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMVx0XHQ2NFxuJiM0MzsjZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQyXHRcdDEyOFxuIFxuICNkZWZpbmUgQlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlNcdDk2XG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfVFJJQ0tMRV9UWFdPUktFUl9USFJTXHQzMlxuQEAgLTc4NywxMCAmIzQzOzgyMCwzMCBAQCBzdGF0aWMgaW50IGJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGEoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB1MzIgZmxvd2lkLFxuIHtcbiBcdHN0cnVjdCBicmNtZl9jb21tb25yaW5nICpjb21tb25yaW5nO1xuIFxuLVx0c2V0X2JpdChmbG93aWQsIG1zZ2J1Zi1cdTAwM2VmbG93X21hcCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGUgYml0IHdhcyBhbHJlYWR5IHNldCwgYSB0eGZsb3dfd29yayBpdGVtIGlzIGFscmVhZHlcbiYjNDM7XHQgKiBxdWV1ZWQgb3IgcnVubmluZyBmb3IgdGhpcyByaW5nLiAgSW4gdGhhdCBjYXNlIHRoZSBleGlzdGluZ1xuJiM0MztcdCAqIHdvcmtlciB3aWxsIGRyYWluIG91ciBmcmVzaGx5IGVucXVldWVkIGZyYW1lIHdoZW4gaXQgcnVucyxcbiYjNDM7XHQgKiBzbyB3ZSBvbmx5IG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhlciB3b3JrIGl0ZW0gd2hlbiB0aGVcbiYjNDM7XHQgKiBmb3JjZSBmbGFnIGlzIHNldCBvciB0aGUgcmluZyBpcyBiZWxvdyB0aGUgZGVsYXkgdGhyZXNob2xkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSWYgdGhlIGJpdCB3YXMgTk9UIHNldCAodGVzdF9hbmRfc2V0X2JpdCByZXR1cm5zIGZhbHNlKSwgbm9cbiYjNDM7XHQgKiB3b3JrZXIgaXMgcGVuZGluZyBmb3IgdGhpcyByaW5nIGF0IGFsbC4gIFdlIE1VU1Qgc2NoZWR1bGVcbiYjNDM7XHQgKiBvbmUgdW5jb25kaXRpb25hbGx5LCBvdGhlcndpc2UgdGhlIGZyYW1lIHdlIGp1c3QgZW5xdWV1ZWRcbiYjNDM7XHQgKiB3aWxsIHNpdCBpbiB0aGUgZmxvd3JpbmcgdW5zZW50IHVudGlsIHNvbWUgdW5yZWxhdGVkIGV2ZW50XG4mIzQzO1x0ICogdHJpZ2dlcnMgdGhlIHdvcmtxdWV1ZSDigJQgY2F1c2luZyBzaWxlbnQgVFggc3RhbGxzIHVuZGVyXG4mIzQzO1x0ICogaGlnaCBsb2FkIHdoZW4gb3V0c3RhbmRpbmdfdHggXHUwMDNlPSBERUxBWV9UWFdPUktFUl9USFJTLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdChmbG93aWQsIG1zZ2J1Zi1cdTAwM2VmbG93X21hcCkpIHtcbiYjNDM7XHRcdC8qIEJpdCB3YXMgY2xlYXI6IG5vIHdvcmtlciBwZW5kaW5nLCBhbHdheXMgc2NoZWR1bGUuICovXG4mIzQzO1x0XHRxdWV1ZV93b3JrKG1zZ2J1Zi1cdTAwM2V0eGZsb3dfd3EsIFx1MDAyNm1zZ2J1Zi1cdTAwM2V0eGZsb3dfd29yayk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEJpdCB3YXMgYWxyZWFkeSBzZXQ6IHdvcmtlciBwZW5kaW5nLCBhcHBseSBjb2FsZXNjaW5nIGhldXJpc3RpYy4gKi9cbiBcdGNvbW1vbnJpbmcgPSBtc2didWYtXHUwMDNlZmxvd3JpbmdzW2Zsb3dpZF07XG4tXHRpZiAoKGZvcmNlKSB8fCAoYXRvbWljX3JlYWQoXHUwMDI2Y29tbW9ucmluZy1cdTAwM2VvdXRzdGFuZGluZ190eCkgXHUwMDNjXG4tXHRcdFx0QlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlMpKVxuJiM0MztcdGlmIChmb3JjZSB8fCAoYXRvbWljX3JlYWQoXHUwMDI2Y29tbW9ucmluZy1cdTAwM2VvdXRzdGFuZGluZ190eCkgXHUwMDNjXG4mIzQzO1x0XHQgICAgICBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSUykpXG4gXHRcdHF1ZXVlX3dvcmsobXNnYnVmLVx1MDAzZXR4Zmxvd193cSwgXHUwMDI2bXNnYnVmLVx1MDAzZXR4Zmxvd193b3JrKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTE2MjEsMTEgJiM0MzsxNjc0LDExIEBAIGludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4gXHRkbyB7XG4gXHRcdGJyY21mX21zZ2J1Zl9yeGJ1Zl9kYXRhX2ZpbGwobXNnYnVmKTtcbiBcdFx0aWYgKG1zZ2J1Zi1cdTAwM2VtYXhfcnhidWZwb3N0ICE9IG1zZ2J1Zi1cdTAwM2VyeGJ1ZnBvc3QpXG4tXHRcdFx0bXNsZWVwKDEwKTtcbiYjNDM7XHRcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFx0XHRlbHNlXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNvdW50JiM0MzsmIzQzOztcbi1cdH0gd2hpbGUgKGNvdW50IFx1MDAzYyAxMCk7XG4mIzQzO1x0fSB3aGlsZSAoY291bnQgXHUwMDNjIDEwMCk7XG4gXHRicmNtZl9tc2didWZfcnhidWZfZXZlbnRfcG9zdChtc2didWYpO1xuIFx0YnJjbWZfbXNnYnVmX3J4YnVmX2lvY3RscmVzcF9wb3N0KG1zZ2J1Zik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcbmluZGV4IDEzNjYyYWE0YjRlYTYuLjkzMzhhNWZhYTI2MGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXG5AQCAtMjY4LDYgJiM0MzsyNjgsMjcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9maXJtd2FyZV9tYXBwaW5nIGJyY21mX3BjaWVfZnduYW1lc1tdID0ge1xuIFxuICNkZWZpbmUgQlJDTUZfUENJRV9NQkRBVEFfVElNRU9VVFx0XHRtc2Vjc190b19qaWZmaWVzKDIwMDApXG4gXG4mIzQzOy8qXG4mIzQzOyAqIEgyRCBtYWlsYm94IHBvbGwgdGltaW5nIHBhcmFtZXRlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBkb25nbGUgdHlwaWNhbGx5IGNsZWFycyB0aGUgSDJEIG1haWxib3ggcmVnaXN0ZXIgd2l0aGluIGEgZmV3XG4mIzQzOyAqIGh1bmRyZWQgbWljcm9zZWNvbmRzIGFmdGVyIHRoZSBkb29yYmVsbCBpbnRlcnJ1cHQgZmlyZXMuICBUaGVcbiYjNDM7ICogb3JpZ2luYWwgY29kZSB1c2VkIG1zbGVlcCgxMCkgKiAxMDAgaXRlcmF0aW9ucywgbWVhbmluZyB0aGVcbiYjNDM7ICogbWluaW11bSBvYnNlcnZhYmxlIGxhdGVuY3kgd2FzIDEwbXMgZXZlbiB3aGVuIHRoZSBkb25nbGUgd2FzIGZhc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFdlIGluc3RlYWQgc3RhcnQgd2l0aCBhIHNob3J0IHNsZWVwIGFuZCBkb3VibGUgaXQgZWFjaCBpdGVyYXRpb25cbiYjNDM7ICogKGV4cG9uZW50aWFsIGJhY2tvZmYpIHVwIHRvIEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMsIHN0YXlpbmdcbiYjNDM7ICogd2l0aGluIHRoZSBzYW1lIDEtc2Vjb25kIGFic29sdXRlIHRpbWVvdXQuXG4mIzQzOyAqXG4mIzQzOyAqIE1JTl9VUyAvIElOSVRJQUxfTUFYX1VTIDogdXNsZWVwX3JhbmdlIGJvdW5kcyBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbi5cbiYjNDM7ICogTUFYX1VTICAgICA6IGNhcCBvbiB0aGUgcGVyLWl0ZXJhdGlvbiBzbGVlcCAowrVzKS5cbiYjNDM7ICogVElNRU9VVF9VUyA6IHRvdGFsIGJ1ZGdldCBiZWZvcmUgZ2l2aW5nIHVwICgxIHNlY29uZCkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVNcdFx0NDBcbiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfSU5JVElBTF9NQVhfVVNcdDUwXG4mIzQzOyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX01BWF9VU1x0XHQ1MDAwXG4mIzQzOyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX1RJTUVPVVRfVVNcdFx0MTAwMDAwMFxuJiM0MztcbiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX1NUQVRVU19DTURcdFx0MHg0XG4gI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19QTV9DU1JcdFx0MHg0Q1xuICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfTVNJX0NBUFx0XHQweDU4XG5AQCAtNzY2LDcgJiM0Mzs3ODcsOCBAQCBicmNtZl9wY2llX3NlbmRfbWJfZGF0YShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgaHRvZF9tYl9kYXRhKVxuIFx0c3RydWN0IGJyY21mX2NvcmUgKmNvcmU7XG4gXHR1MzIgYWRkcjtcbiBcdHUzMiBjdXJfaHRvZF9tYl9kYXRhO1xuLVx0dTMyIGk7XG4mIzQzO1x0dTMyIGVsYXBzZWRfdXMgPSAwO1xuJiM0MztcdHUzMiBzbGVlcF91cyA9IEJSQ01GX1BDSUVfTUJfUE9MTF9JTklUSUFMX01BWF9VUztcbiBcbiBcdHNoYXJlZCA9IFx1MDAyNmRldmluZm8tXHUwMDNlc2hhcmVkO1xuIFx0YWRkciA9IHNoYXJlZC1cdTAwM2VodG9kX21iX2RhdGFfYWRkcjtcbkBAIC03NzYsMTIgJiM0Mzs3OTgsNDAgQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSlcbiBcdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O01CIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgcGVuZGluZyAweCUwNHhcXG5cJiMzNDssXG4gXHRcdFx0ICBjdXJfaHRvZF9tYl9kYXRhKTtcbiBcbi1cdGkgPSAwO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2FpdCBmb3IgdGhlIGRvbmdsZSB0byBjb25zdW1lIHRoZSBwcmV2aW91cyBIMkQgbWFpbGJveCBtZXNzYWdlLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlcmUgaXMgbm8gaW50ZXJydXB0IHRoYXQgc2lnbmFscyB3aGVuIHRoZSBkb25nbGUgY2xlYXJzIHRoaXNcbiYjNDM7XHQgKiByZWdpc3Rlciwgc28gcG9sbGluZyBpcyB1bmF2b2lkYWJsZS4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWRcbiYjNDM7XHQgKiBtc2xlZXAoMTApIHBlciBpdGVyYXRpb24sIGluY3VycmluZyBhdCBsZWFzdCAxMG1zIG9mIGxhdGVuY3lcbiYjNDM7XHQgKiBldmVuIHdoZW4gdGhlIGRvbmdsZSByZXNwb25kZWQgaW4gbWljcm9zZWNvbmRzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogV2UgdXNlIHVzbGVlcF9yYW5nZSgpIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiBpbnN0ZWFkOlxuJiM0MztcdCAqICAgLSBGaXJzdCBpdGVyYXRpb24gc2xlZXBzIH41MMK1cyAoZmFzdCBwYXRoIGZvciByZXNwb25zaXZlIGRvbmdsZSkuXG4mIzQzO1x0ICogICAtIEVhY2ggc3Vic2VxdWVudCBpdGVyYXRpb24gZG91YmxlcyB0aGUgc2xlZXAsIGNhcHBlZCBhdCA1bXMsXG4mIzQzO1x0ICogICAgIHNvIGxvbmcgd2FpdHMgc3RpbGwgeWllbGQgdGhlIENQVSB3aXRob3V0IGJ1c3ktc3Bpbm5pbmcuXG4mIzQzO1x0ICogICAtIFRvdGFsIHRpbWVvdXQgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgMS1zZWNvbmQgbGltaXQuXG4mIzQzO1x0ICogICAtIFdlIGJhaWwgZWFybHkgaWYgdGhlIGRldmljZSBoYXMgZ29uZSBkb3duIHNvIHRoYXQgYSBkZWFkXG4mIzQzO1x0ICogICAgIGRvbmdsZSBkb2VzIG5vdCBob2xkIHRoZSBjYWxsZXIgZm9yIGEgZnVsbCBzZWNvbmQuXG4mIzQzO1x0ICovXG4gXHR3aGlsZSAoY3VyX2h0b2RfbWJfZGF0YSAhPSAwKSB7XG4tXHRcdG1zbGVlcCgxMCk7XG4tXHRcdGkmIzQzOyYjNDM7O1xuLVx0XHRpZiAoaSBcdTAwM2UgMTAwKVxuJiM0MztcdFx0aWYgKGRldmluZm8tXHUwMDNlc3RhdGUgPT0gQlJDTUZNQUNfUENJRV9TVEFURV9ET1dOKSB7XG4mIzQzO1x0XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtEZXZpY2UgZG93biwgYWJvcnRpbmcgTUIgc2VuZFxcblwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVsYXBzZWRfdXMgXHUwMDNlPSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUykge1xuJiM0MztcdFx0XHRicmNtZl9lcnIoXCYjMzQ7VGltZW91dCB3YWl0aW5nIGZvciBIMkQgTUIgc2xvdCBhZnRlciAldSB1c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgIGVsYXBzZWRfdXMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR1c2xlZXBfcmFuZ2UoQlJDTUZfUENJRV9NQl9QT0xMX01JTl9VUywgc2xlZXBfdXMpO1xuJiM0MztcdFx0ZWxhcHNlZF91cyAmIzQzOz0gc2xlZXBfdXM7XG4mIzQzO1xuJiM0MztcdFx0LyogRXhwb25lbnRpYWwgYmFja29mZiwgY2FwcGVkIGF0IEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMgKi9cbiYjNDM7XHRcdHNsZWVwX3VzID0gbWluKHNsZWVwX3VzICogMiwgKHUzMilCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTKTtcbiYjNDM7XG4gXHRcdGN1cl9odG9kX21iX2RhdGEgPSBicmNtZl9wY2llX3JlYWRfdGNtMzIoZGV2aW5mbywgYWRkcik7XG4gXHR9XG4gXG5AQCAtMTAwMSwxMCAmIzQzOzEwNTEsMTAgQEAgc3RhdGljIHZvaWQgYnJjbWZfcGNpZV9yZWxlYXNlX2lycShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvKVxuIFx0ZnJlZV9pcnEocGRldi1cdTAwM2VpcnEsIGRldmluZm8pO1xuIFx0cGNpX2Rpc2FibGVfbXNpKHBkZXYpO1xuIFxuLVx0bXNsZWVwKDUwKTtcbiYjNDM7XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXHRjb3VudCA9IDA7XG4tXHR3aGlsZSAoKGRldmluZm8tXHUwMDNlaW5faXJxKSBcdTAwMjZcdTAwMjYgKGNvdW50IFx1MDAzYyAyMCkpIHtcbi1cdFx0bXNsZWVwKDUwKTtcbiYjNDM7XHR3aGlsZSAoKGRldmluZm8tXHUwMDNlaW5faXJxKSBcdTAwMjZcdTAwMjYgKGNvdW50IFx1MDAzYyAxMDAwKSkge1xuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gXHR9XG4gXHRpZiAoZGV2aW5mby1cdTAwM2Vpbl9pcnEpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcbmluZGV4IGI3MjVjNjRlNWI1YzYuLjRlNDE0NDAzZDc0NzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jXG5AQCAtMTY0NSwzNyAmIzQzOzE2NDUsNDMgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKVxuIFxuIFx0XHRyZF9uZXcuc2VxX251bSA9IHJ4c2VxO1xuIFx0XHRyZF9uZXcubGVuID0gZGxlbjtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2xhaW0gdGhlIGhvc3Qgb25jZSBmb3IgdGhlIGVudGlyZSBoZWFkZXItcGFyc2luZyBwaGFzZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBicmNtZl9zZGlvX2hkcGFyc2UoKSBvcGVyYXRlcyBvbiBkYXRhIGFscmVhZHkgaW4gaG9zdFxuJiM0MztcdFx0ICogbWVtb3J5LCBidXQgbWF5IGNhbGwgYnJjbWZfc2Rpb19yeGZhaWwoKSBvbiBlcnJvciwgd2hpY2hcbiYjNDM7XHRcdCAqIHdyaXRlcyBTRElPIEZ1bmMxIHJlZ2lzdGVycyBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIHRoZVxuJiM0MztcdFx0ICogaG9zdCB0byBiZSBjbGFpbWVkLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIHNrYl9wdWxsKCkgYW5kIHRoZSBudW0gY291bnRlciBhcmUgcHVyZSBob3N0LW1lbW9yeVxuJiM0MztcdFx0ICogb3BlcmF0aW9uczsga2VlcCB0aGVtIG91dHNpZGUgdGhlIGxvY2sgdG8gbWluaW1pc2UgdGhlXG4mIzQzO1x0XHQgKiBob2xkIHRpbWUuICBCb3RoIGhkcGFyc2UgY2FsbHMgKHN1cGVyZnJhbWUgaGVhZGVyIGFuZFxuJiM0MztcdFx0ICogZWFjaCBzdWJmcmFtZSBoZWFkZXIpIGFyZSBncm91cGVkIHVuZGVyIGEgc2luZ2xlIGNsYWltL1xuJiM0MztcdFx0ICogcmVsZWFzZSwgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBOJiM0MzsxIHNlcGFyYXRlIHBhaXJzLlxuJiM0MztcdFx0ICovXG4gXHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4gXHRcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtXHUwMDNlZGF0YSwgXHUwMDI2cmRfbmV3LFxuIFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VQRVIpO1xuLVx0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdGJ1cy1cdTAwM2VjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSBcdTAwM2NcdTAwM2MgNDtcbi1cbi1cdFx0LyogUmVtb3ZlIHN1cGVyZnJhbWUgaGVhZGVyLCByZW1lbWJlciBvZmZzZXQgKi9cbi1cdFx0c2tiX3B1bGwocGZpcnN0LCByZF9uZXcuZGF0X29mZnNldCk7XG4tXHRcdG51bSA9IDA7XG4tXG4tXHRcdC8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqL1xuLVx0XHRza2JfcXVldWVfd2FsayhcdTAwMjZidXMtXHUwMDNlZ2xvbSwgcG5leHQpIHtcbi1cdFx0XHQvKiBsZWF2ZSB3aGVuIGludmFsaWQgc3ViZnJhbWUgaXMgZm91bmQgKi9cbi1cdFx0XHRpZiAoZXJyY29kZSlcbi1cdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdHJkX25ldy5sZW4gPSBwbmV4dC1cdTAwM2VsZW47XG4tXHRcdFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcSYjNDM7JiM0Mzs7XG4tXHRcdFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbi1cdFx0XHRlcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtXHUwMDNlZGF0YSwgXHUwMDI2cmRfbmV3LFxuLVx0XHRcdFx0XHRcdCAgICAgQlJDTUZfU0RJT19GVF9TVUIpO1xuLVx0XHRcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbi1cdFx0XHRicmNtZl9kYmdfaGV4X2R1bXAoQlJDTUZfR0xPTV9PTigpLFxuLVx0XHRcdFx0XHQgICBwbmV4dC1cdTAwM2VkYXRhLCAzMiwgXCYjMzQ7c3ViZnJhbWU6XFxuXCYjMzQ7KTtcbi1cbi1cdFx0XHRudW0mIzQzOyYjNDM7O1xuJiM0MztcdFx0LyogVmFsaWRhdGUgYWxsIHRoZSBzdWJmcmFtZSBoZWFkZXJzIHdoaWxlIGhvc3QgaXMgY2xhaW1lZCAqL1xuJiM0MztcdFx0aWYgKCFlcnJjb2RlKSB7XG4mIzQzO1x0XHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNmJ1cy1cdTAwM2VnbG9tLCBwbmV4dCkge1xuJiM0MztcdFx0XHRcdHJkX25ldy5sZW4gPSBwbmV4dC1cdTAwM2VsZW47XG4mIzQzO1x0XHRcdFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0ZXJyY29kZSA9IGJyY21mX3NkaW9faGRwYXJzZShidXMsIHBuZXh0LVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyZF9uZXcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBCUkNNRl9TRElPX0ZUX1NVQik7XG4mIzQzO1x0XHRcdFx0YnJjbWZfZGJnX2hleF9kdW1wKEJSQ01GX0dMT01fT04oKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcG5leHQtXHUwMDNlZGF0YSwgMzIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFwmIzM0O3N1YmZyYW1lOlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0aWYgKGVycmNvZGUpXG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChlcnJjb2RlKSB7XG4tXHRcdFx0LyogVGVybWluYXRlIGZyYW1lIG9uIGVycm9yICovXG4tXHRcdFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbiYjNDM7XHRcdFx0LyogVGVybWluYXRlIGZyYW1lIG9uIGVycm9yLCBzdGlsbCBob2xkaW5nIHRoZSBob3N0ICovXG4gXHRcdFx0YnJjbWZfc2Rpb19yeGZhaWwoYnVzLCB0cnVlLCBmYWxzZSk7XG4gXHRcdFx0YnVzLVx1MDAzZXNkY250LnJ4Z2xvbWZhaWwmIzQzOyYjNDM7O1xuIFx0XHRcdGJyY21mX3NkaW9fZnJlZV9nbG9tKGJ1cyk7XG5AQCAtMTY4Myw2ICYjNDM7MTY4OSwxNCBAQCBzdGF0aWMgdTggYnJjbWZfc2Rpb19yeGdsb20oc3RydWN0IGJyY21mX3NkaW8gKmJ1cywgdTggcnhzZXEpXG4gXHRcdFx0YnVzLVx1MDAzZWN1cl9yZWFkLmxlbiA9IDA7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbiYjNDM7XHRcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBIb3N0IHJlbGVhc2VkOyBub3cgZG8gdGhlIHB1cmUtbWVtb3J5IGJvb2trZWVwaW5nICovXG4mIzQzO1x0XHRidXMtXHUwMDNlY3VyX3JlYWQubGVuID0gcmRfbmV3Lmxlbl9ueHRmcm0gXHUwMDNjXHUwMDNjIDQ7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVtb3ZlIHN1cGVyZnJhbWUgaGVhZGVyLCByZW1lbWJlciBvZmZzZXQgKi9cbiYjNDM7XHRcdHNrYl9wdWxsKHBmaXJzdCwgcmRfbmV3LmRhdF9vZmZzZXQpO1xuJiM0MztcdFx0bnVtID0gMDtcbiBcbiBcdFx0LyogQmFzaWMgU0QgZnJhbWluZyBsb29rcyBvayAtIHByb2Nlc3MgZWFjaCBwYWNrZXQgKGhlYWRlcikgKi9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXG5pbmRleCBmYzdhNWRkMmU1ZDg2Li4zZmQ4YmRiZDM1ZTU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXG5AQCAtNTE2LDEyICYjNDM7NTE2LDExIEBAIGludCBicmNtc19jX2FtcGR1X2FkZF9mcmFtZShzdHJ1Y3QgYnJjbXNfYW1wZHVfc2Vzc2lvbiAqc2Vzc2lvbixcbiBcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiBcbiBcdFx0Lypcbi1cdFx0ICogV2UgYXJlbiYjMzk7dCByZWFsbHkgb3V0IG9mIHNwYWNlIGlmIHRoZSBuZXcgZnJhbWUgaXMgb2Zcbi1cdFx0ICogYSBkaWZmZXJlbnQgcHJpb3JpdHksIGJ1dCB3ZSB3YW50IHRoZSBzYW1lIGJlaGF2aW91clxuLVx0XHQgKiBzbyByZXR1cm4gLUVOT1NQQyBhbnl3YXkuXG4tXHRcdCAqXG4tXHRcdCAqIFhYWDogVGhlIG9sZCBBTVBEVSBjb2RlIGRpZCB0aGlzLCBidXQgaXMgaXQgcmVhbGx5XG4tXHRcdCAqIG5lY2Vzc2FyeT9cbiYjNDM7XHRcdCAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW5cbiYjNDM7XHRcdCAqIEEtTVBEVSBiZWxvbmcgdG8gdGhlIHNhbWUgVElEIChUcmFmZmljIElkZW50aWZpZXIpLlxuJiM0MztcdFx0ICogU2luY2UgcHJpb3JpdHkgbWFwcyB0byBUSUQsIGEgZGlmZmVyZW50IHByaW9yaXR5IG1lYW5zXG4mIzQzO1x0XHQgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLFxuJiM0MztcdFx0ICogc28gd2UgcmV0dXJuIC1FTk9TUEMgaGVyZS5cbiBcdFx0ICovXG4gXHRcdGZpcnN0ID0gc2tiX3BlZWsoXHUwMDI2c2Vzc2lvbi1cdTAwM2Vza2JfbGlzdCk7XG4gXHRcdGlmIChwLVx1MDAzZXByaW9yaXR5ICE9IGZpcnN0LVx1MDAzZXByaW9yaXR5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19VU0ImIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfUENJRSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9kZWxfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVjIgUE1LU0EgY2FjaGUgb3BlcmF0aW9ucyBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNmZzgwMjExIG5ldGxpbmsgY29tbWFuZHMgd2hlbiBhIEJyb2FkY29tIFdpLUZpIGRldmljZSBpcyBwcmVzZW50LiBTeXprYWxsZXIgY2FuIGVtdWxhdGUgc3VjaCBhIGRldmljZSB2aWEgaXRzIFVTQiBmdXp6ZXIsIG1ha2luZyB0aGlzIG5ldyBsb2dpYyByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyByYWRpb3RhcCBoZWFkZXIgaW5zZXJ0aW9uIGluIG1vbml0b3IgbW9kZSBhbmQgUENJZSBtYWlsYm94IHBvbGxpbmcsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZmUxNjdlNDU2ZGExY2FmOTI4MjY5OTI5NTMzMTk1YTNmY2EzMTJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwNjoxNzo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKaW5kZXggMGI1NWQ0NDU4OTVmMi4uN2Q3ZTVlY2VjZDIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKQEAgLTM5ODksMTIgJiM0MzszOTg5LDEwIEBAIHN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdG9wKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBicmNtZl9kZWxheSh1MzIgbXMpCiB7Ci0JaWYgKG1zICZsdDsgMTAwMCAvIEhaKSB7Ci0JCWNvbmRfcmVzY2hlZCgpOwotCQltZGVsYXkobXMpOwotCX0gZWxzZSB7CiYjNDM7CWlmIChtcyAmbHQ7PSAyMCkKJiM0MzsJCXVzbGVlcF9yYW5nZShtcyAqIDEwMDAsIG1zICogMTAwMCAmIzQzOyAxMDAwKTsKJiM0MzsJZWxzZQogCQltc2xlZXAobXMpOwotCX0KIH0KIAogc3RhdGljIHMzMiBicmNtZl9jb25maWdfd293bF9wYXR0ZXJuKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1OCBjbWRbNF0sCkBAIC00MzY0LDYgJiM0Mzs0MzYyLDEwNCBAQCBicmNtZl9wbWtzYV92M19vcChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IGNmZzgwMjExX3Bta3NhICpwbWtzYSwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnJjbWZfcG1rc2FfdjJfb3AgLSB1cGRhdGUgZmlybXdhcmUgUE1LU0EgY2FjaGUgdXNpbmcgdGhlIFYyIGxpc3QgaW50ZXJmYWNlLgomIzQzOyAqCiYjNDM7ICogVjIgZmlybXdhcmUgKHJldmlzaW9uIDEyKSB1c2VzIGEgdmVyc2lvbmVkIGZsYXQgbGlzdCBzdHJ1Y3R1cmUKJiM0MzsgKiAoYnJjbWZfcG1rX2xpc3RfdjJfbGUpIHJhdGhlciB0aGFuIHRoZSBwZXItZW50cnkgb3BlcmF0aW9uIG1vZGVsIG9mIFYzLgomIzQzOyAqIEVhY2ggZW50cnkgY2FycmllcyBGSUxTLXNwZWNpZmljIGZpZWxkcyAocmF3IFBNSyBtYXRlcmlhbCwgU1NJRCwgYW5kCiYjNDM7ICogZmlsc19jYWNoZV9pZCkgaW4gYWRkaXRpb24gdG8gdGhlIGJhc2ljIEJTU0lEICYjNDM7IFBNS0lEIHBhaXIsIGVuYWJsaW5nCiYjNDM7ICogRklMUyBmYXN0LXJvYW1pbmcgb24gZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFYzLgomIzQzOyAqCiYjNDM7ICogQGNmZzogICBkcml2ZXIgY29uZmlnIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBzaGFkb3cgVjIgUE1LU0EgbGlzdAomIzQzOyAqIEBpZnA6ICAgaW50ZXJmYWNlIHBvaW50ZXIKJiM0MzsgKiBAcG1rc2E6IHRoZSBQTUtTQSB0byBhZGQvcmVtb3ZlLCBvciBOVUxMIGZvciBhIGZsdXNoCiYjNDM7ICogQGFsaXZlOiB0cnVlID0gYWRkIChzZXQgdGltZV9sZWZ0IHRvIG5vLWV4cGlyeSksIGZhbHNlID0gcmVtb3ZlL2ZsdXNoCiYjNDM7ICovCiYjNDM7c3RhdGljIHMzMgomIzQzO2JyY21mX3Bta3NhX3YyX29wKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwLAomIzQzOwkJICBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLCBib29sIGFsaXZlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGNmZy0mZ3Q7cHViOwomIzQzOwlzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUgKmxpc3QgPSAmYW1wO2NmZy0mZ3Q7cG1rX2xpc3RfdjI7CiYjNDM7CXN0cnVjdCBicmNtZl9wbWtzYV92MiAqcG1rID0gbGlzdC0mZ3Q7cG1rOwomIzQzOwl1MzIgbnBtayA9IGxlMTZfdG9fY3B1KGxpc3QtJmd0O2xlbmd0aCk7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwkvKiBucG1rIGhlcmUgc3RvcmVzIHRoZSBjb3VudCBvZiB2YWxpZCBlbnRyaWVzLCByZXB1cnBvc2luZyB0aGUKJiM0MzsJICogbGVuZ3RoIGZpZWxkIG9mIHRoZSBzaGFkb3cgbGlzdCBhcyBhIGNvdW50ZXIuICBXZSBjb252ZXJ0IHRvCiYjNDM7CSAqIHRoZSB3aXJlIGZvcm1hdCAoYnl0ZSBsZW5ndGgpIHdoZW4gc2VuZGluZyB0byBmaXJtd2FyZS4KJiM0MzsJICovCiYjNDM7CWlmICghcG1rc2EpIHsKJiM0MzsJCS8qIEZsdXNoOiB6ZXJvIHRoZSBzaGFkb3cgbGlzdCBhbmQgcHVzaCBhbiBlbXB0eSBWMiBsaXN0LiAqLwomIzQzOwkJbWVtc2V0KGxpc3QsIDAsIHNpemVvZigqbGlzdCkpOwomIzQzOwkJZ290byBzZW5kOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChhbGl2ZSkgewomIzQzOwkJLyogU2V0OiBzZWFyY2ggZm9yIGV4aXN0aW5nIEJTU0lEIG1hdGNoIGZpcnN0LiAqLwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wbWs7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlmICghbWVtY21wKHBta3NhLSZndDtic3NpZCwgcG1rW2ldLmJzc2lkLCBFVEhfQUxFTikpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKGkgJmd0Oz0gQlJDTUZfTUFYUE1LSUQpIHsKJiM0MzsJCQlicGh5X2VycihkcnZyLCAmIzM0O1YyIFBNS1NBIGNhY2hlIGZ1bGwgKCVkIGVudHJpZXMpXG4mIzM0OywKJiM0MzsJCQkJIG5wbWspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVtc2V0KCZhbXA7cG1rW2ldLCAwLCBzaXplb2YocG1rW2ldKSk7CiYjNDM7CQlwbWtbaV0ubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBicmNtZl9wbWtzYV92MikpOwomIzQzOwkJaWYgKHBta3NhLSZndDtic3NpZCkKJiM0MzsJCQltZW1jcHkocG1rW2ldLmJzc2lkLCBwbWtzYS0mZ3Q7YnNzaWQsIEVUSF9BTEVOKTsKJiM0MzsJCWlmIChwbWtzYS0mZ3Q7cG1raWQpCiYjNDM7CQkJbWVtY3B5KHBta1tpXS5wbWtpZCwgcG1rc2EtJmd0O3Bta2lkLCBXTEFOX1BNS0lEX0xFTik7CiYjNDM7CQlpZiAocG1rc2EtJmd0O3BtayAmYW1wOyZhbXA7IHBta3NhLSZndDtwbWtfbGVuICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwbWtzYS0mZ3Q7cG1rX2xlbiAmbHQ7PSBXTEFOX1BNS19MRU5fU1VJVEVfQl8xOTIpIHsKJiM0MzsJCQltZW1jcHkocG1rW2ldLnBtaywgcG1rc2EtJmd0O3BtaywgcG1rc2EtJmd0O3Bta19sZW4pOwomIzQzOwkJCXBta1tpXS5wbWtfbGVuID0gY3B1X3RvX2xlMTYocG1rc2EtJmd0O3Bta19sZW4pOwomIzQzOwkJfQomIzQzOwkJaWYgKHBta3NhLSZndDtzc2lkICZhbXA7JmFtcDsgcG1rc2EtJmd0O3NzaWRfbGVuKSB7CiYjNDM7CQkJbWVtY3B5KHBta1tpXS5zc2lkLlNTSUQsIHBta3NhLSZndDtzc2lkLCBwbWtzYS0mZ3Q7c3NpZF9sZW4pOwomIzQzOwkJCXBta1tpXS5zc2lkLlNTSURfbGVuID0gcG1rc2EtJmd0O3NzaWRfbGVuOwomIzQzOwkJfQomIzQzOwkJaWYgKHBta3NhLSZndDtmaWxzX2NhY2hlX2lkKQomIzQzOwkJCXBta1tpXS5maWxzX2NhY2hlX2lkID0gKnBta3NhLSZndDtmaWxzX2NhY2hlX2lkOwomIzQzOwomIzQzOwkJaWYgKGkgPT0gbnBtaykKJiM0MzsJCQlucG1rJiM0MzsmIzQzOzsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIERlbGV0ZTogZmluZCBieSBCU1NJRCBhbmQgY29tcGFjdCB0aGUgbGlzdC4gKi8KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBucG1rOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlpZiAoIW1lbWNtcChwbWtzYS0mZ3Q7YnNzaWQsIHBta1tpXS5ic3NpZCwgRVRIX0FMRU4pKQomIzQzOwkJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChpICZndDs9IG5wbWspIHsKJiM0MzsJCQlicGh5X2VycihkcnZyLCAmIzM0O1YyIFBNS1NBIGVudHJ5IG5vdCBmb3VuZFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yICg7IGkgJmx0OyBucG1rIC0gMTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJbWVtY3B5KCZhbXA7cG1rW2ldLCAmYW1wO3Bta1tpICYjNDM7IDFdLCBzaXplb2YocG1rW2ldKSk7CiYjNDM7CQltZW1zZXQoJmFtcDtwbWtbbnBtayAtIDFdLCAwLCBzaXplb2YocG1rW25wbWsgLSAxXSkpOwomIzQzOwkJbnBtay0tOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFVwZGF0ZSBzaGFkb3cgZW50cnkgY291bnQgKHN0b3JlZCBpbiBsZW5ndGggZmllbGQpLiAqLwomIzQzOwlsaXN0LSZndDtsZW5ndGggPSBjcHVfdG9fbGUxNihucG1rKTsKJiM0MzsKJiM0MztzZW5kOgomIzQzOwkvKiBCdWlsZCB0aGUgd2lyZS1mb3JtYXQgaGVhZGVyIGFuZCBzZW5kIHRoZSBmdWxsIGxpc3QgdG8gZmlybXdhcmUuCiYjNDM7CSAqIHZlcnNpb24gYW5kIGxlbmd0aCBvbiB0aGUgd2lyZSByZWZsZWN0IHRoZSBhY3R1YWwgYnl0ZSBmb290cHJpbnQuCiYjNDM7CSAqLwomIzQzOwlsaXN0LSZndDt2ZXJzaW9uID0gY3B1X3RvX2xlMTYoQlJDTUZfUE1LU0FfVkVSXzIpOwomIzQzOwlsaXN0LSZndDtsZW5ndGggID0gY3B1X3RvX2xlMTYob2Zmc2V0b2Yoc3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlLCBwbWspICYjNDM7CiYjNDM7CQkJCSAgIG5wbWsgKiBzaXplb2Yoc3RydWN0IGJyY21mX3Bta3NhX3YyKSk7CiYjNDM7CiYjNDM7CXJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCAmIzM0O3Bta2lkX2luZm8mIzM0OywgbGlzdCwgc2l6ZW9mKCpsaXN0KSk7CiYjNDM7fQomIzQzOwomIzQzOwogc3RhdGljIF9fdXNlZCBzMzIKIGJyY21mX3VwZGF0ZV9wbWtsaXN0KHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwKQogewpAQCAtNDQwMiw4ICYjNDM7NDQ5OCw4IEBAIGJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAogCWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YzKSkKIAkJcmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgcG1rc2EsIHRydWUpOwotCi0JLyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovCiYjNDM7CWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSkKJiM0MzsJCXJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIHRydWUpOwogCiAJbnBtayA9IGxlMzJfdG9fY3B1KGNmZy0mZ3Q7cG1rX2xpc3QubnBtayk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5wbWs7IGkmIzQzOyYjNDM7KQpAQCAtNDQ0Niw4ICYjNDM7NDU0Miw4IEBAIGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAogCWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YzKSkKIAkJcmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgcG1rc2EsIGZhbHNlKTsKLQotCS8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqLwomIzQzOwlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpCiYjNDM7CQlyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCBmYWxzZSk7CiAKIAlucG1rID0gbGUzMl90b19jcHUoY2ZnLSZndDtwbWtfbGlzdC5ucG1rKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnBtazsgaSYjNDM7JiM0MzspCkBAIC00NDg3LDggJiM0Mzs0NTgzLDggQEAgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAKIAlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpCiAJCXJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIE5VTEwsIGZhbHNlKTsKLQotCS8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqLwomIzQzOwlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpCiYjNDM7CQlyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTsKIAogCW1lbXNldCgmYW1wO2NmZy0mZ3Q7cG1rX2xpc3QsIDAsIHNpemVvZihjZmctJmd0O3Bta19saXN0KSk7CiAJZXJyID0gYnJjbWZfdXBkYXRlX3Bta2xpc3QoY2ZnLCBpZnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaAppbmRleCA2Y2ViMzAxNDI5MDU0Li41NzE2N2ZkZTViYTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaApAQCAtMzQ0LDcgJiM0MzszNDQsOCBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfd293bCB7CiAgKiBAYnNzX2xpc3Q6IGJzc19saXN0IGhvbGRpbmcgc2Nhbm5lZCBhcCBpbmZvcm1hdGlvbi4KICAqIEBic3NfaW5mbzogYnNzIGluZm9ybWF0aW9uIGZvciBjZmc4MDIxMSBsYXllci4KICAqIEBjb25uX2luZm86IGFzc29jaWF0aW9uIGluZm8uCi0gKiBAcG1rX2xpc3Q6IHdwYTIgcG1rIGxpc3QuCiYjNDM7ICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0IChWMSBmaXJtd2FyZSkuCiYjNDM7ICogQHBta19saXN0X3YyOiB3cGEyIHBtayBsaXN0IGZvciBWMiBmaXJtd2FyZSAoRklMUy1jYXBhYmxlLCBmaXJtd2FyZSByZXYgMTIpLgogICogQHNjYW5fc3RhdHVzOiBzY2FuIGFjdGl2aXR5IG9uIHRoZSBkb25nbGUuCiAgKiBAcHViOiBjb21tb24gZHJpdmVyIGluZm9ybWF0aW9uLgogICogQGNoYW5uZWw6IGN1cnJlbnQgY2hhbm5lbC4KQEAgLTM3Niw2ICYjNDM7Mzc3LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gewogCXN0cnVjdCB3bF9jZmc4MDIxMV9ic3NfaW5mbyAqYnNzX2luZm87CiAJc3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyBjb25uX2luZm87CiAJc3RydWN0IGJyY21mX3Bta19saXN0X2xlIHBta19saXN0OwomIzQzOwlzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUgcG1rX2xpc3RfdjI7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3N0YXR1czsKIAlzdHJ1Y3QgYnJjbWZfcHViICpwdWI7CiAJdTMyIGNoYW5uZWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYwppbmRleCBlYzE3MDY0NzgwMGRhLi42NzNmMDAwMDM4OWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMKQEAgLTQzMSw0NSAmIzQzOzQzMSw1MSBAQCB2b2lkIGJyY21mX25ldGlmX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCW5ldGlmX3J4KHNrYik7CiB9CiAKJiM0MztzdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIGhkcjsKJiM0MzsJczggZGJtX2FudHNpZ25hbDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwogdm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfUkFESU9UQVApKSB7Ci0JCS8qIERvIG5vdGhpbmcgKi8KJiM0MzsJCS8qIEZpcm13YXJlIGFscmVhZHkgcHJvdmlkZWQgYSBmdWxsIHJhZGlvdGFwIGhlYWRlcjsgZG8gbm90aGluZyAqLwogCX0gZWxzZSBpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9NT05JVE9SX0ZNVF9IV19SWF9IRFIpKSB7CiAJCXN0cnVjdCB3bGNfZDExcnhoZHIgKndsY19yeGhkciA9IChzdHJ1Y3Qgd2xjX2QxMXJ4aGRyICopc2tiLSZndDtkYXRhOwotCQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7CiYjNDM7CQlzdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyAqcnRhcDsKIAkJdW5zaWduZWQgaW50IG9mZnNldDsKIAkJdTE2IFJ4U3RhdHVzMTsKJiM0MzsJCXM4IHJzc2k7CiAKIAkJUnhTdGF0dXMxID0gbGUxNl90b19jcHUod2xjX3J4aGRyLSZndDtyeGhkci5SeFN0YXR1czEpOwomIzQzOwkJcnNzaSA9IHdsY19yeGhkci0mZ3Q7cnNzaTsKIAogCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHdsY19kMTFyeGhkcik7Ci0JCS8qIE1BQyBpbnNlcnRzIDIgcGFkIGJ5dGVzIGZvciBhNCBoZWFkZXJzIG9yIFFvUyBvciBBLU1TRFUKLQkJICogc3ViZnJhbWVzCi0JCSAqLwomIzQzOwkJLyogTUFDIGluc2VydHMgMiBwYWQgYnl0ZXMgZm9yIGE0IGhlYWRlcnMgb3IgUW9TIG9yIEEtTVNEVSBzdWJmcmFtZXMgKi8KIAkJaWYgKFJ4U3RhdHVzMSAmYW1wOyBSWFNfUEJQUkVTKQogCQkJb2Zmc2V0ICYjNDM7PSAyOwogCQlvZmZzZXQgJiM0Mzs9IEQxMV9QSFlfSERSX0xFTjsKIAogCQlza2JfcHVsbChza2IsIG9mZnNldCk7CiAKLQkJLyogVE9ETzogdXNlIFJYIGhlYWRlciB0byBmaWxsIHNvbWUgcmFkaW90YXAgZGF0YSAqLwotCQlyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpOwotCQltZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTsKLQkJcmFkaW90YXAtJmd0O2l0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTsKJiM0MzsJCS8qIEluc2VydCBvdXIgcmFkaW90YXAgaGVhZGVyIHdpdGggUlNTSSBkYXRhICovCiYjNDM7CQlydGFwID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnJ0YXApKTsKJiM0MzsJCW1lbXNldChydGFwLCAwLCBzaXplb2YoKnJ0YXApKTsKJiM0MzsJCXJ0YXAtJmd0O2hkci5pdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJ0YXApKTsKJiM0MzsJCXJ0YXAtJmd0O2hkci5pdF9wcmVzZW50ID0gY3B1X3RvX2xlMzIoMSAmbHQ7Jmx0OyBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCk7CiYjNDM7CQlydGFwLSZndDtkYm1fYW50c2lnbmFsID0gcnNzaTsKIAotCQkvKiBUT0RPOiA0IGJ5dGVzIHdpdGggcmVjZWl2ZSBzdGF0dXM/ICovCi0JCXNrYi0mZ3Q7bGVuIC09IDQ7CiYjNDM7CQkvKiBTdHJpcCB0aGUgNC1ieXRlIHJlY2VpdmUgc3RhdHVzIC8gRkNTIHRhaWwgKi8KJiM0MzsJCXNrYl90cmltKHNrYiwgc2tiLSZndDtsZW4gLSA0KTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7CiAKLQkJLyogVE9ETzogdXNlIFJYIHN0YXR1cyB0byBmaWxsIHNvbWUgcmFkaW90YXAgZGF0YSAqLwogCQlyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpOwogCQltZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTsKIAkJcmFkaW90YXAtJmd0O2l0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTsKIAotCQkvKiBUT0RPOiA0IGJ5dGVzIHdpdGggcmVjZWl2ZSBzdGF0dXM/ICovCi0JCXNrYi0mZ3Q7bGVuIC09IDQ7CiYjNDM7CQkvKiBTdHJpcCB0aGUgNC1ieXRlIHJlY2VpdmUgc3RhdHVzIC8gRkNTIHRhaWwgKi8KJiM0MzsJCXNrYl90cmltKHNrYiwgc2tiLSZndDtsZW4gLSA0KTsKIAl9CiAKIAlza2ItJmd0O2RldiA9IGlmcC0mZ3Q7bmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMKaW5kZXggMzVjYmNlYTBhYmM5YS4uYjljNTE4OTM5ZjUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMKQEAgLTE4MiwxMCAmIzQzOzE4Miw4IEBAIHN0YXRpYyB2b2lkIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCwKIAlzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWY7CiAJc3RydWN0IGJyY21mX3B1YiAqZHJ2cjsKIAlzdHJ1Y3QgYnJjbWZfaWYgKmlmcDsKLQlib29sIGN1cnJlbnRseV9ibG9ja2VkOwotCWludCBpOwotCXU4IGlmaWR4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXU4IGlmaWR4OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtmbG93LSZndDtibG9ja19sb2NrLCBmbGFncyk7CiAKQEAgLTE5NCwyMyAmIzQzOzE5Miw1NCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtmbG93LSZndDtibG9ja19sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9Ci0JaWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTsKIAotCWN1cnJlbnRseV9ibG9ja2VkID0gZmFsc2U7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGZsb3ctJmd0O25yb2ZyaW5nczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKChmbG93LSZndDtyaW5nc1tpXSkgJmFtcDsmYW1wOyAoaSAhPSBmbG93aWQpKSB7Ci0JCQlyaW5nID0gZmxvdy0mZ3Q7cmluZ3NbaV07Ci0JCQlpZiAoKHJpbmctJmd0O3N0YXR1cyA9PSBSSU5HX09QRU4pICZhbXA7JmFtcDsKLQkJCSAgICAoYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGkpID09IGlmaWR4KSkgewotCQkJCWlmIChyaW5nLSZndDtibG9ja2VkKSB7Ci0JCQkJCWN1cnJlbnRseV9ibG9ja2VkID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQomIzQzOwlpZmlkeCA9IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChmbG93LCBmbG93aWQpOwomIzQzOwlyaW5nLSZndDtibG9ja2VkID0gYmxvY2tlZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFpbnRhaW4gdGhlIHBlci1pbnRlcmZhY2UgYmxvY2tlZC1yaW5nIGNvdW50ZXIuCiYjNDM7CSAqCiYjNDM7CSAqIFdlIHVzZSByaW5nLSZndDtjb3VudGVkX2luX2Jsb2NrZWQgcmF0aGVyIHRoYW4gY2hlY2tpbmcKJiM0MzsJICogcmluZy0mZ3Q7c3RhdHVzIGhlcmUuICBBIHJpbmcgdGhhdCBiZWNhbWUgYmxvY2tlZCB3aGlsZQomIzQzOwkgKiBSSU5HX09QRU4gaGFzIGFscmVhZHkgYmVlbiBjb3VudGVkIChjb3VudGVkX2luX2Jsb2NrZWQ9dHJ1ZSkuCiYjNDM7CSAqIEJ5IHRoZSB0aW1lIHdlIHVuYmxvY2sgaXQgZHVyaW5nIHRlYXJkb3duIGl0cyBzdGF0dXMgbWF5IGhhdmUKJiM0MzsJICogYWR2YW5jZWQgdG8gUklOR19DTE9TSU5HLCBzbyB0ZXN0aW5nIFJJTkdfT1BFTiB3b3VsZCB3cm9uZ2x5CiYjNDM7CSAqIHNraXAgdGhlIGF0b21pY19kZWMgYW5kIHBlcm1hbmVudGx5IGxlYWsgdGhlIGNvdW50ZXIsIGxlYXZpbmcKJiM0MzsJICogdGhlIG5ldGlmIHF1ZXVlIHN0b3BwZWQgZm9yZXZlci4KJiM0MzsJICoKJiM0MzsJICogUnVsZToKJiM0MzsJICogICBibG9jayB0cmFuc2l0aW9uICAodW5ibG9ja2Vk4oaSYmxvY2tlZCk6IGNvdW50IG9ubHkgaWYgUklOR19PUEVOLAomIzQzOwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBjb3VudGVkX2luX2Jsb2NrZWQuCiYjNDM7CSAqICAgdW5ibG9jayB0cmFuc2l0aW9uIChibG9ja2Vk4oaSdW5ibG9ja2VkKTogZGVjcmVtZW50IG9ubHkgaWYgd2UKJiM0MzsJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGNvdW50ZWQgaXQsCiYjNDM7CSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgY291bnRlZF9pbl9ibG9ja2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGJsb2NrZWQpIHsKJiM0MzsJCWlmIChyaW5nLSZndDtzdGF0dXMgPT0gUklOR19PUEVOKSB7CiYjNDM7CQkJYXRvbWljX2luYygmYW1wO2Zsb3ctJmd0O2lmX2Jsb2NrZWRfY250W2lmaWR4XSk7CiYjNDM7CQkJcmluZy0mZ3Q7Y291bnRlZF9pbl9ibG9ja2VkID0gdHJ1ZTsKIAkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHJpbmctJmd0O2NvdW50ZWRfaW5fYmxvY2tlZCkgewomIzQzOwkJCWF0b21pY19kZWMoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpZmlkeF0pOwomIzQzOwkJCXJpbmctJmd0O2NvdW50ZWRfaW5fYmxvY2tlZCA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgcHJvcGFnYXRlIGEgbmV0aWYgcXVldWUtc3RvcC93YWtlIHdoZW4gdGhlIGludGVyZmFjZQomIzQzOwkgKiB0cmFuc2l0aW9ucyBiZXR3ZWVuIGZ1bGx5LWNsZWFyIGFuZCBhdC1sZWFzdC1vbmUtYmxvY2tlZC4KJiM0MzsJICogUmVhZGluZyB0aGUgYXRvbWljIGlzIHNhZmUgaGVyZTogd2UgaG9sZCBibG9ja19sb2NrLCBzbyBubwomIzQzOwkgKiBjb25jdXJyZW50IGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FsbCBjYW4gcmFjZSB0aGUgdXBkYXRlCiYjNDM7CSAqIHdlIGp1c3QgbWFkZSBhYm92ZS4KJiM0MzsJICovCiYjNDM7CWlmIChibG9ja2VkICZhbXA7JmFtcDsgYXRvbWljX3JlYWQoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDEpIHsKJiM0MzsJCS8qIEFub3RoZXIgcmluZyB3YXMgYWxyZWFkeSBibG9ja2VkOyBubyBuZXcgcXVldWUtc3RvcCBuZWVkZWQuICovCiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Zmxvdy0mZ3Q7YmxvY2tfbG9jaywgZmxhZ3MpOwomIzQzOwkJcmV0dXJuOwogCX0KLQlmbG93LSZndDtyaW5nc1tmbG93aWRdLSZndDtibG9ja2VkID0gYmxvY2tlZDsKLQlpZiAoY3VycmVudGx5X2Jsb2NrZWQpIHsKJiM0MzsJaWYgKCFibG9ja2VkICZhbXA7JmFtcDsgYXRvbWljX3JlYWQoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDApIHsKJiM0MzsJCS8qIE1vcmUgcmluZ3Mgc3RpbGwgYmxvY2tlZDsgZG8gbm90IHdha2UgdGhlIHF1ZXVlIHlldC4gKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Zsb3ctJmd0O2Jsb2NrX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM2Nyw2ICYjNDM7Mzk2LDggQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nICpicmNtZl9mbG93cmluZ19hdHRhY2goc3RydWN0IGRldmljZSAqZGV2LCB1MTYgbnJvZnJpbmdzKQogCQlzcGluX2xvY2tfaW5pdCgmYW1wO2Zsb3ctJmd0O2Jsb2NrX2xvY2spOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShmbG93LSZndDthZGRyX21vZGUpOyBpJiM0MzsmIzQzOykKIAkJCWZsb3ctJmd0O2FkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShmbG93LSZndDtpZl9ibG9ja2VkX2NudCk7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWF0b21pY19zZXQoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpXSwgMCk7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGZsb3ctJmd0O2hhc2gpOyBpJiM0MzsmIzQzOykKIAkJCWZsb3ctJmd0O2hhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgKaW5kZXggZjNkNTExZjlhM2M5YS4uYWZkZWE4YjNmOGFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgKQEAgLTUsNiAmIzQzOzUsOCBAQAogI2lmbmRlZiBCUkNNRk1BQ19GTE9XUklOR19ICiAjZGVmaW5lIEJSQ01GTUFDX0ZMT1dSSU5HX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsKJiM0MzsKIAogI2RlZmluZSBCUkNNRl9GTE9XUklOR19IQVNIU0laRQkJNTEyCQkvKiBoYXMgdG8gYmUgMl54ICovCiAjZGVmaW5lIEJSQ01GX0ZMT1dSSU5HX0lOVkFMSURfSUQJMHhGRkZGRkZGRgpAQCAtMjYsNiAmIzQzOzI4LDE2IEBAIGVudW0gcmluZ19zdGF0dXMgewogc3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgewogCXUxNiBoYXNoX2lkOwogCWJvb2wgYmxvY2tlZDsKJiM0MzsJLyoKJiM0MzsJICogVHJ1ZSB3aGVuIHRoaXMgcmluZyBoYXMgYmVlbiBjb3VudGVkIGluIHRoZSBwZXItaW50ZXJmYWNlCiYjNDM7CSAqIGlmX2Jsb2NrZWRfY250W10uICBTZXQgdG8gdHJ1ZSB3aGVuZXZlciB0aGUgcmluZyB0cmFuc2l0aW9ucwomIzQzOwkgKiB1bmJsb2NrZWTihpJibG9ja2VkIHdoaWxlIFJJTkdfT1BFTjsgY2xlYXJlZCBvbiB0aGUgbWF0Y2hpbmcKJiM0MzsJICogYmxvY2tlZOKGknVuYmxvY2tlZCB0cmFuc2l0aW9uLiAgTmVlZGVkIHNvIHRoYXQgYSByaW5nIHRoYXQKJiM0MzsJICogYmVjb21lcyBibG9ja2VkIHdoaWxlIFJJTkdfT1BFTiBhbmQgaXMgbGF0ZXIgbW92ZWQgdG8KJiM0MzsJICogUklOR19DTE9TSU5HIHN0aWxsIGNvcnJlY3RseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyIGF0CiYjNDM7CSAqIHRlYXJkb3duLCBldmVuIHRob3VnaCBpdHMgc3RhdHVzIGlzIG5vIGxvbmdlciBSSU5HX09QRU4uCiYjNDM7CSAqLwomIzQzOwlib29sIGNvdW50ZWRfaW5fYmxvY2tlZDsKIAllbnVtIHJpbmdfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYmxpc3Q7CiB9OwpAQCAtNDAsNiAmIzQzOzUyLDEyIEBAIHN0cnVjdCBicmNtZl9mbG93cmluZyB7CiAJc3RydWN0IGJyY21mX2Zsb3dyaW5nX2hhc2ggaGFzaFtCUkNNRl9GTE9XUklOR19IQVNIU0laRV07CiAJc3BpbmxvY2tfdCBibG9ja19sb2NrOwogCWVudW0gcHJvdG9fYWRkcl9tb2RlIGFkZHJfbW9kZVtCUkNNRl9NQVhfSUZTXTsKJiM0MzsJLyogUGVyLWludGVyZmFjZSBjb3VudCBvZiBjdXJyZW50bHkgYmxvY2tlZCBvcGVuIHJpbmdzLgomIzQzOwkgKiBNYWludGFpbmVkIGF0b21pY2FsbHkgc28gYnJjbWZfZmxvd3JpbmdfYmxvY2soKSBjYW4gY2hlY2sKJiM0MzsJICogd2hldGhlciBhbnkgc2libGluZyByaW5nIGlzIGFscmVhZHkgYmxvY2tlZCBpbiBPKDEpIHdpdGhvdXQKJiM0MzsJICogaG9sZGluZyBibG9ja19sb2NrIGFjcm9zcyBhbiBPKG5yb2ZyaW5ncykgd2Fsay4KJiM0MzsJICovCiYjNDM7CWF0b21pY190IGlmX2Jsb2NrZWRfY250W0JSQ01GX01BWF9JRlNdOwogCXUxNiBucm9mcmluZ3M7CiAJYm9vbCB0ZGxzX2FjdGl2ZTsKIAlzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfdGRsc19lbnRyeSAqdGRsc19lbnRyeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMKaW5kZXggYTQzZjFhMzhiMGUzMC4uM2MxY2EzNTVlOGVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMKQEAgLTEwMzcsNyAmIzQzOzEwMzcsOSBAQCBpbnQgYnJjbWZfZndzX21hY2Rlc2NfaW5kaWNhdGUoc3RydWN0IGJyY21mX2Z3c19pbmZvICpmd3MsIHU4IHR5cGUsIHU4ICpkYXRhKQogCQl9IGVsc2UgewogCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O3VzZSBleGlzdGluZ1xuJiMzNDspOwogCQkJV0FSTl9PTihlbnRyeS0mZ3Q7bWFjX2hhbmRsZSAhPSBtYWNfaGFuZGxlKTsKLQkJCS8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovCiYjNDM7CQkJLyogRmlybXdhcmUgcmUtc2VudCBBREQgZm9yIHRoZSBzYW1lIE1BQyBoYW5kbGUuCiYjNDM7CQkJICogTm8gYWN0aW9uIHJlcXVpcmVkOyBpdCBpcyBhIHNhZmUgbm8tb3AuCiYjNDM7CQkJICovCiAJCX0KIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMKaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYwpAQCAtNDgsNyAmIzQzOzQ4LDE5IEBACiAjZGVmaW5lIE1TR0JVRl9UWVBFX0xQQktfRE1BWEZFUgkJMHgxMwogI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJfQ01QTFQJCTB4MTQKIAotI2RlZmluZSBOUl9UWF9QS1RJRFMJCQkJMjA0OAomIzQzOy8qCiYjNDM7ICogTlJfVFhfUEtUSURTOiBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzbHkgaW4tZmxpZ2h0IFRYIHBhY2tldCBJRHMuCiYjNDM7ICogRWFjaCBvdXRzdGFuZGluZyBUWCBmcmFtZSBjb25zdW1lcyBvbmUgSUQgdW50aWwgdGhlIGRvbmdsZSByZXR1cm5zCiYjNDM7ICogYSBUWC1zdGF0dXMgY29tcGxldGlvbi4gIFRoZSBvcmlnaW5hbCAyMDQ4LWVudHJ5IHBvb2wgZXhoYXVzdGVkIHVuZGVyCiYjNDM7ICog4omlNCBjb25jdXJyZW50IGlwZXJmMyBzdHJlYW1zIG9uIFdpLUZpIDUvNiAoODAyLjExYWMvYXgpIGRldmljZXMsCiYjNDM7ICogY2F1c2luZyAmIzM0O05vIFBLVElEIGF2YWlsYWJsZSYjMzQ7IGRyb3BzIGFuZCBUQ1AgcmV0cmFuc21pdHMuICA0MDk2IGdpdmVzCiYjNDM7ICogaGVhZHJvb20gZm9yIGhpZ2gtYWdncmVnYXRpb24gc2NlbmFyaW9zIHdoaWxlIHN0aWxsIGZpdHRpbmcgaW4gYQomIzQzOyAqIG1vZGVzdCBhbW91bnQgb2YgaG9zdCBtZW1vcnkgKH40OCBLQiBmb3IgdGhlIHBrdGlkIHRhYmxlIGVudHJpZXMpLgomIzQzOyAqCiYjNDM7ICogTlJfUlhfUEtUSURTOiBSWCBwb3N0IGJ1ZmZlcnMgcHJlLWFsbG9jYXRlZCB0byB0aGUgZG9uZ2xlLiAgMTAyNCBpcwomIzQzOyAqIHN1ZmZpY2llbnQgZm9yIGN1cnJlbnQgaGFyZHdhcmUgUlggcmluZyBkZXB0aHM7IGxlYXZlIHVuY2hhbmdlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE5SX1RYX1BLVElEUwkJCQk0MDk2CiAjZGVmaW5lIE5SX1JYX1BLVElEUwkJCQkxMDI0CiAKICNkZWZpbmUgQlJDTUZfSU9DVExfUkVRX1BLVElECQkJMHhGRkZFCkBAIC02NCw4ICYjNDM7NzYsMjkgQEAKICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19GUkFNRV9NQVNLCTB4MDcKICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19QUklPX1NISUZUCTUKIAotI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMQkJMzIKLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDIJCTk2CiYjNDM7LyoKJiM0MzsgKiBUWCBmbHVzaCAvIGRvb3JiZWxsLXJpbmcgdGhyZXNob2xkcy4KJiM0MzsgKgomIzQzOyAqIENOVDEgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIGluIHRoZSBjb21tb25yaW5nCiYjNDM7ICogYmVmb3JlIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgd3JpdGVfY29tcGxldGUoKSAoZG9vcmJlbGwgcmluZykgaXMKJiM0MzsgKiBpc3N1ZWQgbWlkLWJhdGNoLiAgQ05UMiBpcyB0aGUgaGFyZCBmbHVzaCBpbnRlcnZhbDogYWZ0ZXIgdGhpcyBtYW55CiYjNDM7ICogZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuIHNpbmNlIHRoZSBsYXN0IGZsdXNoLCB3ZSB1bmNvbmRpdGlvbmFsbHkKJiM0MzsgKiByaW5nIHRoZSBiZWxsIGFuZCByZXNldCB0aGUgY291bnRlci4KJiM0MzsgKgomIzQzOyAqIFJhaXNpbmcgYm90aCBmcm9tIHRoZSBvcmlnaW5hbCAzMi85NiB0byA2NC8xMjggZG91YmxlcyB0aGUgYXZlcmFnZQomIzQzOyAqIG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyBjb21taXR0ZWQgcGVyIE1NSU8gd3JpdGUsIGhhbHZpbmcgdGhlIFBDSWUKJiM0MzsgKiBkb29yYmVsbCByYXRlIG9uIHN1c3RhaW5lZCB0aHJvdWdocHV0IHdvcmtsb2Fkcy4gIFRoZSB0cmFkZW9mZiBpcyBhCiYjNDM7ICogbWFyZ2luYWxseSBoaWdoZXIgd29yc3QtY2FzZSBsYXRlbmN5IGZvciB0aGUgbGFzdCBmcmFtZXMgaW4gYSBidXJzdCwKJiM0MzsgKiB3aGljaCBpbiBwcmFjdGljZSBpcyBoaWRkZW4gYnkgdGhlIHRpbWUgdGhlIGRvbmdsZSBETUEgZW5naW5lIGRyYWlucwomIzQzOyAqIHRoZSBwcmV2aW91cyBiYXRjaC4KJiM0MzsgKgomIzQzOyAqIFRSSUNLTEVfVFhXT1JLRVJfVEhSUyBnb3Zlcm5zIGhvdyBvZnRlbiBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YSgpCiYjNDM7ICogZm9yY2VzIGEgd29ya3F1ZXVlIHNjaGVkdWxlIHdoZW4gdGhlIHF1ZXVlIGRlcHRoIGlzIG5vdCBhIG11bHRpcGxlIG9mCiYjNDM7ICogdGhpcyB2YWx1ZS4gIEtlZXBpbmcgaXQgYXQgaGFsZiBvZiBDTlQxICgzMikgcHJlc2VydmVzIHJlc3BvbnNpdmVuZXNzCiYjNDM7ICogZm9yIGxvdy1yYXRlIGZsb3dzIChlLmcuIFZvSVAsIElDTVApIHRoYXQgbmV2ZXIgYWNjdW11bGF0ZSA2NCBmcmFtZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMQkJNjQKJiM0MzsjZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQyCQkxMjgKIAogI2RlZmluZSBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSUwk5NgogI2RlZmluZSBCUkNNRl9NU0dCVUZfVFJJQ0tMRV9UWFdPUktFUl9USFJTCTMyCkBAIC03ODcsMTAgJiM0Mzs4MjAsMzAgQEAgc3RhdGljIGludCBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZiwgdTMyIGZsb3dpZCwKIHsKIAlzdHJ1Y3QgYnJjbWZfY29tbW9ucmluZyAqY29tbW9ucmluZzsKIAotCXNldF9iaXQoZmxvd2lkLCBtc2didWYtJmd0O2Zsb3dfbWFwKTsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIGJpdCB3YXMgYWxyZWFkeSBzZXQsIGEgdHhmbG93X3dvcmsgaXRlbSBpcyBhbHJlYWR5CiYjNDM7CSAqIHF1ZXVlZCBvciBydW5uaW5nIGZvciB0aGlzIHJpbmcuICBJbiB0aGF0IGNhc2UgdGhlIGV4aXN0aW5nCiYjNDM7CSAqIHdvcmtlciB3aWxsIGRyYWluIG91ciBmcmVzaGx5IGVucXVldWVkIGZyYW1lIHdoZW4gaXQgcnVucywKJiM0MzsJICogc28gd2Ugb25seSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgd29yayBpdGVtIHdoZW4gdGhlCiYjNDM7CSAqIGZvcmNlIGZsYWcgaXMgc2V0IG9yIHRoZSByaW5nIGlzIGJlbG93IHRoZSBkZWxheSB0aHJlc2hvbGQuCiYjNDM7CSAqCiYjNDM7CSAqIElmIHRoZSBiaXQgd2FzIE5PVCBzZXQgKHRlc3RfYW5kX3NldF9iaXQgcmV0dXJucyBmYWxzZSksIG5vCiYjNDM7CSAqIHdvcmtlciBpcyBwZW5kaW5nIGZvciB0aGlzIHJpbmcgYXQgYWxsLiAgV2UgTVVTVCBzY2hlZHVsZQomIzQzOwkgKiBvbmUgdW5jb25kaXRpb25hbGx5LCBvdGhlcndpc2UgdGhlIGZyYW1lIHdlIGp1c3QgZW5xdWV1ZWQKJiM0MzsJICogd2lsbCBzaXQgaW4gdGhlIGZsb3dyaW5nIHVuc2VudCB1bnRpbCBzb21lIHVucmVsYXRlZCBldmVudAomIzQzOwkgKiB0cmlnZ2VycyB0aGUgd29ya3F1ZXVlIOKAlCBjYXVzaW5nIHNpbGVudCBUWCBzdGFsbHMgdW5kZXIKJiM0MzsJICogaGlnaCBsb2FkIHdoZW4gb3V0c3RhbmRpbmdfdHggJmd0Oz0gREVMQVlfVFhXT1JLRVJfVEhSUy4KJiM0MzsJICovCiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChmbG93aWQsIG1zZ2J1Zi0mZ3Q7Zmxvd19tYXApKSB7CiYjNDM7CQkvKiBCaXQgd2FzIGNsZWFyOiBubyB3b3JrZXIgcGVuZGluZywgYWx3YXlzIHNjaGVkdWxlLiAqLwomIzQzOwkJcXVldWVfd29yayhtc2didWYtJmd0O3R4Zmxvd193cSwgJmFtcDttc2didWYtJmd0O3R4Zmxvd193b3JrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEJpdCB3YXMgYWxyZWFkeSBzZXQ6IHdvcmtlciBwZW5kaW5nLCBhcHBseSBjb2FsZXNjaW5nIGhldXJpc3RpYy4gKi8KIAljb21tb25yaW5nID0gbXNnYnVmLSZndDtmbG93cmluZ3NbZmxvd2lkXTsKLQlpZiAoKGZvcmNlKSB8fCAoYXRvbWljX3JlYWQoJmFtcDtjb21tb25yaW5nLSZndDtvdXRzdGFuZGluZ190eCkgJmx0OwotCQkJQlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlMpKQomIzQzOwlpZiAoZm9yY2UgfHwgKGF0b21pY19yZWFkKCZhbXA7Y29tbW9ucmluZy0mZ3Q7b3V0c3RhbmRpbmdfdHgpICZsdDsKJiM0MzsJCSAgICAgIEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSkKIAkJcXVldWVfd29yayhtc2didWYtJmd0O3R4Zmxvd193cSwgJmFtcDttc2didWYtJmd0O3R4Zmxvd193b3JrKTsKIAogCXJldHVybiAwOwpAQCAtMTYyMSwxMSAmIzQzOzE2NzQsMTEgQEAgaW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cikKIAlkbyB7CiAJCWJyY21mX21zZ2J1Zl9yeGJ1Zl9kYXRhX2ZpbGwobXNnYnVmKTsKIAkJaWYgKG1zZ2J1Zi0mZ3Q7bWF4X3J4YnVmcG9zdCAhPSBtc2didWYtJmd0O3J4YnVmcG9zdCkKLQkJCW1zbGVlcCgxMCk7CiYjNDM7CQkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCQllbHNlCiAJCQlicmVhazsKIAkJY291bnQmIzQzOyYjNDM7OwotCX0gd2hpbGUgKGNvdW50ICZsdDsgMTApOwomIzQzOwl9IHdoaWxlIChjb3VudCAmbHQ7IDEwMCk7CiAJYnJjbWZfbXNnYnVmX3J4YnVmX2V2ZW50X3Bvc3QobXNnYnVmKTsKIAlicmNtZl9tc2didWZfcnhidWZfaW9jdGxyZXNwX3Bvc3QobXNnYnVmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMKaW5kZXggMTM2NjJhYTRiNGVhNi4uOTMzOGE1ZmFhMjYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jCkBAIC0yNjgsNiAmIzQzOzI2OCwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2Zpcm13YXJlX21hcHBpbmcgYnJjbWZfcGNpZV9md25hbWVzW10gPSB7CiAKICNkZWZpbmUgQlJDTUZfUENJRV9NQkRBVEFfVElNRU9VVAkJbXNlY3NfdG9famlmZmllcygyMDAwKQogCiYjNDM7LyoKJiM0MzsgKiBIMkQgbWFpbGJveCBwb2xsIHRpbWluZyBwYXJhbWV0ZXJzLgomIzQzOyAqCiYjNDM7ICogVGhlIGRvbmdsZSB0eXBpY2FsbHkgY2xlYXJzIHRoZSBIMkQgbWFpbGJveCByZWdpc3RlciB3aXRoaW4gYSBmZXcKJiM0MzsgKiBodW5kcmVkIG1pY3Jvc2Vjb25kcyBhZnRlciB0aGUgZG9vcmJlbGwgaW50ZXJydXB0IGZpcmVzLiAgVGhlCiYjNDM7ICogb3JpZ2luYWwgY29kZSB1c2VkIG1zbGVlcCgxMCkgKiAxMDAgaXRlcmF0aW9ucywgbWVhbmluZyB0aGUKJiM0MzsgKiBtaW5pbXVtIG9ic2VydmFibGUgbGF0ZW5jeSB3YXMgMTBtcyBldmVuIHdoZW4gdGhlIGRvbmdsZSB3YXMgZmFzdC4KJiM0MzsgKgomIzQzOyAqIFdlIGluc3RlYWQgc3RhcnQgd2l0aCBhIHNob3J0IHNsZWVwIGFuZCBkb3VibGUgaXQgZWFjaCBpdGVyYXRpb24KJiM0MzsgKiAoZXhwb25lbnRpYWwgYmFja29mZikgdXAgdG8gQlJDTUZfUENJRV9NQl9QT0xMX01BWF9VUywgc3RheWluZwomIzQzOyAqIHdpdGhpbiB0aGUgc2FtZSAxLXNlY29uZCBhYnNvbHV0ZSB0aW1lb3V0LgomIzQzOyAqCiYjNDM7ICogTUlOX1VTIC8gSU5JVElBTF9NQVhfVVMgOiB1c2xlZXBfcmFuZ2UgYm91bmRzIGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uLgomIzQzOyAqIE1BWF9VUyAgICAgOiBjYXAgb24gdGhlIHBlci1pdGVyYXRpb24gc2xlZXAgKMK1cykuCiYjNDM7ICogVElNRU9VVF9VUyA6IHRvdGFsIGJ1ZGdldCBiZWZvcmUgZ2l2aW5nIHVwICgxIHNlY29uZCkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfTUlOX1VTCQk0MAomIzQzOyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX0lOSVRJQUxfTUFYX1VTCTUwCiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTCQk1MDAwCiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUwkJMTAwMDAwMAomIzQzOwogI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19TVEFUVVNfQ01ECQkweDQKICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfUE1fQ1NSCQkweDRDCiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX01TSV9DQVAJCTB4NTgKQEAgLTc2Niw3ICYjNDM7Nzg3LDggQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSkKIAlzdHJ1Y3QgYnJjbWZfY29yZSAqY29yZTsKIAl1MzIgYWRkcjsKIAl1MzIgY3VyX2h0b2RfbWJfZGF0YTsKLQl1MzIgaTsKJiM0MzsJdTMyIGVsYXBzZWRfdXMgPSAwOwomIzQzOwl1MzIgc2xlZXBfdXMgPSBCUkNNRl9QQ0lFX01CX1BPTExfSU5JVElBTF9NQVhfVVM7CiAKIAlzaGFyZWQgPSAmYW1wO2RldmluZm8tJmd0O3NoYXJlZDsKIAlhZGRyID0gc2hhcmVkLSZndDtodG9kX21iX2RhdGFfYWRkcjsKQEAgLTc3NiwxMiAmIzQzOzc5OCw0MCBAQCBicmNtZl9wY2llX3NlbmRfbWJfZGF0YShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgaHRvZF9tYl9kYXRhKQogCQlicmNtZl9kYmcoUENJRSwgJiMzNDtNQiB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5IHBlbmRpbmcgMHglMDR4XG4mIzM0OywKIAkJCSAgY3VyX2h0b2RfbWJfZGF0YSk7CiAKLQlpID0gMDsKJiM0MzsJLyoKJiM0MzsJICogV2FpdCBmb3IgdGhlIGRvbmdsZSB0byBjb25zdW1lIHRoZSBwcmV2aW91cyBIMkQgbWFpbGJveCBtZXNzYWdlLgomIzQzOwkgKgomIzQzOwkgKiBUaGVyZSBpcyBubyBpbnRlcnJ1cHQgdGhhdCBzaWduYWxzIHdoZW4gdGhlIGRvbmdsZSBjbGVhcnMgdGhpcwomIzQzOwkgKiByZWdpc3Rlciwgc28gcG9sbGluZyBpcyB1bmF2b2lkYWJsZS4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQKJiM0MzsJICogbXNsZWVwKDEwKSBwZXIgaXRlcmF0aW9uLCBpbmN1cnJpbmcgYXQgbGVhc3QgMTBtcyBvZiBsYXRlbmN5CiYjNDM7CSAqIGV2ZW4gd2hlbiB0aGUgZG9uZ2xlIHJlc3BvbmRlZCBpbiBtaWNyb3NlY29uZHMuCiYjNDM7CSAqCiYjNDM7CSAqIFdlIHVzZSB1c2xlZXBfcmFuZ2UoKSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYgaW5zdGVhZDoKJiM0MzsJICogICAtIEZpcnN0IGl0ZXJhdGlvbiBzbGVlcHMgfjUwwrVzIChmYXN0IHBhdGggZm9yIHJlc3BvbnNpdmUgZG9uZ2xlKS4KJiM0MzsJICogICAtIEVhY2ggc3Vic2VxdWVudCBpdGVyYXRpb24gZG91YmxlcyB0aGUgc2xlZXAsIGNhcHBlZCBhdCA1bXMsCiYjNDM7CSAqICAgICBzbyBsb25nIHdhaXRzIHN0aWxsIHlpZWxkIHRoZSBDUFUgd2l0aG91dCBidXN5LXNwaW5uaW5nLgomIzQzOwkgKiAgIC0gVG90YWwgdGltZW91dCBtYXRjaGVzIHRoZSBvcmlnaW5hbCAxLXNlY29uZCBsaW1pdC4KJiM0MzsJICogICAtIFdlIGJhaWwgZWFybHkgaWYgdGhlIGRldmljZSBoYXMgZ29uZSBkb3duIHNvIHRoYXQgYSBkZWFkCiYjNDM7CSAqICAgICBkb25nbGUgZG9lcyBub3QgaG9sZCB0aGUgY2FsbGVyIGZvciBhIGZ1bGwgc2Vjb25kLgomIzQzOwkgKi8KIAl3aGlsZSAoY3VyX2h0b2RfbWJfZGF0YSAhPSAwKSB7Ci0JCW1zbGVlcCgxMCk7Ci0JCWkmIzQzOyYjNDM7OwotCQlpZiAoaSAmZ3Q7IDEwMCkKJiM0MzsJCWlmIChkZXZpbmZvLSZndDtzdGF0ZSA9PSBCUkNNRk1BQ19QQ0lFX1NUQVRFX0RPV04pIHsKJiM0MzsJCQlicmNtZl9kYmcoUENJRSwgJiMzNDtEZXZpY2UgZG93biwgYWJvcnRpbmcgTUIgc2VuZFxuJiMzNDspOwogCQkJcmV0dXJuIC1FSU87CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoZWxhcHNlZF91cyAmZ3Q7PSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUykgewomIzQzOwkJCWJyY21mX2VycigmIzM0O1RpbWVvdXQgd2FpdGluZyBmb3IgSDJEIE1CIHNsb3QgYWZ0ZXIgJXUgdXNcbiYjMzQ7LAomIzQzOwkJCQkgIGVsYXBzZWRfdXMpOwomIzQzOwkJCXJldHVybiAtRUlPOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdXNsZWVwX3JhbmdlKEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVMsIHNsZWVwX3VzKTsKJiM0MzsJCWVsYXBzZWRfdXMgJiM0Mzs9IHNsZWVwX3VzOwomIzQzOwomIzQzOwkJLyogRXhwb25lbnRpYWwgYmFja29mZiwgY2FwcGVkIGF0IEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMgKi8KJiM0MzsJCXNsZWVwX3VzID0gbWluKHNsZWVwX3VzICogMiwgKHUzMilCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTKTsKJiM0MzsKIAkJY3VyX2h0b2RfbWJfZGF0YSA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTsKIAl9CiAKQEAgLTEwMDEsMTAgJiM0MzsxMDUxLDEwIEBAIHN0YXRpYyB2b2lkIGJyY21mX3BjaWVfcmVsZWFzZV9pcnEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbykKIAlmcmVlX2lycShwZGV2LSZndDtpcnEsIGRldmluZm8pOwogCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKIAotCW1zbGVlcCg1MCk7CiYjNDM7CXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAljb3VudCA9IDA7Ci0Jd2hpbGUgKChkZXZpbmZvLSZndDtpbl9pcnEpICZhbXA7JmFtcDsgKGNvdW50ICZsdDsgMjApKSB7Ci0JCW1zbGVlcCg1MCk7CiYjNDM7CXdoaWxlICgoZGV2aW5mby0mZ3Q7aW5faXJxKSAmYW1wOyZhbXA7IChjb3VudCAmbHQ7IDEwMDApKSB7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJCWNvdW50JiM0MzsmIzQzOzsKIAl9CiAJaWYgKGRldmluZm8tJmd0O2luX2lycSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jCmluZGV4IGI3MjVjNjRlNWI1YzYuLjRlNDE0NDAzZDc0NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYwpAQCAtMTY0NSwzNyAmIzQzOzE2NDUsNDMgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKQogCiAJCXJkX25ldy5zZXFfbnVtID0gcnhzZXE7CiAJCXJkX25ldy5sZW4gPSBkbGVuOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENsYWltIHRoZSBob3N0IG9uY2UgZm9yIHRoZSBlbnRpcmUgaGVhZGVyLXBhcnNpbmcgcGhhc2UuCiYjNDM7CQkgKgomIzQzOwkJICogYnJjbWZfc2Rpb19oZHBhcnNlKCkgb3BlcmF0ZXMgb24gZGF0YSBhbHJlYWR5IGluIGhvc3QKJiM0MzsJCSAqIG1lbW9yeSwgYnV0IG1heSBjYWxsIGJyY21mX3NkaW9fcnhmYWlsKCkgb24gZXJyb3IsIHdoaWNoCiYjNDM7CQkgKiB3cml0ZXMgU0RJTyBGdW5jMSByZWdpc3RlcnMgYW5kIHRoZXJlZm9yZSByZXF1aXJlcyB0aGUKJiM0MzsJCSAqIGhvc3QgdG8gYmUgY2xhaW1lZC4KJiM0MzsJCSAqCiYjNDM7CQkgKiBza2JfcHVsbCgpIGFuZCB0aGUgbnVtIGNvdW50ZXIgYXJlIHB1cmUgaG9zdC1tZW1vcnkKJiM0MzsJCSAqIG9wZXJhdGlvbnM7IGtlZXAgdGhlbSBvdXRzaWRlIHRoZSBsb2NrIHRvIG1pbmltaXNlIHRoZQomIzQzOwkJICogaG9sZCB0aW1lLiAgQm90aCBoZHBhcnNlIGNhbGxzIChzdXBlcmZyYW1lIGhlYWRlciBhbmQKJiM0MzsJCSAqIGVhY2ggc3ViZnJhbWUgaGVhZGVyKSBhcmUgZ3JvdXBlZCB1bmRlciBhIHNpbmdsZSBjbGFpbS8KJiM0MzsJCSAqIHJlbGVhc2UsIHJlcGxhY2luZyB0aGUgb3JpZ2luYWwgTiYjNDM7MSBzZXBhcmF0ZSBwYWlycy4KJiM0MzsJCSAqLwogCQlzZGlvX2NsYWltX2hvc3QoYnVzLSZndDtzZGlvZGV2LSZndDtmdW5jMSk7CiAJCWVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtJmd0O2RhdGEsICZhbXA7cmRfbmV3LAogCQkJCQkgICAgIEJSQ01GX1NESU9fRlRfU1VQRVIpOwotCQlzZGlvX3JlbGVhc2VfaG9zdChidXMtJmd0O3NkaW9kZXYtJmd0O2Z1bmMxKTsKLQkJYnVzLSZndDtjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSAmbHQ7Jmx0OyA0OwotCi0JCS8qIFJlbW92ZSBzdXBlcmZyYW1lIGhlYWRlciwgcmVtZW1iZXIgb2Zmc2V0ICovCi0JCXNrYl9wdWxsKHBmaXJzdCwgcmRfbmV3LmRhdF9vZmZzZXQpOwotCQludW0gPSAwOwotCi0JCS8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqLwotCQlza2JfcXVldWVfd2FsaygmYW1wO2J1cy0mZ3Q7Z2xvbSwgcG5leHQpIHsKLQkJCS8qIGxlYXZlIHdoZW4gaW52YWxpZCBzdWJmcmFtZSBpcyBmb3VuZCAqLwotCQkJaWYgKGVycmNvZGUpCi0JCQkJYnJlYWs7CiAKLQkJCXJkX25ldy5sZW4gPSBwbmV4dC0mZ3Q7bGVuOwotCQkJcmRfbmV3LnNlcV9udW0gPSByeHNlcSYjNDM7JiM0Mzs7Ci0JCQlzZGlvX2NsYWltX2hvc3QoYnVzLSZndDtzZGlvZGV2LSZndDtmdW5jMSk7Ci0JCQllcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtJmd0O2RhdGEsICZhbXA7cmRfbmV3LAotCQkJCQkJICAgICBCUkNNRl9TRElPX0ZUX1NVQik7Ci0JCQlzZGlvX3JlbGVhc2VfaG9zdChidXMtJmd0O3NkaW9kZXYtJmd0O2Z1bmMxKTsKLQkJCWJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksCi0JCQkJCSAgIHBuZXh0LSZndDtkYXRhLCAzMiwgJiMzNDtzdWJmcmFtZTpcbiYjMzQ7KTsKLQotCQkJbnVtJiM0MzsmIzQzOzsKJiM0MzsJCS8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyB3aGlsZSBob3N0IGlzIGNsYWltZWQgKi8KJiM0MzsJCWlmICghZXJyY29kZSkgewomIzQzOwkJCXNrYl9xdWV1ZV93YWxrKCZhbXA7YnVzLSZndDtnbG9tLCBwbmV4dCkgewomIzQzOwkJCQlyZF9uZXcubGVuID0gcG5leHQtJmd0O2xlbjsKJiM0MzsJCQkJcmRfbmV3LnNlcV9udW0gPSByeHNlcSYjNDM7JiM0Mzs7CiYjNDM7CQkJCWVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwbmV4dC0mZ3Q7ZGF0YSwKJiM0MzsJCQkJCQkJICAgICAmYW1wO3JkX25ldywKJiM0MzsJCQkJCQkJICAgICBCUkNNRl9TRElPX0ZUX1NVQik7CiYjNDM7CQkJCWJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksCiYjNDM7CQkJCQkJICAgcG5leHQtJmd0O2RhdGEsIDMyLAomIzQzOwkJCQkJCSAgICYjMzQ7c3ViZnJhbWU6XG4mIzM0Oyk7CiYjNDM7CQkJCWlmIChlcnJjb2RlKQomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJfQogCQl9CiAKIAkJaWYgKGVycmNvZGUpIHsKLQkJCS8qIFRlcm1pbmF0ZSBmcmFtZSBvbiBlcnJvciAqLwotCQkJc2Rpb19jbGFpbV9ob3N0KGJ1cy0mZ3Q7c2Rpb2Rldi0mZ3Q7ZnVuYzEpOwomIzQzOwkJCS8qIFRlcm1pbmF0ZSBmcmFtZSBvbiBlcnJvciwgc3RpbGwgaG9sZGluZyB0aGUgaG9zdCAqLwogCQkJYnJjbWZfc2Rpb19yeGZhaWwoYnVzLCB0cnVlLCBmYWxzZSk7CiAJCQlidXMtJmd0O3NkY250LnJ4Z2xvbWZhaWwmIzQzOyYjNDM7OwogCQkJYnJjbWZfc2Rpb19mcmVlX2dsb20oYnVzKTsKQEAgLTE2ODMsNiAmIzQzOzE2ODksMTQgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKQogCQkJYnVzLSZndDtjdXJfcmVhZC5sZW4gPSAwOwogCQkJcmV0dXJuIDA7CiAJCX0KJiM0MzsJCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0mZ3Q7c2Rpb2Rldi0mZ3Q7ZnVuYzEpOwomIzQzOwomIzQzOwkJLyogSG9zdCByZWxlYXNlZDsgbm93IGRvIHRoZSBwdXJlLW1lbW9yeSBib29ra2VlcGluZyAqLwomIzQzOwkJYnVzLSZndDtjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSAmbHQ7Jmx0OyA0OwomIzQzOwomIzQzOwkJLyogUmVtb3ZlIHN1cGVyZnJhbWUgaGVhZGVyLCByZW1lbWJlciBvZmZzZXQgKi8KJiM0MzsJCXNrYl9wdWxsKHBmaXJzdCwgcmRfbmV3LmRhdF9vZmZzZXQpOwomIzQzOwkJbnVtID0gMDsKIAogCQkvKiBCYXNpYyBTRCBmcmFtaW5nIGxvb2tzIG9rIC0gcHJvY2VzcyBlYWNoIHBhY2tldCAoaGVhZGVyKSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jCmluZGV4IGZjN2E1ZGQyZTVkODYuLjNmZDhiZGJkMzVlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jCkBAIC01MTYsMTIgJiM0Mzs1MTYsMTEgQEAgaW50IGJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLAogCQkJcmV0dXJuIC1FTk9TUEM7CiAKIAkJLyoKLQkJICogV2UgYXJlbiYjMzk7dCByZWFsbHkgb3V0IG9mIHNwYWNlIGlmIHRoZSBuZXcgZnJhbWUgaXMgb2YKLQkJICogYSBkaWZmZXJlbnQgcHJpb3JpdHksIGJ1dCB3ZSB3YW50IHRoZSBzYW1lIGJlaGF2aW91cgotCQkgKiBzbyByZXR1cm4gLUVOT1NQQyBhbnl3YXkuCi0JCSAqCi0JCSAqIFhYWDogVGhlIG9sZCBBTVBEVSBjb2RlIGRpZCB0aGlzLCBidXQgaXMgaXQgcmVhbGx5Ci0JCSAqIG5lY2Vzc2FyeT8KJiM0MzsJCSAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW4KJiM0MzsJCSAqIEEtTVBEVSBiZWxvbmcgdG8gdGhlIHNhbWUgVElEIChUcmFmZmljIElkZW50aWZpZXIpLgomIzQzOwkJICogU2luY2UgcHJpb3JpdHkgbWFwcyB0byBUSUQsIGEgZGlmZmVyZW50IHByaW9yaXR5IG1lYW5zCiYjNDM7CQkgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLAomIzQzOwkJICogc28gd2UgcmV0dXJuIC1FTk9TUEMgaGVyZS4KIAkJICovCiAJCWZpcnN0ID0gc2tiX3BlZWsoJmFtcDtzZXNzaW9uLSZndDtza2JfbGlzdCk7CiAJCWlmIChwLSZndDtwcmlvcml0eSAhPSBmaXJzdC0mZ3Q7cHJpb3JpdHkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJyY21mbWFjIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgYGJyY21mbWFjYCBhbmQgYGJyY21zbWFjYCBkcml2ZXJzIGluIHRoZSBMaW51eCBrZXJuZWwuIEZpcnN0IGdsYW5jZSwgdGhlcmUmIzM5O3MgcXVpdGUgYSBiaXQgaGFwcGVuaW5nIGFjcm9zcyB2YXJpb3VzIGZpbGVzLCBzcGVjaWZpY2FsbHk6IGBjZmc4MDIxMS5jYCwgYGNmZzgwMjExLmhgLCBgY29yZS5jYCwgYGZsb3dyaW5nLmNgLCBgZndzaWduYWwuY2AsIGBtc2didWYuY2AsIGBwY2llLmNgLCBgc2Rpby5jYCwgYW5kIGBhbXBkdS5jYC4gVGhlIGNoYW5nZXMgcmFuZ2UgZnJvbSBzdWJ0bGUgdGltaW5nIGFkanVzdG1lbnRzIChgYnJjbWZfZGVsYXlgIG5vdyB1c2luZyBgdXNsZWVwX3JhbmdlYCwgZm9yIGluc3RhbmNlKSB0byBtb3JlIGludm9sdmVkIGFkZGl0aW9ucyBsaWtlIGBicmNtZl9wbWtzYV92Ml9vcGAgZm9yIFBNS1NBIGNhY2hlIHZlcnNpb24gMi4gVGhlcmUgYXJlIGFsc28gdHdlYWtzIHRvIGZsb3cgY29udHJvbCwgbWVzc2FnZSBidWZmZXIgaGFuZGxpbmcsIGFuZCBTRElPL1BDSUUgaW50ZXJhY3Rpb24uCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhpcyBmb3IgZnV6emluZyBvcHBvcnR1bml0aWVzLiBUaGUgcHJvbXB0IGZsYWdzICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMmIzM0OyBhcyBhIG5vLWdvIGZvciBmdXp6aW5nIGlmIHRoZXkgcmVxdWlyZSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZS4gIEJ1dCwgYGJyY21mbWFjYCBpcyBhIFdpLUZpIGRyaXZlciwgc28gaXQgdHlwaWNhbGx5IGNvbW11bmljYXRlcyB3aXRoIHBoeXNpY2FsIFdpLUZpIGhhcmR3YXJlLiBCdXQsICpicmNtZm1hYyogYWxzbyBzdXBwb3J0cyBVU0IhIFRoYXQmIzM5O3Mga2V5LiBVU0IgZGV2aWNlcyBjYW4gYmUgcmVhZGlseSBlbXVsYXRlZC4gVVNCIGdhZGdldCwgZHVtbXlfaGNkLCBvciBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enppbmcgKHZoY2kpLgoKTGV0IG1lIGNvbmZpcm0gdGhlIFVTQiBzdXBwb3J0LiBUaGVyZSYjMzk7cyBhIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNgIGZpbGUuIEJpbmdvLiBTbywgc3l6a2FsbGVyIGNvdWxkIGJlIHVzZWQgdG8gZnV6eiB0aGlzIGRyaXZlci4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2hlcy4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBpbiBgY2ZnODAyMTEuY2AgYXJlIHJlbGF0ZWQgdG8gUE1LU0EgY2FjaGUgbWFuYWdlbWVudCwgd2hpY2ggbWlnaHQgYWZmZWN0IGRpZmZlcmVudCBjb21tdW5pY2F0aW9uIGludGVyZmFjZXMuIFRoZSBjaGFuZ2VzIGluIGBjb3JlLmNgIGFmZmVjdCB0aGUgbW9uaXRvciBtb2RlJiMzOTtzIFJTU0kgZGF0YS4gYGZsb3dyaW5nLmNgIG1hbmFnZXMgZmxvdyBjb250cm9sLiBgbXNnYnVmLmNgIGRlYWxzIHdpdGggbWVzc2FnZSBidWZmZXIgc2l6ZS4gYHBjaWUuY2AgdXNlcyBgdXNsZWVwX3JhbmdlYC4gYHNkaW8uY2AgaXMgcmVsYXRlZCB0byBTRElPIGNvbW11bmljYXRpb24uCgpUaGUgcXVlc3Rpb24gdGhlbiBpcyB3aGV0aGVyIGFsbCB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZS4gSWYgY29kZSBpbiBgY2ZnODAyMTEuY2AsIGBjb3JlLmNgLCBgZmxvd3JpbmcuY2AsIGBtc2didWYuY2AsIGBwY2llLmNgLCBhbmQgYHNkaW8uY2AgaXMgcmVhY2hhYmxlIHZpYSBVU0IsIHRoZW4gd2UgaGF2ZSBhIGdvb2QgZnV6emluZyB0YXJnZXQsIGJlY2F1c2Ugd2UgY2FuIGVtdWxhdGUgdGhlIFVTQiBXaS1GaSBkb25nbGUuIE5vdyBJIHdpbGwgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgdGhvc2UgZmlsZXMgYXJlIHVzZWQgYnkgdGhlIFVTQiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZHJpdmVyLiBJZiBzbywgdGhlbiAqV29ydGhGdXp6aW5nPXRydWUqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3VzYl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTE2NT1zdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2J1c19vcHMgYnJjbWZfdXNiX2J1c19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTE3NjpzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTc3LVx0XHRcdFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjI0PWJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNDQ6c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDUtXHRcdFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMwNy1cdC8qIHJlcXVlc3QgZmlybXdhcmUgaGVyZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzMDg6XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMDktXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzNDE9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzNDI6YnJjbWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTM0My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE0NDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTQ0MzpcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cdTAwM2Vkcml2ZXJfaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0NC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1MTE9c3RhdGljIGludCBicmNtZl91c2JfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjE1MjQ6XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFx1MDAyNnVzYi1cdTAwM2VkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTU2NT1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYnJjbWZfdXNiZHJ2ciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTY2LVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTY3Olx0LnByb2JlID0gYnJjbWZfdXNiX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjgtXHQuZGlzY29ubmVjdCA9IGJyY21mX3VzYl9kaXNjb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDQ2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGBicmNtZm1hY2AgRHJpdmVyIHZpYSBVU0I6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgdGhlIGBicmNtZm1hY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdmlhIFVTQi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGEgcmVhY2hhYmxlIGVudHJ5IHBvaW50IHRoYXQgbWlnaHQgYmUgc3VzY2VwdGlibGUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBicmNtZl9wbWtzYV92Ml9vcGAuIEkgd2FudCB0byBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgc29tZXRoaW5nIGludGVyZXN0aW5nIHRoZXJlLgoKSXQgbG9va3MgbGlrZSBgYnJjbWZfcG1rc2FfdjJfb3BgIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgLCBgYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhYCwgYW5kIGBicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYWAuIFJpZ2h0LCB0aGVzZSBhbGwgc2VlbSB0byBiZSBgY2ZnODAyMTFgIGNhbGxiYWNrcy4gVGhhdCBzdWdnZXN0cyBhbiBpbnRlcmZhY2Ugd2UgbWlnaHQgYmUgYWJsZSB0byBsZXZlcmFnZS4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAuIFRoYXQmIzM5O3MgdGhlIG9uZSBJJiMzOTttIG1vc3QgaW50ZXJlc3RlZCBpbiBmb3Igbm93LiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBpbnB1dHMgdG8gdGhhdCB0byBsZWFkIHVzIHRvIHdoYXQgd2Ugd2FudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9jZmc4MDIxMV9zZXRfcG1rc2EmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDQ4MT1zdGF0aWMgczMyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NDgyOmJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ0ODMtXHRcdFx0IHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjA3OD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBicmNtZl9jZmc4MDIxMV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjA5OS1cdC5yZXN1bWUgPSBicmNtZl9jZmc4MDIxMV9yZXN1bWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2MTAwOlx0LnNldF9wbWtzYSA9IGJyY21mX2NmZzgwMjExX3NldF9wbWtzYSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYxMDEtXHQuZGVsX3Bta3NhID0gYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mjc4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBDb2RlKioKCkFscmlnaHQsIHNvIHRoZSBkaXNjdXNzaW9uIGNlbnRlcnMgb24gYGNmZzgwMjExX29wc2AgY2FsbGJhY2tzLiBObyBzdXJwcmlzZXMgdGhlcmU7IHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIG1hYzgwMjExIGludGVyZmFjZSwgYW5kIGEgY29tbW9uIGFyZWEgb2YgZm9jdXMgZm9yIGFueW9uZSB3b3JraW5nIHdpdGggd2lyZWxlc3MgZHJpdmVycy4gSSBpbW1lZGlhdGVseSB0aGluayB0aHJvdWdoIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHM6IGFzc29jaWF0aW9uLCBhdXRoZW50aWNhdGlvbiwgcmVndWxhdG9yeSBkb21haW4gaGFuZGxpbmcsIHRoZSB3b3Jrcy4gSSYjMzk7bSBtZW50YWxseSBjaGVja2luZyBpZiB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIHByb2JsZW0uIElzIGl0IHNvbWV0aGluZyByZWxhdGVkIHRvIHJhdGUgY29udHJvbCwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyBwb3dlciBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgZHJpdmVyPwoKQnV0IHRoZW4gbXkgbWluZCBzaGlmdHMgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbiBJJiMzOTttIGN1cmlvdXMgYWJvdXQuIFdoYXQgYWJvdXQgYGJyY21mX25ldGlmX21vbl9yeGA/IFRoYXQgdGhyb3dzIGEgZGlmZmVyZW50IGxpZ2h0IG9uIHRoaW5ncy4gVGhpcyBpbXBsaWVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9uaXRvcmluZyBtb2RlIGZ1bmN0aW9uYWxpdHkgZm9yIGEgQnJvYWRjb20gZHJpdmVyLCBvciBzb21ldGhpbmcgdGhhdCYjMzk7cyBCcm9hZGNvbS1zcGVjaWZpYy4gV2UgbXVzdCBiZSBsb29raW5nIGF0IHBhY2tldCByZWNlcHRpb24gaW4gcHJvbWlzY3VvdXMgbW9kZSBvciBtb25pdG9yIG1vZGUuIFRoYXQgbmFycm93cyBkb3duIHRoZSBwb3NzaWJpbGl0aWVzIGFuZCBzdWdnZXN0cyBhIHBvdGVudGlhbCBhcmVhIGZvciBpbnZlc3RpZ2F0aW5nIGEgcG90ZW50aWFsIGlzc3VlLCBwZXJoYXBzIHBhY2tldCBpbmplY3Rpb24sIG9yIHNuaWZmaW5nLiBNeSB0aGlua2luZyBqdW1wcyBmcm9tIHRoZSBnZW5lcmFsIGBjZmc4MDIxMV9vcHNgIHRvIHNvbWV0aGluZyBtdWNoIG1vcmUgc3BlY2lmaWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9NDM0PXN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6NDM5OnZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00NDAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg9MjIwPXZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaDoyMjE6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaC0yMjItdm9pZCBicmNtZl9uZXRfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGxvY2tlZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTEyMDA9YnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTI0MTpcdFx0YnJjbWZfbmV0aWZfbW9uX3J4KGlmcCwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQyLVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMzIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgQlJDTUYgRHJpdmVyIEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRyYWNraW5nIHRoaXMgYGJyY21mX25ldGlmX21vbl9yeGAgZnVuY3Rpb24uLi4gYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYGJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gU3RhbmRhcmQgcmVjZWl2ZSBwYXRoIHByb2Nlc3NpbmcuIE5vdywgYSBsaXR0bGUgZmxhZyBnb2VzIHVwLiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCBgbXNnYnVmLmNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBjb250ZXh0IHJpZ2h0LiBUaGF0IGZpbGUgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGRhdGEgaXMgaGFuZGxlZCwgYW5kIEkgbmVlZCB0byByZWNhbGwgZXhhY3RseSBob3cgaXQmIzM5O3MgdXNlZCB3aXRoIFBDSWUuIERvZXMgaXQgaGFuZGxlIGRhdGEgYmVpbmcgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0d29yayB0aHJvdWdoIFBDSWU/IFllcywgdGhhdCYjMzk7cyByaWdodC4gQnV0IHdoYXQgYWJvdXQgVVNCPyBEb2VzIHRoZSBVU0Igc3RhY2sgKmFsc28qIGxldmVyYWdlIGBtc2didWYuY2AgZm9yIGl0cyBjb21tdW5pY2F0aW9uPyBJIG5lZWQgdG8gY2hlY2sgdGhhdC4gVGhlIG1lc3NhZ2UgYnVmZmVyIGFyY2hpdGVjdHVyZSBpcyBvZnRlbiBzaGFyZWQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3BlY2lmaWNzIG9mIGhvdyBpdCYjMzk7cyBlbXBsb3llZCBhY3Jvc3MgZGlmZmVyZW50IHVuZGVybHlpbmcgdHJhbnNwb3J0IGxheWVycywgc28gSSBkb24mIzM5O3QgY29uZnVzZSB0aGUgZGF0YSBmbG93IGxhdGVyLiBUaGlzIGRldGFpbCBjb3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgSSBpbnRlcnByZXQgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTE5OT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEyMDA6YnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTIwMS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTEzNDE9c3RhdGljIHZvaWQgYnJjbWZfbXNnYnVmX3Byb2Nlc3NfbXNndHlwZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHZvaWQgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTM4MC1cdFx0YnJjbWZfZGJnKE1TR0JVRiwgXCYjMzQ7TVNHQlVGX1RZUEVfUlhfQ01QTFRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEzODE6XHRcdGJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlKG1zZ2J1ZiwgYnVmKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMzgyLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MTUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGJyY21mbWFjIFVTQiBhbmQgbXNnYnVmLmMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYGJyY21mbWFjYCBhbmQgaXRzIFVTQiBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCBgbXNnYnVmLmNgIHBsYXlzIGEgcm9sZSBpbiBpdC4gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24gYmVjYXVzZSBgbXNnYnVmLmNgIG9mdGVuIGhhbmRsZXMgbWVzc2FnZSBidWZmZXJpbmcgYW5kIHF1ZXVpbmcsIHdoaWNoIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIFVTQiBjb21tdW5pY2F0aW9uLCBlc3BlY2lhbGx5IHdpdGggY29tcGxleCBkcml2ZXJzLiBJZiBpdCAqaXMqIHVzZWQsIEkgY2FuIGxldmVyYWdlIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiBgbXNnYnVmLmNgIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyB0byBnZXQgYSBtdWNoIGZhc3RlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVVNCIGludGVyZmFjZSBvcGVyYXRlcy4gSWYgaXQmIzM5O3MgKm5vdCogdXNlZCwgSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBhbHRlcm5hdGl2ZSBidWZmZXJpbmcgbWVjaGFuaXNtcyBvciBkaXJlY3QgbWVzc2FnZSBoYW5kbGluZyB3aXRoaW4gdGhlIGBicmNtZm1hY2AgVVNCIGNvZGUsIHdoaWNoIG1pZ2h0IHBvaW50IHRvIGEgbGVzcyBjb252ZW50aW9uYWwgYXBwcm9hY2gsIGJ1dCBwb3RlbnRpYWxseSBvbmUgdGhhdCYjMzk7cyBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLiBFaXRoZXIgd2F5LCBmaWd1cmluZyB0aGlzIG91dCBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21zZ2J1ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDk4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgRHJpdmVyIExhbmRzY2FwZSoqCgpIbW0sIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFVTQiBzdGFjay4uLiBhbmQgSSYjMzk7bSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBsb3dlci1sZXZlbCBkcml2ZXIgY29tcG9uZW50cy4gSXMgaXQgcG9zc2libGUgdGhhdCB0aGUgY29kZSByZWxhdGVkIHRvIFVTQiYjMzk7cyAqYnVsayBjb21wbGV0ZSBkYXRhIGNvbnRleHQqIC0gYGJjZGMuY2AgLSBpcywgaW4gZmFjdCwgcmVsZXZhbnQgaGVyZT8gSXQmIzM5O3MgYSBmdXp6eSBtZW1vcnksIGJ1dCBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHBvc3NpYmlsaXRpZXMgYW5kIGNvbnNpZGVyaW5nIGlmIHRoaXMgaXMgdGhlIGNvcnJlY3QgcGxhY2UgdG8gZm9jdXMuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIG1vZHVsZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBkYXRhIHRyYW5zZmVycyBhbmQgaWYgdGhhdCBjb21wb25lbnQgcHJvdmlkZXMgdGhlIGZyYW1ld29yayBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JjZGMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTIwLSNpbmNsdWRlIFwmIzM0O2NvbW1vbi5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MjE6I2luY2x1ZGUgXCYjMzQ7YmNkYy5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMjItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTQ4NT1zdGF0aWMgdm9pZCBicmNtZl91c2JfdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy00OTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6NDk1Olx0YnJjbWZfcHJvdG9fYmNkY190eGNvbXBsZXRlKGRldmluZm8tXHUwMDNlZGV2LCByZXEtXHUwMDNlc2tiLCB1cmItXHUwMDNlc3RhdHVzID09IDApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTQ5Ni1cdHJlcS1cdTAwM2Vza2IgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy01MDAtXHRcdGRldmluZm8tXHUwMDNldHhfZmxvd2Jsb2NrKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6NTAxOlx0XHRicmNtZl9wcm90b19iY2RjX3R4Zmxvd2Jsb2NrKGRldmluZm8tXHUwMDNlZGV2LCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNTAyLVx0XHRkZXZpbmZvLVx1MDAzZXR4X2Zsb3dibG9jayA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz02MDg9c3RhdGljIGludCBicmNtZl91c2JfdHgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy02NTItXHQgICAgIWRldmluZm8tXHUwMDNldHhfZmxvd2Jsb2NrKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6NjUzOlx0XHRicmNtZl9wcm90b19iY2RjX3R4Zmxvd2Jsb2NrKGRldiwgdHJ1ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNjU0LVx0XHRkZXZpbmZvLVx1MDAzZXR4X2Zsb3dibG9jayA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTI0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKk5ldHdvcmsgSW50ZXJmYWNlIENvbnRyb2xsZXIgRHJpdmVyIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IG91ciBuZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVycyBhcmUgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSBob3cgdGhlIGRyaXZlcnMgYXJlIHN0cnVjdHVyZWQuIEl0IGxvb2tzIGxpa2UgYm90aCBVU0IgYW5kIFNESU8gYXJlIGxlYW5pbmcgb24gYGJjZGMuY2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBzaGFyZWQgY29yZSBmb3IgdGhlc2UgaW50ZXJmYWNlIHR5cGVzLiBUaGVuIEkgc2VlIFBDSWUgaXMgdXRpbGl6aW5nIGBtc2didWYuY2Agd2hpY2gsIG9uIGl0cyBmYWNlLCBzZWVtcyB0byBoYW5kbGUgYSB2ZXJ5IGRpZmZlcmVudCB0eXBlIG9mIGNvbW11bmljYXRpb24uIEFoLCBidXQgd2FpdCBhIG1pbnV0ZSwgSSYjMzk7bSBub3RpbmcgdGhhdCBgZmxvd3JpbmcuY2AgaXMgYmVpbmcgdXNlZCBieSBib3RoIGBtc2didWYuY2AgYW5kIGBwY2llLmNgLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IHNwYXJraW5nIGEgcXVlc3Rpb246IGlzIHRoZXJlIGFueSBjaGFuY2UgdGhhdCBgZmxvd3JpbmcuY2AgaXMgYWxzbyB1c2VkICppbmRpcmVjdGx5KiBieSBVU0I/IFRoZSBzaGFyZWQgdXNlIG9mIGBiY2RjLmNgIGFuZCBhIHBvdGVudGlhbCBwYXRoIHRvIGBmbG93cmluZy5jYCBoYXMgZ290IG1lIHRoaW5raW5nIGFib3V0IGRlZXBlciBhcmNoaXRlY3R1cmFsIGNvbW1vbmFsaXRpZXMgdGhhbiBhcmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZGVwZW5kZW5jeSBjaGFpbiBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zsb3dyaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNjIKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQ29kZSBEZXBlbmRlbmNpZXM6IGZsb3dyaW5nLmMgYW5kIGJjZGMuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uICpmbG93cmluZy5jKi4gSSYjMzk7bSB3b3JraW5nIG9uIHNvbWV0aGluZyB0aGF0IHRvdWNoZXMgdGhlIGRhdGEgZmxvdywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbW9kdWxlJiMzOTtzIHJvbGUuIEhtbSwgSSBoYXZlIGEgZmVlbGluZyBgYmNkYy5jYCBtaWdodCBiZSB0aGUgcGxhY2UgdG8gbG9vayBmb3IgdGhhdCBpbnRlcmFjdGlvbi4gVGhlIHdheSBJJiMzOTt2ZSBzdHJ1Y3R1cmVkIG15IGFuYWx5c2lzIHVzdWFsbHkgZ29lcyBsaWtlIHRoaXMgLSBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGBmbG93cmluZy5jYCBpcyBhY3R1YWxseSAqdXNlZCogYnkgYGJjZGMuY2AuIEl0JiMzOTtzIGEgY29tbW9uIGRlcGVuZGVuY3kgcGF0dGVybiwgYnV0IEkgbmVlZCB0byBjb25maXJtIGl0IHNwZWNpZmljYWxseSBpbiB0aGlzIGNhc2UuIEnigJlsbCBzdGFydCBieSBkaWdnaW5nIGludG8gYGJjZGMuY2AgYW5kIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGNhbGxzLCBpbmNsdWRlcywgb3IgYW55IHJlZmVyZW5jZXMgdG8gYGZsb3dyaW5nLmNgJiMzOTtzIHN5bWJvbHMgb3IgZGF0YSBzdHJ1Y3R1cmVzLiBJIHdhbnQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIG1vZHVsZXMgcmVsYXRlLiBQZXJoYXBzIEkmIzM5O2xsIHVzZSBncmVwLCBjdGFncywgb3IgbXkgSURFJiMzOTtzIGJ1aWx0LWluIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG8gcXVpY2tseSBzZWUgaWYgdGhlIGluY2x1c2lvbiBleGlzdHMuIElmIGl0IGRvZXMsIHRoZW4gdGhlIHdvcmsgaXMgdGhhdCBtdWNoIGVhc2llci4gSWYgbm90LCB0aGVuIEkmIzM5O2xsIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93cmluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY2RjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYxMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJyb2FkY29tIFdpRmkgRHJpdmVyIENhbGwgR3JhcGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGRyaXZlciBmaWxlcywgYW5kIGl0JiMzOTtzIHF1aWNrbHkgYmVjb21pbmcgY2xlYXIgaG93IHRoaW5ncyBhcmUgc3RydWN0dXJlZC4gSXQgbG9va3MgbGlrZSBgZmxvd3JpbmcuY2AsIGBtc2didWYuY2AsIGFuZCBgcGNpZS5jYCBhcmUgYWxsIHByZXR0eSBzcGVjaWZpY2FsbHkgdGllZCB0byB0aGUgUENJZSBpbXBsZW1lbnRhdGlvbi4gQnV0IGhhbmcgb24uLi4gSSBzZWUgYGJyY21mX3Bta3NhX3YyX29wYCwgd2hpY2ggc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBhIGxvd2VyLWxldmVsIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCBQTUtTQSwgYW5kIHRoYXQmIzM5O3MgKmFjdHVhbGx5KiBkZWZpbmVkIGluIGBjZmc4MDIxMS5jYC4gVGhhdCYjMzk7cyB0aGUgZ2VuZXJpYyB3aXJlbGVzcyBjb25maWd1cmF0aW9uIGxpYnJhcnksIHNvIGl0JiMzOTtzIHByb2JhYmx5IHNoYXJlZCBhY3Jvc3MgZGlmZmVyZW50IGhhcmR3YXJlIHBsYXRmb3Jtcy4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYGJyY21mX25ldGlmX21vbl9yeGAgd2hpY2ggaXMgYWxzbyBkZWZpbmVkIGluIGEgZ2VuZXJpYyBmaWxlLCBgY29yZS5jYC4KCk5vdyB0aGluZ3MgYXJlIGdldHRpbmcgaW50ZXJlc3RpbmcuIFRoZSB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBicmNtZl9uZXRpZl9tb25fcnhgIGNhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXM6IHRoZSBQQ0llLXNwZWNpZmljIGBtc2didWYuY2AsIGFuZCBhbHNvIGZyb20gYGJjZGMuY2Agd2hpY2gsIGlmIEkgcmVjYWxsLCBkZWFscyB3aXRoIFVTQiBhbmQgU0RJTyBpbnRlcmZhY2VzLiBCdXQgaXMgdGhhdCByaWdodD8gRG9lcyBgYmNkYy5jYCAqcmVhbGx5KiBjYWxsIGBicmNtZl9uZXRpZl9tb25fcnhgPyBPciBpcyBpdCBVU0Itc3BlY2lmaWMgYHVzYi5jYCBvciBTRElPLXNwZWNpZmljIGBzZGlvLmNgIHRoYXQmIzM5O3MgY2FsbGluZyBpdD8gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2Ugc291cmNlIGZpbGVzIHRvIHZlcmlmeSB0aGUgY2FsbCBncmFwaC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9uZXRpZl9tb25fcngmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz00MzQ9c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNDM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzo0Mzk6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQ0MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaD0yMjA9dm9pZCBicmNtZl9uZXRpZl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oOjIyMTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTIyMi12b2lkIGJyY21mX25ldF9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgbG9ja2VkKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTIwMD1icmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHZvaWQgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTI0MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMjQxOlx0XHRicmNtZl9uZXRpZl9tb25fcngoaWZwLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDItXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NDkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUENJZSBGb2N1cyBhbmQgU0RJTyBVbmNlcnRhaW50aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBicmNtZl9uZXRpZl9tb25fcnhgIGZ1bmN0aW9uIGFuZCB0aGUgY29kZSBjbGVhcmx5IHNob3dzIHRoYXQgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgbXNnYnVmLmNgLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIHByZXR0eSBkZWZpbml0aXZlIC0gaXQgbG9va3MgbGlrZSBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBQQ0llLiBCdXQgd2hhdCBhYm91dCBTRElPPyBJIHdhcyBwcmV0dHkgc3VyZSBpdOKAmXMgaW4gYHNkaW8uY2AsIGlzbiYjMzk7dCBpdD8KClRoZSBzdGFuZGFyZCBRRU1VIHNldHVwIGRvZXNuJiMzOTt0IGVtdWxhdGUgU0RJTywgc28gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gSGFuZyBvbiwgSSBzZWVtIHRvIHJlY2FsbCBzb21lIGZ1enppbmcgd29yayB3aXRoIHN5emthbGxlci4uLiBtYXliZSB0aGVyZSYjMzk7cyBzb21lIFNESU8gc3R1ZmYgaW4gdGhlcmU/IE5vLCBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGRvZXNuJiMzOTt0IGhhdmUgaXQuIE9yIGRvZXMgaXQ/IEl0JiMzOTtzIGJlZW4gYSB3aGlsZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrLiBUaGUgYmVzdCB3YXkgd291bGQgYmUgdG8gbG9vayBmb3IgU0RJTyBwc2V1ZG8tc3lzY2FsbHMuIFRoYXQmIzM5O3MgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDI0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFJlYWNoYWJpbGl0eSBvZiBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCB2aWEgU3l6a2FsbGVyKioKCk9rYXksIGZpcnN0IG9mZiwgSSBjYW4mIzM5O3QganVzdCB1c2UgYGdyZXBwZXJgIG9uIGBzeXMvbGludXgvYCBiZWNhdXNlIHRob3NlIGFyZW4mIzM5O3Qga2VybmVsIHRyZWUgcGF0aHMuIEFuZCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gdXNlIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIHdoaWNoLCBmb3Igc29tZSByZWFzb24sIGFyZW4mIzM5O3QgaW4gdGhlIGF2YWlsYWJsZSB0b29sIGxpc3QhIEJ1dCBJIGdldCBpdCwgSSBjYW4mIzM5O3Qgc2VhcmNoIGZvciBzeXprYWxsZXIgc3BlY3Mgd2l0aCB0aGlzLiBBbnl3YXksIEkgZG9uJiMzOTt0IGFjdHVhbGx5IG5lZWQgdG8sIEkga25vdyBzeXprYWxsZXIgaGl0cyBVU0IgYW5kIGBtYWM4MDIxMV9od3NpbWAgYWxyZWFkeS4KClJpZ2h0LCBgYnJjbWZtYWNgLi4udGhhdCYjMzk7cyBhIGZ1bGxtYWMgZHJpdmVyLCBzbyBpdCBnb2VzIHRocm91Z2ggYGNmZzgwMjExYCwgbm90IGBtYWM4MDIxMWAuIFN5emthbGxlciBoaXRzIGBjZmc4MDIxMWAgdGhyb3VnaCBuZXRsaW5rIChgbmw4MDIxMWApLiBTbywgdGhlb3JldGljYWxseSwgaWYgYSBgYnJjbWZtYWNgIGRldmljZSBpcyBwcmVzZW50LCBJIGNhbiByZWFjaCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCB2aWEgbmw4MDIxMS4gQ3J1Y2lhbGx5LCBjYW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaGF2ZSBhIGBicmNtZm1hY2AgZGV2aWNlPwoKQWhhISBVU0IhIFN5emthbGxlciBoYXMgYSBVU0IgZnV6emVyIGFuZCBjYW4gZW11bGF0ZSBpdC4gVGhlIFVTQiByb3V0ZSBpcyBteSBiZXN0IGJldC4gTm93IEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGBicmNtZm1hY2AgVVNCIGRyaXZlciBhY3R1YWxseSByZWdpc3RlcnMgd2l0aCBgY2ZnODAyMTFgLiBMZXQmIzM5O3Mgc2VlLi4uIGBicmNtZl91c2JfcHJvYmVgIGxvb2tzIHByb21pc2luZy4gQW5kIHllcywgaXQmIzM5O3MgdGhlcmUuIFRoYXQgdGhlbiBjYWxscyBgYnJjbWZfdXNiX3Byb2JlX2NiYCwgd2hpY2gsIGluIHR1cm4sIGdvZXMgdGhyb3VnaCBgYnJjbWZfYXR0YWNoYCwgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAsIGFuZCBldmVudHVhbGx5IGB3aXBoeV9uZXdgIGFuZCBgd2lwaHlfcmVnaXN0ZXJgLiBTbywgd2hlbiBzeXprYWxsZXIgZW11bGF0ZXMgYSBCcm9hZGNvbSBVU0IgV2ktRmkgZG9uZ2xlLCBgYnJjbWZfdXNiX3Byb2JlYCAqc2hvdWxkKiBiZSB0cmlnZ2VyZWQsIGNyZWF0aW5nIGEgYHdpcGh5YC4gVGhlbiwgc3l6a2FsbGVyIGNhbiBoaXQgdGhhdCBgd2lwaHlgIHdpdGggbmw4MDIxMSBjb21tYW5kcywgd2hpY2ggc2hvdWxkIGxhbmQgb24gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAuCgpCdXQsIHdhaXQuLi4gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgY2FsbHMgYGJyY21mX3Bta3NhX3YyX29wYCBvbmx5IGlmIGBCUkNNRl9GRUFUX1BNS0lEX1YyYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIHdoZXJlIHRoYXQgZmxhZyBpcyBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSQ01GX0ZFQVRfUE1LSURfVjImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDQ4Mj1icmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDUwMC1cdFx0cmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgcG1rc2EsIHRydWUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDUwMTpcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1MDItXHRcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIHRydWUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQ1Mjc9YnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1NDQtXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NTQ1Olx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDU0Ni1cdFx0cmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBwbWtzYSwgZmFsc2UpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQ1NzQ9YnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDU4NS1cdFx0cmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgTlVMTCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDU4NjpcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1ODctXHRcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgTlVMTCwgZmFsc2UpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM9MTM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfZmVhdF93bGNmZWF0IGJyY21mX2ZlYXRfd2xjZmVhdF9tYXBbXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MTM4Olx0eyAxMiwgMCwgQklUKEJSQ01GX0ZFQVRfUE1LSURfVjIpIH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTEzOS1cdHsgMTMsIDAsIEJJVChCUkNNRl9GRUFUX1BNS0lEX1YzKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3NQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBGZWF0dXJlIEVuYWJsZW1lbnQgaW4gQnJvYWRjb20gV2lGaSBEcml2ZXJzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIGdldHRpbmcgc2V0IHVwIGJhc2VkIG9uIHdoYXQgdGhlIGZpcm13YXJlIHNheXMgaXQgc3VwcG9ydHMsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgdGhpcyBgYnJjbWZfZmVhdF93bGNmZWF0X21hcGAgdGhpbmcuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZCBmZWF0dXJlIGZsYWcgaGFuZGxpbmcuIFRoZSBleGNpdGluZyBwYXJ0IGlzIHRoYXQgdGhlIFN5emthbGxlciBVU0IgZnV6emVyIGlzIGNhcGFibGUgb2YgdHJpY2tpbmcgdGhlIHN5c3RlbSBpbnRvICpiZWxpZXZpbmcqIHRoZSBmaXJtd2FyZSBzdXBwb3J0cyB0aGlzIGZlYXR1cmUgKGZlYXR1cmUgMTIpLCB0aGVyZWZvcmUgZW5hYmxpbmcgYEJSQ01GX0ZFQVRfUE1LSURfVjJgLiBUaGlzIG1lYW5zIHRoYXQgY29kZSBwYXRoIGludm9sdmluZyBgYnJjbWZfcG1rc2FfdjJfb3BgIGJlY29tZXMgYWNjZXNzaWJsZSBhbmQgdGhlcmVmb3JlIGZ1enphYmxlLiBUaGlzIGlzIGdvb2QgbmV3cywgZnV6emFibGUgaXMgZXhwbG9pdGFibGUuCgpCdXQgaG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgcGl2b3QgaGVyZS4uLiB3aGF0IGFib3V0IHRoZSBgYnJjbXNtYWNgIGRyaXZlcj8gVGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jYC4gT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHdoYXQgdGhpcyBgYnJjbXNtYWNgIGlzIGFsbCBhYm91dC4gQWgsIHJpZ2h0LiBJdCYjMzk7cyB0aGUgbWFjODAyMTEgZHJpdmVyIGZvciB0aG9zZSBvbGRlciBCcm9hZGNvbSBQQ0llIGNhcmRzIOKAkyBzcGVjaWZpY2FsbHkgdGhlIEJDTTQzMTMsIEJDTTQzMjI0LCBCQ000MzIyNSBjaGlwcy4gTm93LCBhbSBJIHJlbWVtYmVyaW5nIGNvcnJlY3RseSB0aGF0IHRoaXMgaXMgUENJZSAqb25seSo/IFRoYXQgZGV0YWlsIGNvdWxkIGJlIGltcG9ydGFudCB3aGVuIGNvbnNpZGVyaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS4gTmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhpcyBmYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMxOD1zdGF0aWMgREVDTEFSRV9XT1JLKGJyY21zX2RyaXZlcl93b3JrLCBicmNtc19kcml2ZXJfaW5pdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzE5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTMyMDpzdGF0aWMgaW50IF9faW5pdCBicmNtc19tb2R1bGVfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTMyMS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMzNj1zdGF0aWMgdm9pZCBfX2V4aXQgYnJjbXNfbW9kdWxlX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzQyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTM0Mzptb2R1bGVfaW5pdChicmNtc19tb2R1bGVfaW5pdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzQ0LW1vZHVsZV9leGl0KGJyY21zX21vZHVsZV9leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNDUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBicmNtc19tb2R1bGVfaW5pdGAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiAmIzM0O0xldCYjMzk7cyBjaGVjayBgYnJjbXNfbW9kdWxlX2luaXRgLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgZW50cnkgZnVuY3Rpb24gZm9yIHRoZSBCcm9hZGNvbSB3aXJlbGVzcyBkcml2ZXIsIHJpZ2h0PyBTbywgSSYjMzk7bSB0aGlua2luZywgdGhpcyBpcyB3aGVyZSBpdCBhbGwgYmVnaW5zLiBXaGVyZSB0aGUgZHJpdmVyIGdldHMgbG9hZGVkLCBtZW1vcnkgaXMgYWxsb2NhdGVkLCBoYXJkd2FyZSBpcyBpbml0aWFsaXplZCwgYW5kIGludGVycnVwdHMgYXJlIHNldCB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIGdyb3VuZCBsZXZlbCwgYmVmb3JlIGFueSBoaWdoZXItbGV2ZWwgYWJzdHJhY3Rpb25zIGtpY2sgaW4uIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSBleGFjdGx5IGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgdGhpcyBzcGVjaWZpYyBjaGlwLiBUaGlzIGlzIGFsd2F5cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB3aGVuIHdvcmtpbmcgb24gYSBuZXcgcGxhdGZvcm0gb3IgdHJvdWJsZXNob290aW5nIGFuIGluaXRpYWxpemF0aW9uIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtc19tb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMxOD1zdGF0aWMgREVDTEFSRV9XT1JLKGJyY21zX2RyaXZlcl93b3JrLCBicmNtc19kcml2ZXJfaW5pdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzE5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTMyMDpzdGF0aWMgaW50IF9faW5pdCBicmNtc19tb2R1bGVfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTMyMS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMzNj1zdGF0aWMgdm9pZCBfX2V4aXQgYnJjbXNfbW9kdWxlX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzQyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTM0Mzptb2R1bGVfaW5pdChicmNtc19tb2R1bGVfaW5pdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzQ0LW1vZHVsZV9leGl0KGJyY21zX21vZHVsZV9leGl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3NjAKCQkJCQkJCW91dHB1dDogNjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGJyY21zX21vZHVsZV9pbml0YCwgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogYnJjbXNfbW9kdWxlX2luaXQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBndXRzIG9mIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgYGJyY21zX21vZHVsZV9pbml0YC4gSW1tZWRpYXRlbHksIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYSBmZXcgdGhpbmdzIGJhc2VkIG9uIHRoZSBuYW1lLiBUaGlzIGlzIGxpa2VseSB0aGUgZmlyc3QgcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBCcm9hZGNvbSB3aXJlbGVzcyBkcml2ZXIsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGxvdCBvZiBmb3VuZGF0aW9uYWwgc2V0dXAuIFRoaW5raW5nIGJhY2sgdG8gcGFzdCBleHBlcmllbmNlcywgSSYjMzk7bSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbnMsIGRldmljZSByZWdpc3RyYXRpb24sIGFuZCBwZXJoYXBzIHNvbWUgZWFybHkgaGFyZHdhcmUgcHJvYmluZyBvciBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGRyaXZlciBsb2FkaW5nLCB0b28sIGFzIEkmIzM5O3ZlIHNlZW4gdGhvc2UgYml0ZSBiZWZvcmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMxNTpcdFx0XHRwcl9lcnIoXCYjMzQ7JXM6IHJlZ2lzdGVyIHJldHVybmVkICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgZXJyb3IpO1xuMTMxNjpcdH1cbjEzMTc6XHRcbjEzMTg6XHRzdGF0aWMgREVDTEFSRV9XT1JLKGJyY21zX2RyaXZlcl93b3JrLCBicmNtc19kcml2ZXJfaW5pdCk7XG4xMzE5Olx0XG4xMzIwOlx0c3RhdGljIGludCBfX2luaXQgYnJjbXNfbW9kdWxlX2luaXQodm9pZClcbjEzMjE6XHR7XG4xMzIyOlx0XHRicmNtc19kZWJ1Z2ZzX2luaXQoKTtcbjEzMjM6XHRcdGlmICghc2NoZWR1bGVfd29yayhcdTAwMjZicmNtc19kcml2ZXJfd29yaykpXG4xMzI0Olx0XHRcdHJldHVybiAtRUJVU1k7XG4xMzI1Olx0XG4xMzI2Olx0XHRyZXR1cm4gMDtcbjEzMjc6XHR9XG4xMzI4Olx0XG4xMzI5Olx0LypcbjEzMzA6XHQgKiBUaGlzIGZ1bmN0aW9uIHVubG9hZHMgdGhlIGJyY21zbWFjIGRyaXZlciBmcm9tIHRoZSBzeXN0ZW0uXG4xMzMxOlx0ICpcbjEzMzI6XHQgKiBUaGlzIGZ1bmN0aW9uIHVuY29uZGl0aW9uYWxseSB1bmxvYWRzIHRoZSBicmNtc21hYyBkcml2ZXIgbW9kdWxlIGZyb20gdGhlXG4xMzMzOlx0ICogc3lzdGVtLlxuMTMzNDpcdCAqXG4xMzM1Olx0ICovXG4xMzM2Olx0c3RhdGljIHZvaWQgX19leGl0IGJyY21zX21vZHVsZV9leGl0KHZvaWQpXG4xMzM3Olx0e1xuMTMzODpcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZicmNtc19kcml2ZXJfd29yayk7XG4xMzM5Olx0XHRiY21hX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmJyY21zX2JjbWFfZHJpdmVyKTtcbjEzNDA6XHRcdGJyY21zX2RlYnVnZnNfZXhpdCgpO1xuMTM0MTpcdH1cbjEzNDI6XHRcbjEzNDM6XHRtb2R1bGVfaW5pdChicmNtc19tb2R1bGVfaW5pdCk7XG4xMzQ0Olx0bW9kdWxlX2V4aXQoYnJjbXNfbW9kdWxlX2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQyMgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgYSBWZXJkaWN0IG9uIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZSBgYmNtYV9kcml2ZXJgIHJlZ2lzdHJhdGlvbi4gQkNNQSBpcyBCcm9hZGNvbSYjMzk7cyBpbnRlcm5hbCBidXMsIHR5cGljYWxseSBQQ0llIG9yIFNvQy4gVGhlIGZhY3QgdGhhdCBgYnJjbXNtYWNgIGlzIGEgUENJZS9Tb0MgZHJpdmVyIHJhaXNlcyBhIHJlZCBmbGFnIHJpZ2h0IGF3YXkgYmVjYXVzZSBzdGFuZGFyZCBRRU1VIG1pZ2h0IG5vdCBlbXVsYXRlIHRoZSBuZWNlc3NhcnkgUENJZSBkZXZpY2UuIEkgbmVlZCB0byBiZSBjYXJlZnVsOyB0aGUgcHJvbXB0IHN0YXRlcyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIHRhcmdldHMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoL1NtYXJ0TklDL0dQVSBkcml2ZXJzIHdoaWNoIGFyZSB1bmxpa2VseSB0byBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKQnV0IHdhaXQsIHRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBpbiBgYnJjbWZtYWNgLCBhbmQgdGhhdCBoYXMgVVNCIHN1cHBvcnQsIGFuZCBzeXprYWxsZXIgKmRvZXMqIGZ1enogdGhhdC4gVGhlIGBicmNtc21hY2AgY2hhbmdlIGxvb2tzIGxpa2UgYSBjb21tZW50IHVwZGF0ZSwgYSBzbWFsbCB1cGRhdGUgb24gYGFtcGR1LmNgISBTbywgdGhlIHJlYWwgZm9jdXMgaXMgb24gYGJyY21mbWFjYC4KCk5vdywgbGV0JiMzOTtzIGRpc3NlY3QgdGhlIGBicmNtZm1hY2AgY2hhbmdlcy4KMS4gIGBicmNtZl9kZWxheWAgaXMgbW9kaWZpZWQgdG8gdXNlIGB1c2xlZXBfcmFuZ2VgIG9yIGBtc2xlZXBgIGluc3RlYWQgb2YgYG1kZWxheWAuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgYSBzbGVlcCBvcGVyYXRpb24sIG5vdCBhIGJ1c3kgd2FpdC4gVGhpcyBpcyByZWFjaGFibGUsIG9idmlvdXNseS4KMi4gIGBicmNtZl9wbWtzYV92Ml9vcGAgaXMgYWRkZWQgYW5kIGNhbGxlZCBmcm9tIGEgZmV3IGV4aXN0aW5nIGZ1bmN0aW9ucy4gVGhpcyBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgYSBuZXcgZmVhdHVyZSwgVjIgUE1LU0EgY2FjaGUgc3VwcG9ydC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEsIHdoaWNoIHN5emthbGxlciBjYW4gdXNlIHZpYSBVU0IuCjMuICBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBpbiBgY29yZS5jYCwgYnV0IGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gYG1zZ2J1Zi5jYCAoUENJZSBvbmx5KS4gSG1tLCBpcyBgbXNnYnVmLmNgIHJlYWNoYWJsZT8gSXQgc2VlbXMgb25seSBpZiB3ZSBoYXZlIGEgUENJZSBkZXZpY2UgcHJlc2VudC4gQ2FuIHN5emthbGxlciBlbXVsYXRlIEJyb2FkY29tIFBDSWUgZGV2aWNlcz8gVXN1YWxseSBub3QsIHVubGVzcyBpdCYjMzk7cyBhIGdlbmVyaWMgUENJIGRldmljZSwgb3IgUUVNVSBoYXMgc3BlY2lmaWMgZW11bGF0aW9uLiBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIEJyb2FkY29tIFdpLUZpIFBDSWUgY2FyZHMuCiAgICBTaW1pbGFybHksIGBicmNtZl9mbG93cmluZ19ibG9ja2AgKGluIGBmbG93cmluZy5jYCksIGBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhYCAoaW4gYG1zZ2J1Zi5jYCksIGFuZCBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgIChpbiBgcGNpZS5jYCkgYXJlIGFsbCBQQ0llLW9ubHkuIGBicmNtZl9zZGlvX3J4Z2xvbWAgKGluIGBzZGlvLmNgKSBpcyBTRElPIG9ubHksIHdoaWNoIGlzIG5vdCB3aGF0IHdlIGFyZSBsb29raW5nIGZvci4KClNvLCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgd2l0aCBVU0IgZnV6emluZywgdGhlIG9ubHkgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgYGJyY21mX2RlbGF5YCBhbmQgYGJyY21mX3Bta3NhX3YyX29wYC4KCkxldCYjMzk7cyBjb25maXJtIHRoYXQgYGJyY21mX3Bta3NhX3YyX29wYCAqaXMqIHJlYWNoYWJsZSB2aWEgVVNCLiBJdCBpcy4gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgaXMgYSBgY2ZnODAyMTFfb3BzYCBjYWxsYmFjayBhbmQgY2FsbGVkIGZyb20gYG5sODAyMTFfc2V0X3Bta3NhYC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHdoaWNoIHN5emthbGxlciB1c2VzLiBUaGlzIHJlcXVpcmVzIGEgYHdpcGh5YCBkZXZpY2UuIFRoZSBgYnJjbWZtYWNgIFVTQiBkcml2ZXIgKmRvZXMqIHJlZ2lzdGVyIGEgYHdpcGh5YCBkdXJpbmcgcHJvYmUhIFNvLCBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enplciBjYW4gZW11bGF0ZSBhIGBicmNtZm1hY2AgVVNCIGRldmljZSwgYW5kIHRoZW4gc2VuZCBgTkw4MDIxMV9DTURfU0VUX1BNS1NBYCB0byB0aGlzIGB3aXBoeWAuIFRoYXQgd2lsbCBjYWxsIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgLiBJZiB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSAqcmVwb3J0cyogYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGluIGl0cyBmaXJtd2FyZSBmZWF0dXJlcywgdGhlbiBgYnJjbWZfcG1rc2FfdjJfb3BgICp3aWxsKiBiZSBjYWxsZWQuIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nIQoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBgYnJjbWZtYWNgIFVTQi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJDTUZNQUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzEwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIHRoZSBicmNtZm1hYyBLY29uZmlnKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgb24gdGhlIGBLY29uZmlnYCBmaWxlIGZvciBgYnJjbWZtYWNgLiBObyBtZXNzaW5nIGFyb3VuZCBoZXJlLiBUaGlzIGlzbiYjMzk7dCBhIGNhc3VhbCBleHBsb3JhdGlvbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc29jaWF0ZWQgc3ltYm9scy4gSSYjMzk7bSBhZnRlciBhIGRlZXAgZGl2ZSB0byBlaXRoZXIgbW9kaWZ5IG9yIGludGVncmF0ZSB0aGUgZHJpdmVyLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhlIG1vc3QgcmVsaWFibGUgc291cmNlIGZvciB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGZpbGUuIExldCYjMzk7cyBzdGFydCB0aGUgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJDTUZNQUMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTpjb25maWcgQlJDTUZNQUNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNzpjb25maWcgQlJDTUZNQUNfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXHRib29sIFwmIzM0O1NESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXHRib29sIFwmIzM0O1VTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctNDEtXHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ4NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlcjoKCioqRGVsdmluZyBpbnRvIHRoZSBicmNtZm1hYyBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGJyY21mbWFjIHdpcmVsZXNzIGRyaXZlci4gR2l2ZW4gdGhlIHBhdGgsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhbGwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZXZpY2Utc3BlY2lmaWMgc2V0dGluZ3MgZGVmaW5lZCBoZXJlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGlzIHBhcmFtZXRlcml6ZWQsIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEnigJltIHRoaW5raW5nIEkgd2lsbCBmaW5kIG9wdGlvbnMgZm9yIHZhcmlvdXMgQnJvYWRjb20gV2ktRmkgY2hpcHNldHMsIHBvd2VyIG1hbmFnZW1lbnQgc2V0dGluZ3MsIGRlYnVnIGZsYWdzLCBhbmQgbWF5YmUgZXZlbiBmaXJtd2FyZSBzZWxlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gcHJvcGVybHkgY29uZmlndXJlIHRoZSBkcml2ZXIgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0gSSYjMzk7bSB3b3JraW5nIHdpdGggYW5kIHNlZSB3aGF0IHNvcnQgb2YgZmxleGliaWxpdHkgdGhpcyBkcml2ZXIgb2ZmZXJzIG1lLiBMZXTigJlzIGdldCB0byBpdCBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gdGhlcmUuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwgYmVjYXVzZSB0aGVzZSBCcm9hZGNvbSBkcml2ZXJzIGNhbiBzb21ldGltZXMgYmUgYSBiaXQgZGVuc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgQlJDTUZNQUNcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDQ6XHRcdHNlbGVjdCBCUkNNVVRJTFxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXG4gICA3Olx0XHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcbiAgIDg6XHRcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWRcbiAgIDk6XHRcdCAgYnJjbWZtYWMua28uXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG4gIDE1Olx0XHRib29sXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIEJSQ01GTUFDX1NESU9cbiAgMTg6XHRcdGJvb2wgXCYjMzQ7U0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIChNTUMgPSB5IHx8IE1NQyA9IEJSQ01GTUFDKVxuICAyMDpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICAyMTpcdFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMjI6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFx0aGVscFxuICAyNTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cbiAgMjY6XHRcdCAgSUVFRTgwMi4xMW4gZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cbiAgMjc6XHRcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGEgU0RJTyB3aXJlbGVzcyBjYXJkLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBCUkNNRk1BQ19VU0JcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7VVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gKFVTQiA9IHkgfHwgVVNCID0gQlJDTUZNQUMpXG4gIDMyOlx0XHRkZXBlbmRzIG9uIEJSQ01GTUFDXG4gIDMzOlx0XHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuICAzNDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxuICAzNzpcdFx0ICBJRUVFODAyLjExbiBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xuICAzODpcdFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYW4gVVNCIHdpcmVsZXNzIGNhcmQuXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIEJSQ01GTUFDX1BDSUVcbiAgNDE6XHRcdGJvb2wgXCYjMzQ7UENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDQyOlx0XHRkZXBlbmRzIG9uIEJSQ01GTUFDXG4gIDQzOlx0XHRkZXBlbmRzIG9uIFBDSVxuICA0NDpcdFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX01TR0JVRlxuICA0NTpcdFx0c2VsZWN0IEZXX0xPQURFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDQ0OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDY5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlJDTUZNQUMgRHJpdmVyIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGRyaXZlciBjb25maWd1cmF0aW9uIGFuZCBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIEZpcnN0LCBJIG5lZWQgdG8gZW5hYmxlIGBCUkNNRk1BQ2AgYW5kIGBCUkNNRk1BQ19VU0JgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bGwgYWxzbyBhZGQgYENGRzgwMjExYCwgYFVTQmAsIGFuZCBgTUFDODAyMTFgLCBldmVuIHRob3VnaCBgTUFDODAyMTFgIG1pZ2h0IG5vdCBiZSBzdHJpY3RseSByZXF1aXJlZCBmb3IgYGJyY21mbWFjYC4gQWx3YXlzIGdvb2QgdG8gaGF2ZSBmb3IgY29uc2lzdGVuY3ksIHRob3VnaC4KCkhtbSwgd2FpdC4gYEJSQ01GTUFDX1VTQmAgaGFzIGEgZGVwZW5kZW5jeSBjaGVjay4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgYFVTQiA9IHkgfHwgVVNCID0gQlJDTUZNQUNgLiBKdXN0IHRvIGJlIHNhZmUsIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGF0LiBZZXMsIGNvbmZpcm1lZC4gSSYjMzk7bGwgbWFrZSBzdXJlIGBCUkNNRk1BQ2AgYW5kIGBCUkNNRk1BQ19VU0JgIGFyZSBlbmFibGVkLgoKTmV4dCwgSSYjMzk7bSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgYnJjbWZfcG1rc2FfdjJfb3BgLiBMZXQmIzM5O3MgcmVmcmVzaCBvdXIgbWVtb3J5LiBBaCwgeWVzLCBpdCYjMzk7cyBkZWZpbmVkIGluIGBjZmc4MDIxMS5jYCwgYW5kIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBQTUtTQSAoUGFpcndpc2UgTWFzdGVyIEtleSBTZWN1cml0eSBBc3NvY2lhdGlvbikgdmVyc2lvbiAyIG9wZXJhdGlvbnMuIEl0JiMzOTtzIHVzZWQgaW4gdGhpcyBjb250ZXh0LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIHBvaW50ZXIgdG8gdGhlIHBta3NhIGlzIG51bGwuIElmIGl0IGlzIG51bGwgaXQgZ29lcyB0byBgc2VuZGAgYWZ0ZXIgemVyb2luZyB0aGUgc2hhZG93IGxpc3QgYW5kIHB1c2hpbmcgYW4gZW1wdHkgdmVyc2lvbiAyIGxpc3QuIElmIG5vdCwgaXQgZG9lcyB0aGUgYmVsb3cuIEl0IHRoZW4gYnVpbGRzIGEgd2lyZS1mb3JtYXQgaGVhZGVyIGFuZCBzZW5kcyB0aGUgbGlzdCB0byB0aGUgZmlybXdhcmUuIFRoZSB2ZXJzaW9uIGFuZCBsZW5ndGggYXJlIG9uIHRoZSB3aXJlLgoKVGhlbiBJIHNlZSBpdCB1c2VzIHRoZSBmb2xsb3dpbmc6CgpgYGBjCglsaXN0LSZndDt2ZXJzaW9uID0gY3B1X3RvX2xlMTYoQlJDTUZfUE1LU0FfVkVSXzIpOwoJbGlzdC0mZ3Q7bGVuZ3RoICA9IGNwdV90b19sZTE2KG9mZnNldG9mKHN0cnVjdCBicmNtZl9wbWtfbGlzdF92Ml9sZSwgcG1rKSAmIzQzOwoJCQkJICAgbnBtayAqIHNpemVvZihzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIpKTsKCglyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgJiMzNDtwbWtpZF9pbmZvJiMzNDssIGxpc3QsIHNpemVvZigqbGlzdCkpOwpgYGAKCk9rYXksIHNvIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIG5sODAyMTEsIHJpZ2h0PyBZZXMsIGNvbmZpcm1lZC4gSXQgdXNlcyBpb3ZhciB0byBzZXQgJiMzNDtwbWtpZF9pbmZvJiMzNDsuIFRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBtaW5vciBtb2RpZmljYXRpb24gdG8gYGJyY21mX2RlbGF5YCBpbiBgY2ZnODAyMTEuY2AuIEl0JiMzOTtzIGEgc21hbGwgY2hhbmdlIHdpdGggdGhlIGB1c2xlZXBfcmFuZ2VgIGZ1bmN0aW9uIGNhbGwuIEhvd2V2ZXIsIGBicmNtZl9wbWtzYV92Ml9vcGAgaXRzZWxmIHNlZW1zIGxpa2UgYSBzaWduaWZpY2FudCBhZGRpdGlvbi4KCkxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWFjaGFibGUgZnVuY3Rpb25zLiBgYnJjbWZfbmV0aWZfbW9uX3J4YCwgYGJyY21mX2Zsb3dyaW5nX2Jsb2NrYCwgYGJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGFgLCBhbmQgYGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhYCBhbGwgc2VlbSB0byBiZSBQQ0llLXNwZWNpZmljLiBUaGUgYGJyY21mX3NkaW9fcnhnbG9tYCBzZWVtcyB0byBiZSBTRElPLXNwZWNpZmljLgoKV2FpdCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4uLiBJIGp1c3Qgd2FudCB0byBkb3VibGUgY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBgYnJjbWZfZmxvd3JpbmdfYmxvY2tgLiBJcyB0aGF0IHJlYWxseSBQQ0llLW9ubHk/IEkgc2hvdWxkIHZlcmlmeSB3aGV0aGVyIGBmbG93cmluZy5jYCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgaW5jbHVkZWQgZm9yIFVTQiBjb25maWd1cmF0aW9ucyB0b28uIFRoaXMgY291bGQgYmUgYSBibGluZCBzcG90IEkgbmVlZCB0byBhZGRyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93cmluZy5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT0zMj1icmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQ19QUk9UT19NU0dCVUYpICYjNDM7PSBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTMzLVx0XHRjb21tb25yaW5nLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZTozNDpcdFx0Zmxvd3JpbmcubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTM1LVx0XHRtc2didWYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA4NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgZmxvd3Jpbmcub2AgYW5kIFJlbGF0ZWQgQ29kZSBQYXRocyoqCgpPa2F5LCBzbyBpdCYjMzk7cyBjbGVhciB0aGF0IGBmbG93cmluZy5vYCBpcyAqZGVmaW5pdGVseSogb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlJDTUZNQUNfUFJPVE9fTVNHQlVGYCBpcyBlbmFibGVkLiBBbmQsIHRoYXQgYENPTkZJR19CUkNNRk1BQ19QUk9UT19NU0dCVUZgIGdldHMgc2VsZWN0ZWQgdmlhIGBDT05GSUdfQlJDTUZNQUNfUENJRWAuIFRoZXJlZm9yZSwgYGZsb3dyaW5nLmNgIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gUENJZSwgbm8gc3VycHJpc2VzIHRoZXJlLgoKTm93LCB3aGF0IGFib3V0IGBicmNtZl9zZGlvX3J4Z2xvbWA/IEhtbSwgdGhhdCYjMzk7cyB0dWNrZWQgYXdheSBpbiBgc2Rpby5jYCwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19CUkNNRk1BQ19TRElPYCBlbmFibGVkLiBHaXZlbiBTeXprYWxsZXImIzM5O3MgY3VycmVudCBsYWNrIG9mIFNESU8gZW11bGF0aW9uLCB0aGF0IHBhdGggaXMgY2xlYXJseSBub3QgcmVsZXZhbnQgZm9yIGZ1enppbmcsIGF0IGxlYXN0IG5vdCBkaXJlY3RseS4KClNvLCBpZiB3ZSYjMzk7cmUgaWdub3JpbmcgU0RJTywgdGhhdCBuYXJyb3dzIHRoZSBhdHRhY2sgc3VyZmFjZS4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgb25seSByZWFjaGFibGUgYXJlYXMsIGluaXRpYWxseSwgYXJlIHdpdGhpbiBgY2ZnODAyMTEuY2AgYW5kIHBvdGVudGlhbGx5IGBjb3JlLmNgLCBidXQgb25seSBpZiBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBjYWxsZWQuIEFoLCBidXQgdGhhdCBmdW5jdGlvbiwgYGJyY21mX25ldGlmX21vbl9yeGAsICppcyogaW4gYGNvcmUuY2AsIHdoaWNoIGlzIGFsd2F5cyBjb21waWxlZC4gSG93ZXZlciwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgY2FsbCBzaXRlcy4gSWYgdGhlIHByaW1hcnkgY2FsbCBzaXRlIGlzIGZyb20gYG1zZ2J1Zi5jYCB0aGF0IHdvdWxkIGNvbnN0cmFpbiBpdCB0byBQQ0llIHVzZSBhcyB3ZWxsLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGZvciBhbnkgb3RoZXIgY2FsbCBsb2NhdGlvbnMganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFdlIGNhbiYjMzk7dCBhZmZvcmQgdG8gb3Zlcmxvb2sgYW55dGhpbmcsIGhvd2V2ZXIgc21hbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX25ldGlmX21vbl9yeCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTQzND1zdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00MzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjQzOTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNDQwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oPTIyMD12b2lkIGJyY21mX25ldGlmX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg6MjIxOnZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmgtMjIyLXZvaWQgYnJjbWZfbmV0X2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBsb2NrZWQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xMjAwPWJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1Ziwgdm9pZCAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEyNDE6XHRcdGJyY21mX25ldGlmX21vbl9yeChpZnAsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTI0Mi1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzIzMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBDb2RlIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbXNnYnVmLmNgIGFuZCB0cnlpbmcgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIGJhc2VkIG9uIHRoZSBwYXRjaC4gQmFzZWQgb24gdGhlIGNvZGUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlOiBgYnJjbWZfcG1rc2FfdjJfb3BgLCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCwgYGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYWAsIGFuZCBgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FgLgoKYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSwgd2hpbGUgaXQmIzM5O3Mgbm90IGVudGlyZWx5IG5ldywgaXQmIzM5O3MgYmVlbiBtb2RpZmllZCB0byBjYWxsIHRoZSBuZXcgYGJyY21mX3Bta3NhX3YyX29wYC4gSW5pdGlhbGx5LCBgYnJjbWZfcG1rc2FfdjJfb3BgIHNlZW1lZCBsaWtlIHRoZSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24uIEhvd2V2ZXIsIGl0JiMzOTtzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbi4KClRoZSBwcm9tcHQgZGlyZWN0cyB1cyB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0JiMzOTtzIGNoZWNrIHRoZSBzdGF0aWMgc3RhdHVzIG9mIHRoZSBmdW5jdGlvbnMuIGBicmNtZl9wbWtzYV92Ml9vcGAgaXMgaW5kZWVkIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGFuIGlkZWFsIGNhbmRpZGF0ZS4gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYCBhcmUgYWxzbyBzdGF0aWMuCgpXYWl0IGEgbWludXRlLCBhbHRob3VnaCB0aGV5IGFyZSBzdGF0aWMsIHRoZXkgYXJlIGFzc2lnbmVkIHRvIGBjZmc4MDIxMV9vcHNgLCBtYWtpbmcgdGhlbSBBUEkgZW50cnkgcG9pbnRzLiBUaGF0IG1ha2VzIHRoZW0gYmV0dGVyIGNob2ljZXMgdGhhbiBgYnJjbWZfcG1rc2FfdjJfb3BgLgoKSSBhbHNvIG5vdGljZWQgYGJyY21mX25ldGlmX21vbl9yeGAgd2hpY2ggaXMgbm9uLXN0YXRpYywgYnV0IGl0IGlzIHJlYWNoZWQgdmlhIFBDSWUuIFRoZSBwcm9tcHQgc3RhdGVzIHdlIGRvbiYjMzk7dCB3YW50IHRvIGluY2x1ZGUgUENJZS1zcGVjaWZpYyBjb2RlIHRoYXQgcmVxdWlyZXMgaGFyZHdhcmUsIGJ1dCBzaW5jZSB0aGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBVU0ItcmVhY2hhYmxlIGNvZGUgKHJlbGF0ZWQgdG8gYGJyY21mX3Bta3NhX3YyX29wYCksIHRoZSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIG1lYW5zLgoKVGhlcmVmb3JlLCBmb3IgYEZvY3VzU3ltYm9sc2AsIEkmIzM5O2xsIGxpc3QgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYCBhcyB0aGUgbW9zdCBwcm9taXNpbmcgdGFyZ2V0cywgZGVzcGl0ZSB0aGVpciBzdGF0aWMgbmF0dXJlLiBUaGVpciBhc3NpZ25tZW50IHRvIGBjZmc4MDIxMV9vcHNgIG1ha2VzIHRoZW0gZW50cnkgcG9pbnRzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGBjZmc4MDIxMS5jYCBmb3IgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgLiBJdCYjMzk7cyBnb29kIHRvIGJlIGNhdXRpb3VzIGFuZCBjaGVjayBmb3IgaW5saW5pbmcsIGJ1dCB0aGVzZSBgY2ZnODAyMTFgIGNhbGxiYWNrcyBhcmUgbW9zdCBsaWtlbHkgbXkgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQ0ODE9c3RhdGljIHMzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDQ4MjpicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NDgzLVx0XHRcdCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTYwNzg9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYnJjbWZfY2ZnODAyMTFfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYwOTktXHQucmVzdW1lID0gYnJjbWZfY2ZnODAyMTFfcmVzdW1lLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjEwMDpcdC5zZXRfcG1rc2EgPSBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2EsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MTAxLVx0LmRlbF9wbWtzYSA9IGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzMTUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCB0aGVzZSBzZWVtIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGVzIOKAkyB0aGUgb25lcyB0aGF0IGNvdWxkIHNlcnZlIGFzIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBzeXN0ZW0uIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGZldyB0aGluZ3MgdG8gYmUgc3VyZS4KClJpZ2h0LCB3aGF0IGFib3V0IGBicmNtZl9uZXRpZl9tb25fcnhgPyBJdCYjMzk7cyBub3Qgc3RhdGljLCBzbyBJIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgaXQgYXMgYSBwb3NzaWJpbGl0eSwganVzdCB0byBiZSB0aG9yb3VnaC4gTm93LCBob3cgYWJvdXQgYGJyY21mX2Zsb3dyaW5nX2Jsb2NrYD8gVGhhdCBvbmUgKmlzKiBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGV4Y2x1ZGUgaXQgZm9yIG5vdy4gQW5kIGBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhYD8gQWxzbyBzdGF0aWMsIHNvIGl0JiMzOTtzIG9mZiB0aGUgbGlzdC4gVGhlbiB0aGVyZSYjMzk7cyBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgLiBOb24tc3RhdGljIGFnYWluLCBzbyB0aGF0JiMzOTtzIGEga2VlcGVyLiBBbmQgZmluYWxseSwgYGJyY21mX3NkaW9fcnhnbG9tYCwgd2hpY2ggaXMgc3RhdGljLCBzbyBJJiMzOTtsbCBsZWF2ZSBpdC4KCkFscmlnaHQsIHNvIHRha2luZyBhbGwgb2YgdGhhdCBpbnRvIGFjY291bnQsIEkgYmVsaWV2ZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzIGFyZToKCiogICBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYAoqICAgYGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYWAKKiAgIGBicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYWAKKiAgIGBicmNtZl9uZXRpZl9tb25fcnhgCiogICBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgCgpIYW5nIG9uLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgd2hlcmUgYGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhYCByZXNpZGVzLiBBaCwgeWVzLCBpdCYjMzk7cyBkZWZpbmVkIGluIGBwY2llLmNgLiBHb29kLCBhbmQgbGV0IG1lIGp1c3QgbWFrZSBzdXJlIGl0JiMzOTtzICpzdGlsbCogbm9uLXN0YXRpYy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9wY2llX3NlbmRfbWJfZGF0YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTc4Mz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjc4NDpicmNtZl9wY2llX3NlbmRfbWJfZGF0YShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgaHRvZF9tYl9kYXRhKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy03ODUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9ODUwPXN0YXRpYyB2b2lkIGJyY21mX3BjaWVfaGFuZGxlX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTg2Ny1cdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O0QySF9NQl9EQVRBOiBERUVQIFNMRUVQIFJFUVxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjg2ODpcdFx0YnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoZGV2aW5mbywgQlJDTUZfSDJEX0hPU1RfRFNfQUNLKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtODY5LVx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7RDJIX01CX0RBVEE6IHNlbnQgREVFUCBTTEVFUCBBQ0tcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjY3Nj1zdGF0aWMgaW50IGJyY21mX3BjaWVfcG1fZW50ZXJfRDMoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY4OS1cdGRldmluZm8tXHUwMDNlbWJkYXRhX2NvbXBsZXRlZCA9IGZhbHNlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNjkwOlx0YnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoZGV2aW5mbywgQlJDTUZfSDJEX0hPU1RfRDNfSU5GT1JNKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY5MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI3MDY9c3RhdGljIGludCBicmNtZl9wY2llX3BtX2xlYXZlX0QzKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3MjEtXHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtUcnkgdG8gd2FrZXVwIGRldmljZS4uLi5cXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNzIyOlx0XHRpZiAoYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoZGV2aW5mbywgQlJDTUZfSDJEX0hPU1RfRDBfSU5GT1JNKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjcyMy1cdFx0XHRnb3RvIGNsZWFudXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzczCgkJCQkJCQlvdXRwdXQ6IDIyMgoJCQkJCQkJdGhvdWdodHM6IDEyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFN5emthbGxlciBDb25maWd1cmF0aW9uIGZvciBCcm9hZGNvbSBXaS1GaSBEcml2ZXIgQ292ZXJhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBlbmhhbmNpbmcgU3l6a2FsbGVyJiMzOTtzIGZ1enppbmcgY292ZXJhZ2UgZm9yIHRoaXMgYGJyY21mbWFjYCBkcml2ZXIgcGF0Y2guIEkmIzM5O3ZlIGJlZW4gdGhpbmtpbmcgdGhyb3VnaCB0aGUgYmVzdCBhcHByb2FjaCB0byBjb25maWd1cmUgU3l6a2FsbGVyIHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlIGNoYW5nZXMuCgpJbml0aWFsbHksIEkgaWRlbnRpZmllZCBzb21lIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gSSBzdGFydGVkIHdpdGggYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgYmVjYXVzZSBpdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXcgVjIgUE1LU0EgbG9naWMuIEkgaW5jbHVkZWQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgIGFuZCBgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FgIGFzIHdlbGwgYmVjYXVzZSB0aGV5IGFyZSBhbHNvIGludm9sdmVkIGluIHRoZSBQTUtTQSBjYWNoZSBvcGVyYXRpb25zLiBJIGFsc28gbm90ZWQgYGJyY21mX25ldGlmX21vbl9yeGAgYmVjYXVzZSBpdCBsb29rZWQgbGlrZSBhIG5vbi1zdGF0aWMsIG1vZGlmaWVkIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gcmFkaW90YXAgaGVhZGVyIG1vZGlmaWNhdGlvbnMgaW4gbW9uaXRvciBtb2RlLgoKQmFzZWQgb24gdGhlc2UgaW5pdGlhbCBvYnNlcnZhdGlvbnMsIEkgZGVjaWRlZCB0byBjaGVjayB3aGljaCBjb25maWdzIHdvdWxkIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSwgc3RhcnRpbmcgd2l0aCBgQlJDTUZNQUNgLCBhbmQgYEJSQ01GTUFDX1VTQmAuIEJlY2F1c2UgYEJSQ01GTUFDX1VTQmAgZGVwZW5kcyBvbiBgVVNCYCwgSSBjb25maXJtZWQgYFVTQmAgc2hvdWxkIGFsc28gYmUgZW5hYmxlZC4gVGhlbiwgSSBvYnNlcnZlZCB0aGF0IGBCUkNNRk1BQ2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ0ZHODAyMTFgLCBzbyB0aGF0IHNob3VsZCBiZSBlbmFibGVkIHRvby4gU2luY2UgU3l6a2FsbGVyIGNhbiBlbXVsYXRlIHRoZSBCcm9hZGNvbSBkZXZpY2UgdmlhIGl0cyBVU0IgZnV6emVyLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgYXBwcm9hY2ggd291bGQgYmUgc3VpdGFibGUuCgpIb3dldmVyLCBJIGFsc28gcmVhbGl6ZWQgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBQQ0llIG1haWxib3ggcG9sbGluZy4gVG8gZW5zdXJlIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UsIEkmIzM5O2xsIGFsc28gZW5hYmxlIGBCUkNNRk1BQ19QQ0lFYCBhcyB3ZWxsLiBGb3IgZ29vZCBtZWFzdXJlLCBJIGNvdWxkIGFsc28gZW5hYmxlIGBCUkNNRk1BQ19TRElPYCBidXQgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGZ1enogU0RJTywgc28gSSBkZWNpZGVkIG5vdCB0byBlbmFibGUgaXQuIEkmIzM5O2xsIHN0aWNrIHRvIGxpc3RpbmcgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGFuZCBgQlJDTUZNQUNfUENJRWAgYXMgZW5hYmxlZCBjb25maWdzLgoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjayBteSBhbmFseXNpcyB0byBlbnN1cmUgdGhhdCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCBpcyB0cnVseSB3b3J0aCBsaXN0aW5nLiBBZnRlciByZXZpZXdpbmcgdGhlIHBhdGNoJiMzOTtzIHJlYXNvbmluZywgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIHBhdGNoIGludHJvZHVjZXMgVjIgUE1LU0EgY2FjaGUgb3BlcmF0aW9ucyB0byB0aGUgZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgYGNmZzgwMjExYCBuZXRsaW5rIGNvbW1hbmRzIGFuZCB0aGF0IFN5emthbGxlciBjYW4gZW11bGF0ZSB0aGlzLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIG1vZGlmaWNhdGlvbiB0byByYWRpb3RhcCBoZWFkZXIgaW5zZXJ0aW9uIGluIG1vbml0b3IgbW9kZSBhbmQgUENJZSBtYWlsYm94IHBvbGxpbmcuIFRoZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBhZGRlZCBWMiBQTUtTQSBjYWNoZSBsb2dpYyBhbmQgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcy4KCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgY29ycmVjdGx5IHN0YXRlZDogYFdvcnRoRnV6emluZ2AgaXMgdHJ1ZS4gVGhlIGZvY3VzIHN5bWJvbHMgaW5pdGlhbGx5IGFyZTogYFsmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LCAmIzM0O2JyY21mX2NmZzgwMjExX2RlbF9wbWtzYSYjMzQ7LCAmIzM0O2JyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhJiMzNDssICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDtdYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IGxpc3RlZCBhcyBgWyYjMzQ7QlJDTUZNQUMmIzM0OywgJiMzNDtCUkNNRk1BQ19VU0ImIzM0OywgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssICYjMzQ7Q0ZHODAyMTEmIzM0O11gLgoKSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoZSBjb2RlIGFnYWluLCBjb25zaWRlcmluZyBzdGF0aWMgdmVyc3VzIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhbiBBUEkgZW50cnkgcG9pbnQsIHNvIGl0IGlzIHdvcnRod2hpbGUgdG8gaW5jbHVkZSBpdCBpbiB0aGUgZm9jdXMuIEFsc28sIGJhc2VkIG9uIG15IHByZXZpb3VzIGFuYWx5c2lzLCBJIGNvbmZpcm1lZCBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBub24tc3RhdGljIGFuZCBtb2RpZmllZCwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpJJiMzOTt2ZSBhbHNvIG9ic2VydmVkIHRoZSBmb2xsb3dpbmcgZHVyaW5nIG15IGNvZGUgcmV2aWV3OgoqICAgYGJyY21mX2Zsb3dyaW5nX2F0dGFjaGAgaXMgbW9kaWZpZWQgYW5kIGl0IGluaXRpYWxpemVzIGBpZl9ibG9ja2VkX2NudGAKKiAgIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCBpcyBub24tc3RhdGljLCBzbyBJIGNhbiBhbHNvIGluY2x1ZGUgaXQKCk15IGZpbmFsIGBGb2N1c1N5bWJvbHNgIGFyZTogYFsmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LCAmIzM0O2JyY21mX2NmZzgwMjExX2RlbF9wbWtzYSYjMzQ7LCAmIzM0O2JyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhJiMzNDssICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDssICYjMzQ7YnJjbWZfZmxvd3JpbmdfYXR0YWNoJiMzNDssICYjMzQ7YnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaCYjMzQ7XWAuCgpUaGUgY29uZmlncyBhcmU6IGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgLCBgQlJDTUZNQUNfUENJRWAsIGBDRkc4MDIxMWAuCgpJdCBsb29rcyBsaWtlIHRoaXMgaXMgYSBnb29kLCByZWZpbmVkIHNldHVwIGZvciBTeXprYWxsZXIgdG8gYmVnaW4gZnV6emluZyB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhpcyBwYXRjaCwgZW5zdXJpbmcgY292ZXJhZ2Ugb2YgdGhlIG5ldyBQTUtTQSBsb2dpYyBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19VU0ImIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfUENJRSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9kZWxfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVjIgUE1LU0EgY2FjaGUgb3BlcmF0aW9ucyBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNmZzgwMjExIG5ldGxpbmsgY29tbWFuZHMgd2hlbiBhIEJyb2FkY29tIFdpLUZpIGRldmljZSBpcyBwcmVzZW50LiBTeXprYWxsZXIgY2FuIGVtdWxhdGUgc3VjaCBhIGRldmljZSB2aWEgaXRzIFVTQiBmdXp6ZXIsIG1ha2luZyB0aGlzIG5ldyBsb2dpYyByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyByYWRpb3RhcCBoZWFkZXIgaW5zZXJ0aW9uIGluIG1vbml0b3IgbW9kZSBhbmQgUENJZSBtYWlsYm94IHBvbGxpbmcsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhJiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2RlbF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9uZXRpZl9tb25fcngmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWMiBQTUtTQSBjYWNoZSBvcGVyYXRpb25zIGluIHRoZSBicmNtZm1hYyBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY2ZnODAyMTEgbmV0bGluayBjb21tYW5kcyB3aGVuIGEgQnJvYWRjb20gV2ktRmkgZGV2aWNlIGlzIHByZXNlbnQuIFN5emthbGxlciBjYW4gZW11bGF0ZSBzdWNoIGEgZGV2aWNlIHZpYSBpdHMgVVNCIGZ1enplciwgbWFraW5nIHRoaXMgbmV3IGxvZ2ljIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIHJhZGlvdGFwIGhlYWRlciBpbnNlcnRpb24gaW4gbW9uaXRvciBtb2RlIGFuZCBQQ0llIG1haWxib3ggcG9sbGluZywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE3OjU0LjcwMTE5MjU1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Mzc2MzkxNzcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUkNNRk1BQ1wiLFxuICAgIFwiQlJDTUZNQUNfVVNCXCIsXG4gICAgXCJCUkNNRk1BQ19QQ0lFXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX2NmZzgwMjExX3NldF9wbWtzYVwiLFxuICAgIFwiYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhXCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYVwiLFxuICAgIFwiYnJjbWZfbmV0aWZfbW9uX3J4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBWMiBQTUtTQSBjYWNoZSBvcGVyYXRpb25zIGluIHRoZSBicmNtZm1hYyBkcml2ZXIsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY2ZnODAyMTEgbmV0bGluayBjb21tYW5kcyB3aGVuIGEgQnJvYWRjb20gV2ktRmkgZGV2aWNlIGlzIHByZXNlbnQuIFN5emthbGxlciBjYW4gZW11bGF0ZSBzdWNoIGEgZGV2aWNlIHZpYSBpdHMgVVNCIGZ1enplciwgbWFraW5nIHRoaXMgbmV3IGxvZ2ljIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIHJhZGlvdGFwIGhlYWRlciBpbnNlcnRpb24gaW4gbW9uaXRvciBtb2RlIGFuZCBQQ0llIG1haWxib3ggcG9sbGluZywgd2hpY2ggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTc6NTQuNzAxMjAwMTE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE4ODA0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZmUxNjdlNDU2ZGExY2FmOTI4MjY5OTI5NTMzMTk1YTNmY2EzMTJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDY6MTc6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xcbmluZGV4IDBiNTVkNDQ1ODk1ZjIuLjdkN2U1ZWNlY2QyMjkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xcbkBAIC0zOTg5LDEyICszOTg5LDEwIEBAIHN0YXRpYyBpbnQgYnJjbWZfY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdG9wKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYnJjbWZfZGVsYXkodTMyIG1zKVxcbiB7XFxuLVxcdGlmIChtcyBcXHUwMDNjIDEwMDAgLyBIWikge1xcbi1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tXFx0XFx0bWRlbGF5KG1zKTtcXG4tXFx0fSBlbHNlIHtcXG4rXFx0aWYgKG1zIFxcdTAwM2M9IDIwKVxcbitcXHRcXHR1c2xlZXBfcmFuZ2UobXMgKiAxMDAwLCBtcyAqIDEwMDAgKyAxMDAwKTtcXG4rXFx0ZWxzZVxcbiBcXHRcXHRtc2xlZXAobXMpO1xcbi1cXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBzMzIgYnJjbWZfY29uZmlnX3dvd2xfcGF0dGVybihzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgdTggY21kWzRdLFxcbkBAIC00MzY0LDYgKzQzNjIsMTA0IEBAIGJyY21mX3Bta3NhX3YzX29wKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogYnJjbWZfcG1rc2FfdjJfb3AgLSB1cGRhdGUgZmlybXdhcmUgUE1LU0EgY2FjaGUgdXNpbmcgdGhlIFYyIGxpc3QgaW50ZXJmYWNlLlxcbisgKlxcbisgKiBWMiBmaXJtd2FyZSAocmV2aXNpb24gMTIpIHVzZXMgYSB2ZXJzaW9uZWQgZmxhdCBsaXN0IHN0cnVjdHVyZVxcbisgKiAoYnJjbWZfcG1rX2xpc3RfdjJfbGUpIHJhdGhlciB0aGFuIHRoZSBwZXItZW50cnkgb3BlcmF0aW9uIG1vZGVsIG9mIFYzLlxcbisgKiBFYWNoIGVudHJ5IGNhcnJpZXMgRklMUy1zcGVjaWZpYyBmaWVsZHMgKHJhdyBQTUsgbWF0ZXJpYWwsIFNTSUQsIGFuZFxcbisgKiBmaWxzX2NhY2hlX2lkKSBpbiBhZGRpdGlvbiB0byB0aGUgYmFzaWMgQlNTSUQgKyBQTUtJRCBwYWlyLCBlbmFibGluZ1xcbisgKiBGSUxTIGZhc3Qtcm9hbWluZyBvbiBkZXZpY2VzIHRoYXQgZG8gbm90IHN1cHBvcnQgVjMuXFxuKyAqXFxuKyAqIEBjZmc6ICAgZHJpdmVyIGNvbmZpZyBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgc2hhZG93IFYyIFBNS1NBIGxpc3RcXG4rICogQGlmcDogICBpbnRlcmZhY2UgcG9pbnRlclxcbisgKiBAcG1rc2E6IHRoZSBQTUtTQSB0byBhZGQvcmVtb3ZlLCBvciBOVUxMIGZvciBhIGZsdXNoXFxuKyAqIEBhbGl2ZTogdHJ1ZSA9IGFkZCAoc2V0IHRpbWVfbGVmdCB0byBuby1leHBpcnkpLCBmYWxzZSA9IHJlbW92ZS9mbHVzaFxcbisgKi9cXG4rc3RhdGljIHMzMlxcbiticmNtZl9wbWtzYV92Ml9vcChzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLCBzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcXG4rXFx0XFx0ICBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLCBib29sIGFsaXZlKVxcbit7XFxuK1xcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBjZmctXFx1MDAzZXB1YjtcXG4rXFx0c3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlICpsaXN0ID0gXFx1MDAyNmNmZy1cXHUwMDNlcG1rX2xpc3RfdjI7XFxuK1xcdHN0cnVjdCBicmNtZl9wbWtzYV92MiAqcG1rID0gbGlzdC1cXHUwMDNlcG1rO1xcbitcXHR1MzIgbnBtayA9IGxlMTZfdG9fY3B1KGxpc3QtXFx1MDAzZWxlbmd0aCk7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0LyogbnBtayBoZXJlIHN0b3JlcyB0aGUgY291bnQgb2YgdmFsaWQgZW50cmllcywgcmVwdXJwb3NpbmcgdGhlXFxuK1xcdCAqIGxlbmd0aCBmaWVsZCBvZiB0aGUgc2hhZG93IGxpc3QgYXMgYSBjb3VudGVyLiAgV2UgY29udmVydCB0b1xcbitcXHQgKiB0aGUgd2lyZSBmb3JtYXQgKGJ5dGUgbGVuZ3RoKSB3aGVuIHNlbmRpbmcgdG8gZmlybXdhcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXBta3NhKSB7XFxuK1xcdFxcdC8qIEZsdXNoOiB6ZXJvIHRoZSBzaGFkb3cgbGlzdCBhbmQgcHVzaCBhbiBlbXB0eSBWMiBsaXN0LiAqL1xcbitcXHRcXHRtZW1zZXQobGlzdCwgMCwgc2l6ZW9mKCpsaXN0KSk7XFxuK1xcdFxcdGdvdG8gc2VuZDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFsaXZlKSB7XFxuK1xcdFxcdC8qIFNldDogc2VhcmNoIGZvciBleGlzdGluZyBCU1NJRCBtYXRjaCBmaXJzdC4gKi9cXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wbWs7IGkrKylcXG4rXFx0XFx0XFx0aWYgKCFtZW1jbXAocG1rc2EtXFx1MDAzZWJzc2lkLCBwbWtbaV0uYnNzaWQsIEVUSF9BTEVOKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAoaSBcXHUwMDNlPSBCUkNNRl9NQVhQTUtJRCkge1xcbitcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiVjIgUE1LU0EgY2FjaGUgZnVsbCAoJWQgZW50cmllcylcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBucG1rKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1lbXNldChcXHUwMDI2cG1rW2ldLCAwLCBzaXplb2YocG1rW2ldKSk7XFxuK1xcdFxcdHBta1tpXS5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGJyY21mX3Bta3NhX3YyKSk7XFxuK1xcdFxcdGlmIChwbWtzYS1cXHUwMDNlYnNzaWQpXFxuK1xcdFxcdFxcdG1lbWNweShwbWtbaV0uYnNzaWQsIHBta3NhLVxcdTAwM2Vic3NpZCwgRVRIX0FMRU4pO1xcbitcXHRcXHRpZiAocG1rc2EtXFx1MDAzZXBta2lkKVxcbitcXHRcXHRcXHRtZW1jcHkocG1rW2ldLnBta2lkLCBwbWtzYS1cXHUwMDNlcG1raWQsIFdMQU5fUE1LSURfTEVOKTtcXG4rXFx0XFx0aWYgKHBta3NhLVxcdTAwM2VwbWsgXFx1MDAyNlxcdTAwMjYgcG1rc2EtXFx1MDAzZXBta19sZW4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHBta3NhLVxcdTAwM2VwbWtfbGVuIFxcdTAwM2M9IFdMQU5fUE1LX0xFTl9TVUlURV9CXzE5Mikge1xcbitcXHRcXHRcXHRtZW1jcHkocG1rW2ldLnBtaywgcG1rc2EtXFx1MDAzZXBtaywgcG1rc2EtXFx1MDAzZXBta19sZW4pO1xcbitcXHRcXHRcXHRwbWtbaV0ucG1rX2xlbiA9IGNwdV90b19sZTE2KHBta3NhLVxcdTAwM2VwbWtfbGVuKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocG1rc2EtXFx1MDAzZXNzaWQgXFx1MDAyNlxcdTAwMjYgcG1rc2EtXFx1MDAzZXNzaWRfbGVuKSB7XFxuK1xcdFxcdFxcdG1lbWNweShwbWtbaV0uc3NpZC5TU0lELCBwbWtzYS1cXHUwMDNlc3NpZCwgcG1rc2EtXFx1MDAzZXNzaWRfbGVuKTtcXG4rXFx0XFx0XFx0cG1rW2ldLnNzaWQuU1NJRF9sZW4gPSBwbWtzYS1cXHUwMDNlc3NpZF9sZW47XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHBta3NhLVxcdTAwM2VmaWxzX2NhY2hlX2lkKVxcbitcXHRcXHRcXHRwbWtbaV0uZmlsc19jYWNoZV9pZCA9ICpwbWtzYS1cXHUwMDNlZmlsc19jYWNoZV9pZDtcXG4rXFxuK1xcdFxcdGlmIChpID09IG5wbWspXFxuK1xcdFxcdFxcdG5wbWsrKztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogRGVsZXRlOiBmaW5kIGJ5IEJTU0lEIGFuZCBjb21wYWN0IHRoZSBsaXN0LiAqL1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnBtazsgaSsrKVxcbitcXHRcXHRcXHRpZiAoIW1lbWNtcChwbWtzYS1cXHUwMDNlYnNzaWQsIHBta1tpXS5ic3NpZCwgRVRIX0FMRU4pKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGlmIChpIFxcdTAwM2U9IG5wbWspIHtcXG4rXFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcIlYyIFBNS1NBIGVudHJ5IG5vdCBmb3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIG5wbWsgLSAxOyBpKyspXFxuK1xcdFxcdFxcdG1lbWNweShcXHUwMDI2cG1rW2ldLCBcXHUwMDI2cG1rW2kgKyAxXSwgc2l6ZW9mKHBta1tpXSkpO1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNnBta1tucG1rIC0gMV0sIDAsIHNpemVvZihwbWtbbnBtayAtIDFdKSk7XFxuK1xcdFxcdG5wbWstLTtcXG4rXFx0fVxcbitcXG4rXFx0LyogVXBkYXRlIHNoYWRvdyBlbnRyeSBjb3VudCAoc3RvcmVkIGluIGxlbmd0aCBmaWVsZCkuICovXFxuK1xcdGxpc3QtXFx1MDAzZWxlbmd0aCA9IGNwdV90b19sZTE2KG5wbWspO1xcbitcXG4rc2VuZDpcXG4rXFx0LyogQnVpbGQgdGhlIHdpcmUtZm9ybWF0IGhlYWRlciBhbmQgc2VuZCB0aGUgZnVsbCBsaXN0IHRvIGZpcm13YXJlLlxcbitcXHQgKiB2ZXJzaW9uIGFuZCBsZW5ndGggb24gdGhlIHdpcmUgcmVmbGVjdCB0aGUgYWN0dWFsIGJ5dGUgZm9vdHByaW50LlxcbitcXHQgKi9cXG4rXFx0bGlzdC1cXHUwMDNldmVyc2lvbiA9IGNwdV90b19sZTE2KEJSQ01GX1BNS1NBX1ZFUl8yKTtcXG4rXFx0bGlzdC1cXHUwMDNlbGVuZ3RoICA9IGNwdV90b19sZTE2KG9mZnNldG9mKHN0cnVjdCBicmNtZl9wbWtfbGlzdF92Ml9sZSwgcG1rKSArXFxuK1xcdFxcdFxcdFxcdCAgIG5wbWsgKiBzaXplb2Yoc3RydWN0IGJyY21mX3Bta3NhX3YyKSk7XFxuK1xcbitcXHRyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXFxcInBta2lkX2luZm9cXFwiLCBsaXN0LCBzaXplb2YoKmxpc3QpKTtcXG4rfVxcbitcXG4rXFxuIHN0YXRpYyBfX3VzZWQgczMyXFxuIGJyY21mX3VwZGF0ZV9wbWtsaXN0KHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwKVxcbiB7XFxuQEAgLTQ0MDIsOCArNDQ5OCw4IEBAIGJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFxuIFxcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YzKSlcXG4gXFx0XFx0cmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgcG1rc2EsIHRydWUpO1xcbi1cXG4tXFx0LyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovXFxuK1xcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcXG4rXFx0XFx0cmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBwbWtzYSwgdHJ1ZSk7XFxuIFxcbiBcXHRucG1rID0gbGUzMl90b19jcHUoY2ZnLVxcdTAwM2VwbWtfbGlzdC5ucG1rKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wbWs7IGkrKylcXG5AQCAtNDQ0Niw4ICs0NTQyLDggQEAgYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxcbiBcXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBwbWtzYSwgZmFsc2UpO1xcbi1cXG4tXFx0LyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovXFxuK1xcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcXG4rXFx0XFx0cmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBwbWtzYSwgZmFsc2UpO1xcbiBcXG4gXFx0bnBtayA9IGxlMzJfdG9fY3B1KGNmZy1cXHUwMDNlcG1rX2xpc3QubnBtayk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucG1rOyBpKyspXFxuQEAgLTQ0ODcsOCArNDU4Myw4IEBAIGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxcbiBcXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBOVUxMLCBmYWxzZSk7XFxuLVxcbi1cXHQvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi9cXG4rXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxcbitcXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTtcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2Y2ZnLVxcdTAwM2VwbWtfbGlzdCwgMCwgc2l6ZW9mKGNmZy1cXHUwMDNlcG1rX2xpc3QpKTtcXG4gXFx0ZXJyID0gYnJjbWZfdXBkYXRlX3Bta2xpc3QoY2ZnLCBpZnApO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXFxuaW5kZXggNmNlYjMwMTQyOTA1NC4uNTcxNjdmZGU1YmExNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXFxuQEAgLTM0NCw3ICszNDQsOCBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfd293bCB7XFxuICAqIEBic3NfbGlzdDogYnNzX2xpc3QgaG9sZGluZyBzY2FubmVkIGFwIGluZm9ybWF0aW9uLlxcbiAgKiBAYnNzX2luZm86IGJzcyBpbmZvcm1hdGlvbiBmb3IgY2ZnODAyMTEgbGF5ZXIuXFxuICAqIEBjb25uX2luZm86IGFzc29jaWF0aW9uIGluZm8uXFxuLSAqIEBwbWtfbGlzdDogd3BhMiBwbWsgbGlzdC5cXG4rICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0IChWMSBmaXJtd2FyZSkuXFxuKyAqIEBwbWtfbGlzdF92Mjogd3BhMiBwbWsgbGlzdCBmb3IgVjIgZmlybXdhcmUgKEZJTFMtY2FwYWJsZSwgZmlybXdhcmUgcmV2IDEyKS5cXG4gICogQHNjYW5fc3RhdHVzOiBzY2FuIGFjdGl2aXR5IG9uIHRoZSBkb25nbGUuXFxuICAqIEBwdWI6IGNvbW1vbiBkcml2ZXIgaW5mb3JtYXRpb24uXFxuICAqIEBjaGFubmVsOiBjdXJyZW50IGNoYW5uZWwuXFxuQEAgLTM3Niw2ICszNzcsNyBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyB7XFxuIFxcdHN0cnVjdCB3bF9jZmc4MDIxMV9ic3NfaW5mbyAqYnNzX2luZm87XFxuIFxcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gY29ubl9pbmZvO1xcbiBcXHRzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfbGUgcG1rX2xpc3Q7XFxuK1xcdHN0cnVjdCBicmNtZl9wbWtfbGlzdF92Ml9sZSBwbWtfbGlzdF92MjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzY2FuX3N0YXR1cztcXG4gXFx0c3RydWN0IGJyY21mX3B1YiAqcHViO1xcbiBcXHR1MzIgY2hhbm5lbDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcXG5pbmRleCBlYzE3MDY0NzgwMGRhLi42NzNmMDAwMDM4OWNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXFxuQEAgLTQzMSw0NSArNDMxLDUxIEBAIHZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdG5ldGlmX3J4KHNrYik7XFxuIH1cXG4gXFxuK3N0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvIHtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgaGRyO1xcbitcXHRzOCBkYm1fYW50c2lnbmFsO1xcbit9IF9fcGFja2VkO1xcbitcXG4gdm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfUkFESU9UQVApKSB7XFxuLVxcdFxcdC8qIERvIG5vdGhpbmcgKi9cXG4rXFx0XFx0LyogRmlybXdhcmUgYWxyZWFkeSBwcm92aWRlZCBhIGZ1bGwgcmFkaW90YXAgaGVhZGVyOyBkbyBub3RoaW5nICovXFxuIFxcdH0gZWxzZSBpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9NT05JVE9SX0ZNVF9IV19SWF9IRFIpKSB7XFxuIFxcdFxcdHN0cnVjdCB3bGNfZDExcnhoZHIgKndsY19yeGhkciA9IChzdHJ1Y3Qgd2xjX2QxMXJ4aGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbi1cXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XFxuK1xcdFxcdHN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvICpydGFwO1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xcbiBcXHRcXHR1MTYgUnhTdGF0dXMxO1xcbitcXHRcXHRzOCByc3NpO1xcbiBcXG4gXFx0XFx0UnhTdGF0dXMxID0gbGUxNl90b19jcHUod2xjX3J4aGRyLVxcdTAwM2VyeGhkci5SeFN0YXR1czEpO1xcbitcXHRcXHRyc3NpID0gd2xjX3J4aGRyLVxcdTAwM2Vyc3NpO1xcbiBcXG4gXFx0XFx0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB3bGNfZDExcnhoZHIpO1xcbi1cXHRcXHQvKiBNQUMgaW5zZXJ0cyAyIHBhZCBieXRlcyBmb3IgYTQgaGVhZGVycyBvciBRb1Mgb3IgQS1NU0RVXFxuLVxcdFxcdCAqIHN1YmZyYW1lc1xcbi1cXHRcXHQgKi9cXG4rXFx0XFx0LyogTUFDIGluc2VydHMgMiBwYWQgYnl0ZXMgZm9yIGE0IGhlYWRlcnMgb3IgUW9TIG9yIEEtTVNEVSBzdWJmcmFtZXMgKi9cXG4gXFx0XFx0aWYgKFJ4U3RhdHVzMSBcXHUwMDI2IFJYU19QQlBSRVMpXFxuIFxcdFxcdFxcdG9mZnNldCArPSAyO1xcbiBcXHRcXHRvZmZzZXQgKz0gRDExX1BIWV9IRFJfTEVOO1xcbiBcXG4gXFx0XFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xcbiBcXG4tXFx0XFx0LyogVE9ETzogdXNlIFJYIGhlYWRlciB0byBmaWxsIHNvbWUgcmFkaW90YXAgZGF0YSAqL1xcbi1cXHRcXHRyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpO1xcbi1cXHRcXHRtZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTtcXG4tXFx0XFx0cmFkaW90YXAtXFx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcXG4rXFx0XFx0LyogSW5zZXJ0IG91ciByYWRpb3RhcCBoZWFkZXIgd2l0aCBSU1NJIGRhdGEgKi9cXG4rXFx0XFx0cnRhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpydGFwKSk7XFxuK1xcdFxcdG1lbXNldChydGFwLCAwLCBzaXplb2YoKnJ0YXApKTtcXG4rXFx0XFx0cnRhcC1cXHUwMDNlaGRyLml0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcnRhcCkpO1xcbitcXHRcXHRydGFwLVxcdTAwM2VoZHIuaXRfcHJlc2VudCA9IGNwdV90b19sZTMyKDEgXFx1MDAzY1xcdTAwM2MgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUwpO1xcbitcXHRcXHRydGFwLVxcdTAwM2VkYm1fYW50c2lnbmFsID0gcnNzaTtcXG4gXFxuLVxcdFxcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cXG4tXFx0XFx0c2tiLVxcdTAwM2VsZW4gLT0gNDtcXG4rXFx0XFx0LyogU3RyaXAgdGhlIDQtYnl0ZSByZWNlaXZlIHN0YXR1cyAvIEZDUyB0YWlsICovXFxuK1xcdFxcdHNrYl90cmltKHNrYiwgc2tiLVxcdTAwM2VsZW4gLSA0KTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJhZGlvdGFwO1xcbiBcXG4tXFx0XFx0LyogVE9ETzogdXNlIFJYIHN0YXR1cyB0byBmaWxsIHNvbWUgcmFkaW90YXAgZGF0YSAqL1xcbiBcXHRcXHRyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpO1xcbiBcXHRcXHRtZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTtcXG4gXFx0XFx0cmFkaW90YXAtXFx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcXG4gXFxuLVxcdFxcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cXG4tXFx0XFx0c2tiLVxcdTAwM2VsZW4gLT0gNDtcXG4rXFx0XFx0LyogU3RyaXAgdGhlIDQtYnl0ZSByZWNlaXZlIHN0YXR1cyAvIEZDUyB0YWlsICovXFxuK1xcdFxcdHNrYl90cmltKHNrYiwgc2tiLVxcdTAwM2VsZW4gLSA0KTtcXG4gXFx0fVxcbiBcXG4gXFx0c2tiLVxcdTAwM2VkZXYgPSBpZnAtXFx1MDAzZW5kZXY7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmNcXG5pbmRleCAzNWNiY2VhMGFiYzlhLi5iOWM1MTg5MzlmNTA0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmNcXG5AQCAtMTgyLDEwICsxODIsOCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXFxuIFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZjtcXG4gXFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcXG4gXFx0c3RydWN0IGJyY21mX2lmICppZnA7XFxuLVxcdGJvb2wgY3VycmVudGx5X2Jsb2NrZWQ7XFxuLVxcdGludCBpO1xcbi1cXHR1OCBpZmlkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTggaWZpZHg7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Zmxvdy1cXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xcbiBcXG5AQCAtMTk0LDIzICsxOTIsNTQgQEAgc3RhdGljIHZvaWQgYnJjbWZfZmxvd3JpbmdfYmxvY2soc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkLFxcbiBcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZmbG93LVxcdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRpZmlkeCA9IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChmbG93LCBmbG93aWQpO1xcbiBcXG4tXFx0Y3VycmVudGx5X2Jsb2NrZWQgPSBmYWxzZTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZsb3ctXFx1MDAzZW5yb2ZyaW5nczsgaSsrKSB7XFxuLVxcdFxcdGlmICgoZmxvdy1cXHUwMDNlcmluZ3NbaV0pIFxcdTAwMjZcXHUwMDI2IChpICE9IGZsb3dpZCkpIHtcXG4tXFx0XFx0XFx0cmluZyA9IGZsb3ctXFx1MDAzZXJpbmdzW2ldO1xcbi1cXHRcXHRcXHRpZiAoKHJpbmctXFx1MDAzZXN0YXR1cyA9PSBSSU5HX09QRU4pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAoYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGkpID09IGlmaWR4KSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocmluZy1cXHUwMDNlYmxvY2tlZCkge1xcbi1cXHRcXHRcXHRcXHRcXHRjdXJyZW50bHlfYmxvY2tlZCA9IHRydWU7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4rXFx0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcXG4rXFx0cmluZy1cXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYWludGFpbiB0aGUgcGVyLWludGVyZmFjZSBibG9ja2VkLXJpbmcgY291bnRlci5cXG4rXFx0ICpcXG4rXFx0ICogV2UgdXNlIHJpbmctXFx1MDAzZWNvdW50ZWRfaW5fYmxvY2tlZCByYXRoZXIgdGhhbiBjaGVja2luZ1xcbitcXHQgKiByaW5nLVxcdTAwM2VzdGF0dXMgaGVyZS4gIEEgcmluZyB0aGF0IGJlY2FtZSBibG9ja2VkIHdoaWxlXFxuK1xcdCAqIFJJTkdfT1BFTiBoYXMgYWxyZWFkeSBiZWVuIGNvdW50ZWQgKGNvdW50ZWRfaW5fYmxvY2tlZD10cnVlKS5cXG4rXFx0ICogQnkgdGhlIHRpbWUgd2UgdW5ibG9jayBpdCBkdXJpbmcgdGVhcmRvd24gaXRzIHN0YXR1cyBtYXkgaGF2ZVxcbitcXHQgKiBhZHZhbmNlZCB0byBSSU5HX0NMT1NJTkcsIHNvIHRlc3RpbmcgUklOR19PUEVOIHdvdWxkIHdyb25nbHlcXG4rXFx0ICogc2tpcCB0aGUgYXRvbWljX2RlYyBhbmQgcGVybWFuZW50bHkgbGVhayB0aGUgY291bnRlciwgbGVhdmluZ1xcbitcXHQgKiB0aGUgbmV0aWYgcXVldWUgc3RvcHBlZCBmb3JldmVyLlxcbitcXHQgKlxcbitcXHQgKiBSdWxlOlxcbitcXHQgKiAgIGJsb2NrIHRyYW5zaXRpb24gICh1bmJsb2NrZWTihpJibG9ja2VkKTogY291bnQgb25seSBpZiBSSU5HX09QRU4sXFxuK1xcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGNvdW50ZWRfaW5fYmxvY2tlZC5cXG4rXFx0ICogICB1bmJsb2NrIHRyYW5zaXRpb24gKGJsb2NrZWTihpJ1bmJsb2NrZWQpOiBkZWNyZW1lbnQgb25seSBpZiB3ZVxcbitcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgY291bnRlZCBpdCxcXG4rXFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhciBjb3VudGVkX2luX2Jsb2NrZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoYmxvY2tlZCkge1xcbitcXHRcXHRpZiAocmluZy1cXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikge1xcbitcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZmbG93LVxcdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2Vjb3VudGVkX2luX2Jsb2NrZWQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChyaW5nLVxcdTAwM2Vjb3VudGVkX2luX2Jsb2NrZWQpIHtcXG4rXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2Zmxvdy1cXHUwMDNlaWZfYmxvY2tlZF9jbnRbaWZpZHhdKTtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogT25seSBwcm9wYWdhdGUgYSBuZXRpZiBxdWV1ZS1zdG9wL3dha2Ugd2hlbiB0aGUgaW50ZXJmYWNlXFxuK1xcdCAqIHRyYW5zaXRpb25zIGJldHdlZW4gZnVsbHktY2xlYXIgYW5kIGF0LWxlYXN0LW9uZS1ibG9ja2VkLlxcbitcXHQgKiBSZWFkaW5nIHRoZSBhdG9taWMgaXMgc2FmZSBoZXJlOiB3ZSBob2xkIGJsb2NrX2xvY2ssIHNvIG5vXFxuK1xcdCAqIGNvbmN1cnJlbnQgYnJjbWZfZmxvd3JpbmdfYmxvY2soKSBjYWxsIGNhbiByYWNlIHRoZSB1cGRhdGVcXG4rXFx0ICogd2UganVzdCBtYWRlIGFib3ZlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGJsb2NrZWQgXFx1MDAyNlxcdTAwMjYgYXRvbWljX3JlYWQoXFx1MDAyNmZsb3ctXFx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSkgIT0gMSkge1xcbitcXHRcXHQvKiBBbm90aGVyIHJpbmcgd2FzIGFscmVhZHkgYmxvY2tlZDsgbm8gbmV3IHF1ZXVlLXN0b3AgbmVlZGVkLiAqL1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZmbG93LVxcdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRmbG93LVxcdTAwM2VyaW5nc1tmbG93aWRdLVxcdTAwM2VibG9ja2VkID0gYmxvY2tlZDtcXG4tXFx0aWYgKGN1cnJlbnRseV9ibG9ja2VkKSB7XFxuK1xcdGlmICghYmxvY2tlZCBcXHUwMDI2XFx1MDAyNiBhdG9taWNfcmVhZChcXHUwMDI2Zmxvdy1cXHUwMDNlaWZfYmxvY2tlZF9jbnRbaWZpZHhdKSAhPSAwKSB7XFxuK1xcdFxcdC8qIE1vcmUgcmluZ3Mgc3RpbGwgYmxvY2tlZDsgZG8gbm90IHdha2UgdGhlIHF1ZXVlIHlldC4gKi9cXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Zmxvdy1cXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5AQCAtMzY3LDYgKzM5Niw4IEBAIHN0cnVjdCBicmNtZl9mbG93cmluZyAqYnJjbWZfZmxvd3JpbmdfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IG5yb2ZyaW5ncylcXG4gXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmZsb3ctXFx1MDAzZWJsb2NrX2xvY2spO1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmbG93LVxcdTAwM2VhZGRyX21vZGUpOyBpKyspXFxuIFxcdFxcdFxcdGZsb3ctXFx1MDAzZWFkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXFx1MDAzZWlmX2Jsb2NrZWRfY250KTsgaSsrKVxcbitcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmbG93LVxcdTAwM2VpZl9ibG9ja2VkX2NudFtpXSwgMCk7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXFx1MDAzZWhhc2gpOyBpKyspXFxuIFxcdFxcdFxcdGZsb3ctXFx1MDAzZWhhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcXG5pbmRleCBmM2Q1MTFmOWEzYzlhLi5hZmRlYThiM2Y4YWE3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcXG5AQCAtNSw2ICs1LDggQEBcXG4gI2lmbmRlZiBCUkNNRk1BQ19GTE9XUklOR19IXFxuICNkZWZpbmUgQlJDTUZNQUNfRkxPV1JJTkdfSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbitcXG4gXFxuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSEFTSFNJWkVcXHRcXHQ1MTJcXHRcXHQvKiBoYXMgdG8gYmUgMl54ICovXFxuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSU5WQUxJRF9JRFxcdDB4RkZGRkZGRkZcXG5AQCAtMjYsNiArMjgsMTYgQEAgZW51bSByaW5nX3N0YXR1cyB7XFxuIHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nIHtcXG4gXFx0dTE2IGhhc2hfaWQ7XFxuIFxcdGJvb2wgYmxvY2tlZDtcXG4rXFx0LypcXG4rXFx0ICogVHJ1ZSB3aGVuIHRoaXMgcmluZyBoYXMgYmVlbiBjb3VudGVkIGluIHRoZSBwZXItaW50ZXJmYWNlXFxuK1xcdCAqIGlmX2Jsb2NrZWRfY250W10uICBTZXQgdG8gdHJ1ZSB3aGVuZXZlciB0aGUgcmluZyB0cmFuc2l0aW9uc1xcbitcXHQgKiB1bmJsb2NrZWTihpJibG9ja2VkIHdoaWxlIFJJTkdfT1BFTjsgY2xlYXJlZCBvbiB0aGUgbWF0Y2hpbmdcXG4rXFx0ICogYmxvY2tlZOKGknVuYmxvY2tlZCB0cmFuc2l0aW9uLiAgTmVlZGVkIHNvIHRoYXQgYSByaW5nIHRoYXRcXG4rXFx0ICogYmVjb21lcyBibG9ja2VkIHdoaWxlIFJJTkdfT1BFTiBhbmQgaXMgbGF0ZXIgbW92ZWQgdG9cXG4rXFx0ICogUklOR19DTE9TSU5HIHN0aWxsIGNvcnJlY3RseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyIGF0XFxuK1xcdCAqIHRlYXJkb3duLCBldmVuIHRob3VnaCBpdHMgc3RhdHVzIGlzIG5vIGxvbmdlciBSSU5HX09QRU4uXFxuK1xcdCAqL1xcbitcXHRib29sIGNvdW50ZWRfaW5fYmxvY2tlZDtcXG4gXFx0ZW51bSByaW5nX3N0YXR1cyBzdGF0dXM7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgc2tibGlzdDtcXG4gfTtcXG5AQCAtNDAsNiArNTIsMTIgQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nIHtcXG4gXFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX2hhc2ggaGFzaFtCUkNNRl9GTE9XUklOR19IQVNIU0laRV07XFxuIFxcdHNwaW5sb2NrX3QgYmxvY2tfbG9jaztcXG4gXFx0ZW51bSBwcm90b19hZGRyX21vZGUgYWRkcl9tb2RlW0JSQ01GX01BWF9JRlNdO1xcbitcXHQvKiBQZXItaW50ZXJmYWNlIGNvdW50IG9mIGN1cnJlbnRseSBibG9ja2VkIG9wZW4gcmluZ3MuXFxuK1xcdCAqIE1haW50YWluZWQgYXRvbWljYWxseSBzbyBicmNtZl9mbG93cmluZ19ibG9jaygpIGNhbiBjaGVja1xcbitcXHQgKiB3aGV0aGVyIGFueSBzaWJsaW5nIHJpbmcgaXMgYWxyZWFkeSBibG9ja2VkIGluIE8oMSkgd2l0aG91dFxcbitcXHQgKiBob2xkaW5nIGJsb2NrX2xvY2sgYWNyb3NzIGFuIE8obnJvZnJpbmdzKSB3YWxrLlxcbitcXHQgKi9cXG4rXFx0YXRvbWljX3QgaWZfYmxvY2tlZF9jbnRbQlJDTUZfTUFYX0lGU107XFxuIFxcdHUxNiBucm9mcmluZ3M7XFxuIFxcdGJvb2wgdGRsc19hY3RpdmU7XFxuIFxcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICp0ZGxzX2VudHJ5O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jXFxuaW5kZXggYTQzZjFhMzhiMGUzMC4uM2MxY2EzNTVlOGVlYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jXFxuQEAgLTEwMzcsNyArMTAzNyw5IEBAIGludCBicmNtZl9md3NfbWFjZGVzY19pbmRpY2F0ZShzdHJ1Y3QgYnJjbWZfZndzX2luZm8gKmZ3cywgdTggdHlwZSwgdTggKmRhdGEpXFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcInVzZSBleGlzdGluZ1xcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFdBUk5fT04oZW50cnktXFx1MDAzZW1hY19oYW5kbGUgIT0gbWFjX2hhbmRsZSk7XFxuLVxcdFxcdFxcdC8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovXFxuK1xcdFxcdFxcdC8qIEZpcm13YXJlIHJlLXNlbnQgQUREIGZvciB0aGUgc2FtZSBNQUMgaGFuZGxlLlxcbitcXHRcXHRcXHQgKiBObyBhY3Rpb24gcmVxdWlyZWQ7IGl0IGlzIGEgc2FmZSBuby1vcC5cXG4rXFx0XFx0XFx0ICovXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXFxuaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcXG5AQCAtNDgsNyArNDgsMTkgQEBcXG4gI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJcXHRcXHQweDEzXFxuICNkZWZpbmUgTVNHQlVGX1RZUEVfTFBCS19ETUFYRkVSX0NNUExUXFx0XFx0MHgxNFxcbiBcXG4tI2RlZmluZSBOUl9UWF9QS1RJRFNcXHRcXHRcXHRcXHQyMDQ4XFxuKy8qXFxuKyAqIE5SX1RYX1BLVElEUzogbnVtYmVyIG9mIHNpbXVsdGFuZW91c2x5IGluLWZsaWdodCBUWCBwYWNrZXQgSURzLlxcbisgKiBFYWNoIG91dHN0YW5kaW5nIFRYIGZyYW1lIGNvbnN1bWVzIG9uZSBJRCB1bnRpbCB0aGUgZG9uZ2xlIHJldHVybnNcXG4rICogYSBUWC1zdGF0dXMgY29tcGxldGlvbi4gIFRoZSBvcmlnaW5hbCAyMDQ4LWVudHJ5IHBvb2wgZXhoYXVzdGVkIHVuZGVyXFxuKyAqIOKJpTQgY29uY3VycmVudCBpcGVyZjMgc3RyZWFtcyBvbiBXaS1GaSA1LzYgKDgwMi4xMWFjL2F4KSBkZXZpY2VzLFxcbisgKiBjYXVzaW5nIFxcXCJObyBQS1RJRCBhdmFpbGFibGVcXFwiIGRyb3BzIGFuZCBUQ1AgcmV0cmFuc21pdHMuICA0MDk2IGdpdmVzXFxuKyAqIGhlYWRyb29tIGZvciBoaWdoLWFnZ3JlZ2F0aW9uIHNjZW5hcmlvcyB3aGlsZSBzdGlsbCBmaXR0aW5nIGluIGFcXG4rICogbW9kZXN0IGFtb3VudCBvZiBob3N0IG1lbW9yeSAofjQ4IEtCIGZvciB0aGUgcGt0aWQgdGFibGUgZW50cmllcykuXFxuKyAqXFxuKyAqIE5SX1JYX1BLVElEUzogUlggcG9zdCBidWZmZXJzIHByZS1hbGxvY2F0ZWQgdG8gdGhlIGRvbmdsZS4gIDEwMjQgaXNcXG4rICogc3VmZmljaWVudCBmb3IgY3VycmVudCBoYXJkd2FyZSBSWCByaW5nIGRlcHRoczsgbGVhdmUgdW5jaGFuZ2VkLlxcbisgKi9cXG4rI2RlZmluZSBOUl9UWF9QS1RJRFNcXHRcXHRcXHRcXHQ0MDk2XFxuICNkZWZpbmUgTlJfUlhfUEtUSURTXFx0XFx0XFx0XFx0MTAyNFxcbiBcXG4gI2RlZmluZSBCUkNNRl9JT0NUTF9SRVFfUEtUSURcXHRcXHRcXHQweEZGRkVcXG5AQCAtNjQsOCArNzYsMjkgQEBcXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfUEtUX0ZMQUdTX0ZSQU1FX01BU0tcXHQweDA3XFxuICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19QUklPX1NISUZUXFx0NVxcbiBcXG4tI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMVxcdFxcdDMyXFxuLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDJcXHRcXHQ5NlxcbisvKlxcbisgKiBUWCBmbHVzaCAvIGRvb3JiZWxsLXJpbmcgdGhyZXNob2xkcy5cXG4rICpcXG4rICogQ05UMSBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgZnJhbWVzIHRvIGFjY3VtdWxhdGUgaW4gdGhlIGNvbW1vbnJpbmdcXG4rICogYmVmb3JlIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgd3JpdGVfY29tcGxldGUoKSAoZG9vcmJlbGwgcmluZykgaXNcXG4rICogaXNzdWVkIG1pZC1iYXRjaC4gIENOVDIgaXMgdGhlIGhhcmQgZmx1c2ggaW50ZXJ2YWw6IGFmdGVyIHRoaXMgbWFueVxcbisgKiBmcmFtZXMgaGF2ZSBiZWVuIHdyaXR0ZW4gc2luY2UgdGhlIGxhc3QgZmx1c2gsIHdlIHVuY29uZGl0aW9uYWxseVxcbisgKiByaW5nIHRoZSBiZWxsIGFuZCByZXNldCB0aGUgY291bnRlci5cXG4rICpcXG4rICogUmFpc2luZyBib3RoIGZyb20gdGhlIG9yaWdpbmFsIDMyLzk2IHRvIDY0LzEyOCBkb3VibGVzIHRoZSBhdmVyYWdlXFxuKyAqIG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyBjb21taXR0ZWQgcGVyIE1NSU8gd3JpdGUsIGhhbHZpbmcgdGhlIFBDSWVcXG4rICogZG9vcmJlbGwgcmF0ZSBvbiBzdXN0YWluZWQgdGhyb3VnaHB1dCB3b3JrbG9hZHMuICBUaGUgdHJhZGVvZmYgaXMgYVxcbisgKiBtYXJnaW5hbGx5IGhpZ2hlciB3b3JzdC1jYXNlIGxhdGVuY3kgZm9yIHRoZSBsYXN0IGZyYW1lcyBpbiBhIGJ1cnN0LFxcbisgKiB3aGljaCBpbiBwcmFjdGljZSBpcyBoaWRkZW4gYnkgdGhlIHRpbWUgdGhlIGRvbmdsZSBETUEgZW5naW5lIGRyYWluc1xcbisgKiB0aGUgcHJldmlvdXMgYmF0Y2guXFxuKyAqXFxuKyAqIFRSSUNLTEVfVFhXT1JLRVJfVEhSUyBnb3Zlcm5zIGhvdyBvZnRlbiBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YSgpXFxuKyAqIGZvcmNlcyBhIHdvcmtxdWV1ZSBzY2hlZHVsZSB3aGVuIHRoZSBxdWV1ZSBkZXB0aCBpcyBub3QgYSBtdWx0aXBsZSBvZlxcbisgKiB0aGlzIHZhbHVlLiAgS2VlcGluZyBpdCBhdCBoYWxmIG9mIENOVDEgKDMyKSBwcmVzZXJ2ZXMgcmVzcG9uc2l2ZW5lc3NcXG4rICogZm9yIGxvdy1yYXRlIGZsb3dzIChlLmcuIFZvSVAsIElDTVApIHRoYXQgbmV2ZXIgYWNjdW11bGF0ZSA2NCBmcmFtZXMuXFxuKyAqL1xcbisjZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQxXFx0XFx0NjRcXG4rI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMlxcdFxcdDEyOFxcbiBcXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSU1xcdDk2XFxuICNkZWZpbmUgQlJDTUZfTVNHQlVGX1RSSUNLTEVfVFhXT1JLRVJfVEhSU1xcdDMyXFxuQEAgLTc4NywxMCArODIwLDMwIEBAIHN0YXRpYyBpbnQgYnJjbWZfbXNnYnVmX3NjaGVkdWxlX3R4ZGF0YShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHUzMiBmbG93aWQsXFxuIHtcXG4gXFx0c3RydWN0IGJyY21mX2NvbW1vbnJpbmcgKmNvbW1vbnJpbmc7XFxuIFxcbi1cXHRzZXRfYml0KGZsb3dpZCwgbXNnYnVmLVxcdTAwM2VmbG93X21hcCk7XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBiaXQgd2FzIGFscmVhZHkgc2V0LCBhIHR4Zmxvd193b3JrIGl0ZW0gaXMgYWxyZWFkeVxcbitcXHQgKiBxdWV1ZWQgb3IgcnVubmluZyBmb3IgdGhpcyByaW5nLiAgSW4gdGhhdCBjYXNlIHRoZSBleGlzdGluZ1xcbitcXHQgKiB3b3JrZXIgd2lsbCBkcmFpbiBvdXIgZnJlc2hseSBlbnF1ZXVlZCBmcmFtZSB3aGVuIGl0IHJ1bnMsXFxuK1xcdCAqIHNvIHdlIG9ubHkgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIHdvcmsgaXRlbSB3aGVuIHRoZVxcbitcXHQgKiBmb3JjZSBmbGFnIGlzIHNldCBvciB0aGUgcmluZyBpcyBiZWxvdyB0aGUgZGVsYXkgdGhyZXNob2xkLlxcbitcXHQgKlxcbitcXHQgKiBJZiB0aGUgYml0IHdhcyBOT1Qgc2V0ICh0ZXN0X2FuZF9zZXRfYml0IHJldHVybnMgZmFsc2UpLCBub1xcbitcXHQgKiB3b3JrZXIgaXMgcGVuZGluZyBmb3IgdGhpcyByaW5nIGF0IGFsbC4gIFdlIE1VU1Qgc2NoZWR1bGVcXG4rXFx0ICogb25lIHVuY29uZGl0aW9uYWxseSwgb3RoZXJ3aXNlIHRoZSBmcmFtZSB3ZSBqdXN0IGVucXVldWVkXFxuK1xcdCAqIHdpbGwgc2l0IGluIHRoZSBmbG93cmluZyB1bnNlbnQgdW50aWwgc29tZSB1bnJlbGF0ZWQgZXZlbnRcXG4rXFx0ICogdHJpZ2dlcnMgdGhlIHdvcmtxdWV1ZSDigJQgY2F1c2luZyBzaWxlbnQgVFggc3RhbGxzIHVuZGVyXFxuK1xcdCAqIGhpZ2ggbG9hZCB3aGVuIG91dHN0YW5kaW5nX3R4IFxcdTAwM2U9IERFTEFZX1RYV09SS0VSX1RIUlMuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoZmxvd2lkLCBtc2didWYtXFx1MDAzZWZsb3dfbWFwKSkge1xcbitcXHRcXHQvKiBCaXQgd2FzIGNsZWFyOiBubyB3b3JrZXIgcGVuZGluZywgYWx3YXlzIHNjaGVkdWxlLiAqL1xcbitcXHRcXHRxdWV1ZV93b3JrKG1zZ2J1Zi1cXHUwMDNldHhmbG93X3dxLCBcXHUwMDI2bXNnYnVmLVxcdTAwM2V0eGZsb3dfd29yayk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBCaXQgd2FzIGFscmVhZHkgc2V0OiB3b3JrZXIgcGVuZGluZywgYXBwbHkgY29hbGVzY2luZyBoZXVyaXN0aWMuICovXFxuIFxcdGNvbW1vbnJpbmcgPSBtc2didWYtXFx1MDAzZWZsb3dyaW5nc1tmbG93aWRdO1xcbi1cXHRpZiAoKGZvcmNlKSB8fCAoYXRvbWljX3JlYWQoXFx1MDAyNmNvbW1vbnJpbmctXFx1MDAzZW91dHN0YW5kaW5nX3R4KSBcXHUwMDNjXFxuLVxcdFxcdFxcdEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSlcXG4rXFx0aWYgKGZvcmNlIHx8IChhdG9taWNfcmVhZChcXHUwMDI2Y29tbW9ucmluZy1cXHUwMDNlb3V0c3RhbmRpbmdfdHgpIFxcdTAwM2NcXG4rXFx0XFx0ICAgICAgQlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlMpKVxcbiBcXHRcXHRxdWV1ZV93b3JrKG1zZ2J1Zi1cXHUwMDNldHhmbG93X3dxLCBcXHUwMDI2bXNnYnVmLVxcdTAwM2V0eGZsb3dfd29yayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTYyMSwxMSArMTY3NCwxMSBAQCBpbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbiBcXHRkbyB7XFxuIFxcdFxcdGJyY21mX21zZ2J1Zl9yeGJ1Zl9kYXRhX2ZpbGwobXNnYnVmKTtcXG4gXFx0XFx0aWYgKG1zZ2J1Zi1cXHUwMDNlbWF4X3J4YnVmcG9zdCAhPSBtc2didWYtXFx1MDAzZXJ4YnVmcG9zdClcXG4tXFx0XFx0XFx0bXNsZWVwKDEwKTtcXG4rXFx0XFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjb3VudCsrO1xcbi1cXHR9IHdoaWxlIChjb3VudCBcXHUwMDNjIDEwKTtcXG4rXFx0fSB3aGlsZSAoY291bnQgXFx1MDAzYyAxMDApO1xcbiBcXHRicmNtZl9tc2didWZfcnhidWZfZXZlbnRfcG9zdChtc2didWYpO1xcbiBcXHRicmNtZl9tc2didWZfcnhidWZfaW9jdGxyZXNwX3Bvc3QobXNnYnVmKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXFxuaW5kZXggMTM2NjJhYTRiNGVhNi4uOTMzOGE1ZmFhMjYwYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1xcbkBAIC0yNjgsNiArMjY4LDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfZmlybXdhcmVfbWFwcGluZyBicmNtZl9wY2llX2Z3bmFtZXNbXSA9IHtcXG4gXFxuICNkZWZpbmUgQlJDTUZfUENJRV9NQkRBVEFfVElNRU9VVFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoMjAwMClcXG4gXFxuKy8qXFxuKyAqIEgyRCBtYWlsYm94IHBvbGwgdGltaW5nIHBhcmFtZXRlcnMuXFxuKyAqXFxuKyAqIFRoZSBkb25nbGUgdHlwaWNhbGx5IGNsZWFycyB0aGUgSDJEIG1haWxib3ggcmVnaXN0ZXIgd2l0aGluIGEgZmV3XFxuKyAqIGh1bmRyZWQgbWljcm9zZWNvbmRzIGFmdGVyIHRoZSBkb29yYmVsbCBpbnRlcnJ1cHQgZmlyZXMuICBUaGVcXG4rICogb3JpZ2luYWwgY29kZSB1c2VkIG1zbGVlcCgxMCkgKiAxMDAgaXRlcmF0aW9ucywgbWVhbmluZyB0aGVcXG4rICogbWluaW11bSBvYnNlcnZhYmxlIGxhdGVuY3kgd2FzIDEwbXMgZXZlbiB3aGVuIHRoZSBkb25nbGUgd2FzIGZhc3QuXFxuKyAqXFxuKyAqIFdlIGluc3RlYWQgc3RhcnQgd2l0aCBhIHNob3J0IHNsZWVwIGFuZCBkb3VibGUgaXQgZWFjaCBpdGVyYXRpb25cXG4rICogKGV4cG9uZW50aWFsIGJhY2tvZmYpIHVwIHRvIEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMsIHN0YXlpbmdcXG4rICogd2l0aGluIHRoZSBzYW1lIDEtc2Vjb25kIGFic29sdXRlIHRpbWVvdXQuXFxuKyAqXFxuKyAqIE1JTl9VUyAvIElOSVRJQUxfTUFYX1VTIDogdXNsZWVwX3JhbmdlIGJvdW5kcyBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbi5cXG4rICogTUFYX1VTICAgICA6IGNhcCBvbiB0aGUgcGVyLWl0ZXJhdGlvbiBzbGVlcCAowrVzKS5cXG4rICogVElNRU9VVF9VUyA6IHRvdGFsIGJ1ZGdldCBiZWZvcmUgZ2l2aW5nIHVwICgxIHNlY29uZCkuXFxuKyAqL1xcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVNcXHRcXHQ0MFxcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9JTklUSUFMX01BWF9VU1xcdDUwXFxuKyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX01BWF9VU1xcdFxcdDUwMDBcXG4rI2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VU1xcdFxcdDEwMDAwMDBcXG4rXFxuICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfU1RBVFVTX0NNRFxcdFxcdDB4NFxcbiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX1BNX0NTUlxcdFxcdDB4NENcXG4gI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19NU0lfQ0FQXFx0XFx0MHg1OFxcbkBAIC03NjYsNyArNzg3LDggQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSlcXG4gXFx0c3RydWN0IGJyY21mX2NvcmUgKmNvcmU7XFxuIFxcdHUzMiBhZGRyO1xcbiBcXHR1MzIgY3VyX2h0b2RfbWJfZGF0YTtcXG4tXFx0dTMyIGk7XFxuK1xcdHUzMiBlbGFwc2VkX3VzID0gMDtcXG4rXFx0dTMyIHNsZWVwX3VzID0gQlJDTUZfUENJRV9NQl9QT0xMX0lOSVRJQUxfTUFYX1VTO1xcbiBcXG4gXFx0c2hhcmVkID0gXFx1MDAyNmRldmluZm8tXFx1MDAzZXNoYXJlZDtcXG4gXFx0YWRkciA9IHNoYXJlZC1cXHUwMDNlaHRvZF9tYl9kYXRhX2FkZHI7XFxuQEAgLTc3NiwxMiArNzk4LDQwIEBAIGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBodG9kX21iX2RhdGEpXFxuIFxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiTUIgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBwZW5kaW5nIDB4JTA0eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICBjdXJfaHRvZF9tYl9kYXRhKTtcXG4gXFxuLVxcdGkgPSAwO1xcbitcXHQvKlxcbitcXHQgKiBXYWl0IGZvciB0aGUgZG9uZ2xlIHRvIGNvbnN1bWUgdGhlIHByZXZpb3VzIEgyRCBtYWlsYm94IG1lc3NhZ2UuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZXJlIGlzIG5vIGludGVycnVwdCB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZG9uZ2xlIGNsZWFycyB0aGlzXFxuK1xcdCAqIHJlZ2lzdGVyLCBzbyBwb2xsaW5nIGlzIHVuYXZvaWRhYmxlLiAgVGhlIG9yaWdpbmFsIGNvZGUgdXNlZFxcbitcXHQgKiBtc2xlZXAoMTApIHBlciBpdGVyYXRpb24sIGluY3VycmluZyBhdCBsZWFzdCAxMG1zIG9mIGxhdGVuY3lcXG4rXFx0ICogZXZlbiB3aGVuIHRoZSBkb25nbGUgcmVzcG9uZGVkIGluIG1pY3Jvc2Vjb25kcy5cXG4rXFx0ICpcXG4rXFx0ICogV2UgdXNlIHVzbGVlcF9yYW5nZSgpIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiBpbnN0ZWFkOlxcbitcXHQgKiAgIC0gRmlyc3QgaXRlcmF0aW9uIHNsZWVwcyB+NTDCtXMgKGZhc3QgcGF0aCBmb3IgcmVzcG9uc2l2ZSBkb25nbGUpLlxcbitcXHQgKiAgIC0gRWFjaCBzdWJzZXF1ZW50IGl0ZXJhdGlvbiBkb3VibGVzIHRoZSBzbGVlcCwgY2FwcGVkIGF0IDVtcyxcXG4rXFx0ICogICAgIHNvIGxvbmcgd2FpdHMgc3RpbGwgeWllbGQgdGhlIENQVSB3aXRob3V0IGJ1c3ktc3Bpbm5pbmcuXFxuK1xcdCAqICAgLSBUb3RhbCB0aW1lb3V0IG1hdGNoZXMgdGhlIG9yaWdpbmFsIDEtc2Vjb25kIGxpbWl0LlxcbitcXHQgKiAgIC0gV2UgYmFpbCBlYXJseSBpZiB0aGUgZGV2aWNlIGhhcyBnb25lIGRvd24gc28gdGhhdCBhIGRlYWRcXG4rXFx0ICogICAgIGRvbmdsZSBkb2VzIG5vdCBob2xkIHRoZSBjYWxsZXIgZm9yIGEgZnVsbCBzZWNvbmQuXFxuK1xcdCAqL1xcbiBcXHR3aGlsZSAoY3VyX2h0b2RfbWJfZGF0YSAhPSAwKSB7XFxuLVxcdFxcdG1zbGVlcCgxMCk7XFxuLVxcdFxcdGkrKztcXG4tXFx0XFx0aWYgKGkgXFx1MDAzZSAxMDApXFxuK1xcdFxcdGlmIChkZXZpbmZvLVxcdTAwM2VzdGF0ZSA9PSBCUkNNRk1BQ19QQ0lFX1NUQVRFX0RPV04pIHtcXG4rXFx0XFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJEZXZpY2UgZG93biwgYWJvcnRpbmcgTUIgc2VuZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoZWxhcHNlZF91cyBcXHUwMDNlPSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUykge1xcbitcXHRcXHRcXHRicmNtZl9lcnIoXFxcIlRpbWVvdXQgd2FpdGluZyBmb3IgSDJEIE1CIHNsb3QgYWZ0ZXIgJXUgdXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgZWxhcHNlZF91cyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoQlJDTUZfUENJRV9NQl9QT0xMX01JTl9VUywgc2xlZXBfdXMpO1xcbitcXHRcXHRlbGFwc2VkX3VzICs9IHNsZWVwX3VzO1xcbitcXG4rXFx0XFx0LyogRXhwb25lbnRpYWwgYmFja29mZiwgY2FwcGVkIGF0IEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMgKi9cXG4rXFx0XFx0c2xlZXBfdXMgPSBtaW4oc2xlZXBfdXMgKiAyLCAodTMyKUJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMpO1xcbitcXG4gXFx0XFx0Y3VyX2h0b2RfbWJfZGF0YSA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTAwMSwxMCArMTA1MSwxMCBAQCBzdGF0aWMgdm9pZCBicmNtZl9wY2llX3JlbGVhc2VfaXJxKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8pXFxuIFxcdGZyZWVfaXJxKHBkZXYtXFx1MDAzZWlycSwgZGV2aW5mbyk7XFxuIFxcdHBjaV9kaXNhYmxlX21zaShwZGV2KTtcXG4gXFxuLVxcdG1zbGVlcCg1MCk7XFxuK1xcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4gXFx0Y291bnQgPSAwO1xcbi1cXHR3aGlsZSAoKGRldmluZm8tXFx1MDAzZWluX2lycSkgXFx1MDAyNlxcdTAwMjYgKGNvdW50IFxcdTAwM2MgMjApKSB7XFxuLVxcdFxcdG1zbGVlcCg1MCk7XFxuK1xcdHdoaWxlICgoZGV2aW5mby1cXHUwMDNlaW5faXJxKSBcXHUwMDI2XFx1MDAyNiAoY291bnQgXFx1MDAzYyAxMDAwKSkge1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuIFxcdFxcdGNvdW50Kys7XFxuIFxcdH1cXG4gXFx0aWYgKGRldmluZm8tXFx1MDAzZWluX2lycSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcXG5pbmRleCBiNzI1YzY0ZTViNWM2Li40ZTQxNDQwM2Q3NDcxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jXFxuQEAgLTE2NDUsMzcgKzE2NDUsNDMgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKVxcbiBcXG4gXFx0XFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcTtcXG4gXFx0XFx0cmRfbmV3LmxlbiA9IGRsZW47XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBDbGFpbSB0aGUgaG9zdCBvbmNlIGZvciB0aGUgZW50aXJlIGhlYWRlci1wYXJzaW5nIHBoYXNlLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBicmNtZl9zZGlvX2hkcGFyc2UoKSBvcGVyYXRlcyBvbiBkYXRhIGFscmVhZHkgaW4gaG9zdFxcbitcXHRcXHQgKiBtZW1vcnksIGJ1dCBtYXkgY2FsbCBicmNtZl9zZGlvX3J4ZmFpbCgpIG9uIGVycm9yLCB3aGljaFxcbitcXHRcXHQgKiB3cml0ZXMgU0RJTyBGdW5jMSByZWdpc3RlcnMgYW5kIHRoZXJlZm9yZSByZXF1aXJlcyB0aGVcXG4rXFx0XFx0ICogaG9zdCB0byBiZSBjbGFpbWVkLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBza2JfcHVsbCgpIGFuZCB0aGUgbnVtIGNvdW50ZXIgYXJlIHB1cmUgaG9zdC1tZW1vcnlcXG4rXFx0XFx0ICogb3BlcmF0aW9uczsga2VlcCB0aGVtIG91dHNpZGUgdGhlIGxvY2sgdG8gbWluaW1pc2UgdGhlXFxuK1xcdFxcdCAqIGhvbGQgdGltZS4gIEJvdGggaGRwYXJzZSBjYWxscyAoc3VwZXJmcmFtZSBoZWFkZXIgYW5kXFxuK1xcdFxcdCAqIGVhY2ggc3ViZnJhbWUgaGVhZGVyKSBhcmUgZ3JvdXBlZCB1bmRlciBhIHNpbmdsZSBjbGFpbS9cXG4rXFx0XFx0ICogcmVsZWFzZSwgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBOKzEgc2VwYXJhdGUgcGFpcnMuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRzZGlvX2NsYWltX2hvc3QoYnVzLVxcdTAwM2VzZGlvZGV2LVxcdTAwM2VmdW5jMSk7XFxuIFxcdFxcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtXFx1MDAzZWRhdGEsIFxcdTAwMjZyZF9uZXcsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgQlJDTUZfU0RJT19GVF9TVVBFUik7XFxuLVxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbi1cXHRcXHRidXMtXFx1MDAzZWN1cl9yZWFkLmxlbiA9IHJkX25ldy5sZW5fbnh0ZnJtIFxcdTAwM2NcXHUwMDNjIDQ7XFxuLVxcbi1cXHRcXHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xcbi1cXHRcXHRza2JfcHVsbChwZmlyc3QsIHJkX25ldy5kYXRfb2Zmc2V0KTtcXG4tXFx0XFx0bnVtID0gMDtcXG4tXFxuLVxcdFxcdC8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqL1xcbi1cXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2YnVzLVxcdTAwM2VnbG9tLCBwbmV4dCkge1xcbi1cXHRcXHRcXHQvKiBsZWF2ZSB3aGVuIGludmFsaWQgc3ViZnJhbWUgaXMgZm91bmQgKi9cXG4tXFx0XFx0XFx0aWYgKGVycmNvZGUpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0XFx0cmRfbmV3LmxlbiA9IHBuZXh0LVxcdTAwM2VsZW47XFxuLVxcdFxcdFxcdHJkX25ldy5zZXFfbnVtID0gcnhzZXErKztcXG4tXFx0XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbi1cXHRcXHRcXHRlcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtXFx1MDAzZWRhdGEsIFxcdTAwMjZyZF9uZXcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQlJDTUZfU0RJT19GVF9TVUIpO1xcbi1cXHRcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXFx1MDAzZXNkaW9kZXYtXFx1MDAzZWZ1bmMxKTtcXG4tXFx0XFx0XFx0YnJjbWZfZGJnX2hleF9kdW1wKEJSQ01GX0dMT01fT04oKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgcG5leHQtXFx1MDAzZWRhdGEsIDMyLCBcXFwic3ViZnJhbWU6XFxcXG5cXFwiKTtcXG4tXFxuLVxcdFxcdFxcdG51bSsrO1xcbitcXHRcXHQvKiBWYWxpZGF0ZSBhbGwgdGhlIHN1YmZyYW1lIGhlYWRlcnMgd2hpbGUgaG9zdCBpcyBjbGFpbWVkICovXFxuK1xcdFxcdGlmICghZXJyY29kZSkge1xcbitcXHRcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2YnVzLVxcdTAwM2VnbG9tLCBwbmV4dCkge1xcbitcXHRcXHRcXHRcXHRyZF9uZXcubGVuID0gcG5leHQtXFx1MDAzZWxlbjtcXG4rXFx0XFx0XFx0XFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcSsrO1xcbitcXHRcXHRcXHRcXHRlcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtXFx1MDAzZWRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJkX25ldyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBCUkNNRl9TRElPX0ZUX1NVQik7XFxuK1xcdFxcdFxcdFxcdGJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHBuZXh0LVxcdTAwM2VkYXRhLCAzMixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcInN1YmZyYW1lOlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdGlmIChlcnJjb2RlKVxcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoZXJyY29kZSkge1xcbi1cXHRcXHRcXHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IgKi9cXG4tXFx0XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbitcXHRcXHRcXHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IsIHN0aWxsIGhvbGRpbmcgdGhlIGhvc3QgKi9cXG4gXFx0XFx0XFx0YnJjbWZfc2Rpb19yeGZhaWwoYnVzLCB0cnVlLCBmYWxzZSk7XFxuIFxcdFxcdFxcdGJ1cy1cXHUwMDNlc2RjbnQucnhnbG9tZmFpbCsrO1xcbiBcXHRcXHRcXHRicmNtZl9zZGlvX2ZyZWVfZ2xvbShidXMpO1xcbkBAIC0xNjgzLDYgKzE2ODksMTQgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKVxcbiBcXHRcXHRcXHRidXMtXFx1MDAzZWN1cl9yZWFkLmxlbiA9IDA7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbitcXG4rXFx0XFx0LyogSG9zdCByZWxlYXNlZDsgbm93IGRvIHRoZSBwdXJlLW1lbW9yeSBib29ra2VlcGluZyAqL1xcbitcXHRcXHRidXMtXFx1MDAzZWN1cl9yZWFkLmxlbiA9IHJkX25ldy5sZW5fbnh0ZnJtIFxcdTAwM2NcXHUwMDNjIDQ7XFxuK1xcbitcXHRcXHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xcbitcXHRcXHRza2JfcHVsbChwZmlyc3QsIHJkX25ldy5kYXRfb2Zmc2V0KTtcXG4rXFx0XFx0bnVtID0gMDtcXG4gXFxuIFxcdFxcdC8qIEJhc2ljIFNEIGZyYW1pbmcgbG9va3Mgb2sgLSBwcm9jZXNzIGVhY2ggcGFja2V0IChoZWFkZXIpICovXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXFxuaW5kZXggZmM3YTVkZDJlNWQ4Ni4uM2ZkOGJkYmQzNWU1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXFxuQEAgLTUxNiwxMiArNTE2LDExIEBAIGludCBicmNtc19jX2FtcGR1X2FkZF9mcmFtZShzdHJ1Y3QgYnJjbXNfYW1wZHVfc2Vzc2lvbiAqc2Vzc2lvbixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIFxcbiBcXHRcXHQvKlxcbi1cXHRcXHQgKiBXZSBhcmVuJ3QgcmVhbGx5IG91dCBvZiBzcGFjZSBpZiB0aGUgbmV3IGZyYW1lIGlzIG9mXFxuLVxcdFxcdCAqIGEgZGlmZmVyZW50IHByaW9yaXR5LCBidXQgd2Ugd2FudCB0aGUgc2FtZSBiZWhhdmlvdXJcXG4tXFx0XFx0ICogc28gcmV0dXJuIC1FTk9TUEMgYW55d2F5Llxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBYWFg6IFRoZSBvbGQgQU1QRFUgY29kZSBkaWQgdGhpcywgYnV0IGlzIGl0IHJlYWxseVxcbi1cXHRcXHQgKiBuZWNlc3Nhcnk/XFxuK1xcdFxcdCAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW5cXG4rXFx0XFx0ICogQS1NUERVIGJlbG9uZyB0byB0aGUgc2FtZSBUSUQgKFRyYWZmaWMgSWRlbnRpZmllcikuXFxuK1xcdFxcdCAqIFNpbmNlIHByaW9yaXR5IG1hcHMgdG8gVElELCBhIGRpZmZlcmVudCBwcmlvcml0eSBtZWFuc1xcbitcXHRcXHQgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLFxcbitcXHRcXHQgKiBzbyB3ZSByZXR1cm4gLUVOT1NQQyBoZXJlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0Zmlyc3QgPSBza2JfcGVlayhcXHUwMDI2c2Vzc2lvbi1cXHUwMDNlc2tiX2xpc3QpO1xcbiBcXHRcXHRpZiAocC1cXHUwMDNlcHJpb3JpdHkgIT0gZmlyc3QtXFx1MDAzZXByaW9yaXR5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxNzo1NS4xNzM4OTY2NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0OTMyOTEyMDEyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiLFxuICAgIFwiQlJDTUZNQUNfUENJRVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2RlbF9wbWtzYVwiLFxuICAgIFwiYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FcIixcbiAgICBcImJyY21mX25ldGlmX21vbl9yeFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgVjIgUE1LU0EgY2FjaGUgb3BlcmF0aW9ucyBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNmZzgwMjExIG5ldGxpbmsgY29tbWFuZHMgd2hlbiBhIEJyb2FkY29tIFdpLUZpIGRldmljZSBpcyBwcmVzZW50LiBTeXprYWxsZXIgY2FuIGVtdWxhdGUgc3VjaCBhIGRldmljZSB2aWEgaXRzIFVTQiBmdXp6ZXIsIG1ha2luZyB0aGlzIG5ldyBsb2dpYyByZWFjaGFibGUgYW5kIHRlc3RhYmxlLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyByYWRpb3RhcCBoZWFkZXIgaW5zZXJ0aW9uIGluIG1vbml0b3IgbW9kZSBhbmQgUENJZSBtYWlsYm94IHBvbGxpbmcsIHdoaWNoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBmZTE2N2U0NTZkYTFjYWY5MjgyNjk5Mjk1MzMxOTVhM2ZjYTMxMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA2OjE3OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuaW5kZXggMGI1NWQ0NDU4OTVmMi4uN2Q3ZTVlY2VjZDIyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuQEAgLTM5ODksMTIgKzM5ODksMTAgQEAgc3RhdGljIGludCBicmNtZl9jZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3Aoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYnJjbWZfZGVsYXkodTMyIG1zKVxuIHtcbi1cdGlmIChtcyBcdTAwM2MgMTAwMCAvIEhaKSB7XG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0XHRtZGVsYXkobXMpO1xuLVx0fSBlbHNlIHtcbitcdGlmIChtcyBcdTAwM2M9IDIwKVxuK1x0XHR1c2xlZXBfcmFuZ2UobXMgKiAxMDAwLCBtcyAqIDEwMDAgKyAxMDAwKTtcbitcdGVsc2VcbiBcdFx0bXNsZWVwKG1zKTtcbi1cdH1cbiB9XG4gXG4gc3RhdGljIHMzMiBicmNtZl9jb25maWdfd293bF9wYXR0ZXJuKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1OCBjbWRbNF0sXG5AQCAtNDM2NCw2ICs0MzYyLDEwNCBAQCBicmNtZl9wbWtzYV92M19vcChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IGNmZzgwMjExX3Bta3NhICpwbWtzYSxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIGJyY21mX3Bta3NhX3YyX29wIC0gdXBkYXRlIGZpcm13YXJlIFBNS1NBIGNhY2hlIHVzaW5nIHRoZSBWMiBsaXN0IGludGVyZmFjZS5cbisgKlxuKyAqIFYyIGZpcm13YXJlIChyZXZpc2lvbiAxMikgdXNlcyBhIHZlcnNpb25lZCBmbGF0IGxpc3Qgc3RydWN0dXJlXG4rICogKGJyY21mX3Bta19saXN0X3YyX2xlKSByYXRoZXIgdGhhbiB0aGUgcGVyLWVudHJ5IG9wZXJhdGlvbiBtb2RlbCBvZiBWMy5cbisgKiBFYWNoIGVudHJ5IGNhcnJpZXMgRklMUy1zcGVjaWZpYyBmaWVsZHMgKHJhdyBQTUsgbWF0ZXJpYWwsIFNTSUQsIGFuZFxuKyAqIGZpbHNfY2FjaGVfaWQpIGluIGFkZGl0aW9uIHRvIHRoZSBiYXNpYyBCU1NJRCArIFBNS0lEIHBhaXIsIGVuYWJsaW5nXG4rICogRklMUyBmYXN0LXJvYW1pbmcgb24gZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFYzLlxuKyAqXG4rICogQGNmZzogICBkcml2ZXIgY29uZmlnIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBzaGFkb3cgVjIgUE1LU0EgbGlzdFxuKyAqIEBpZnA6ICAgaW50ZXJmYWNlIHBvaW50ZXJcbisgKiBAcG1rc2E6IHRoZSBQTUtTQSB0byBhZGQvcmVtb3ZlLCBvciBOVUxMIGZvciBhIGZsdXNoXG4rICogQGFsaXZlOiB0cnVlID0gYWRkIChzZXQgdGltZV9sZWZ0IHRvIG5vLWV4cGlyeSksIGZhbHNlID0gcmVtb3ZlL2ZsdXNoXG4rICovXG4rc3RhdGljIHMzMlxuK2JyY21mX3Bta3NhX3YyX29wKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwLFxuK1x0XHQgIHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EsIGJvb2wgYWxpdmUpXG4re1xuK1x0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGNmZy1cdTAwM2VwdWI7XG4rXHRzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUgKmxpc3QgPSBcdTAwMjZjZmctXHUwMDNlcG1rX2xpc3RfdjI7XG4rXHRzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIgKnBtayA9IGxpc3QtXHUwMDNlcG1rO1xuK1x0dTMyIG5wbWsgPSBsZTE2X3RvX2NwdShsaXN0LVx1MDAzZWxlbmd0aCk7XG4rXHR1MzIgaTtcbitcbitcdC8qIG5wbWsgaGVyZSBzdG9yZXMgdGhlIGNvdW50IG9mIHZhbGlkIGVudHJpZXMsIHJlcHVycG9zaW5nIHRoZVxuK1x0ICogbGVuZ3RoIGZpZWxkIG9mIHRoZSBzaGFkb3cgbGlzdCBhcyBhIGNvdW50ZXIuICBXZSBjb252ZXJ0IHRvXG4rXHQgKiB0aGUgd2lyZSBmb3JtYXQgKGJ5dGUgbGVuZ3RoKSB3aGVuIHNlbmRpbmcgdG8gZmlybXdhcmUuXG4rXHQgKi9cbitcdGlmICghcG1rc2EpIHtcbitcdFx0LyogRmx1c2g6IHplcm8gdGhlIHNoYWRvdyBsaXN0IGFuZCBwdXNoIGFuIGVtcHR5IFYyIGxpc3QuICovXG4rXHRcdG1lbXNldChsaXN0LCAwLCBzaXplb2YoKmxpc3QpKTtcbitcdFx0Z290byBzZW5kO1xuK1x0fVxuK1xuK1x0aWYgKGFsaXZlKSB7XG4rXHRcdC8qIFNldDogc2VhcmNoIGZvciBleGlzdGluZyBCU1NJRCBtYXRjaCBmaXJzdC4gKi9cbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBtazsgaSsrKVxuK1x0XHRcdGlmICghbWVtY21wKHBta3NhLVx1MDAzZWJzc2lkLCBwbWtbaV0uYnNzaWQsIEVUSF9BTEVOKSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAoaSBcdTAwM2U9IEJSQ01GX01BWFBNS0lEKSB7XG4rXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJWMiBQTUtTQSBjYWNoZSBmdWxsICglZCBlbnRyaWVzKVxcblwiLFxuK1x0XHRcdFx0IG5wbWspO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdG1lbXNldChcdTAwMjZwbWtbaV0sIDAsIHNpemVvZihwbWtbaV0pKTtcbitcdFx0cG1rW2ldLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIpKTtcbitcdFx0aWYgKHBta3NhLVx1MDAzZWJzc2lkKVxuK1x0XHRcdG1lbWNweShwbWtbaV0uYnNzaWQsIHBta3NhLVx1MDAzZWJzc2lkLCBFVEhfQUxFTik7XG4rXHRcdGlmIChwbWtzYS1cdTAwM2VwbWtpZClcbitcdFx0XHRtZW1jcHkocG1rW2ldLnBta2lkLCBwbWtzYS1cdTAwM2VwbWtpZCwgV0xBTl9QTUtJRF9MRU4pO1xuK1x0XHRpZiAocG1rc2EtXHUwMDNlcG1rIFx1MDAyNlx1MDAyNiBwbWtzYS1cdTAwM2VwbWtfbGVuIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcG1rc2EtXHUwMDNlcG1rX2xlbiBcdTAwM2M9IFdMQU5fUE1LX0xFTl9TVUlURV9CXzE5Mikge1xuK1x0XHRcdG1lbWNweShwbWtbaV0ucG1rLCBwbWtzYS1cdTAwM2VwbWssIHBta3NhLVx1MDAzZXBta19sZW4pO1xuK1x0XHRcdHBta1tpXS5wbWtfbGVuID0gY3B1X3RvX2xlMTYocG1rc2EtXHUwMDNlcG1rX2xlbik7XG4rXHRcdH1cbitcdFx0aWYgKHBta3NhLVx1MDAzZXNzaWQgXHUwMDI2XHUwMDI2IHBta3NhLVx1MDAzZXNzaWRfbGVuKSB7XG4rXHRcdFx0bWVtY3B5KHBta1tpXS5zc2lkLlNTSUQsIHBta3NhLVx1MDAzZXNzaWQsIHBta3NhLVx1MDAzZXNzaWRfbGVuKTtcbitcdFx0XHRwbWtbaV0uc3NpZC5TU0lEX2xlbiA9IHBta3NhLVx1MDAzZXNzaWRfbGVuO1xuK1x0XHR9XG4rXHRcdGlmIChwbWtzYS1cdTAwM2VmaWxzX2NhY2hlX2lkKVxuK1x0XHRcdHBta1tpXS5maWxzX2NhY2hlX2lkID0gKnBta3NhLVx1MDAzZWZpbHNfY2FjaGVfaWQ7XG4rXG4rXHRcdGlmIChpID09IG5wbWspXG4rXHRcdFx0bnBtaysrO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogRGVsZXRlOiBmaW5kIGJ5IEJTU0lEIGFuZCBjb21wYWN0IHRoZSBsaXN0LiAqL1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucG1rOyBpKyspXG4rXHRcdFx0aWYgKCFtZW1jbXAocG1rc2EtXHUwMDNlYnNzaWQsIHBta1tpXS5ic3NpZCwgRVRIX0FMRU4pKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChpIFx1MDAzZT0gbnBtaykge1xuK1x0XHRcdGJwaHlfZXJyKGRydnIsIFwiVjIgUE1LU0EgZW50cnkgbm90IGZvdW5kXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGZvciAoOyBpIFx1MDAzYyBucG1rIC0gMTsgaSsrKVxuK1x0XHRcdG1lbWNweShcdTAwMjZwbWtbaV0sIFx1MDAyNnBta1tpICsgMV0sIHNpemVvZihwbWtbaV0pKTtcbitcdFx0bWVtc2V0KFx1MDAyNnBta1tucG1rIC0gMV0sIDAsIHNpemVvZihwbWtbbnBtayAtIDFdKSk7XG4rXHRcdG5wbWstLTtcbitcdH1cbitcbitcdC8qIFVwZGF0ZSBzaGFkb3cgZW50cnkgY291bnQgKHN0b3JlZCBpbiBsZW5ndGggZmllbGQpLiAqL1xuK1x0bGlzdC1cdTAwM2VsZW5ndGggPSBjcHVfdG9fbGUxNihucG1rKTtcbitcbitzZW5kOlxuK1x0LyogQnVpbGQgdGhlIHdpcmUtZm9ybWF0IGhlYWRlciBhbmQgc2VuZCB0aGUgZnVsbCBsaXN0IHRvIGZpcm13YXJlLlxuK1x0ICogdmVyc2lvbiBhbmQgbGVuZ3RoIG9uIHRoZSB3aXJlIHJlZmxlY3QgdGhlIGFjdHVhbCBieXRlIGZvb3RwcmludC5cbitcdCAqL1xuK1x0bGlzdC1cdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMTYoQlJDTUZfUE1LU0FfVkVSXzIpO1xuK1x0bGlzdC1cdTAwM2VsZW5ndGggID0gY3B1X3RvX2xlMTYob2Zmc2V0b2Yoc3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlLCBwbWspICtcbitcdFx0XHRcdCAgIG5wbWsgKiBzaXplb2Yoc3RydWN0IGJyY21mX3Bta3NhX3YyKSk7XG4rXG4rXHRyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCJwbWtpZF9pbmZvXCIsIGxpc3QsIHNpemVvZigqbGlzdCkpO1xuK31cbitcbitcbiBzdGF0aWMgX191c2VkIHMzMlxuIGJyY21mX3VwZGF0ZV9wbWtsaXN0KHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuIHtcbkBAIC00NDAyLDggKzQ0OTgsOCBAQCBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXG4gXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCB0cnVlKTtcbi1cbi1cdC8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqL1xuK1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxuK1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCB0cnVlKTtcbiBcbiBcdG5wbWsgPSBsZTMyX3RvX2NwdShjZmctXHUwMDNlcG1rX2xpc3QubnBtayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucG1rOyBpKyspXG5AQCAtNDQ0Niw4ICs0NTQyLDggQEAgYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxuIFx0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBwbWtzYSwgZmFsc2UpO1xuLVxuLVx0LyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovXG4rXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXG4rXHRcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIGZhbHNlKTtcbiBcbiBcdG5wbWsgPSBsZTMyX3RvX2NwdShjZmctXHUwMDNlcG1rX2xpc3QubnBtayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucG1rOyBpKyspXG5AQCAtNDQ4Nyw4ICs0NTgzLDggQEAgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXG4gXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIE5VTEwsIGZhbHNlKTtcbi1cbi1cdC8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqL1xuK1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxuK1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTtcbiBcbiBcdG1lbXNldChcdTAwMjZjZmctXHUwMDNlcG1rX2xpc3QsIDAsIHNpemVvZihjZmctXHUwMDNlcG1rX2xpc3QpKTtcbiBcdGVyciA9IGJyY21mX3VwZGF0ZV9wbWtsaXN0KGNmZywgaWZwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5pbmRleCA2Y2ViMzAxNDI5MDU0Li41NzE2N2ZkZTViYTE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5AQCAtMzQ0LDcgKzM0NCw4IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV93b3dsIHtcbiAgKiBAYnNzX2xpc3Q6IGJzc19saXN0IGhvbGRpbmcgc2Nhbm5lZCBhcCBpbmZvcm1hdGlvbi5cbiAgKiBAYnNzX2luZm86IGJzcyBpbmZvcm1hdGlvbiBmb3IgY2ZnODAyMTEgbGF5ZXIuXG4gICogQGNvbm5faW5mbzogYXNzb2NpYXRpb24gaW5mby5cbi0gKiBAcG1rX2xpc3Q6IHdwYTIgcG1rIGxpc3QuXG4rICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0IChWMSBmaXJtd2FyZSkuXG4rICogQHBta19saXN0X3YyOiB3cGEyIHBtayBsaXN0IGZvciBWMiBmaXJtd2FyZSAoRklMUy1jYXBhYmxlLCBmaXJtd2FyZSByZXYgMTIpLlxuICAqIEBzY2FuX3N0YXR1czogc2NhbiBhY3Rpdml0eSBvbiB0aGUgZG9uZ2xlLlxuICAqIEBwdWI6IGNvbW1vbiBkcml2ZXIgaW5mb3JtYXRpb24uXG4gICogQGNoYW5uZWw6IGN1cnJlbnQgY2hhbm5lbC5cbkBAIC0zNzYsNiArMzc3LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8ge1xuIFx0c3RydWN0IHdsX2NmZzgwMjExX2Jzc19pbmZvICpic3NfaW5mbztcbiBcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gY29ubl9pbmZvO1xuIFx0c3RydWN0IGJyY21mX3Bta19saXN0X2xlIHBta19saXN0O1xuK1x0c3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlIHBta19saXN0X3YyO1xuIFx0dW5zaWduZWQgbG9uZyBzY2FuX3N0YXR1cztcbiBcdHN0cnVjdCBicmNtZl9wdWIgKnB1YjtcbiBcdHUzMiBjaGFubmVsO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXG5pbmRleCBlYzE3MDY0NzgwMGRhLi42NzNmMDAwMDM4OWNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1xuQEAgLTQzMSw0NSArNDMxLDUxIEBAIHZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRuZXRpZl9yeChza2IpO1xuIH1cbiBcbitzdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBoZHI7XG4rXHRzOCBkYm1fYW50c2lnbmFsO1xuK30gX19wYWNrZWQ7XG4rXG4gdm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfUkFESU9UQVApKSB7XG4tXHRcdC8qIERvIG5vdGhpbmcgKi9cbitcdFx0LyogRmlybXdhcmUgYWxyZWFkeSBwcm92aWRlZCBhIGZ1bGwgcmFkaW90YXAgaGVhZGVyOyBkbyBub3RoaW5nICovXG4gXHR9IGVsc2UgaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfSFdfUlhfSERSKSkge1xuIFx0XHRzdHJ1Y3Qgd2xjX2QxMXJ4aGRyICp3bGNfcnhoZHIgPSAoc3RydWN0IHdsY19kMTFyeGhkciAqKXNrYi1cdTAwM2VkYXRhO1xuLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XG4rXHRcdHN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvICpydGFwO1xuIFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuIFx0XHR1MTYgUnhTdGF0dXMxO1xuK1x0XHRzOCByc3NpO1xuIFxuIFx0XHRSeFN0YXR1czEgPSBsZTE2X3RvX2NwdSh3bGNfcnhoZHItXHUwMDNlcnhoZHIuUnhTdGF0dXMxKTtcbitcdFx0cnNzaSA9IHdsY19yeGhkci1cdTAwM2Vyc3NpO1xuIFxuIFx0XHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHdsY19kMTFyeGhkcik7XG4tXHRcdC8qIE1BQyBpbnNlcnRzIDIgcGFkIGJ5dGVzIGZvciBhNCBoZWFkZXJzIG9yIFFvUyBvciBBLU1TRFVcbi1cdFx0ICogc3ViZnJhbWVzXG4tXHRcdCAqL1xuK1x0XHQvKiBNQUMgaW5zZXJ0cyAyIHBhZCBieXRlcyBmb3IgYTQgaGVhZGVycyBvciBRb1Mgb3IgQS1NU0RVIHN1YmZyYW1lcyAqL1xuIFx0XHRpZiAoUnhTdGF0dXMxIFx1MDAyNiBSWFNfUEJQUkVTKVxuIFx0XHRcdG9mZnNldCArPSAyO1xuIFx0XHRvZmZzZXQgKz0gRDExX1BIWV9IRFJfTEVOO1xuIFxuIFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gXG4tXHRcdC8qIFRPRE86IHVzZSBSWCBoZWFkZXIgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi9cbi1cdFx0cmFkaW90YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcmFkaW90YXApKTtcbi1cdFx0bWVtc2V0KHJhZGlvdGFwLCAwLCBzaXplb2YoKnJhZGlvdGFwKSk7XG4tXHRcdHJhZGlvdGFwLVx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcbitcdFx0LyogSW5zZXJ0IG91ciByYWRpb3RhcCBoZWFkZXIgd2l0aCBSU1NJIGRhdGEgKi9cbitcdFx0cnRhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpydGFwKSk7XG4rXHRcdG1lbXNldChydGFwLCAwLCBzaXplb2YoKnJ0YXApKTtcbitcdFx0cnRhcC1cdTAwM2VoZHIuaXRfbGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpydGFwKSk7XG4rXHRcdHJ0YXAtXHUwMDNlaGRyLml0X3ByZXNlbnQgPSBjcHVfdG9fbGUzMigxIFx1MDAzY1x1MDAzYyBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCk7XG4rXHRcdHJ0YXAtXHUwMDNlZGJtX2FudHNpZ25hbCA9IHJzc2k7XG4gXG4tXHRcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cbi1cdFx0c2tiLVx1MDAzZWxlbiAtPSA0O1xuK1x0XHQvKiBTdHJpcCB0aGUgNC1ieXRlIHJlY2VpdmUgc3RhdHVzIC8gRkNTIHRhaWwgKi9cbitcdFx0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gNCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XG4gXG4tXHRcdC8qIFRPRE86IHVzZSBSWCBzdGF0dXMgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi9cbiBcdFx0cmFkaW90YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcmFkaW90YXApKTtcbiBcdFx0bWVtc2V0KHJhZGlvdGFwLCAwLCBzaXplb2YoKnJhZGlvdGFwKSk7XG4gXHRcdHJhZGlvdGFwLVx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcbiBcbi1cdFx0LyogVE9ETzogNCBieXRlcyB3aXRoIHJlY2VpdmUgc3RhdHVzPyAqL1xuLVx0XHRza2ItXHUwMDNlbGVuIC09IDQ7XG4rXHRcdC8qIFN0cmlwIHRoZSA0LWJ5dGUgcmVjZWl2ZSBzdGF0dXMgLyBGQ1MgdGFpbCAqL1xuK1x0XHRza2JfdHJpbShza2IsIHNrYi1cdTAwM2VsZW4gLSA0KTtcbiBcdH1cbiBcbiBcdHNrYi1cdTAwM2VkZXYgPSBpZnAtXHUwMDNlbmRldjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXG5pbmRleCAzNWNiY2VhMGFiYzlhLi5iOWM1MTg5MzlmNTA0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXG5AQCAtMTgyLDEwICsxODIsOCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXG4gXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWY7XG4gXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyO1xuIFx0c3RydWN0IGJyY21mX2lmICppZnA7XG4tXHRib29sIGN1cnJlbnRseV9ibG9ja2VkO1xuLVx0aW50IGk7XG4tXHR1OCBpZmlkeDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1OCBpZmlkeDtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTE5NCwyMyArMTkyLDU0IEBAIHN0YXRpYyB2b2lkIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCxcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmbG93LVx1MDAzZWJsb2NrX2xvY2ssIGZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcbiBcbi1cdGN1cnJlbnRseV9ibG9ja2VkID0gZmFsc2U7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmbG93LVx1MDAzZW5yb2ZyaW5nczsgaSsrKSB7XG4tXHRcdGlmICgoZmxvdy1cdTAwM2VyaW5nc1tpXSkgXHUwMDI2XHUwMDI2IChpICE9IGZsb3dpZCkpIHtcbi1cdFx0XHRyaW5nID0gZmxvdy1cdTAwM2VyaW5nc1tpXTtcbi1cdFx0XHRpZiAoKHJpbmctXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgaSkgPT0gaWZpZHgpKSB7XG4tXHRcdFx0XHRpZiAocmluZy1cdTAwM2VibG9ja2VkKSB7XG4tXHRcdFx0XHRcdGN1cnJlbnRseV9ibG9ja2VkID0gdHJ1ZTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuK1x0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcbitcdHJpbmctXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XG4rXG4rXHQvKlxuK1x0ICogTWFpbnRhaW4gdGhlIHBlci1pbnRlcmZhY2UgYmxvY2tlZC1yaW5nIGNvdW50ZXIuXG4rXHQgKlxuK1x0ICogV2UgdXNlIHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkIHJhdGhlciB0aGFuIGNoZWNraW5nXG4rXHQgKiByaW5nLVx1MDAzZXN0YXR1cyBoZXJlLiAgQSByaW5nIHRoYXQgYmVjYW1lIGJsb2NrZWQgd2hpbGVcbitcdCAqIFJJTkdfT1BFTiBoYXMgYWxyZWFkeSBiZWVuIGNvdW50ZWQgKGNvdW50ZWRfaW5fYmxvY2tlZD10cnVlKS5cbitcdCAqIEJ5IHRoZSB0aW1lIHdlIHVuYmxvY2sgaXQgZHVyaW5nIHRlYXJkb3duIGl0cyBzdGF0dXMgbWF5IGhhdmVcbitcdCAqIGFkdmFuY2VkIHRvIFJJTkdfQ0xPU0lORywgc28gdGVzdGluZyBSSU5HX09QRU4gd291bGQgd3JvbmdseVxuK1x0ICogc2tpcCB0aGUgYXRvbWljX2RlYyBhbmQgcGVybWFuZW50bHkgbGVhayB0aGUgY291bnRlciwgbGVhdmluZ1xuK1x0ICogdGhlIG5ldGlmIHF1ZXVlIHN0b3BwZWQgZm9yZXZlci5cbitcdCAqXG4rXHQgKiBSdWxlOlxuK1x0ICogICBibG9jayB0cmFuc2l0aW9uICAodW5ibG9ja2Vk4oaSYmxvY2tlZCk6IGNvdW50IG9ubHkgaWYgUklOR19PUEVOLFxuK1x0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgY291bnRlZF9pbl9ibG9ja2VkLlxuK1x0ICogICB1bmJsb2NrIHRyYW5zaXRpb24gKGJsb2NrZWTihpJ1bmJsb2NrZWQpOiBkZWNyZW1lbnQgb25seSBpZiB3ZVxuK1x0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGNvdW50ZWQgaXQsXG4rXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyIGNvdW50ZWRfaW5fYmxvY2tlZC5cbitcdCAqL1xuK1x0aWYgKGJsb2NrZWQpIHtcbitcdFx0aWYgKHJpbmctXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikge1xuK1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pO1xuK1x0XHRcdHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkID0gdHJ1ZTtcbiBcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkKSB7XG4rXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSk7XG4rXHRcdFx0cmluZy1cdTAwM2Vjb3VudGVkX2luX2Jsb2NrZWQgPSBmYWxzZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LypcbitcdCAqIE9ubHkgcHJvcGFnYXRlIGEgbmV0aWYgcXVldWUtc3RvcC93YWtlIHdoZW4gdGhlIGludGVyZmFjZVxuK1x0ICogdHJhbnNpdGlvbnMgYmV0d2VlbiBmdWxseS1jbGVhciBhbmQgYXQtbGVhc3Qtb25lLWJsb2NrZWQuXG4rXHQgKiBSZWFkaW5nIHRoZSBhdG9taWMgaXMgc2FmZSBoZXJlOiB3ZSBob2xkIGJsb2NrX2xvY2ssIHNvIG5vXG4rXHQgKiBjb25jdXJyZW50IGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FsbCBjYW4gcmFjZSB0aGUgdXBkYXRlXG4rXHQgKiB3ZSBqdXN0IG1hZGUgYWJvdmUuXG4rXHQgKi9cbitcdGlmIChibG9ja2VkIFx1MDAyNlx1MDAyNiBhdG9taWNfcmVhZChcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSkgIT0gMSkge1xuK1x0XHQvKiBBbm90aGVyIHJpbmcgd2FzIGFscmVhZHkgYmxvY2tlZDsgbm8gbmV3IHF1ZXVlLXN0b3AgbmVlZGVkLiAqL1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4tXHRmbG93LVx1MDAzZXJpbmdzW2Zsb3dpZF0tXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XG4tXHRpZiAoY3VycmVudGx5X2Jsb2NrZWQpIHtcbitcdGlmICghYmxvY2tlZCBcdTAwMjZcdTAwMjYgYXRvbWljX3JlYWQoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDApIHtcbitcdFx0LyogTW9yZSByaW5ncyBzdGlsbCBibG9ja2VkOyBkbyBub3Qgd2FrZSB0aGUgcXVldWUgeWV0LiAqL1xuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMzY3LDYgKzM5Niw4IEBAIHN0cnVjdCBicmNtZl9mbG93cmluZyAqYnJjbWZfZmxvd3JpbmdfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IG5yb2ZyaW5ncylcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Zmxvdy1cdTAwM2VibG9ja19sb2NrKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbG93LVx1MDAzZWFkZHJfbW9kZSk7IGkrKylcbiBcdFx0XHRmbG93LVx1MDAzZWFkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudCk7IGkrKylcbitcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmZsb3ctXHUwMDNlaWZfYmxvY2tlZF9jbnRbaV0sIDApO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXHUwMDNlaGFzaCk7IGkrKylcbiBcdFx0XHRmbG93LVx1MDAzZWhhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcbmluZGV4IGYzZDUxMWY5YTNjOWEuLmFmZGVhOGIzZjhhYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcbkBAIC01LDYgKzUsOCBAQFxuICNpZm5kZWYgQlJDTUZNQUNfRkxPV1JJTkdfSFxuICNkZWZpbmUgQlJDTUZNQUNfRkxPV1JJTkdfSFxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4rXG4gXG4gI2RlZmluZSBCUkNNRl9GTE9XUklOR19IQVNIU0laRVx0XHQ1MTJcdFx0LyogaGFzIHRvIGJlIDJeeCAqL1xuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSU5WQUxJRF9JRFx0MHhGRkZGRkZGRlxuQEAgLTI2LDYgKzI4LDE2IEBAIGVudW0gcmluZ19zdGF0dXMge1xuIHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nIHtcbiBcdHUxNiBoYXNoX2lkO1xuIFx0Ym9vbCBibG9ja2VkO1xuK1x0LypcbitcdCAqIFRydWUgd2hlbiB0aGlzIHJpbmcgaGFzIGJlZW4gY291bnRlZCBpbiB0aGUgcGVyLWludGVyZmFjZVxuK1x0ICogaWZfYmxvY2tlZF9jbnRbXS4gIFNldCB0byB0cnVlIHdoZW5ldmVyIHRoZSByaW5nIHRyYW5zaXRpb25zXG4rXHQgKiB1bmJsb2NrZWTihpJibG9ja2VkIHdoaWxlIFJJTkdfT1BFTjsgY2xlYXJlZCBvbiB0aGUgbWF0Y2hpbmdcbitcdCAqIGJsb2NrZWTihpJ1bmJsb2NrZWQgdHJhbnNpdGlvbi4gIE5lZWRlZCBzbyB0aGF0IGEgcmluZyB0aGF0XG4rXHQgKiBiZWNvbWVzIGJsb2NrZWQgd2hpbGUgUklOR19PUEVOIGFuZCBpcyBsYXRlciBtb3ZlZCB0b1xuK1x0ICogUklOR19DTE9TSU5HIHN0aWxsIGNvcnJlY3RseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyIGF0XG4rXHQgKiB0ZWFyZG93biwgZXZlbiB0aG91Z2ggaXRzIHN0YXR1cyBpcyBubyBsb25nZXIgUklOR19PUEVOLlxuK1x0ICovXG4rXHRib29sIGNvdW50ZWRfaW5fYmxvY2tlZDtcbiBcdGVudW0gcmluZ19zdGF0dXMgc3RhdHVzO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JsaXN0O1xuIH07XG5AQCAtNDAsNiArNTIsMTIgQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nIHtcbiBcdHN0cnVjdCBicmNtZl9mbG93cmluZ19oYXNoIGhhc2hbQlJDTUZfRkxPV1JJTkdfSEFTSFNJWkVdO1xuIFx0c3BpbmxvY2tfdCBibG9ja19sb2NrO1xuIFx0ZW51bSBwcm90b19hZGRyX21vZGUgYWRkcl9tb2RlW0JSQ01GX01BWF9JRlNdO1xuK1x0LyogUGVyLWludGVyZmFjZSBjb3VudCBvZiBjdXJyZW50bHkgYmxvY2tlZCBvcGVuIHJpbmdzLlxuK1x0ICogTWFpbnRhaW5lZCBhdG9taWNhbGx5IHNvIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FuIGNoZWNrXG4rXHQgKiB3aGV0aGVyIGFueSBzaWJsaW5nIHJpbmcgaXMgYWxyZWFkeSBibG9ja2VkIGluIE8oMSkgd2l0aG91dFxuK1x0ICogaG9sZGluZyBibG9ja19sb2NrIGFjcm9zcyBhbiBPKG5yb2ZyaW5ncykgd2Fsay5cbitcdCAqL1xuK1x0YXRvbWljX3QgaWZfYmxvY2tlZF9jbnRbQlJDTUZfTUFYX0lGU107XG4gXHR1MTYgbnJvZnJpbmdzO1xuIFx0Ym9vbCB0ZGxzX2FjdGl2ZTtcbiBcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICp0ZGxzX2VudHJ5O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmNcbmluZGV4IGE0M2YxYTM4YjBlMzAuLjNjMWNhMzU1ZThlZWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmNcbkBAIC0xMDM3LDcgKzEwMzcsOSBAQCBpbnQgYnJjbWZfZndzX21hY2Rlc2NfaW5kaWNhdGUoc3RydWN0IGJyY21mX2Z3c19pbmZvICpmd3MsIHU4IHR5cGUsIHU4ICpkYXRhKVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJ1c2UgZXhpc3RpbmdcXG5cIik7XG4gXHRcdFx0V0FSTl9PTihlbnRyeS1cdTAwM2VtYWNfaGFuZGxlICE9IG1hY19oYW5kbGUpO1xuLVx0XHRcdC8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovXG4rXHRcdFx0LyogRmlybXdhcmUgcmUtc2VudCBBREQgZm9yIHRoZSBzYW1lIE1BQyBoYW5kbGUuXG4rXHRcdFx0ICogTm8gYWN0aW9uIHJlcXVpcmVkOyBpdCBpcyBhIHNhZmUgbm8tb3AuXG4rXHRcdFx0ICovXG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG5AQCAtNDgsNyArNDgsMTkgQEBcbiAjZGVmaW5lIE1TR0JVRl9UWVBFX0xQQktfRE1BWEZFUlx0XHQweDEzXG4gI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJfQ01QTFRcdFx0MHgxNFxuIFxuLSNkZWZpbmUgTlJfVFhfUEtUSURTXHRcdFx0XHQyMDQ4XG4rLypcbisgKiBOUl9UWF9QS1RJRFM6IG51bWJlciBvZiBzaW11bHRhbmVvdXNseSBpbi1mbGlnaHQgVFggcGFja2V0IElEcy5cbisgKiBFYWNoIG91dHN0YW5kaW5nIFRYIGZyYW1lIGNvbnN1bWVzIG9uZSBJRCB1bnRpbCB0aGUgZG9uZ2xlIHJldHVybnNcbisgKiBhIFRYLXN0YXR1cyBjb21wbGV0aW9uLiAgVGhlIG9yaWdpbmFsIDIwNDgtZW50cnkgcG9vbCBleGhhdXN0ZWQgdW5kZXJcbisgKiDiiaU0IGNvbmN1cnJlbnQgaXBlcmYzIHN0cmVhbXMgb24gV2ktRmkgNS82ICg4MDIuMTFhYy9heCkgZGV2aWNlcyxcbisgKiBjYXVzaW5nIFwiTm8gUEtUSUQgYXZhaWxhYmxlXCIgZHJvcHMgYW5kIFRDUCByZXRyYW5zbWl0cy4gIDQwOTYgZ2l2ZXNcbisgKiBoZWFkcm9vbSBmb3IgaGlnaC1hZ2dyZWdhdGlvbiBzY2VuYXJpb3Mgd2hpbGUgc3RpbGwgZml0dGluZyBpbiBhXG4rICogbW9kZXN0IGFtb3VudCBvZiBob3N0IG1lbW9yeSAofjQ4IEtCIGZvciB0aGUgcGt0aWQgdGFibGUgZW50cmllcykuXG4rICpcbisgKiBOUl9SWF9QS1RJRFM6IFJYIHBvc3QgYnVmZmVycyBwcmUtYWxsb2NhdGVkIHRvIHRoZSBkb25nbGUuICAxMDI0IGlzXG4rICogc3VmZmljaWVudCBmb3IgY3VycmVudCBoYXJkd2FyZSBSWCByaW5nIGRlcHRoczsgbGVhdmUgdW5jaGFuZ2VkLlxuKyAqL1xuKyNkZWZpbmUgTlJfVFhfUEtUSURTXHRcdFx0XHQ0MDk2XG4gI2RlZmluZSBOUl9SWF9QS1RJRFNcdFx0XHRcdDEwMjRcbiBcbiAjZGVmaW5lIEJSQ01GX0lPQ1RMX1JFUV9QS1RJRFx0XHRcdDB4RkZGRVxuQEAgLTY0LDggKzc2LDI5IEBAXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfUEtUX0ZMQUdTX0ZSQU1FX01BU0tcdDB4MDdcbiAjZGVmaW5lIEJSQ01GX01TR0JVRl9QS1RfRkxBR1NfUFJJT19TSElGVFx0NVxuIFxuLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDFcdFx0MzJcbi0jZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQyXHRcdDk2XG4rLypcbisgKiBUWCBmbHVzaCAvIGRvb3JiZWxsLXJpbmcgdGhyZXNob2xkcy5cbisgKlxuKyAqIENOVDEgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIGluIHRoZSBjb21tb25yaW5nXG4rICogYmVmb3JlIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgd3JpdGVfY29tcGxldGUoKSAoZG9vcmJlbGwgcmluZykgaXNcbisgKiBpc3N1ZWQgbWlkLWJhdGNoLiAgQ05UMiBpcyB0aGUgaGFyZCBmbHVzaCBpbnRlcnZhbDogYWZ0ZXIgdGhpcyBtYW55XG4rICogZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuIHNpbmNlIHRoZSBsYXN0IGZsdXNoLCB3ZSB1bmNvbmRpdGlvbmFsbHlcbisgKiByaW5nIHRoZSBiZWxsIGFuZCByZXNldCB0aGUgY291bnRlci5cbisgKlxuKyAqIFJhaXNpbmcgYm90aCBmcm9tIHRoZSBvcmlnaW5hbCAzMi85NiB0byA2NC8xMjggZG91YmxlcyB0aGUgYXZlcmFnZVxuKyAqIG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyBjb21taXR0ZWQgcGVyIE1NSU8gd3JpdGUsIGhhbHZpbmcgdGhlIFBDSWVcbisgKiBkb29yYmVsbCByYXRlIG9uIHN1c3RhaW5lZCB0aHJvdWdocHV0IHdvcmtsb2Fkcy4gIFRoZSB0cmFkZW9mZiBpcyBhXG4rICogbWFyZ2luYWxseSBoaWdoZXIgd29yc3QtY2FzZSBsYXRlbmN5IGZvciB0aGUgbGFzdCBmcmFtZXMgaW4gYSBidXJzdCxcbisgKiB3aGljaCBpbiBwcmFjdGljZSBpcyBoaWRkZW4gYnkgdGhlIHRpbWUgdGhlIGRvbmdsZSBETUEgZW5naW5lIGRyYWluc1xuKyAqIHRoZSBwcmV2aW91cyBiYXRjaC5cbisgKlxuKyAqIFRSSUNLTEVfVFhXT1JLRVJfVEhSUyBnb3Zlcm5zIGhvdyBvZnRlbiBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YSgpXG4rICogZm9yY2VzIGEgd29ya3F1ZXVlIHNjaGVkdWxlIHdoZW4gdGhlIHF1ZXVlIGRlcHRoIGlzIG5vdCBhIG11bHRpcGxlIG9mXG4rICogdGhpcyB2YWx1ZS4gIEtlZXBpbmcgaXQgYXQgaGFsZiBvZiBDTlQxICgzMikgcHJlc2VydmVzIHJlc3BvbnNpdmVuZXNzXG4rICogZm9yIGxvdy1yYXRlIGZsb3dzIChlLmcuIFZvSVAsIElDTVApIHRoYXQgbmV2ZXIgYWNjdW11bGF0ZSA2NCBmcmFtZXMuXG4rICovXG4rI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMVx0XHQ2NFxuKyNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDJcdFx0MTI4XG4gXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSU1x0OTZcbiAjZGVmaW5lIEJSQ01GX01TR0JVRl9UUklDS0xFX1RYV09SS0VSX1RIUlNcdDMyXG5AQCAtNzg3LDEwICs4MjAsMzAgQEAgc3RhdGljIGludCBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZiwgdTMyIGZsb3dpZCxcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfY29tbW9ucmluZyAqY29tbW9ucmluZztcbiBcbi1cdHNldF9iaXQoZmxvd2lkLCBtc2didWYtXHUwMDNlZmxvd19tYXApO1xuK1x0LypcbitcdCAqIElmIHRoZSBiaXQgd2FzIGFscmVhZHkgc2V0LCBhIHR4Zmxvd193b3JrIGl0ZW0gaXMgYWxyZWFkeVxuK1x0ICogcXVldWVkIG9yIHJ1bm5pbmcgZm9yIHRoaXMgcmluZy4gIEluIHRoYXQgY2FzZSB0aGUgZXhpc3RpbmdcbitcdCAqIHdvcmtlciB3aWxsIGRyYWluIG91ciBmcmVzaGx5IGVucXVldWVkIGZyYW1lIHdoZW4gaXQgcnVucyxcbitcdCAqIHNvIHdlIG9ubHkgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIHdvcmsgaXRlbSB3aGVuIHRoZVxuK1x0ICogZm9yY2UgZmxhZyBpcyBzZXQgb3IgdGhlIHJpbmcgaXMgYmVsb3cgdGhlIGRlbGF5IHRocmVzaG9sZC5cbitcdCAqXG4rXHQgKiBJZiB0aGUgYml0IHdhcyBOT1Qgc2V0ICh0ZXN0X2FuZF9zZXRfYml0IHJldHVybnMgZmFsc2UpLCBub1xuK1x0ICogd29ya2VyIGlzIHBlbmRpbmcgZm9yIHRoaXMgcmluZyBhdCBhbGwuICBXZSBNVVNUIHNjaGVkdWxlXG4rXHQgKiBvbmUgdW5jb25kaXRpb25hbGx5LCBvdGhlcndpc2UgdGhlIGZyYW1lIHdlIGp1c3QgZW5xdWV1ZWRcbitcdCAqIHdpbGwgc2l0IGluIHRoZSBmbG93cmluZyB1bnNlbnQgdW50aWwgc29tZSB1bnJlbGF0ZWQgZXZlbnRcbitcdCAqIHRyaWdnZXJzIHRoZSB3b3JrcXVldWUg4oCUIGNhdXNpbmcgc2lsZW50IFRYIHN0YWxscyB1bmRlclxuK1x0ICogaGlnaCBsb2FkIHdoZW4gb3V0c3RhbmRpbmdfdHggXHUwMDNlPSBERUxBWV9UWFdPUktFUl9USFJTLlxuK1x0ICovXG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoZmxvd2lkLCBtc2didWYtXHUwMDNlZmxvd19tYXApKSB7XG4rXHRcdC8qIEJpdCB3YXMgY2xlYXI6IG5vIHdvcmtlciBwZW5kaW5nLCBhbHdheXMgc2NoZWR1bGUuICovXG4rXHRcdHF1ZXVlX3dvcmsobXNnYnVmLVx1MDAzZXR4Zmxvd193cSwgXHUwMDI2bXNnYnVmLVx1MDAzZXR4Zmxvd193b3JrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBCaXQgd2FzIGFscmVhZHkgc2V0OiB3b3JrZXIgcGVuZGluZywgYXBwbHkgY29hbGVzY2luZyBoZXVyaXN0aWMuICovXG4gXHRjb21tb25yaW5nID0gbXNnYnVmLVx1MDAzZWZsb3dyaW5nc1tmbG93aWRdO1xuLVx0aWYgKChmb3JjZSkgfHwgKGF0b21pY19yZWFkKFx1MDAyNmNvbW1vbnJpbmctXHUwMDNlb3V0c3RhbmRpbmdfdHgpIFx1MDAzY1xuLVx0XHRcdEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSlcbitcdGlmIChmb3JjZSB8fCAoYXRvbWljX3JlYWQoXHUwMDI2Y29tbW9ucmluZy1cdTAwM2VvdXRzdGFuZGluZ190eCkgXHUwMDNjXG4rXHRcdCAgICAgIEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSlcbiBcdFx0cXVldWVfd29yayhtc2didWYtXHUwMDNldHhmbG93X3dxLCBcdTAwMjZtc2didWYtXHUwMDNldHhmbG93X3dvcmspO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTYyMSwxMSArMTY3NCwxMSBAQCBpbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuIFx0ZG8ge1xuIFx0XHRicmNtZl9tc2didWZfcnhidWZfZGF0YV9maWxsKG1zZ2J1Zik7XG4gXHRcdGlmIChtc2didWYtXHUwMDNlbWF4X3J4YnVmcG9zdCAhPSBtc2didWYtXHUwMDNlcnhidWZwb3N0KVxuLVx0XHRcdG1zbGVlcCgxMCk7XG4rXHRcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFx0XHRlbHNlXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNvdW50Kys7XG4tXHR9IHdoaWxlIChjb3VudCBcdTAwM2MgMTApO1xuK1x0fSB3aGlsZSAoY291bnQgXHUwMDNjIDEwMCk7XG4gXHRicmNtZl9tc2didWZfcnhidWZfZXZlbnRfcG9zdChtc2didWYpO1xuIFx0YnJjbWZfbXNnYnVmX3J4YnVmX2lvY3RscmVzcF9wb3N0KG1zZ2J1Zik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcbmluZGV4IDEzNjYyYWE0YjRlYTYuLjkzMzhhNWZhYTI2MGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXG5AQCAtMjY4LDYgKzI2OCwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2Zpcm13YXJlX21hcHBpbmcgYnJjbWZfcGNpZV9md25hbWVzW10gPSB7XG4gXG4gI2RlZmluZSBCUkNNRl9QQ0lFX01CREFUQV9USU1FT1VUXHRcdG1zZWNzX3RvX2ppZmZpZXMoMjAwMClcbiBcbisvKlxuKyAqIEgyRCBtYWlsYm94IHBvbGwgdGltaW5nIHBhcmFtZXRlcnMuXG4rICpcbisgKiBUaGUgZG9uZ2xlIHR5cGljYWxseSBjbGVhcnMgdGhlIEgyRCBtYWlsYm94IHJlZ2lzdGVyIHdpdGhpbiBhIGZld1xuKyAqIGh1bmRyZWQgbWljcm9zZWNvbmRzIGFmdGVyIHRoZSBkb29yYmVsbCBpbnRlcnJ1cHQgZmlyZXMuICBUaGVcbisgKiBvcmlnaW5hbCBjb2RlIHVzZWQgbXNsZWVwKDEwKSAqIDEwMCBpdGVyYXRpb25zLCBtZWFuaW5nIHRoZVxuKyAqIG1pbmltdW0gb2JzZXJ2YWJsZSBsYXRlbmN5IHdhcyAxMG1zIGV2ZW4gd2hlbiB0aGUgZG9uZ2xlIHdhcyBmYXN0LlxuKyAqXG4rICogV2UgaW5zdGVhZCBzdGFydCB3aXRoIGEgc2hvcnQgc2xlZXAgYW5kIGRvdWJsZSBpdCBlYWNoIGl0ZXJhdGlvblxuKyAqIChleHBvbmVudGlhbCBiYWNrb2ZmKSB1cCB0byBCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTLCBzdGF5aW5nXG4rICogd2l0aGluIHRoZSBzYW1lIDEtc2Vjb25kIGFic29sdXRlIHRpbWVvdXQuXG4rICpcbisgKiBNSU5fVVMgLyBJTklUSUFMX01BWF9VUyA6IHVzbGVlcF9yYW5nZSBib3VuZHMgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb24uXG4rICogTUFYX1VTICAgICA6IGNhcCBvbiB0aGUgcGVyLWl0ZXJhdGlvbiBzbGVlcCAowrVzKS5cbisgKiBUSU1FT1VUX1VTIDogdG90YWwgYnVkZ2V0IGJlZm9yZSBnaXZpbmcgdXAgKDEgc2Vjb25kKS5cbisgKi9cbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVNcdFx0NDBcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9JTklUSUFMX01BWF9VU1x0NTBcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVNcdFx0NTAwMFxuKyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX1RJTUVPVVRfVVNcdFx0MTAwMDAwMFxuK1xuICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfU1RBVFVTX0NNRFx0XHQweDRcbiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX1BNX0NTUlx0XHQweDRDXG4gI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19NU0lfQ0FQXHRcdDB4NThcbkBAIC03NjYsNyArNzg3LDggQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSlcbiBcdHN0cnVjdCBicmNtZl9jb3JlICpjb3JlO1xuIFx0dTMyIGFkZHI7XG4gXHR1MzIgY3VyX2h0b2RfbWJfZGF0YTtcbi1cdHUzMiBpO1xuK1x0dTMyIGVsYXBzZWRfdXMgPSAwO1xuK1x0dTMyIHNsZWVwX3VzID0gQlJDTUZfUENJRV9NQl9QT0xMX0lOSVRJQUxfTUFYX1VTO1xuIFxuIFx0c2hhcmVkID0gXHUwMDI2ZGV2aW5mby1cdTAwM2VzaGFyZWQ7XG4gXHRhZGRyID0gc2hhcmVkLVx1MDAzZWh0b2RfbWJfZGF0YV9hZGRyO1xuQEAgLTc3NiwxMiArNzk4LDQwIEBAIGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBodG9kX21iX2RhdGEpXG4gXHRcdGJyY21mX2RiZyhQQ0lFLCBcIk1CIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgcGVuZGluZyAweCUwNHhcXG5cIixcbiBcdFx0XHQgIGN1cl9odG9kX21iX2RhdGEpO1xuIFxuLVx0aSA9IDA7XG4rXHQvKlxuK1x0ICogV2FpdCBmb3IgdGhlIGRvbmdsZSB0byBjb25zdW1lIHRoZSBwcmV2aW91cyBIMkQgbWFpbGJveCBtZXNzYWdlLlxuK1x0ICpcbitcdCAqIFRoZXJlIGlzIG5vIGludGVycnVwdCB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZG9uZ2xlIGNsZWFycyB0aGlzXG4rXHQgKiByZWdpc3Rlciwgc28gcG9sbGluZyBpcyB1bmF2b2lkYWJsZS4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWRcbitcdCAqIG1zbGVlcCgxMCkgcGVyIGl0ZXJhdGlvbiwgaW5jdXJyaW5nIGF0IGxlYXN0IDEwbXMgb2YgbGF0ZW5jeVxuK1x0ICogZXZlbiB3aGVuIHRoZSBkb25nbGUgcmVzcG9uZGVkIGluIG1pY3Jvc2Vjb25kcy5cbitcdCAqXG4rXHQgKiBXZSB1c2UgdXNsZWVwX3JhbmdlKCkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmIGluc3RlYWQ6XG4rXHQgKiAgIC0gRmlyc3QgaXRlcmF0aW9uIHNsZWVwcyB+NTDCtXMgKGZhc3QgcGF0aCBmb3IgcmVzcG9uc2l2ZSBkb25nbGUpLlxuK1x0ICogICAtIEVhY2ggc3Vic2VxdWVudCBpdGVyYXRpb24gZG91YmxlcyB0aGUgc2xlZXAsIGNhcHBlZCBhdCA1bXMsXG4rXHQgKiAgICAgc28gbG9uZyB3YWl0cyBzdGlsbCB5aWVsZCB0aGUgQ1BVIHdpdGhvdXQgYnVzeS1zcGlubmluZy5cbitcdCAqICAgLSBUb3RhbCB0aW1lb3V0IG1hdGNoZXMgdGhlIG9yaWdpbmFsIDEtc2Vjb25kIGxpbWl0LlxuK1x0ICogICAtIFdlIGJhaWwgZWFybHkgaWYgdGhlIGRldmljZSBoYXMgZ29uZSBkb3duIHNvIHRoYXQgYSBkZWFkXG4rXHQgKiAgICAgZG9uZ2xlIGRvZXMgbm90IGhvbGQgdGhlIGNhbGxlciBmb3IgYSBmdWxsIHNlY29uZC5cbitcdCAqL1xuIFx0d2hpbGUgKGN1cl9odG9kX21iX2RhdGEgIT0gMCkge1xuLVx0XHRtc2xlZXAoMTApO1xuLVx0XHRpKys7XG4tXHRcdGlmIChpIFx1MDAzZSAxMDApXG4rXHRcdGlmIChkZXZpbmZvLVx1MDAzZXN0YXRlID09IEJSQ01GTUFDX1BDSUVfU1RBVEVfRE9XTikge1xuK1x0XHRcdGJyY21mX2RiZyhQQ0lFLCBcIkRldmljZSBkb3duLCBhYm9ydGluZyBNQiBzZW5kXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChlbGFwc2VkX3VzIFx1MDAzZT0gQlJDTUZfUENJRV9NQl9QT0xMX1RJTUVPVVRfVVMpIHtcbitcdFx0XHRicmNtZl9lcnIoXCJUaW1lb3V0IHdhaXRpbmcgZm9yIEgyRCBNQiBzbG90IGFmdGVyICV1IHVzXFxuXCIsXG4rXHRcdFx0XHQgIGVsYXBzZWRfdXMpO1xuK1x0XHRcdHJldHVybiAtRUlPO1xuK1x0XHR9XG4rXG4rXHRcdHVzbGVlcF9yYW5nZShCUkNNRl9QQ0lFX01CX1BPTExfTUlOX1VTLCBzbGVlcF91cyk7XG4rXHRcdGVsYXBzZWRfdXMgKz0gc2xlZXBfdXM7XG4rXG4rXHRcdC8qIEV4cG9uZW50aWFsIGJhY2tvZmYsIGNhcHBlZCBhdCBCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTICovXG4rXHRcdHNsZWVwX3VzID0gbWluKHNsZWVwX3VzICogMiwgKHUzMilCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTKTtcbitcbiBcdFx0Y3VyX2h0b2RfbWJfZGF0YSA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcbiBcdH1cbiBcbkBAIC0xMDAxLDEwICsxMDUxLDEwIEBAIHN0YXRpYyB2b2lkIGJyY21mX3BjaWVfcmVsZWFzZV9pcnEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbylcbiBcdGZyZWVfaXJxKHBkZXYtXHUwMDNlaXJxLCBkZXZpbmZvKTtcbiBcdHBjaV9kaXNhYmxlX21zaShwZGV2KTtcbiBcbi1cdG1zbGVlcCg1MCk7XG4rXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXHRjb3VudCA9IDA7XG4tXHR3aGlsZSAoKGRldmluZm8tXHUwMDNlaW5faXJxKSBcdTAwMjZcdTAwMjYgKGNvdW50IFx1MDAzYyAyMCkpIHtcbi1cdFx0bXNsZWVwKDUwKTtcbitcdHdoaWxlICgoZGV2aW5mby1cdTAwM2Vpbl9pcnEpIFx1MDAyNlx1MDAyNiAoY291bnQgXHUwMDNjIDEwMDApKSB7XG4rXHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbiBcdFx0Y291bnQrKztcbiBcdH1cbiBcdGlmIChkZXZpbmZvLVx1MDAzZWluX2lycSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uY1xuaW5kZXggYjcyNWM2NGU1YjVjNi4uNGU0MTQ0MDNkNzQ3MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcbkBAIC0xNjQ1LDM3ICsxNjQ1LDQzIEBAIHN0YXRpYyB1OCBicmNtZl9zZGlvX3J4Z2xvbShzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzLCB1OCByeHNlcSlcbiBcbiBcdFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcTtcbiBcdFx0cmRfbmV3LmxlbiA9IGRsZW47XG4rXG4rXHRcdC8qXG4rXHRcdCAqIENsYWltIHRoZSBob3N0IG9uY2UgZm9yIHRoZSBlbnRpcmUgaGVhZGVyLXBhcnNpbmcgcGhhc2UuXG4rXHRcdCAqXG4rXHRcdCAqIGJyY21mX3NkaW9faGRwYXJzZSgpIG9wZXJhdGVzIG9uIGRhdGEgYWxyZWFkeSBpbiBob3N0XG4rXHRcdCAqIG1lbW9yeSwgYnV0IG1heSBjYWxsIGJyY21mX3NkaW9fcnhmYWlsKCkgb24gZXJyb3IsIHdoaWNoXG4rXHRcdCAqIHdyaXRlcyBTRElPIEZ1bmMxIHJlZ2lzdGVycyBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIHRoZVxuK1x0XHQgKiBob3N0IHRvIGJlIGNsYWltZWQuXG4rXHRcdCAqXG4rXHRcdCAqIHNrYl9wdWxsKCkgYW5kIHRoZSBudW0gY291bnRlciBhcmUgcHVyZSBob3N0LW1lbW9yeVxuK1x0XHQgKiBvcGVyYXRpb25zOyBrZWVwIHRoZW0gb3V0c2lkZSB0aGUgbG9jayB0byBtaW5pbWlzZSB0aGVcbitcdFx0ICogaG9sZCB0aW1lLiAgQm90aCBoZHBhcnNlIGNhbGxzIChzdXBlcmZyYW1lIGhlYWRlciBhbmRcbitcdFx0ICogZWFjaCBzdWJmcmFtZSBoZWFkZXIpIGFyZSBncm91cGVkIHVuZGVyIGEgc2luZ2xlIGNsYWltL1xuK1x0XHQgKiByZWxlYXNlLCByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIE4rMSBzZXBhcmF0ZSBwYWlycy5cbitcdFx0ICovXG4gXHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4gXHRcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtXHUwMDNlZGF0YSwgXHUwMDI2cmRfbmV3LFxuIFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VQRVIpO1xuLVx0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdGJ1cy1cdTAwM2VjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSBcdTAwM2NcdTAwM2MgNDtcbi1cbi1cdFx0LyogUmVtb3ZlIHN1cGVyZnJhbWUgaGVhZGVyLCByZW1lbWJlciBvZmZzZXQgKi9cbi1cdFx0c2tiX3B1bGwocGZpcnN0LCByZF9uZXcuZGF0X29mZnNldCk7XG4tXHRcdG51bSA9IDA7XG4tXG4tXHRcdC8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqL1xuLVx0XHRza2JfcXVldWVfd2FsayhcdTAwMjZidXMtXHUwMDNlZ2xvbSwgcG5leHQpIHtcbi1cdFx0XHQvKiBsZWF2ZSB3aGVuIGludmFsaWQgc3ViZnJhbWUgaXMgZm91bmQgKi9cbi1cdFx0XHRpZiAoZXJyY29kZSlcbi1cdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdHJkX25ldy5sZW4gPSBwbmV4dC1cdTAwM2VsZW47XG4tXHRcdFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcSsrO1xuLVx0XHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdFx0ZXJyY29kZSA9IGJyY21mX3NkaW9faGRwYXJzZShidXMsIHBuZXh0LVx1MDAzZWRhdGEsIFx1MDAyNnJkX25ldyxcbi1cdFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VCKTtcbi1cdFx0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdFx0YnJjbWZfZGJnX2hleF9kdW1wKEJSQ01GX0dMT01fT04oKSxcbi1cdFx0XHRcdFx0ICAgcG5leHQtXHUwMDNlZGF0YSwgMzIsIFwic3ViZnJhbWU6XFxuXCIpO1xuLVxuLVx0XHRcdG51bSsrO1xuK1x0XHQvKiBWYWxpZGF0ZSBhbGwgdGhlIHN1YmZyYW1lIGhlYWRlcnMgd2hpbGUgaG9zdCBpcyBjbGFpbWVkICovXG4rXHRcdGlmICghZXJyY29kZSkge1xuK1x0XHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNmJ1cy1cdTAwM2VnbG9tLCBwbmV4dCkge1xuK1x0XHRcdFx0cmRfbmV3LmxlbiA9IHBuZXh0LVx1MDAzZWxlbjtcbitcdFx0XHRcdHJkX25ldy5zZXFfbnVtID0gcnhzZXErKztcbitcdFx0XHRcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwbmV4dC1cdTAwM2VkYXRhLFxuK1x0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyZF9uZXcsXG4rXHRcdFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VCKTtcbitcdFx0XHRcdGJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksXG4rXHRcdFx0XHRcdFx0ICAgcG5leHQtXHUwMDNlZGF0YSwgMzIsXG4rXHRcdFx0XHRcdFx0ICAgXCJzdWJmcmFtZTpcXG5cIik7XG4rXHRcdFx0XHRpZiAoZXJyY29kZSlcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChlcnJjb2RlKSB7XG4tXHRcdFx0LyogVGVybWluYXRlIGZyYW1lIG9uIGVycm9yICovXG4tXHRcdFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbitcdFx0XHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IsIHN0aWxsIGhvbGRpbmcgdGhlIGhvc3QgKi9cbiBcdFx0XHRicmNtZl9zZGlvX3J4ZmFpbChidXMsIHRydWUsIGZhbHNlKTtcbiBcdFx0XHRidXMtXHUwMDNlc2RjbnQucnhnbG9tZmFpbCsrO1xuIFx0XHRcdGJyY21mX3NkaW9fZnJlZV9nbG9tKGJ1cyk7XG5AQCAtMTY4Myw2ICsxNjg5LDE0IEBAIHN0YXRpYyB1OCBicmNtZl9zZGlvX3J4Z2xvbShzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzLCB1OCByeHNlcSlcbiBcdFx0XHRidXMtXHUwMDNlY3VyX3JlYWQubGVuID0gMDtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuK1x0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4rXG4rXHRcdC8qIEhvc3QgcmVsZWFzZWQ7IG5vdyBkbyB0aGUgcHVyZS1tZW1vcnkgYm9va2tlZXBpbmcgKi9cbitcdFx0YnVzLVx1MDAzZWN1cl9yZWFkLmxlbiA9IHJkX25ldy5sZW5fbnh0ZnJtIFx1MDAzY1x1MDAzYyA0O1xuK1xuK1x0XHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xuK1x0XHRza2JfcHVsbChwZmlyc3QsIHJkX25ldy5kYXRfb2Zmc2V0KTtcbitcdFx0bnVtID0gMDtcbiBcbiBcdFx0LyogQmFzaWMgU0QgZnJhbWluZyBsb29rcyBvayAtIHByb2Nlc3MgZWFjaCBwYWNrZXQgKGhlYWRlcikgKi9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXG5pbmRleCBmYzdhNWRkMmU1ZDg2Li4zZmQ4YmRiZDM1ZTU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXG5AQCAtNTE2LDEyICs1MTYsMTEgQEAgaW50IGJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLFxuIFx0XHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBXZSBhcmVuJ3QgcmVhbGx5IG91dCBvZiBzcGFjZSBpZiB0aGUgbmV3IGZyYW1lIGlzIG9mXG4tXHRcdCAqIGEgZGlmZmVyZW50IHByaW9yaXR5LCBidXQgd2Ugd2FudCB0aGUgc2FtZSBiZWhhdmlvdXJcbi1cdFx0ICogc28gcmV0dXJuIC1FTk9TUEMgYW55d2F5LlxuLVx0XHQgKlxuLVx0XHQgKiBYWFg6IFRoZSBvbGQgQU1QRFUgY29kZSBkaWQgdGhpcywgYnV0IGlzIGl0IHJlYWxseVxuLVx0XHQgKiBuZWNlc3Nhcnk/XG4rXHRcdCAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW5cbitcdFx0ICogQS1NUERVIGJlbG9uZyB0byB0aGUgc2FtZSBUSUQgKFRyYWZmaWMgSWRlbnRpZmllcikuXG4rXHRcdCAqIFNpbmNlIHByaW9yaXR5IG1hcHMgdG8gVElELCBhIGRpZmZlcmVudCBwcmlvcml0eSBtZWFuc1xuK1x0XHQgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLFxuK1x0XHQgKiBzbyB3ZSByZXR1cm4gLUVOT1NQQyBoZXJlLlxuIFx0XHQgKi9cbiBcdFx0Zmlyc3QgPSBza2JfcGVlayhcdTAwMjZzZXNzaW9uLVx1MDAzZXNrYl9saXN0KTtcbiBcdFx0aWYgKHAtXHUwMDNlcHJpb3JpdHkgIT0gZmlyc3QtXHUwMDNlcHJpb3JpdHkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxNzo1NS4xNzM4OTgzMzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTc5NDMxOTc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGJyY21mbWFjIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIGBicmNtZm1hY2AgYW5kIGBicmNtc21hY2AgZHJpdmVycyBpbiB0aGUgTGludXgga2VybmVsLiBGaXJzdCBnbGFuY2UsIHRoZXJlJ3MgcXVpdGUgYSBiaXQgaGFwcGVuaW5nIGFjcm9zcyB2YXJpb3VzIGZpbGVzLCBzcGVjaWZpY2FsbHk6IGBjZmc4MDIxMS5jYCwgYGNmZzgwMjExLmhgLCBgY29yZS5jYCwgYGZsb3dyaW5nLmNgLCBgZndzaWduYWwuY2AsIGBtc2didWYuY2AsIGBwY2llLmNgLCBgc2Rpby5jYCwgYW5kIGBhbXBkdS5jYC4gVGhlIGNoYW5nZXMgcmFuZ2UgZnJvbSBzdWJ0bGUgdGltaW5nIGFkanVzdG1lbnRzIChgYnJjbWZfZGVsYXlgIG5vdyB1c2luZyBgdXNsZWVwX3JhbmdlYCwgZm9yIGluc3RhbmNlKSB0byBtb3JlIGludm9sdmVkIGFkZGl0aW9ucyBsaWtlIGBicmNtZl9wbWtzYV92Ml9vcGAgZm9yIFBNS1NBIGNhY2hlIHZlcnNpb24gMi4gVGhlcmUgYXJlIGFsc28gdHdlYWtzIHRvIGZsb3cgY29udHJvbCwgbWVzc2FnZSBidWZmZXIgaGFuZGxpbmcsIGFuZCBTRElPL1BDSUUgaW50ZXJhY3Rpb24uXG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGlzIGZvciBmdXp6aW5nIG9wcG9ydHVuaXRpZXMuIFRoZSBwcm9tcHQgZmxhZ3MgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc1wiIGFzIGEgbm8tZ28gZm9yIGZ1enppbmcgaWYgdGhleSByZXF1aXJlIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLiAgQnV0LCBgYnJjbWZtYWNgIGlzIGEgV2ktRmkgZHJpdmVyLCBzbyBpdCB0eXBpY2FsbHkgY29tbXVuaWNhdGVzIHdpdGggcGh5c2ljYWwgV2ktRmkgaGFyZHdhcmUuIEJ1dCwgKmJyY21mbWFjKiBhbHNvIHN1cHBvcnRzIFVTQiEgVGhhdCdzIGtleS4gVVNCIGRldmljZXMgY2FuIGJlIHJlYWRpbHkgZW11bGF0ZWQuIFVTQiBnYWRnZXQsIGR1bW15X2hjZCwgb3Igc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgKHZoY2kpLlxuXG5MZXQgbWUgY29uZmlybSB0aGUgVVNCIHN1cHBvcnQuIFRoZXJlJ3MgYSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jYCBmaWxlLiBCaW5nby4gU28sIHN5emthbGxlciBjb3VsZCBiZSB1c2VkIHRvIGZ1enogdGhpcyBkcml2ZXIuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaGVzLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGluIGBjZmc4MDIxMS5jYCBhcmUgcmVsYXRlZCB0byBQTUtTQSBjYWNoZSBtYW5hZ2VtZW50LCB3aGljaCBtaWdodCBhZmZlY3QgZGlmZmVyZW50IGNvbW11bmljYXRpb24gaW50ZXJmYWNlcy4gVGhlIGNoYW5nZXMgaW4gYGNvcmUuY2AgYWZmZWN0IHRoZSBtb25pdG9yIG1vZGUncyBSU1NJIGRhdGEuIGBmbG93cmluZy5jYCBtYW5hZ2VzIGZsb3cgY29udHJvbC4gYG1zZ2J1Zi5jYCBkZWFscyB3aXRoIG1lc3NhZ2UgYnVmZmVyIHNpemUuIGBwY2llLmNgIHVzZXMgYHVzbGVlcF9yYW5nZWAuIGBzZGlvLmNgIGlzIHJlbGF0ZWQgdG8gU0RJTyBjb21tdW5pY2F0aW9uLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcyB3aGV0aGVyIGFsbCB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgVVNCIGludGVyZmFjZS4gSWYgY29kZSBpbiBgY2ZnODAyMTEuY2AsIGBjb3JlLmNgLCBgZmxvd3JpbmcuY2AsIGBtc2didWYuY2AsIGBwY2llLmNgLCBhbmQgYHNkaW8uY2AgaXMgcmVhY2hhYmxlIHZpYSBVU0IsIHRoZW4gd2UgaGF2ZSBhIGdvb2QgZnV6emluZyB0YXJnZXQsIGJlY2F1c2Ugd2UgY2FuIGVtdWxhdGUgdGhlIFVTQiBXaS1GaSBkb25nbGUuIE5vdyBJIHdpbGwgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgdGhvc2UgZmlsZXMgYXJlIHVzZWQgYnkgdGhlIFVTQiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZHJpdmVyLiBJZiBzbywgdGhlbiAqV29ydGhGdXp6aW5nPXRydWUqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMxNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxODowNi45NjgyMjIwNzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3ODIyMDMyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl91c2JfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNzY6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyMjQ9YnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI0My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI0NDpzdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDUtXFx0XFx0XFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzA3LVxcdC8qIHJlcXVlc3QgZmlybXdhcmUgaGVyZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzA4OlxcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMDktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzNDE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzQyOmJyY21mX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDQyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNDQzOlxcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cXHUwMDNlZHJpdmVyX2luZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDQ0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUxMT1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTUyNDpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFxcdTAwMjZ1c2ItXFx1MDAzZWRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTE1NjU9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJyY21mX3VzYmRydnIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjYtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTU2NzpcXHQucHJvYmUgPSBicmNtZl91c2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE1NjgtXFx0LmRpc2Nvbm5lY3QgPSBicmNtZl91c2JfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MDkuMDQ2NDQ3ODk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNzA4NTY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgYnJjbWZtYWNgIERyaXZlciB2aWEgVVNCOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGUgYGJyY21mbWFjYCBkcml2ZXIsIHNwZWNpZmljYWxseSB2aWEgVVNCLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgYSByZWFjaGFibGUgZW50cnkgcG9pbnQgdGhhdCBtaWdodCBiZSBzdXNjZXB0aWJsZS4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgYnJjbWZfcG1rc2FfdjJfb3BgLiBJIHdhbnQgdG8gc2VlIGlmIHdlIGNhbiB0cmlnZ2VyIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0aGVyZS5cblxuSXQgbG9va3MgbGlrZSBgYnJjbWZfcG1rc2FfdjJfb3BgIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgLCBgYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhYCwgYW5kIGBicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYWAuIFJpZ2h0LCB0aGVzZSBhbGwgc2VlbSB0byBiZSBgY2ZnODAyMTFgIGNhbGxiYWNrcy4gVGhhdCBzdWdnZXN0cyBhbiBpbnRlcmZhY2Ugd2UgbWlnaHQgYmUgYWJsZSB0byBsZXZlcmFnZS5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgLiBUaGF0J3MgdGhlIG9uZSBJJ20gbW9zdCBpbnRlcmVzdGVkIGluIGZvciBub3cuIExldCdzIHNlZSBpZiB3ZSBjYW4gbWFuaXB1bGF0ZSB0aGUgaW5wdXRzIHRvIHRoYXQgdG8gbGVhZCB1cyB0byB3aGF0IHdlIHdhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjEyLjc1MzUzNTk1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkzNDc4MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2NmZzgwMjExX3NldF9wbWtzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00NDgxPXN0YXRpYyBzMzJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NDgyOmJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NDgzLVxcdFxcdFxcdCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjA3OD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBicmNtZl9jZmc4MDIxMV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MDk5LVxcdC5yZXN1bWUgPSBicmNtZl9jZmc4MDIxMV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjEwMDpcXHQuc2V0X3Bta3NhID0gYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYxMDEtXFx0LmRlbF9wbWtzYSA9IGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MTQuNzQ3MDQwMzk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3Mjc1MzE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBDb2RlKipcblxuQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gY2VudGVycyBvbiBgY2ZnODAyMTFfb3BzYCBjYWxsYmFja3MuIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBtYWM4MDIxMSBpbnRlcmZhY2UsIGFuZCBhIGNvbW1vbiBhcmVhIG9mIGZvY3VzIGZvciBhbnlvbmUgd29ya2luZyB3aXRoIHdpcmVsZXNzIGRyaXZlcnMuIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhyb3VnaCBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzOiBhc3NvY2lhdGlvbiwgYXV0aGVudGljYXRpb24sIHJlZ3VsYXRvcnkgZG9tYWluIGhhbmRsaW5nLCB0aGUgd29ya3MuIEknbSBtZW50YWxseSBjaGVja2luZyBpZiB3ZSdyZSBsb29raW5nIGF0IGEgc3BlY2lmaWMgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgcHJvYmxlbS4gSXMgaXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcmF0ZSBjb250cm9sLCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIHBvd2VyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBkcml2ZXI/XG5cbkJ1dCB0aGVuIG15IG1pbmQgc2hpZnRzIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb24gSSdtIGN1cmlvdXMgYWJvdXQuIFdoYXQgYWJvdXQgYGJyY21mX25ldGlmX21vbl9yeGA/IFRoYXQgdGhyb3dzIGEgZGlmZmVyZW50IGxpZ2h0IG9uIHRoaW5ncy4gVGhpcyBpbXBsaWVzIHdlJ3JlIGRlYWxpbmcgd2l0aCBtb25pdG9yaW5nIG1vZGUgZnVuY3Rpb25hbGl0eSBmb3IgYSBCcm9hZGNvbSBkcml2ZXIsIG9yIHNvbWV0aGluZyB0aGF0J3MgQnJvYWRjb20tc3BlY2lmaWMuIFdlIG11c3QgYmUgbG9va2luZyBhdCBwYWNrZXQgcmVjZXB0aW9uIGluIHByb21pc2N1b3VzIG1vZGUgb3IgbW9uaXRvciBtb2RlLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgcG9zc2liaWxpdGllcyBhbmQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgaW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBpc3N1ZSwgcGVyaGFwcyBwYWNrZXQgaW5qZWN0aW9uLCBvciBzbmlmZmluZy4gTXkgdGhpbmtpbmcganVtcHMgZnJvbSB0aGUgZ2VuZXJhbCBgY2ZnODAyMTFfb3BzYCB0byBzb21ldGhpbmcgbXVjaCBtb3JlIHNwZWNpZmljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI3OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjE4LjcxOTc5NjAzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQyODA4OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX25ldGlmX21vbl9yeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTQzND1zdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQzOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjQzOTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQ0MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oPTIyMD12b2lkIGJyY21mX25ldGlmX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oOjIyMTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaC0yMjItdm9pZCBicmNtZl9uZXRfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGxvY2tlZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTIwMD1icmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHZvaWQgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMjQxOlxcdFxcdGJyY21mX25ldGlmX21vbl9yeChpZnAsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDItXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxODoyMC43NjI2MDk5NTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDcyMDkxNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlJDTUYgRHJpdmVyIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIHRyYWNraW5nIHRoaXMgYGJyY21mX25ldGlmX21vbl9yeGAgZnVuY3Rpb24uLi4gYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBgYnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGVgLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBTdGFuZGFyZCByZWNlaXZlIHBhdGggcHJvY2Vzc2luZy4gTm93LCBhIGxpdHRsZSBmbGFnIGdvZXMgdXAuIEknbSB3b25kZXJpbmcgYWJvdXQgYG1zZ2J1Zi5jYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29udGV4dCByaWdodC4gVGhhdCBmaWxlIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBkYXRhIGlzIGhhbmRsZWQsIGFuZCBJIG5lZWQgdG8gcmVjYWxsIGV4YWN0bHkgaG93IGl0J3MgdXNlZCB3aXRoIFBDSWUuIERvZXMgaXQgaGFuZGxlIGRhdGEgYmVpbmcgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0d29yayB0aHJvdWdoIFBDSWU/IFllcywgdGhhdCdzIHJpZ2h0LiBCdXQgd2hhdCBhYm91dCBVU0I/IERvZXMgdGhlIFVTQiBzdGFjayAqYWxzbyogbGV2ZXJhZ2UgYG1zZ2J1Zi5jYCBmb3IgaXRzIGNvbW11bmljYXRpb24/IEkgbmVlZCB0byBjaGVjayB0aGF0LiBUaGUgbWVzc2FnZSBidWZmZXIgYXJjaGl0ZWN0dXJlIGlzIG9mdGVuIHNoYXJlZCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGl0J3MgZW1wbG95ZWQgYWNyb3NzIGRpZmZlcmVudCB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllcnMsIHNvIEkgZG9uJ3QgY29uZnVzZSB0aGUgZGF0YSBmbG93IGxhdGVyLiBUaGlzIGRldGFpbCBjb3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgSSBpbnRlcnByZXQgdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEzMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjI0LjgzNDcwNTE5MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5ODczMTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTE5OT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMjAwOmJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1Ziwgdm9pZCAqYnVmKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xMzQxPXN0YXRpYyB2b2lkIGJyY21mX21zZ2J1Zl9wcm9jZXNzX21zZ3R5cGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTM4MC1cXHRcXHRicmNtZl9kYmcoTVNHQlVGLCBcXFwiTVNHQlVGX1RZUEVfUlhfQ01QTFRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMzgxOlxcdFxcdGJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlKG1zZ2J1ZiwgYnVmKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTM4Mi1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MjYuNzMzNDQ2MTgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDA4NTYxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYnJjbWZtYWMgVVNCIGFuZCBtc2didWYuYyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGJyY21mbWFjYCBhbmQgaXRzIFVTQiBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCBgbXNnYnVmLmNgIHBsYXlzIGEgcm9sZSBpbiBpdC4gSXQncyBhIGtleSBxdWVzdGlvbiBiZWNhdXNlIGBtc2didWYuY2Agb2Z0ZW4gaGFuZGxlcyBtZXNzYWdlIGJ1ZmZlcmluZyBhbmQgcXVldWluZywgd2hpY2ggaXMgYSBjb21tb24gcGF0dGVybiBmb3IgVVNCIGNvbW11bmljYXRpb24sIGVzcGVjaWFsbHkgd2l0aCBjb21wbGV4IGRyaXZlcnMuIElmIGl0ICppcyogdXNlZCwgSSBjYW4gbGV2ZXJhZ2UgbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIGBtc2didWYuY2Agc3RydWN0dXJlcywgZnVuY3Rpb25zLCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRvIGdldCBhIG11Y2ggZmFzdGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBVU0IgaW50ZXJmYWNlIG9wZXJhdGVzLiBJZiBpdCdzICpub3QqIHVzZWQsIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBhbHRlcm5hdGl2ZSBidWZmZXJpbmcgbWVjaGFuaXNtcyBvciBkaXJlY3QgbWVzc2FnZSBoYW5kbGluZyB3aXRoaW4gdGhlIGBicmNtZm1hY2AgVVNCIGNvZGUsIHdoaWNoIG1pZ2h0IHBvaW50IHRvIGEgbGVzcyBjb252ZW50aW9uYWwgYXBwcm9hY2gsIGJ1dCBwb3RlbnRpYWxseSBvbmUgdGhhdCdzIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2UuIEVpdGhlciB3YXksIGZpZ3VyaW5nIHRoaXMgb3V0IGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODE1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MzAuMjc0MzA0NjUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIzMzEwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXNnYnVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MzAuMzE5NTQ1ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NjEyODk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBVU0IgRHJpdmVyIExhbmRzY2FwZSoqXG5cbkhtbSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBVU0Igc3RhY2suLi4gYW5kIEknbSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBsb3dlci1sZXZlbCBkcml2ZXIgY29tcG9uZW50cy4gSXMgaXQgcG9zc2libGUgdGhhdCB0aGUgY29kZSByZWxhdGVkIHRvIFVTQidzICpidWxrIGNvbXBsZXRlIGRhdGEgY29udGV4dCogLSBgYmNkYy5jYCAtIGlzLCBpbiBmYWN0LCByZWxldmFudCBoZXJlPyBJdCdzIGEgZnV6enkgbWVtb3J5LCBidXQgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHBvc3NpYmlsaXRpZXMgYW5kIGNvbnNpZGVyaW5nIGlmIHRoaXMgaXMgdGhlIGNvcnJlY3QgcGxhY2UgdG8gZm9jdXMuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIG1vZHVsZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBkYXRhIHRyYW5zZmVycyBhbmQgaWYgdGhhdCBjb21wb25lbnQgcHJvdmlkZXMgdGhlIGZyYW1ld29yayBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDk4LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MzMuNDA1Njc3Njg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU5NTM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiY2RjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMjAtI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoyMTojaW5jbHVkZSBcXFwiYmNkYy5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0yMi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz00ODU9c3RhdGljIHZvaWQgYnJjbWZfdXNiX3R4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy00OTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjQ5NTpcXHRicmNtZl9wcm90b19iY2RjX3R4Y29tcGxldGUoZGV2aW5mby1cXHUwMDNlZGV2LCByZXEtXFx1MDAzZXNrYiwgdXJiLVxcdTAwM2VzdGF0dXMgPT0gMCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTQ5Ni1cXHRyZXEtXFx1MDAzZXNrYiA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNTAwLVxcdFxcdGRldmluZm8tXFx1MDAzZXR4X2Zsb3dibG9jaykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzo1MDE6XFx0XFx0YnJjbWZfcHJvdG9fYmNkY190eGZsb3dibG9jayhkZXZpbmZvLVxcdTAwM2VkZXYsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNTAyLVxcdFxcdGRldmluZm8tXFx1MDAzZXR4X2Zsb3dibG9jayA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTYwOD1zdGF0aWMgaW50IGJyY21mX3VzYl90eChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNjUyLVxcdCAgICAhZGV2aW5mby1cXHUwMDNldHhfZmxvd2Jsb2NrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjY1MzpcXHRcXHRicmNtZl9wcm90b19iY2RjX3R4Zmxvd2Jsb2NrKGRldiwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTY1NC1cXHRcXHRkZXZpbmZvLVxcdTAwM2V0eF9mbG93YmxvY2sgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxODozMy40NTEyNzkzODVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY1MjcxNzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIERyaXZlciBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgb3VyIG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXJzIGFyZSBpbXBsZW1lbnRlZCwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgZHJpdmVycyBhcmUgc3RydWN0dXJlZC4gSXQgbG9va3MgbGlrZSBib3RoIFVTQiBhbmQgU0RJTyBhcmUgbGVhbmluZyBvbiBgYmNkYy5jYC4gVGhhdCdzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgc2hhcmVkIGNvcmUgZm9yIHRoZXNlIGludGVyZmFjZSB0eXBlcy4gVGhlbiBJIHNlZSBQQ0llIGlzIHV0aWxpemluZyBgbXNnYnVmLmNgIHdoaWNoLCBvbiBpdHMgZmFjZSwgc2VlbXMgdG8gaGFuZGxlIGEgdmVyeSBkaWZmZXJlbnQgdHlwZSBvZiBjb21tdW5pY2F0aW9uLiBBaCwgYnV0IHdhaXQgYSBtaW51dGUsIEknbSBub3RpbmcgdGhhdCBgZmxvd3JpbmcuY2AgaXMgYmVpbmcgdXNlZCBieSBib3RoIGBtc2didWYuY2AgYW5kIGBwY2llLmNgLiBUaGF0J3MgaW1tZWRpYXRlbHkgc3BhcmtpbmcgYSBxdWVzdGlvbjogaXMgdGhlcmUgYW55IGNoYW5jZSB0aGF0IGBmbG93cmluZy5jYCBpcyBhbHNvIHVzZWQgKmluZGlyZWN0bHkqIGJ5IFVTQj8gVGhlIHNoYXJlZCB1c2Ugb2YgYGJjZGMuY2AgYW5kIGEgcG90ZW50aWFsIHBhdGggdG8gYGZsb3dyaW5nLmNgIGhhcyBnb3QgbWUgdGhpbmtpbmcgYWJvdXQgZGVlcGVyIGFyY2hpdGVjdHVyYWwgY29tbW9uYWxpdGllcyB0aGFuIGFyZSBpbW1lZGlhdGVseSBhcHBhcmVudC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBkZXBlbmRlbmN5IGNoYWluIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTI0LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6MzkuMTAzOTk5OTE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYwODQxNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd3JpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxODozOS4xNDg2MTYzMjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyOTY0MzUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIENvZGUgRGVwZW5kZW5jaWVzOiBmbG93cmluZy5jIGFuZCBiY2RjLmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gKmZsb3dyaW5nLmMqLiBJJ20gd29ya2luZyBvbiBzb21ldGhpbmcgdGhhdCB0b3VjaGVzIHRoZSBkYXRhIGZsb3csIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSdzIHJvbGUuIEhtbSwgSSBoYXZlIGEgZmVlbGluZyBgYmNkYy5jYCBtaWdodCBiZSB0aGUgcGxhY2UgdG8gbG9vayBmb3IgdGhhdCBpbnRlcmFjdGlvbi4gVGhlIHdheSBJJ3ZlIHN0cnVjdHVyZWQgbXkgYW5hbHlzaXMgdXN1YWxseSBnb2VzIGxpa2UgdGhpcyAtIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBgZmxvd3JpbmcuY2AgaXMgYWN0dWFsbHkgKnVzZWQqIGJ5IGBiY2RjLmNgLiBJdCdzIGEgY29tbW9uIGRlcGVuZGVuY3kgcGF0dGVybiwgYnV0IEkgbmVlZCB0byBjb25maXJtIGl0IHNwZWNpZmljYWxseSBpbiB0aGlzIGNhc2UuIEnigJlsbCBzdGFydCBieSBkaWdnaW5nIGludG8gYGJjZGMuY2AgYW5kIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGNhbGxzLCBpbmNsdWRlcywgb3IgYW55IHJlZmVyZW5jZXMgdG8gYGZsb3dyaW5nLmNgJ3Mgc3ltYm9scyBvciBkYXRhIHN0cnVjdHVyZXMuIEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0d28gbW9kdWxlcyByZWxhdGUuIFBlcmhhcHMgSSdsbCB1c2UgZ3JlcCwgY3RhZ3MsIG9yIG15IElERSdzIGJ1aWx0LWluIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG8gcXVpY2tseSBzZWUgaWYgdGhlIGluY2x1c2lvbiBleGlzdHMuIElmIGl0IGRvZXMsIHRoZW4gdGhlIHdvcmsgaXMgdGhhdCBtdWNoIGVhc2llci4gSWYgbm90LCB0aGVuIEknbGwgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI2MiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjQzLjg3ODI2MzMwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5OTIxMDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsb3dyaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY2RjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjQzLjkyMzI2NDk3NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTczMDAzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnJvYWRjb20gV2lGaSBEcml2ZXIgQ2FsbCBHcmFwaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGRyaXZlciBmaWxlcywgYW5kIGl0J3MgcXVpY2tseSBiZWNvbWluZyBjbGVhciBob3cgdGhpbmdzIGFyZSBzdHJ1Y3R1cmVkLiBJdCBsb29rcyBsaWtlIGBmbG93cmluZy5jYCwgYG1zZ2J1Zi5jYCwgYW5kIGBwY2llLmNgIGFyZSBhbGwgcHJldHR5IHNwZWNpZmljYWxseSB0aWVkIHRvIHRoZSBQQ0llIGltcGxlbWVudGF0aW9uLiBCdXQgaGFuZyBvbi4uLiBJIHNlZSBgYnJjbWZfcG1rc2FfdjJfb3BgLCB3aGljaCBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24gZGVhbGluZyB3aXRoIFBNS1NBLCBhbmQgdGhhdCdzICphY3R1YWxseSogZGVmaW5lZCBpbiBgY2ZnODAyMTEuY2AuIFRoYXQncyB0aGUgZ2VuZXJpYyB3aXJlbGVzcyBjb25maWd1cmF0aW9uIGxpYnJhcnksIHNvIGl0J3MgcHJvYmFibHkgc2hhcmVkIGFjcm9zcyBkaWZmZXJlbnQgaGFyZHdhcmUgcGxhdGZvcm1zLiBBbmQgdGhlbiB0aGVyZSdzIGBicmNtZl9uZXRpZl9tb25fcnhgIHdoaWNoIGlzIGFsc28gZGVmaW5lZCBpbiBhIGdlbmVyaWMgZmlsZSwgYGNvcmUuY2AuXG5cbk5vdyB0aGluZ3MgYXJlIGdldHRpbmcgaW50ZXJlc3RpbmcuIFRoZSB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBicmNtZl9uZXRpZl9tb25fcnhgIGNhbiBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXM6IHRoZSBQQ0llLXNwZWNpZmljIGBtc2didWYuY2AsIGFuZCBhbHNvIGZyb20gYGJjZGMuY2Agd2hpY2gsIGlmIEkgcmVjYWxsLCBkZWFscyB3aXRoIFVTQiBhbmQgU0RJTyBpbnRlcmZhY2VzLiBCdXQgaXMgdGhhdCByaWdodD8gRG9lcyBgYmNkYy5jYCAqcmVhbGx5KiBjYWxsIGBicmNtZl9uZXRpZl9tb25fcnhgPyBPciBpcyBpdCBVU0Itc3BlY2lmaWMgYHVzYi5jYCBvciBTRElPLXNwZWNpZmljIGBzZGlvLmNgIHRoYXQncyBjYWxsaW5nIGl0PyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlIHNvdXJjZSBmaWxlcyB0byB2ZXJpZnkgdGhlIGNhbGwgZ3JhcGguIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYxMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxODo0OC4wOTYyNzEwMzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTEyMDYyOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfbmV0aWZfbW9uX3J4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9NDM0PXN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNDM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6NDM5OnZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNDQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg9MjIwPXZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg6MjIxOnZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTIyMi12b2lkIGJyY21mX25ldF9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgbG9ja2VkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xMjAwPWJyY21mX21zZ2J1Zl9wcm9jZXNzX3J4X2NvbXBsZXRlKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1Ziwgdm9pZCAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEyNDE6XFx0XFx0YnJjbWZfbmV0aWZfbW9uX3J4KGlmcCwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTI0Mi1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjQ5Ljk0NzQ4MzMzOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTQwOTAzOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSWUgRm9jdXMgYW5kIFNESU8gVW5jZXJ0YWludGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGJyY21mX25ldGlmX21vbl9yeGAgZnVuY3Rpb24gYW5kIHRoZSBjb2RlIGNsZWFybHkgc2hvd3MgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYG1zZ2J1Zi5jYC4gQWxyaWdodCwgdGhhdCdzIHByZXR0eSBkZWZpbml0aXZlIC0gaXQgbG9va3MgbGlrZSBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBQQ0llLiBCdXQgd2hhdCBhYm91dCBTRElPPyBJIHdhcyBwcmV0dHkgc3VyZSBpdOKAmXMgaW4gYHNkaW8uY2AsIGlzbid0IGl0P1xuXG5UaGUgc3RhbmRhcmQgUUVNVSBzZXR1cCBkb2Vzbid0IGVtdWxhdGUgU0RJTywgc28gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gSGFuZyBvbiwgSSBzZWVtIHRvIHJlY2FsbCBzb21lIGZ1enppbmcgd29yayB3aXRoIHN5emthbGxlci4uLiBtYXliZSB0aGVyZSdzIHNvbWUgU0RJTyBzdHVmZiBpbiB0aGVyZT8gTm8sIEknbSBwcmV0dHkgc3VyZSBpdCBkb2Vzbid0IGhhdmUgaXQuIE9yIGRvZXMgaXQ/IEl0J3MgYmVlbiBhIHdoaWxlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2suIFRoZSBiZXN0IHdheSB3b3VsZCBiZSB0byBsb29rIGZvciBTRElPIHBzZXVkby1zeXNjYWxscy4gVGhhdCdzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjQ5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE4OjU1Ljg4ODM4OTcyOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTUxNTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNkaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTg6NTUuOTM0MzEyMTA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDgyNzYxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgUmVhY2hhYmlsaXR5IG9mIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgIHZpYSBTeXprYWxsZXIqKlxuXG5Pa2F5LCBmaXJzdCBvZmYsIEkgY2FuJ3QganVzdCB1c2UgYGdyZXBwZXJgIG9uIGBzeXMvbGludXgvYCBiZWNhdXNlIHRob3NlIGFyZW4ndCBrZXJuZWwgdHJlZSBwYXRocy4gQW5kIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byB1c2UgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgd2hpY2gsIGZvciBzb21lIHJlYXNvbiwgYXJlbid0IGluIHRoZSBhdmFpbGFibGUgdG9vbCBsaXN0ISBCdXQgSSBnZXQgaXQsIEkgY2FuJ3Qgc2VhcmNoIGZvciBzeXprYWxsZXIgc3BlY3Mgd2l0aCB0aGlzLiBBbnl3YXksIEkgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0bywgSSBrbm93IHN5emthbGxlciBoaXRzIFVTQiBhbmQgYG1hYzgwMjExX2h3c2ltYCBhbHJlYWR5LlxuXG5SaWdodCwgYGJyY21mbWFjYC4uLnRoYXQncyBhIGZ1bGxtYWMgZHJpdmVyLCBzbyBpdCBnb2VzIHRocm91Z2ggYGNmZzgwMjExYCwgbm90IGBtYWM4MDIxMWAuIFN5emthbGxlciBoaXRzIGBjZmc4MDIxMWAgdGhyb3VnaCBuZXRsaW5rIChgbmw4MDIxMWApLiBTbywgdGhlb3JldGljYWxseSwgaWYgYSBgYnJjbWZtYWNgIGRldmljZSBpcyBwcmVzZW50LCBJIGNhbiByZWFjaCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCB2aWEgbmw4MDIxMS4gQ3J1Y2lhbGx5LCBjYW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgaGF2ZSBhIGBicmNtZm1hY2AgZGV2aWNlP1xuXG5BaGEhIFVTQiEgU3l6a2FsbGVyIGhhcyBhIFVTQiBmdXp6ZXIgYW5kIGNhbiBlbXVsYXRlIGl0LiBUaGUgVVNCIHJvdXRlIGlzIG15IGJlc3QgYmV0LiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgYGJyY21mbWFjYCBVU0IgZHJpdmVyIGFjdHVhbGx5IHJlZ2lzdGVycyB3aXRoIGBjZmc4MDIxMWAuIExldCdzIHNlZS4uLiBgYnJjbWZfdXNiX3Byb2JlYCBsb29rcyBwcm9taXNpbmcuIEFuZCB5ZXMsIGl0J3MgdGhlcmUuIFRoYXQgdGhlbiBjYWxscyBgYnJjbWZfdXNiX3Byb2JlX2NiYCwgd2hpY2gsIGluIHR1cm4sIGdvZXMgdGhyb3VnaCBgYnJjbWZfYXR0YWNoYCwgYGJyY21mX2NmZzgwMjExX2F0dGFjaGAsIGFuZCBldmVudHVhbGx5IGB3aXBoeV9uZXdgIGFuZCBgd2lwaHlfcmVnaXN0ZXJgLiBTbywgd2hlbiBzeXprYWxsZXIgZW11bGF0ZXMgYSBCcm9hZGNvbSBVU0IgV2ktRmkgZG9uZ2xlLCBgYnJjbWZfdXNiX3Byb2JlYCAqc2hvdWxkKiBiZSB0cmlnZ2VyZWQsIGNyZWF0aW5nIGEgYHdpcGh5YC4gVGhlbiwgc3l6a2FsbGVyIGNhbiBoaXQgdGhhdCBgd2lwaHlgIHdpdGggbmw4MDIxMSBjb21tYW5kcywgd2hpY2ggc2hvdWxkIGxhbmQgb24gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAuXG5cbkJ1dCwgd2FpdC4uLiBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCBjYWxscyBgYnJjbWZfcG1rc2FfdjJfb3BgIG9ubHkgaWYgYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgd2hlcmUgdGhhdCBmbGFnIGlzIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMjQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MDMuNTgyNTkwNDExWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY0Nzc0NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJSQ01GX0ZFQVRfUE1LSURfVjJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDQ4Mj1icmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTAwLVxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCB0cnVlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NTAxOlxcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTAyLVxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDUyNz1icmNtZl9jZmc4MDIxMV9kZWxfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTQ0LVxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDU0NTpcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDU0Ni1cXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCBmYWxzZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00NTc0PWJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDU4NS1cXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBOVUxMLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDU4NjpcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDU4Ny1cXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM9MTM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfZmVhdF93bGNmZWF0IGJyY21mX2ZlYXRfd2xjZmVhdF9tYXBbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jOjEzODpcXHR7IDEyLCAwLCBCSVQoQlJDTUZfRkVBVF9QTUtJRF9WMikgfSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTEzOS1cXHR7IDEzLCAwLCBCSVQoQlJDTUZfRkVBVF9QTUtJRF9WMykgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MDUuNTQ3MzczNDE4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzc0MzE0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgRmVhdHVyZSBFbmFibGVtZW50IGluIEJyb2FkY29tIFdpRmkgRHJpdmVycyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIGdldHRpbmcgc2V0IHVwIGJhc2VkIG9uIHdoYXQgdGhlIGZpcm13YXJlIHNheXMgaXQgc3VwcG9ydHMsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgdGhpcyBgYnJjbWZfZmVhdF93bGNmZWF0X21hcGAgdGhpbmcuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdGFuZGFyZCBmZWF0dXJlIGZsYWcgaGFuZGxpbmcuIFRoZSBleGNpdGluZyBwYXJ0IGlzIHRoYXQgdGhlIFN5emthbGxlciBVU0IgZnV6emVyIGlzIGNhcGFibGUgb2YgdHJpY2tpbmcgdGhlIHN5c3RlbSBpbnRvICpiZWxpZXZpbmcqIHRoZSBmaXJtd2FyZSBzdXBwb3J0cyB0aGlzIGZlYXR1cmUgKGZlYXR1cmUgMTIpLCB0aGVyZWZvcmUgZW5hYmxpbmcgYEJSQ01GX0ZFQVRfUE1LSURfVjJgLiBUaGlzIG1lYW5zIHRoYXQgY29kZSBwYXRoIGludm9sdmluZyBgYnJjbWZfcG1rc2FfdjJfb3BgIGJlY29tZXMgYWNjZXNzaWJsZSBhbmQgdGhlcmVmb3JlIGZ1enphYmxlLiBUaGlzIGlzIGdvb2QgbmV3cywgZnV6emFibGUgaXMgZXhwbG9pdGFibGUuXG5cbkJ1dCBob2xkIG9uLCBsZXQgbWUgcXVpY2tseSBwaXZvdCBoZXJlLi4uIHdoYXQgYWJvdXQgdGhlIGBicmNtc21hY2AgZHJpdmVyPyBUaGlzIHBhdGNoIGFsc28gdG91Y2hlcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmNgLiBPa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB3aGF0IHRoaXMgYGJyY21zbWFjYCBpcyBhbGwgYWJvdXQuIEFoLCByaWdodC4gSXQncyB0aGUgbWFjODAyMTEgZHJpdmVyIGZvciB0aG9zZSBvbGRlciBCcm9hZGNvbSBQQ0llIGNhcmRzIOKAkyBzcGVjaWZpY2FsbHkgdGhlIEJDTTQzMTMsIEJDTTQzMjI0LCBCQ000MzIyNSBjaGlwcy4gTm93LCBhbSBJIHJlbWVtYmVyaW5nIGNvcnJlY3RseSB0aGF0IHRoaXMgaXMgUENJZSAqb25seSo/IFRoYXQgZGV0YWlsIGNvdWxkIGJlIGltcG9ydGFudCB3aGVuIGNvbnNpZGVyaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS4gTmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhpcyBmYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE3NSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxOToxMC4zMjQ4MDc2NTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMDAyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMxOD1zdGF0aWMgREVDTEFSRV9XT1JLKGJyY21zX2RyaXZlcl93b3JrLCBicmNtc19kcml2ZXJfaW5pdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTMxOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYzoxMzIwOnN0YXRpYyBpbnQgX19pbml0IGJyY21zX21vZHVsZV9pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTMyMS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYz0xMzM2PXN0YXRpYyB2b2lkIF9fZXhpdCBicmNtc19tb2R1bGVfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTM0Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYzoxMzQzOm1vZHVsZV9pbml0KGJyY21zX21vZHVsZV9pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFjODAyMTFfaWYuYy0xMzQ0LW1vZHVsZV9leGl0KGJyY21zX21vZHVsZV9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MTAuNDA3ODE0ODg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTA3NTU3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGJyY21zX21vZHVsZV9pbml0YCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gXCJMZXQncyBjaGVjayBgYnJjbXNfbW9kdWxlX2luaXRgLlwiIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSBmdW5jdGlvbiBmb3IgdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlciwgcmlnaHQ/IFNvLCBJJ20gdGhpbmtpbmcsIHRoaXMgaXMgd2hlcmUgaXQgYWxsIGJlZ2lucy4gV2hlcmUgdGhlIGRyaXZlciBnZXRzIGxvYWRlZCwgbWVtb3J5IGlzIGFsbG9jYXRlZCwgaGFyZHdhcmUgaXMgaW5pdGlhbGl6ZWQsIGFuZCBpbnRlcnJ1cHRzIGFyZSBzZXQgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIGdyb3VuZCBsZXZlbCwgYmVmb3JlIGFueSBoaWdoZXItbGV2ZWwgYWJzdHJhY3Rpb25zIGtpY2sgaW4uIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIHRyYWNlIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyB0aGlzIHNwZWNpZmljIGNoaXAuIFRoaXMgaXMgYWx3YXlzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4gd29ya2luZyBvbiBhIG5ldyBwbGF0Zm9ybSBvciB0cm91Ymxlc2hvb3RpbmcgYW4gaW5pdGlhbGl6YXRpb24gaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTQ1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MTMuNDk4NTc1MzU0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAzODA1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtc19tb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jPTEzMTg9c3RhdGljIERFQ0xBUkVfV09SSyhicmNtc19kcml2ZXJfd29yaywgYnJjbXNfZHJpdmVyX2luaXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTEzMTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTMyMDpzdGF0aWMgaW50IF9faW5pdCBicmNtc19tb2R1bGVfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTEzMjEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM9MTMzNj1zdGF0aWMgdm9pZCBfX2V4aXQgYnJjbXNfbW9kdWxlX2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jLTEzNDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmM6MTM0Mzptb2R1bGVfaW5pdChicmNtc19tb2R1bGVfaW5pdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21hYzgwMjExX2lmLmMtMTM0NC1tb2R1bGVfZXhpdChicmNtc19tb2R1bGVfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE5OjEzLjU0ODYyMDMxMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY5MzE4Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGJyY21zX21vZHVsZV9pbml0YCwgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IGJyY21zX21vZHVsZV9pbml0KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhlIGd1dHMgb2YgdGhpcyBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBgYnJjbXNfbW9kdWxlX2luaXRgLiBJbW1lZGlhdGVseSwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGEgZmV3IHRoaW5ncyBiYXNlZCBvbiB0aGUgbmFtZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGZpcnN0IHBvaW50IG9mIGVudHJ5IGZvciB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVyLCBzbyBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGxvdCBvZiBmb3VuZGF0aW9uYWwgc2V0dXAuIFRoaW5raW5nIGJhY2sgdG8gcGFzdCBleHBlcmllbmNlcywgSSdtIGxvb2tpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucywgZGV2aWNlIHJlZ2lzdHJhdGlvbiwgYW5kIHBlcmhhcHMgc29tZSBlYXJseSBoYXJkd2FyZSBwcm9iaW5nIG9yIGluaXRpYWxpemF0aW9uLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBkcml2ZXIgbG9hZGluZywgdG9vLCBhcyBJJ3ZlIHNlZW4gdGhvc2UgYml0ZSBiZWZvcmUuIExldCdzIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzYwLCJPdXRwdXRUb2tlbnMiOjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MTYuNjE3OTQyODZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWM4MDIxMV9pZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMTU6XFx0XFx0XFx0cHJfZXJyKFxcXCIlczogcmVnaXN0ZXIgcmV0dXJuZWQgJWRcXFxcblxcXCIsIF9fZnVuY19fLCBlcnJvcik7XFxuMTMxNjpcXHR9XFxuMTMxNzpcXHRcXG4xMzE4OlxcdHN0YXRpYyBERUNMQVJFX1dPUksoYnJjbXNfZHJpdmVyX3dvcmssIGJyY21zX2RyaXZlcl9pbml0KTtcXG4xMzE5OlxcdFxcbjEzMjA6XFx0c3RhdGljIGludCBfX2luaXQgYnJjbXNfbW9kdWxlX2luaXQodm9pZClcXG4xMzIxOlxcdHtcXG4xMzIyOlxcdFxcdGJyY21zX2RlYnVnZnNfaW5pdCgpO1xcbjEzMjM6XFx0XFx0aWYgKCFzY2hlZHVsZV93b3JrKFxcdTAwMjZicmNtc19kcml2ZXJfd29yaykpXFxuMTMyNDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjEzMjU6XFx0XFxuMTMyNjpcXHRcXHRyZXR1cm4gMDtcXG4xMzI3OlxcdH1cXG4xMzI4OlxcdFxcbjEzMjk6XFx0LypcXG4xMzMwOlxcdCAqIFRoaXMgZnVuY3Rpb24gdW5sb2FkcyB0aGUgYnJjbXNtYWMgZHJpdmVyIGZyb20gdGhlIHN5c3RlbS5cXG4xMzMxOlxcdCAqXFxuMTMzMjpcXHQgKiBUaGlzIGZ1bmN0aW9uIHVuY29uZGl0aW9uYWxseSB1bmxvYWRzIHRoZSBicmNtc21hYyBkcml2ZXIgbW9kdWxlIGZyb20gdGhlXFxuMTMzMzpcXHQgKiBzeXN0ZW0uXFxuMTMzNDpcXHQgKlxcbjEzMzU6XFx0ICovXFxuMTMzNjpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgYnJjbXNfbW9kdWxlX2V4aXQodm9pZClcXG4xMzM3OlxcdHtcXG4xMzM4OlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmJyY21zX2RyaXZlcl93b3JrKTtcXG4xMzM5OlxcdFxcdGJjbWFfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmJyY21zX2JjbWFfZHJpdmVyKTtcXG4xMzQwOlxcdFxcdGJyY21zX2RlYnVnZnNfZXhpdCgpO1xcbjEzNDE6XFx0fVxcbjEzNDI6XFx0XFxuMTM0MzpcXHRtb2R1bGVfaW5pdChicmNtc19tb2R1bGVfaW5pdCk7XFxuMTM0NDpcXHRtb2R1bGVfZXhpdChicmNtc19tb2R1bGVfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE5OjE2LjYxODA1MzQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzYxMTY2OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIGEgVmVyZGljdCBvbiBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhlIGBiY21hX2RyaXZlcmAgcmVnaXN0cmF0aW9uLiBCQ01BIGlzIEJyb2FkY29tJ3MgaW50ZXJuYWwgYnVzLCB0eXBpY2FsbHkgUENJZSBvciBTb0MuIFRoZSBmYWN0IHRoYXQgYGJyY21zbWFjYCBpcyBhIFBDSWUvU29DIGRyaXZlciByYWlzZXMgYSByZWQgZmxhZyByaWdodCBhd2F5IGJlY2F1c2Ugc3RhbmRhcmQgUUVNVSBtaWdodCBub3QgZW11bGF0ZSB0aGUgbmVjZXNzYXJ5IFBDSWUgZGV2aWNlLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bDsgdGhlIHByb21wdCBzdGF0ZXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCB0YXJnZXRzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaC9TbWFydE5JQy9HUFUgZHJpdmVycyB3aGljaCBhcmUgdW5saWtlbHkgdG8gYmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cblxuQnV0IHdhaXQsIHRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBpbiBgYnJjbWZtYWNgLCBhbmQgdGhhdCBoYXMgVVNCIHN1cHBvcnQsIGFuZCBzeXprYWxsZXIgKmRvZXMqIGZ1enogdGhhdC4gVGhlIGBicmNtc21hY2AgY2hhbmdlIGxvb2tzIGxpa2UgYSBjb21tZW50IHVwZGF0ZSwgYSBzbWFsbCB1cGRhdGUgb24gYGFtcGR1LmNgISBTbywgdGhlIHJlYWwgZm9jdXMgaXMgb24gYGJyY21mbWFjYC5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBgYnJjbWZtYWNgIGNoYW5nZXMuXG4xLiAgYGJyY21mX2RlbGF5YCBpcyBtb2RpZmllZCB0byB1c2UgYHVzbGVlcF9yYW5nZWAgb3IgYG1zbGVlcGAgaW5zdGVhZCBvZiBgbWRlbGF5YC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgYSBzbGVlcCBvcGVyYXRpb24sIG5vdCBhIGJ1c3kgd2FpdC4gVGhpcyBpcyByZWFjaGFibGUsIG9idmlvdXNseS5cbjIuICBgYnJjbWZfcG1rc2FfdjJfb3BgIGlzIGFkZGVkIGFuZCBjYWxsZWQgZnJvbSBhIGZldyBleGlzdGluZyBmdW5jdGlvbnMuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIEl0J3MgYSBuZXcgZmVhdHVyZSwgVjIgUE1LU0EgY2FjaGUgc3VwcG9ydC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEsIHdoaWNoIHN5emthbGxlciBjYW4gdXNlIHZpYSBVU0IuXG4zLiAgYGJyY21mX25ldGlmX21vbl9yeGAgaXMgaW4gYGNvcmUuY2AsIGJ1dCBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYG1zZ2J1Zi5jYCAoUENJZSBvbmx5KS4gSG1tLCBpcyBgbXNnYnVmLmNgIHJlYWNoYWJsZT8gSXQgc2VlbXMgb25seSBpZiB3ZSBoYXZlIGEgUENJZSBkZXZpY2UgcHJlc2VudC4gQ2FuIHN5emthbGxlciBlbXVsYXRlIEJyb2FkY29tIFBDSWUgZGV2aWNlcz8gVXN1YWxseSBub3QsIHVubGVzcyBpdCdzIGEgZ2VuZXJpYyBQQ0kgZGV2aWNlLCBvciBRRU1VIGhhcyBzcGVjaWZpYyBlbXVsYXRpb24uIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBCcm9hZGNvbSBXaS1GaSBQQ0llIGNhcmRzLlxuICAgIFNpbWlsYXJseSwgYGJyY21mX2Zsb3dyaW5nX2Jsb2NrYCAoaW4gYGZsb3dyaW5nLmNgKSwgYGJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGFgIChpbiBgbXNnYnVmLmNgKSwgYW5kIGBicmNtZl9wY2llX3NlbmRfbWJfZGF0YWAgKGluIGBwY2llLmNgKSBhcmUgYWxsIFBDSWUtb25seS4gYGJyY21mX3NkaW9fcnhnbG9tYCAoaW4gYHNkaW8uY2ApIGlzIFNESU8gb25seSwgd2hpY2ggaXMgbm90IHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuXG5TbywgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwIHdpdGggVVNCIGZ1enppbmcsIHRoZSBvbmx5IHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGBicmNtZl9kZWxheWAgYW5kIGBicmNtZl9wbWtzYV92Ml9vcGAuXG5cbkxldCdzIGNvbmZpcm0gdGhhdCBgYnJjbWZfcG1rc2FfdjJfb3BgICppcyogcmVhY2hhYmxlIHZpYSBVU0IuIEl0IGlzLiBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCBpcyBhIGBjZmc4MDIxMV9vcHNgIGNhbGxiYWNrIGFuZCBjYWxsZWQgZnJvbSBgbmw4MDIxMV9zZXRfcG1rc2FgLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgd2hpY2ggc3l6a2FsbGVyIHVzZXMuIFRoaXMgcmVxdWlyZXMgYSBgd2lwaHlgIGRldmljZS4gVGhlIGBicmNtZm1hY2AgVVNCIGRyaXZlciAqZG9lcyogcmVnaXN0ZXIgYSBgd2lwaHlgIGR1cmluZyBwcm9iZSEgU28sIHN5emthbGxlcidzIFVTQiBmdXp6ZXIgY2FuIGVtdWxhdGUgYSBgYnJjbWZtYWNgIFVTQiBkZXZpY2UsIGFuZCB0aGVuIHNlbmQgYE5MODAyMTFfQ01EX1NFVF9QTUtTQWAgdG8gdGhpcyBgd2lwaHlgLiBUaGF0IHdpbGwgY2FsbCBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYC4gSWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgKnJlcG9ydHMqIGBCUkNNRl9GRUFUX1BNS0lEX1YyYCBpbiBpdHMgZmlybXdhcmUgZmVhdHVyZXMsIHRoZW4gYGJyY21mX3Bta3NhX3YyX29wYCAqd2lsbCogYmUgY2FsbGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgaXQncyB3b3J0aCBmdXp6aW5nIVxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGBicmNtZm1hY2AgVVNCLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQyMiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxOToyOS4zNzkyMjQ1MzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjU5Mjk0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSQ01GTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxOToyOS42NzE4MjY1ODhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0Mjc2Njc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBEb3duIHRoZSBicmNtZm1hYyBLY29uZmlnKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIG9uIHRoZSBgS2NvbmZpZ2AgZmlsZSBmb3IgYGJyY21mbWFjYC4gTm8gbWVzc2luZyBhcm91bmQgaGVyZS4gVGhpcyBpc24ndCBhIGNhc3VhbCBleHBsb3JhdGlvbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFzc29jaWF0ZWQgc3ltYm9scy4gSSdtIGFmdGVyIGEgZGVlcCBkaXZlIHRvIGVpdGhlciBtb2RpZnkgb3IgaW50ZWdyYXRlIHRoZSBkcml2ZXIuIFRpbWUgdG8gdHJhY2sgZG93biB0aGUgbW9zdCByZWxpYWJsZSBzb3VyY2UgZm9yIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gZmlsZS4gTGV0J3Mgc3RhcnQgdGhlIHNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3MTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoxOTozMi42MTQ1OTYxODVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mjk0ODc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJSQ01GTUFDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjExOmNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cXHRib29sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoyOTpjb25maWcgQlJDTUZNQUNfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MTk6MzQuNTQ0MDkwMzM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzE5MDExMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlcjpcblxuKipEZWx2aW5nIGludG8gdGhlIGJyY21mbWFjIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGJyY21mbWFjIHdpcmVsZXNzIGRyaXZlci4gR2l2ZW4gdGhlIHBhdGgsIEknbSBleHBlY3RpbmcgdG8gc2VlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGRldmljZS1zcGVjaWZpYyBzZXR0aW5ncyBkZWZpbmVkIGhlcmUuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaXMgcGFyYW1ldGVyaXplZCwgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gSeKAmW0gdGhpbmtpbmcgSSB3aWxsIGZpbmQgb3B0aW9ucyBmb3IgdmFyaW91cyBCcm9hZGNvbSBXaS1GaSBjaGlwc2V0cywgcG93ZXIgbWFuYWdlbWVudCBzZXR0aW5ncywgZGVidWcgZmxhZ3MsIGFuZCBtYXliZSBldmVuIGZpcm13YXJlIHNlbGVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBwcm9wZXJseSBjb25maWd1cmUgdGhlIGRyaXZlciBmb3IgdGhlIHRhcmdldCBwbGF0Zm9ybSBJJ20gd29ya2luZyB3aXRoIGFuZCBzZWUgd2hhdCBzb3J0IG9mIGZsZXhpYmlsaXR5IHRoaXMgZHJpdmVyIG9mZmVycyBtZS4gTGV04oCZcyBnZXQgdG8gaXQgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUuIEknbSBob3BpbmcgaXQncyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQsIGJlY2F1c2UgdGhlc2UgQnJvYWRjb20gZHJpdmVycyBjYW4gc29tZXRpbWVzIGJlIGEgYml0IGRlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ4NCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE5OjM4Ljc3NTk5NDM1MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBCUkNNRk1BQ1xcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNDpcXHRcXHRzZWxlY3QgQlJDTVVUSUxcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxcbiAgIDc6XFx0XFx0ICBGdWxsTUFDIGNoaXBzZXRzLiBJdCBoYXMgdG8gd29yayB3aXRoIGF0IGxlYXN0IG9uZSBvZiB0aGUgYnVzXFxuICAgODpcXHRcXHQgIGludGVyZmFjZSBzdXBwb3J0LiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWRcXG4gICA5OlxcdFxcdCAgYnJjbWZtYWMua28uXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAxMjpcXHRcXHRib29sXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG4gIDE1OlxcdFxcdGJvb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEJSQ01GTUFDX1NESU9cXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gKE1NQyA9IHkgfHwgTU1DID0gQlJDTUZNQUMpXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIEJSQ01GTUFDXFxuICAyMTpcXHRcXHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fQkNEQ1xcbiAgMjI6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFNESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxcbiAgMjY6XFx0XFx0ICBJRUVFODAyLjExbiBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xcbiAgMjc6XFx0XFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYSBTRElPIHdpcmVsZXNzIGNhcmQuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBCUkNNRk1BQ19VU0JcXG4gIDMwOlxcdFxcdGJvb2wgXFxcIlVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiAoVVNCID0geSB8fCBVU0IgPSBCUkNNRk1BQylcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDMzOlxcdFxcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAzNDpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXFxuICAzNzpcXHRcXHQgIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXFxuICAzODpcXHRcXHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhbiBVU0Igd2lyZWxlc3MgY2FyZC5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG4gIDQxOlxcdFxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4gIDQyOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0NDpcXHRcXHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuICA0NTpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjE5OjM4Ljc3NjA2NDIzMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMxNTk3NTI5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJSQ01GTUFDIERyaXZlciBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIGNvcnJlY3RseS4gRmlyc3QsIEkgbmVlZCB0byBlbmFibGUgYEJSQ01GTUFDYCBhbmQgYEJSQ01GTUFDX1VTQmAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBJJ2xsIGFsc28gYWRkIGBDRkc4MDIxMWAsIGBVU0JgLCBhbmQgYE1BQzgwMjExYCwgZXZlbiB0aG91Z2ggYE1BQzgwMjExYCBtaWdodCBub3QgYmUgc3RyaWN0bHkgcmVxdWlyZWQgZm9yIGBicmNtZm1hY2AuIEFsd2F5cyBnb29kIHRvIGhhdmUgZm9yIGNvbnNpc3RlbmN5LCB0aG91Z2guXG5cbkhtbSwgd2FpdC4gYEJSQ01GTUFDX1VTQmAgaGFzIGEgZGVwZW5kZW5jeSBjaGVjay4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgYFVTQiA9IHkgfHwgVVNCID0gQlJDTUZNQUNgLiBKdXN0IHRvIGJlIHNhZmUsIEknbGwgZG91YmxlIGNoZWNrIHRoYXQuIFllcywgY29uZmlybWVkLiBJJ2xsIG1ha2Ugc3VyZSBgQlJDTUZNQUNgIGFuZCBgQlJDTUZNQUNfVVNCYCBhcmUgZW5hYmxlZC5cblxuTmV4dCwgSSdtIHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBicmNtZl9wbWtzYV92Ml9vcGAuIExldCdzIHJlZnJlc2ggb3VyIG1lbW9yeS4gQWgsIHllcywgaXQncyBkZWZpbmVkIGluIGBjZmc4MDIxMS5jYCwgYW5kIGl0J3MgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIFBNS1NBIChQYWlyd2lzZSBNYXN0ZXIgS2V5IFNlY3VyaXR5IEFzc29jaWF0aW9uKSB2ZXJzaW9uIDIgb3BlcmF0aW9ucy4gSXQncyB1c2VkIGluIHRoaXMgY29udGV4dC4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSBwb2ludGVyIHRvIHRoZSBwbWtzYSBpcyBudWxsLiBJZiBpdCBpcyBudWxsIGl0IGdvZXMgdG8gYHNlbmRgIGFmdGVyIHplcm9pbmcgdGhlIHNoYWRvdyBsaXN0IGFuZCBwdXNoaW5nIGFuIGVtcHR5IHZlcnNpb24gMiBsaXN0LiBJZiBub3QsIGl0IGRvZXMgdGhlIGJlbG93LiBJdCB0aGVuIGJ1aWxkcyBhIHdpcmUtZm9ybWF0IGhlYWRlciBhbmQgc2VuZHMgdGhlIGxpc3QgdG8gdGhlIGZpcm13YXJlLiBUaGUgdmVyc2lvbiBhbmQgbGVuZ3RoIGFyZSBvbiB0aGUgd2lyZS5cblxuVGhlbiBJIHNlZSBpdCB1c2VzIHRoZSBmb2xsb3dpbmc6XG5cbmBgYGNcblx0bGlzdC1cdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMTYoQlJDTUZfUE1LU0FfVkVSXzIpO1xuXHRsaXN0LVx1MDAzZWxlbmd0aCAgPSBjcHVfdG9fbGUxNihvZmZzZXRvZihzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfdjJfbGUsIHBtaykgK1xuXHRcdFx0XHQgICBucG1rICogc2l6ZW9mKHN0cnVjdCBicmNtZl9wbWtzYV92MikpO1xuXG5cdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcInBta2lkX2luZm9cIiwgbGlzdCwgc2l6ZW9mKCpsaXN0KSk7XG5gYGBcblxuT2theSwgc28gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQncyByZWFjaGFibGUgdGhyb3VnaCBubDgwMjExLCByaWdodD8gWWVzLCBjb25maXJtZWQuIEl0IHVzZXMgaW92YXIgdG8gc2V0IFwicG1raWRfaW5mb1wiLiBUaGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGEgbWlub3IgbW9kaWZpY2F0aW9uIHRvIGBicmNtZl9kZWxheWAgaW4gYGNmZzgwMjExLmNgLiBJdCdzIGEgc21hbGwgY2hhbmdlIHdpdGggdGhlIGB1c2xlZXBfcmFuZ2VgIGZ1bmN0aW9uIGNhbGwuIEhvd2V2ZXIsIGBicmNtZl9wbWtzYV92Ml9vcGAgaXRzZWxmIHNlZW1zIGxpa2UgYSBzaWduaWZpY2FudCBhZGRpdGlvbi5cblxuTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBmdW5jdGlvbnMuIGBicmNtZl9uZXRpZl9tb25fcnhgLCBgYnJjbWZfZmxvd3JpbmdfYmxvY2tgLCBgYnJjbWZfbXNnYnVmX3NjaGVkdWxlX3R4ZGF0YWAsIGFuZCBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgIGFsbCBzZWVtIHRvIGJlIFBDSWUtc3BlY2lmaWMuIFRoZSBgYnJjbWZfc2Rpb19yeGdsb21gIHNlZW1zIHRvIGJlIFNESU8tc3BlY2lmaWMuXG5cbldhaXQsIHRoYXQncyBpbnRlcmVzdGluZy4uLiBJIGp1c3Qgd2FudCB0byBkb3VibGUgY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBgYnJjbWZfZmxvd3JpbmdfYmxvY2tgLiBJcyB0aGF0IHJlYWxseSBQQ0llLW9ubHk/IEkgc2hvdWxkIHZlcmlmeSB3aGV0aGVyIGBmbG93cmluZy5jYCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgaW5jbHVkZWQgZm9yIFVTQiBjb25maWd1cmF0aW9ucyB0b28uIFRoaXMgY291bGQgYmUgYSBibGluZCBzcG90IEkgbmVlZCB0byBhZGRyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ0OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjI1OjIxLjkzNTgyMTY2OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMDg1ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZsb3dyaW5nLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT0zMj1icmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQ19QUk9UT19NU0dCVUYpICs9IFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtMzMtXFx0XFx0Y29tbW9ucmluZy5vIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGU6MzQ6XFx0XFx0Zmxvd3JpbmcubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTM1LVxcdFxcdG1zZ2J1Zi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjI1OjIyLjYwODkxMzgwN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM3NjQ5NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBmbG93cmluZy5vYCBhbmQgUmVsYXRlZCBDb2RlIFBhdGhzKipcblxuT2theSwgc28gaXQncyBjbGVhciB0aGF0IGBmbG93cmluZy5vYCBpcyAqZGVmaW5pdGVseSogb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlJDTUZNQUNfUFJPVE9fTVNHQlVGYCBpcyBlbmFibGVkLiBBbmQsIHRoYXQgYENPTkZJR19CUkNNRk1BQ19QUk9UT19NU0dCVUZgIGdldHMgc2VsZWN0ZWQgdmlhIGBDT05GSUdfQlJDTUZNQUNfUENJRWAuIFRoZXJlZm9yZSwgYGZsb3dyaW5nLmNgIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gUENJZSwgbm8gc3VycHJpc2VzIHRoZXJlLlxuXG5Ob3csIHdoYXQgYWJvdXQgYGJyY21mX3NkaW9fcnhnbG9tYD8gSG1tLCB0aGF0J3MgdHVja2VkIGF3YXkgaW4gYHNkaW8uY2AsIG1lYW5pbmcgaXQncyBvbmx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19CUkNNRk1BQ19TRElPYCBlbmFibGVkLiBHaXZlbiBTeXprYWxsZXIncyBjdXJyZW50IGxhY2sgb2YgU0RJTyBlbXVsYXRpb24sIHRoYXQgcGF0aCBpcyBjbGVhcmx5IG5vdCByZWxldmFudCBmb3IgZnV6emluZywgYXQgbGVhc3Qgbm90IGRpcmVjdGx5LlxuXG5TbywgaWYgd2UncmUgaWdub3JpbmcgU0RJTywgdGhhdCBuYXJyb3dzIHRoZSBhdHRhY2sgc3VyZmFjZS4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgb25seSByZWFjaGFibGUgYXJlYXMsIGluaXRpYWxseSwgYXJlIHdpdGhpbiBgY2ZnODAyMTEuY2AgYW5kIHBvdGVudGlhbGx5IGBjb3JlLmNgLCBidXQgb25seSBpZiBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBjYWxsZWQuIEFoLCBidXQgdGhhdCBmdW5jdGlvbiwgYGJyY21mX25ldGlmX21vbl9yeGAsICppcyogaW4gYGNvcmUuY2AsIHdoaWNoIGlzIGFsd2F5cyBjb21waWxlZC4gSG93ZXZlciwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgY2FsbCBzaXRlcy4gSWYgdGhlIHByaW1hcnkgY2FsbCBzaXRlIGlzIGZyb20gYG1zZ2J1Zi5jYCB0aGF0IHdvdWxkIGNvbnN0cmFpbiBpdCB0byBQQ0llIHVzZSBhcyB3ZWxsLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGZvciBhbnkgb3RoZXIgY2FsbCBsb2NhdGlvbnMganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFdlIGNhbid0IGFmZm9yZCB0byBvdmVybG9vayBhbnl0aGluZywgaG93ZXZlciBzbWFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwODcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MjU6MjguMTQ2NTY2MzYzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU0MjE1MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX25ldGlmX21vbl9yeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTQzND1zdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQzOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjQzOTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQ0MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oPTIyMD12b2lkIGJyY21mX25ldGlmX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oOjIyMTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaC0yMjItdm9pZCBicmNtZl9uZXRfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGxvY2tlZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTIwMD1icmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHZvaWQgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMjQxOlxcdFxcdGJyY21mX25ldGlmX21vbl9yeChpZnAsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDItXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoyNTozMS45MDA3ODk5OTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwODgwNzI1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBDb2RlIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1zZ2J1Zi5jYCBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyBiYXNlZCBvbiB0aGUgcGF0Y2guIEJhc2VkIG9uIHRoZSBjb2RlLCB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZTogYGJyY21mX3Bta3NhX3YyX29wYCwgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYC5cblxuYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSwgd2hpbGUgaXQncyBub3QgZW50aXJlbHkgbmV3LCBpdCdzIGJlZW4gbW9kaWZpZWQgdG8gY2FsbCB0aGUgbmV3IGBicmNtZl9wbWtzYV92Ml9vcGAuIEluaXRpYWxseSwgYGJyY21mX3Bta3NhX3YyX29wYCBzZWVtZWQgbGlrZSB0aGUga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBIb3dldmVyLCBpdCdzIGEgc3RhdGljIGhlbHBlciBmdW5jdGlvbi5cblxuVGhlIHByb21wdCBkaXJlY3RzIHVzIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyBjaGVjayB0aGUgc3RhdGljIHN0YXR1cyBvZiB0aGUgZnVuY3Rpb25zLiBgYnJjbWZfcG1rc2FfdjJfb3BgIGlzIGluZGVlZCBzdGF0aWMsIHNvIGl0J3Mgbm90IGFuIGlkZWFsIGNhbmRpZGF0ZS4gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYCBhcmUgYWxzbyBzdGF0aWMuXG5cbldhaXQgYSBtaW51dGUsIGFsdGhvdWdoIHRoZXkgYXJlIHN0YXRpYywgdGhleSBhcmUgYXNzaWduZWQgdG8gYGNmZzgwMjExX29wc2AsIG1ha2luZyB0aGVtIEFQSSBlbnRyeSBwb2ludHMuIFRoYXQgbWFrZXMgdGhlbSBiZXR0ZXIgY2hvaWNlcyB0aGFuIGBicmNtZl9wbWtzYV92Ml9vcGAuXG5cbkkgYWxzbyBub3RpY2VkIGBicmNtZl9uZXRpZl9tb25fcnhgIHdoaWNoIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBpcyByZWFjaGVkIHZpYSBQQ0llLiBUaGUgcHJvbXB0IHN0YXRlcyB3ZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgUENJZS1zcGVjaWZpYyBjb2RlIHRoYXQgcmVxdWlyZXMgaGFyZHdhcmUsIGJ1dCBzaW5jZSB0aGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBVU0ItcmVhY2hhYmxlIGNvZGUgKHJlbGF0ZWQgdG8gYGJyY21mX3Bta3NhX3YyX29wYCksIHRoZSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJJ2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgbWVhbnMuXG5cblRoZXJlZm9yZSwgZm9yIGBGb2N1c1N5bWJvbHNgLCBJJ2xsIGxpc3QgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYCBhcyB0aGUgbW9zdCBwcm9taXNpbmcgdGFyZ2V0cywgZGVzcGl0ZSB0aGVpciBzdGF0aWMgbmF0dXJlLiBUaGVpciBhc3NpZ25tZW50IHRvIGBjZmc4MDIxMV9vcHNgIG1ha2VzIHRoZW0gZW50cnkgcG9pbnRzLiBJIHNob3VsZCBhbHNvIGNoZWNrIGBjZmc4MDIxMS5jYCBmb3IgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgLiBJdCdzIGdvb2QgdG8gYmUgY2F1dGlvdXMgYW5kIGNoZWNrIGZvciBpbmxpbmluZywgYnV0IHRoZXNlIGBjZmc4MDIxMWAgY2FsbGJhY2tzIGFyZSBtb3N0IGxpa2VseSBteSB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzIzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MjU6NDEuOTg4ODY1NzQzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzYwNTM4NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2NmZzgwMjExX3NldF9wbWtzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00NDgxPXN0YXRpYyBzMzJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NDgyOmJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NDgzLVxcdFxcdFxcdCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjA3OD1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBicmNtZl9jZmc4MDIxMV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MDk5LVxcdC5yZXN1bWUgPSBicmNtZl9jZmc4MDIxMV9yZXN1bWUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NjEwMDpcXHQuc2V0X3Bta3NhID0gYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYxMDEtXFx0LmRlbF9wbWtzYSA9IGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MjU6NDUuNzQ5NDA5NDlaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxNzA5NjUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRW50cnkgUG9pbnRzKipcblxuT2theSwgdGhlc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyDigJMgdGhlIG9uZXMgdGhhdCBjb3VsZCBzZXJ2ZSBhcyBlbnRyeSBwb2ludHMgaW50byB0aGUgc3lzdGVtLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gYSBmZXcgdGhpbmdzIHRvIGJlIHN1cmUuXG5cblJpZ2h0LCB3aGF0IGFib3V0IGBicmNtZl9uZXRpZl9tb25fcnhgPyBJdCdzIG5vdCBzdGF0aWMsIHNvIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBpdCBhcyBhIHBvc3NpYmlsaXR5LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBOb3csIGhvdyBhYm91dCBgYnJjbWZfZmxvd3JpbmdfYmxvY2tgPyBUaGF0IG9uZSAqaXMqIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZXhjbHVkZSBpdCBmb3Igbm93LiBBbmQgYGJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGFgPyBBbHNvIHN0YXRpYywgc28gaXQncyBvZmYgdGhlIGxpc3QuIFRoZW4gdGhlcmUncyBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgLiBOb24tc3RhdGljIGFnYWluLCBzbyB0aGF0J3MgYSBrZWVwZXIuIEFuZCBmaW5hbGx5LCBgYnJjbWZfc2Rpb19yeGdsb21gLCB3aGljaCBpcyBzdGF0aWMsIHNvIEknbGwgbGVhdmUgaXQuXG5cbkFscmlnaHQsIHNvIHRha2luZyBhbGwgb2YgdGhhdCBpbnRvIGFjY291bnQsIEkgYmVsaWV2ZSB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzIGFyZTpcblxuKiAgIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgXG4qICAgYGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYWBcbiogICBgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FgXG4qICAgYGJyY21mX25ldGlmX21vbl9yeGBcbiogICBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgXG5cbkhhbmcgb24sIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB3aGVyZSBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgIHJlc2lkZXMuIEFoLCB5ZXMsIGl0J3MgZGVmaW5lZCBpbiBgcGNpZS5jYC4gR29vZCwgYW5kIGxldCBtZSBqdXN0IG1ha2Ugc3VyZSBpdCdzICpzdGlsbCogbm9uLXN0YXRpYy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTMxNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoyNTo1MC45NjY1MDg4MzVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTgwMjkzNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz03ODM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6Nzg0OmJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBodG9kX21iX2RhdGEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy03ODUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz04NTA9c3RhdGljIHZvaWQgYnJjbWZfcGNpZV9oYW5kbGVfbWJfZGF0YShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy04NjctXFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJEMkhfTUJfREFUQTogREVFUCBTTEVFUCBSRVFcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6ODY4OlxcdFxcdGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKGRldmluZm8sIEJSQ01GX0gyRF9IT1NUX0RTX0FDSyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy04NjktXFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJEMkhfTUJfREFUQTogc2VudCBERUVQIFNMRUVQIEFDS1xcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI2NzY9c3RhdGljIGludCBicmNtZl9wY2llX3BtX2VudGVyX0QzKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY4OS1cXHRkZXZpbmZvLVxcdTAwM2VtYmRhdGFfY29tcGxldGVkID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNjkwOlxcdGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKGRldmluZm8sIEJSQ01GX0gyRF9IT1NUX0QzX0lORk9STSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNzA2PXN0YXRpYyBpbnQgYnJjbWZfcGNpZV9wbV9sZWF2ZV9EMyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3MjEtXFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJUcnkgdG8gd2FrZXVwIGRldmljZS4uLi5cXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjcyMjpcXHRcXHRpZiAoYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoZGV2aW5mbywgQlJDTUZfSDJEX0hPU1RfRDBfSU5GT1JNKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3MjMtXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNjoyNTo1NC45ODQ1NDgwNjZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzMDUyNjc5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFN5emthbGxlciBDb25maWd1cmF0aW9uIGZvciBCcm9hZGNvbSBXaS1GaSBEcml2ZXIgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gZW5oYW5jaW5nIFN5emthbGxlcidzIGZ1enppbmcgY292ZXJhZ2UgZm9yIHRoaXMgYGJyY21mbWFjYCBkcml2ZXIgcGF0Y2guIEkndmUgYmVlbiB0aGlua2luZyB0aHJvdWdoIHRoZSBiZXN0IGFwcHJvYWNoIHRvIGNvbmZpZ3VyZSBTeXprYWxsZXIgdG8gZWZmZWN0aXZlbHkgdGVzdCB0aGUgY2hhbmdlcy5cblxuSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgc29tZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEkgc3RhcnRlZCB3aXRoIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgIGJlY2F1c2UgaXQncyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXcgVjIgUE1LU0EgbG9naWMuIEkgaW5jbHVkZWQgaXRzIHJlbGF0ZWQgZnVuY3Rpb25zIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgIGFuZCBgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FgIGFzIHdlbGwgYmVjYXVzZSB0aGV5IGFyZSBhbHNvIGludm9sdmVkIGluIHRoZSBQTUtTQSBjYWNoZSBvcGVyYXRpb25zLiBJIGFsc28gbm90ZWQgYGJyY21mX25ldGlmX21vbl9yeGAgYmVjYXVzZSBpdCBsb29rZWQgbGlrZSBhIG5vbi1zdGF0aWMsIG1vZGlmaWVkIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gcmFkaW90YXAgaGVhZGVyIG1vZGlmaWNhdGlvbnMgaW4gbW9uaXRvciBtb2RlLlxuXG5CYXNlZCBvbiB0aGVzZSBpbml0aWFsIG9ic2VydmF0aW9ucywgSSBkZWNpZGVkIHRvIGNoZWNrIHdoaWNoIGNvbmZpZ3Mgd291bGQgZW5hYmxlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LCBzdGFydGluZyB3aXRoIGBCUkNNRk1BQ2AsIGFuZCBgQlJDTUZNQUNfVVNCYC4gQmVjYXVzZSBgQlJDTUZNQUNfVVNCYCBkZXBlbmRzIG9uIGBVU0JgLCBJIGNvbmZpcm1lZCBgVVNCYCBzaG91bGQgYWxzbyBiZSBlbmFibGVkLiBUaGVuLCBJIG9ic2VydmVkIHRoYXQgYEJSQ01GTUFDYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBDRkc4MDIxMWAsIHNvIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgdG9vLiBTaW5jZSBTeXprYWxsZXIgY2FuIGVtdWxhdGUgdGhlIEJyb2FkY29tIGRldmljZSB2aWEgaXRzIFVTQiBmdXp6ZXIsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGFwcHJvYWNoIHdvdWxkIGJlIHN1aXRhYmxlLlxuXG5Ib3dldmVyLCBJIGFsc28gcmVhbGl6ZWQgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBQQ0llIG1haWxib3ggcG9sbGluZy4gVG8gZW5zdXJlIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UsIEknbGwgYWxzbyBlbmFibGUgYEJSQ01GTUFDX1BDSUVgIGFzIHdlbGwuIEZvciBnb29kIG1lYXN1cmUsIEkgY291bGQgYWxzbyBlbmFibGUgYEJSQ01GTUFDX1NESU9gIGJ1dCBTeXprYWxsZXIgZG9lc24ndCBmdXp6IFNESU8sIHNvIEkgZGVjaWRlZCBub3QgdG8gZW5hYmxlIGl0LiBJJ2xsIHN0aWNrIHRvIGxpc3RpbmcgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGFuZCBgQlJDTUZNQUNfUENJRWAgYXMgZW5hYmxlZCBjb25maWdzLlxuXG5MZXQncyBkb3VibGUgY2hlY2sgbXkgYW5hbHlzaXMgdG8gZW5zdXJlIHRoYXQgYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAgaXMgdHJ1bHkgd29ydGggbGlzdGluZy4gQWZ0ZXIgcmV2aWV3aW5nIHRoZSBwYXRjaCdzIHJlYXNvbmluZywgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIHBhdGNoIGludHJvZHVjZXMgVjIgUE1LU0EgY2FjaGUgb3BlcmF0aW9ucyB0byB0aGUgZHJpdmVyIHRoYXQgYXJlIHJlYWNoYWJsZSB2aWEgYGNmZzgwMjExYCBuZXRsaW5rIGNvbW1hbmRzIGFuZCB0aGF0IFN5emthbGxlciBjYW4gZW11bGF0ZSB0aGlzLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIG1vZGlmaWNhdGlvbiB0byByYWRpb3RhcCBoZWFkZXIgaW5zZXJ0aW9uIGluIG1vbml0b3IgbW9kZSBhbmQgUENJZSBtYWlsYm94IHBvbGxpbmcuIFRoZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBhZGRlZCBWMiBQTUtTQSBjYWNoZSBsb2dpYyBhbmQgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcy5cblxuSSd2ZSBleGFtaW5lZCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGNvcnJlY3RseSBzdGF0ZWQ6IGBXb3J0aEZ1enppbmdgIGlzIHRydWUuIFRoZSBmb2N1cyBzeW1ib2xzIGluaXRpYWxseSBhcmU6IGBbXCJicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FcIiwgXCJicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FcIiwgXCJicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYVwiLCBcImJyY21mX25ldGlmX21vbl9yeFwiXWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBsaXN0ZWQgYXMgYFtcIkJSQ01GTUFDXCIsIFwiQlJDTUZNQUNfVVNCXCIsIFwiQlJDTUZNQUNfUENJRVwiLCBcIkNGRzgwMjExXCJdYC5cblxuSSd2ZSBnb25lIHRocm91Z2ggdGhlIGNvZGUgYWdhaW4sIGNvbnNpZGVyaW5nIHN0YXRpYyB2ZXJzdXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgIGlzIHN0YXRpYywgYnV0IGl0J3MgYW4gQVBJIGVudHJ5IHBvaW50LCBzbyBpdCBpcyB3b3J0aHdoaWxlIHRvIGluY2x1ZGUgaXQgaW4gdGhlIGZvY3VzLiBBbHNvLCBiYXNlZCBvbiBteSBwcmV2aW91cyBhbmFseXNpcywgSSBjb25maXJtZWQgYGJyY21mX25ldGlmX21vbl9yeGAgaXMgbm9uLXN0YXRpYyBhbmQgbW9kaWZpZWQsIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5JJ3ZlIGFsc28gb2JzZXJ2ZWQgdGhlIGZvbGxvd2luZyBkdXJpbmcgbXkgY29kZSByZXZpZXc6XG4qICAgYGJyY21mX2Zsb3dyaW5nX2F0dGFjaGAgaXMgbW9kaWZpZWQgYW5kIGl0IGluaXRpYWxpemVzIGBpZl9ibG9ja2VkX2NudGBcbiogICBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAgaXMgbm9uLXN0YXRpYywgc28gSSBjYW4gYWxzbyBpbmNsdWRlIGl0XG5cbk15IGZpbmFsIGBGb2N1c1N5bWJvbHNgIGFyZTogYFtcImJyY21mX2NmZzgwMjExX3NldF9wbWtzYVwiLCBcImJyY21mX2NmZzgwMjExX2RlbF9wbWtzYVwiLCBcImJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhXCIsIFwiYnJjbWZfbmV0aWZfbW9uX3J4XCIsIFwiYnJjbWZfZmxvd3JpbmdfYXR0YWNoXCIsIFwiYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaFwiXWAuXG5cblRoZSBjb25maWdzIGFyZTogYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1VTQmAsIGBCUkNNRk1BQ19QQ0lFYCwgYENGRzgwMjExYC5cblxuSXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgZ29vZCwgcmVmaW5lZCBzZXR1cCBmb3IgU3l6a2FsbGVyIHRvIGJlZ2luIGZ1enppbmcgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoaXMgcGF0Y2gsIGVuc3VyaW5nIGNvdmVyYWdlIG9mIHRoZSBuZXcgUE1LU0EgbG9naWMgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcy5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NzczLCJPdXRwdXRUb2tlbnMiOjIyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6MjY6MDguMjg5ODE5MjNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUyNzQ2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhXCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhXCIsXG4gICAgXCJicmNtZl9uZXRpZl9tb25fcnhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFYyIFBNS1NBIGNhY2hlIG9wZXJhdGlvbnMgaW4gdGhlIGJyY21mbWFjIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIHdoZW4gYSBCcm9hZGNvbSBXaS1GaSBkZXZpY2UgaXMgcHJlc2VudC4gU3l6a2FsbGVyIGNhbiBlbXVsYXRlIHN1Y2ggYSBkZXZpY2UgdmlhIGl0cyBVU0IgZnV6emVyLCBtYWtpbmcgdGhpcyBuZXcgbG9naWMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgcmFkaW90YXAgaGVhZGVyIGluc2VydGlvbiBpbiBtb25pdG9yIG1vZGUgYW5kIFBDSWUgbWFpbGJveCBwb2xsaW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhXCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhXCIsXG4gICAgXCJicmNtZl9uZXRpZl9tb25fcnhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFYyIFBNS1NBIGNhY2hlIG9wZXJhdGlvbnMgaW4gdGhlIGJyY21mbWFjIGRyaXZlciwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIHdoZW4gYSBCcm9hZGNvbSBXaS1GaSBkZXZpY2UgaXMgcHJlc2VudC4gU3l6a2FsbGVyIGNhbiBlbXVsYXRlIHN1Y2ggYSBkZXZpY2UgdmlhIGl0cyBVU0IgZnV6emVyLCBtYWtpbmcgdGhpcyBuZXcgbG9naWMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgcmFkaW90YXAgaGVhZGVyIGluc2VydGlvbiBpbiBtb25pdG9yIG1vZGUgYW5kIFBDSWUgbWFpbGJveCBwb2xsaW5nLCB3aGljaCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdpj7[1] Phase: Succeeded StartedAt: 2026-08-01 06:26:20 +0000 UTC FinishedAt: 2026-08-01 06:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 06:26:20 +0000 UTC FinishedAt: 2026-08-01 06:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2] Phase: Succeeded StartedAt: 2026-08-01 06:26:20 +0000 UTC FinishedAt: 2026-08-01 07:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 06:26:20 +0000 UTC FinishedAt: 2026-08-01 07:15:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 06:26:20 +0000 UTC FinishedAt: 2026-08-01 06:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 06:26:20 +0000 UTC FinishedAt: 2026-08-01 06:26:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowrdpj7/series-workflowrdpj7-convert-artifact-2309257633/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 06:26:41 +0000 UTC FinishedAt: 2026-08-01 06:46:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 06:26:41 +0000 UTC FinishedAt: 2026-08-01 06:46:18 +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:*a4097067-29bb-482f-8362-486deb6ead4b,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-workflowrdpj7/series-workflowrdpj7-convert-artifact-2309257633/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": "c1e89fdf-decb-41f0-9991-f4ef3b2ade64", "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-workflowrdpj7/series-workflowrdpj7-build-action-1780830415/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 06:26:41 +0000 UTC FinishedAt: 2026-08-01 06:45:55 +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:*a4097067-29bb-482f-8362-486deb6ead4b,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-workflowrdpj7/series-workflowrdpj7-convert-artifact-2309257633/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": "c1e89fdf-decb-41f0-9991-f4ef3b2ade64", "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-workflowrdpj7/series-workflowrdpj7-build-action-1780830415/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 06:46:18 +0000 UTC FinishedAt: 2026-08-01 06:46:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 06:46:18 +0000 UTC FinishedAt: 2026-08-01 06:46:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 06:46:18 +0000 UTC FinishedAt: 2026-08-01 06:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 06:46:18 +0000 UTC FinishedAt: 2026-08-01 06:46:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowrdpj7/series-workflowrdpj7-convert-artifact-2023245300/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 06:46:28 +0000 UTC FinishedAt: 2026-08-01 06:48:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 06:46:28 +0000 UTC FinishedAt: 2026-08-01 06:47:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c1e89fdf-decb-41f0-9991-f4ef3b2ade64,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-workflowrdpj7/series-workflowrdpj7-build-action-1780830415/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-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 06:48:07 +0000 UTC FinishedAt: 2026-08-01 06:48:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 06:48:07 +0000 UTC FinishedAt: 2026-08-01 06:48:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 06:48:07 +0000 UTC FinishedAt: 2026-08-01 07:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 06:48:07 +0000 UTC FinishedAt: 2026-08-01 07:10:24 +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:*a4097067-29bb-482f-8362-486deb6ead4b,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-workflowrdpj7/series-workflowrdpj7-convert-artifact-2023245300/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": "7f361eff-b8e5-4d57-a483-f7aa99003cfe", "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-workflowrdpj7/series-workflowrdpj7-build-action-752319168/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 06:48:07 +0000 UTC FinishedAt: 2026-08-01 07:10:13 +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:*a4097067-29bb-482f-8362-486deb6ead4b,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-workflowrdpj7/series-workflowrdpj7-convert-artifact-2023245300/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": "7f361eff-b8e5-4d57-a483-f7aa99003cfe", "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-workflowrdpj7/series-workflowrdpj7-build-action-752319168/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 07:10:24 +0000 UTC FinishedAt: 2026-08-01 07:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 07:10:24 +0000 UTC FinishedAt: 2026-08-01 07:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 07:10:24 +0000 UTC FinishedAt: 2026-08-01 07:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 07:10:24 +0000 UTC FinishedAt: 2026-08-01 07:12:15 +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:*7f361eff-b8e5-4d57-a483-f7aa99003cfe,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-workflowrdpj7/series-workflowrdpj7-build-action-752319168/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-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 07:12:44 +0000 UTC FinishedAt: 2026-08-01 07:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 07:12:44 +0000 UTC FinishedAt: 2026-08-01 07:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 07:12:44 +0000 UTC FinishedAt: 2026-08-01 07:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 07:12:45 +0000 UTC FinishedAt: 2026-08-01 07:15:59 +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":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"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:*c1e89fdf-decb-41f0-9991-f4ef3b2ade64,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7f361eff-b8e5-4d57-a483-f7aa99003cfe,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-workflowrdpj7/series-workflowrdpj7-build-action-1780830415/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-workflowrdpj7/series-workflowrdpj7-build-action-752319168/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 07:12:45 +0000 UTC FinishedAt: 2026-08-01 07:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 07:12:45 +0000 UTC FinishedAt: 2026-08-01 07:13:13 +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":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"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-workflowrdpj7/series-workflowrdpj7-convert-artifact-655250973/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 07:12:46 +0000 UTC FinishedAt: 2026-08-01 07:12:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 07:13:35 +0000 UTC FinishedAt: 2026-08-01 07:15:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdpj7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_cfg80211_set_pmksa","brcmf_cfg80211_del_pmksa","brcmf_cfg80211_flush_pmksa","brcmf_netif_mon_rx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8fd62901d6bf03f274a49dd0060793cc07dd51b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRCMFMAC","BRCMFMAC_USB","BRCMFMAC_PCIE","CFG80211"],"series_id":"b6b8bcfe-f6f1-416d-9bbf-7451eb693da2","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 07:13:35 +0000 UTC FinishedAt: 2026-08-01 07:15:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c1e89fdf-decb-41f0-9991-f4ef3b2ade64,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7f361eff-b8e5-4d57-a483-f7aa99003cfe,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-workflowrdpj7/series-workflowrdpj7-build-action-1780830415/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-workflowrdpj7/series-workflowrdpj7-build-action-752319168/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-workflowrdpj7/series-workflowrdpj7-convert-artifact-655250973/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,}